mirror of
https://github.com/sergeyyarkov/atmega8a_rgb-night-light.git
synced 2026-10-11 02:19:12 +03:00
init
This commit is contained in:
commit
ef3ff63cb5
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
3d
|
||||
13
.vscode/c_cpp_properties.json
vendored
Normal file
13
.vscode/c_cpp_properties.json
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
{
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Linux",
|
||||
"compilerPath": "/usr/bin/avr-gcc",
|
||||
"compilerArgs": ["-Wall", "-mmcu=atmega8a", "-Os"],
|
||||
"includePath": ["${workspaceFolder}/firmware/**", "/usr/lib/avr/include"],
|
||||
"cStandard": "c11",
|
||||
"intelliSenseMode": "linux-gcc-x64"
|
||||
}
|
||||
],
|
||||
"version": 4
|
||||
}
|
||||
19
.vscode/launch.json
vendored
Normal file
19
.vscode/launch.json
vendored
Normal file
@ -0,0 +1,19 @@
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Debug (bloom)",
|
||||
"type": "cppdbg",
|
||||
"request": "launch",
|
||||
"program": "${workspaceFolder}/firmware/build/firmware.elf",
|
||||
"MIMode": "gdb",
|
||||
"miDebuggerPath": "/usr/bin/avr-gdb",
|
||||
"miDebuggerServerAddress": "localhost:1234",
|
||||
"stopAtEntry": true,
|
||||
"cwd": "${workspaceFolder}",
|
||||
"environment": [],
|
||||
"externalConsole": false,
|
||||
// "preLaunchTask": "Debug server (bloom)",
|
||||
}
|
||||
]
|
||||
}
|
||||
8
.vscode/settings.json
vendored
Normal file
8
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"C_Cpp.default.compilerPath": "/usr/bin/avr-gcc",
|
||||
"files.associations": {},
|
||||
"makefile.configureOnOpen": false,
|
||||
"makefile.makefilePath": "./firmware/Makefile",
|
||||
"makefile.makeDirectory": "./firmware",
|
||||
"C_Cpp.formatting": "disabled"
|
||||
}
|
||||
63
.vscode/tasks.json
vendored
Normal file
63
.vscode/tasks.json
vendored
Normal file
@ -0,0 +1,63 @@
|
||||
{
|
||||
// See https://go.microsoft.com/fwlink/?LinkId=733558
|
||||
// for the documentation about the tasks.json format
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "Build (prod)",
|
||||
"type": "shell",
|
||||
"command": "make -C ${workspaceFolder}/firmware",
|
||||
"problemMatcher": ["$gcc"],
|
||||
"group": "build"
|
||||
},
|
||||
{
|
||||
"label": "Clean and build (prod)",
|
||||
"type": "shell",
|
||||
"command": "make -C ${workspaceFolder}/firmware clean && make -C ${workspaceFolder}/firmware",
|
||||
"problemMatcher": ["$gcc"],
|
||||
"group": "build",
|
||||
"presentation": {
|
||||
"close": true,
|
||||
"showReuseMessage": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Clean and build (debug)",
|
||||
"type": "shell",
|
||||
"command": "make -C ${workspaceFolder}/firmware clean && make -C ${workspaceFolder}/firmware DEBUG=true",
|
||||
"problemMatcher": ["$gcc"],
|
||||
"group": "build",
|
||||
"presentation": {
|
||||
"close": true,
|
||||
"showReuseMessage": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Debug server (bloom)",
|
||||
"type": "shell",
|
||||
"command": "bloom",
|
||||
"presentation": {
|
||||
"echo": true,
|
||||
"reveal": "always",
|
||||
"panel": "shared",
|
||||
"focus": true,
|
||||
"showReuseMessage": false,
|
||||
"clear": false,
|
||||
"close": true
|
||||
},
|
||||
"problemMatcher": {
|
||||
"owner": "custom",
|
||||
"pattern": {
|
||||
"regexp": "."
|
||||
},
|
||||
"background": {
|
||||
"activeOnStart": true,
|
||||
"beginsPattern": "DebugServer ready",
|
||||
"endsPattern": "DebugServer ready"
|
||||
}
|
||||
},
|
||||
"isBackground": true,
|
||||
"dependsOn": "Clean and build (debug)"
|
||||
}
|
||||
]
|
||||
}
|
||||
104
firmware/Makefile
Normal file
104
firmware/Makefile
Normal file
@ -0,0 +1,104 @@
|
||||
TARGET=firmware
|
||||
|
||||
# === Directories path =============================================================================
|
||||
SRC_DIR=./src
|
||||
OBJ_DIR=./obj
|
||||
ASM_DIR=./asm
|
||||
OUT_DIR=./build
|
||||
# ==================================================================================================
|
||||
|
||||
|
||||
|
||||
# === Device configuration =========================================================================
|
||||
MCU=atmega8a
|
||||
FUSE_HIGH=0xd9
|
||||
FUSE_LOW=0xff
|
||||
# ==================================================================================================
|
||||
|
||||
|
||||
|
||||
# === Toolchain ====================================================================================
|
||||
OBJCOPY=avr-objcopy
|
||||
OBJDUMP=avr-objdump
|
||||
SIZE=avr-size
|
||||
CC=avr-gcc
|
||||
# ==================================================================================================
|
||||
|
||||
|
||||
|
||||
# === Programmer options ===========================================================================
|
||||
# MPLAB SNAP: snap_jtag (or isp)
|
||||
# USBtiny: usbtiny
|
||||
AVRDUDE_DEVICE=m8a
|
||||
AVRDUDE_PROGRAMMER=snap_isp
|
||||
AVRDUDE_SPEED=128kHz
|
||||
AVRDUDE_FLAGS=-c $(AVRDUDE_PROGRAMMER) -p $(AVRDUDE_DEVICE) -B $(AVRDUDE_SPEED)
|
||||
# ==================================================================================================
|
||||
|
||||
|
||||
|
||||
# === Compiler options =============================================================================
|
||||
CC_FLAGS=-Wall -Wextra
|
||||
ifeq ($(DEBUG), true)
|
||||
CC_FLAGS+=-ggdb -Og
|
||||
CC_FLAGS+=-Wl,-Map=$(OUT_DIR)/$(TARGET).map
|
||||
CC_FLAGS+=-DDEBUG_BUILD=TRUE
|
||||
else
|
||||
CC_FLAGS+=-Os
|
||||
endif
|
||||
CC_FLAGS+=-mmcu=$(MCU)
|
||||
CC_FLAGS+=-std=c11
|
||||
# ==================================================================================================
|
||||
|
||||
OBJS=$(subst $(SRC_DIR),$(OBJ_DIR),$(patsubst %.c,%.o,$(wildcard $(SRC_DIR)/*.c)))
|
||||
ASMS=$(subst $(SRC_DIR),$(ASM_DIR),$(patsubst %.c,%.S,$(wildcard $(SRC_DIR)/*.c)))
|
||||
|
||||
.PHONY: all asms hex clean size prog_flash prog_test prog_read_eep prog_read_fuses prog_flash_fuses
|
||||
|
||||
all: hex size
|
||||
hex: $(OUT_DIR)/$(TARGET).hex
|
||||
asms: $(ASMS)
|
||||
prog_flash:
|
||||
avrdude $(AVRDUDE_FLAGS) -V -U flash:w:"$(OUT_DIR)/$(TARGET).hex":i
|
||||
prog_test:
|
||||
avrdude $(AVRDUDE_FLAGS)
|
||||
prog_read_eep:
|
||||
avrdude $(AVRDUDE_FLAGS) -U eeprom:r:"$(OUT_DIR)/eeprom.hex":i
|
||||
prog_read_fuses:
|
||||
avrdude $(AVRDUDE_FLAGS) -U hfuse:r:"$(OUT_DIR)/h_fuse.hex":h -U lfuse:r:"$(OUT_DIR)/l_fuse.hex":h
|
||||
prog_flash_fuses:
|
||||
avrdude $(AVRDUDE_FLAGS) -U hfuse:w:$(FUSE_HIGH):m -U lfuse:w:$(FUSE_LOW):m
|
||||
|
||||
$(OUT_DIR)/$(TARGET).hex: $(OUT_DIR)/$(TARGET).elf $(OUT_DIR)/$(TARGET).S
|
||||
$(OBJCOPY) -R .eeprom -R .fuse -R .lock -R .signature -O ihex $< $@
|
||||
|
||||
$(OUT_DIR)/$(TARGET).elf: $(OBJS) | $(OUT_DIR)
|
||||
$(CC) $(CC_FLAGS) $^ -o $@
|
||||
|
||||
$(OUT_DIR)/$(TARGET).S: $(OBJS) | $(OUT_DIR)
|
||||
$(OBJDUMP) -D $(OUT_DIR)/$(TARGET).elf > $@
|
||||
|
||||
## Compile to object files
|
||||
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c $(SRC_DIR)/%.h | $(OBJ_DIR)
|
||||
$(CC) $(CC_FLAGS) -c $(SRC_DIR)/$(patsubst %.o,%.c, $(notdir $@)) -o $@
|
||||
|
||||
## Compile to assembler files (optional)
|
||||
$(ASM_DIR)/%.S: $(SRC_DIR)/%.c $(SRC_DIR)/%.h | $(ASM_DIR)
|
||||
$(CC) -S -fverbose-asm $(CC_FLAGS) -c $(SRC_DIR)/$(patsubst %.S,%.c, $(notdir $@)) -o $@
|
||||
|
||||
$(OUT_DIR):
|
||||
mkdir $@
|
||||
|
||||
$(OBJ_DIR):
|
||||
mkdir $@
|
||||
|
||||
$(ASM_DIR):
|
||||
mkdir $@
|
||||
|
||||
clean:
|
||||
rm -rf $(OBJ_DIR)
|
||||
rm -rf $(OUT_DIR)
|
||||
rm -rf $(ASM_DIR)
|
||||
|
||||
size: $(OUT_DIR)/$(TARGET).elf
|
||||
$(SIZE) --mcu=$(MCU) --format=avr $<
|
||||
3403
firmware/build/firmware.S
Normal file
3403
firmware/build/firmware.S
Normal file
File diff suppressed because it is too large
Load Diff
BIN
firmware/build/firmware.elf
Executable file
BIN
firmware/build/firmware.elf
Executable file
Binary file not shown.
235
firmware/build/firmware.hex
Normal file
235
firmware/build/firmware.hex
Normal file
@ -0,0 +1,235 @@
|
||||
:1000000012C02CC02BC02AC029C028C027C026C0BF
|
||||
:1000100025C024C023C0C1C321C020C01FC01EC032
|
||||
:100020001DC01CC01BC011241FBECFE5D4E0DEBF25
|
||||
:10003000CDBF10E0A0E6B0E0E4EFFDE002C0059027
|
||||
:100040000D92A43FB107D9F721E0A4EFB0E001C0C1
|
||||
:100050001D92A034B207E1F78ED4CAC6D1CF21B326
|
||||
:10006000242B21BB32B3242F2095232332B3432BDF
|
||||
:100070003FB7F894FC01680F791FA2E3B0E0E617E0
|
||||
:10008000F70719F43FBF78940895819198E0E894B8
|
||||
:100090004C93000087FF2C93880F07F407F408F4B3
|
||||
:1000A0002C939A95A9F7EBCF9B01220F331F620F78
|
||||
:1000B000731FD5DF83E893E00197F1F700C00000DC
|
||||
:1000C000089540E8F1CF660F771F660F771F40E86D
|
||||
:1000D000C6DF83E893E00197F1F700C000000895C0
|
||||
:1000E00040E8BDCF8091F40081111092F400089592
|
||||
:1000F000282F80911101289FC0011124EFEFF0E01B
|
||||
:10010000BF0169D4462F80911001289FC00111249E
|
||||
:10011000BF0161D4362F80911201289FC0011124A4
|
||||
:10012000BF0159D4862FE5EFF0E04183308382830D
|
||||
:10013000339691E0E031F907C1F769E070E085EFAF
|
||||
:1001400090E0BFCFE5EFF0E0818360834283339698
|
||||
:1001500091E0E031F907C1F769E070E085EF90E0E8
|
||||
:10016000B0CFCF93DF93C5EFD0E0698183E090E01B
|
||||
:10017000B0D5688182E090E0ACD56A8181E090E002
|
||||
:10018000A8D589818C8F88818B8F8A818D8FDF9113
|
||||
:10019000CF910895CF93DF9300D0CDB7DEB79A8388
|
||||
:1001A000898389819A8190931401809313016981D5
|
||||
:1001B0007A8180E090E00F900F90DF91CF9189C518
|
||||
:1001C000CF92DF92EF92FF920F931F93CF93DF9323
|
||||
:1001D00000D000D000D01F92CDB7DEB719821A82AE
|
||||
:1001E0001B821F821E826FE670E00AD58C01CE0151
|
||||
:1001F00001966C01F12CEE24EA9401151105B9F574
|
||||
:100200004B816A8189819EDFACDF8E2D71DF8E810B
|
||||
:100210009F81C0DF88EA90E02ED38091F60090E0C5
|
||||
:1002200035D38CE224D38091F50090E02FD38CE27B
|
||||
:100230001ED38091F70090E029D385EA90E01BD38C
|
||||
:1002400086EB90E018D38E2D90E020D385EA90E0E5
|
||||
:1002500012D389EC90E00FD38E819F8117D38DE06C
|
||||
:1002600006D38AE004D381E08093F40006C095E0D1
|
||||
:10027000F91212C081E790E0FED227960FB6F894EB
|
||||
:10028000DEBF0FBECDBFDF91CF911F910F91FF90C9
|
||||
:10029000EF90DF90CF900895E2E0EF15A8F04AE0EC
|
||||
:1002A00050E0BE016C5F7F4FC801BCD3F601608394
|
||||
:1002B0008C819D818017910701F5F6018081811164
|
||||
:1002C0001CC080E990E0D8CFF3E0FF1209C04AE0FB
|
||||
:1002D00050E0BE016C5F7F4FC801A4D3E62EE8CF8B
|
||||
:1002E00084E0F812E5CF4AE050E0BE016C5F7F4F3A
|
||||
:1002F000C80198D37F836E83DBCFF3946FE670E001
|
||||
:1003000090E080E07DD48C01FFEFCF1ADF0A75CF3B
|
||||
:10031000CF93DF93E199FECF80E090E0D2D490E0DC
|
||||
:100320009093140180931301C5EFD0E083E090E037
|
||||
:10033000C8D4898382E090E0C4D4888381E090E0CF
|
||||
:10034000C0D48A83239681E0C031D80779F78091A1
|
||||
:10035000F600809311016091F500609310014091C7
|
||||
:10036000F70040931201EEDE809113019091140189
|
||||
:1003700011DF8CED90E07FD28091F60090E086D284
|
||||
:1003800080EF90E078D28091F50090E07FD280EF0E
|
||||
:1003900090E071D28091F70090E078D280EF90E009
|
||||
:1003A0006AD2809113019091140170D285EA90E095
|
||||
:1003B000DF91CF9160C2CF93C8EC94DE811130C041
|
||||
:1003C0008C2F96DE8FE59AEE0197F1F700C00000C2
|
||||
:1003D000C15098F7C2E386DE811122C08FE295E713
|
||||
:1003E0000197F1F700C00000C150A9F77BDE811131
|
||||
:1003F00017C08C2F7DDE8FE59AEE0197F1F700C0D4
|
||||
:100400000000CF5FC93C91F7C4E66CDE811108C0E3
|
||||
:100410008FE295E70197F1F700C00000C150A9F7FE
|
||||
:10042000CF910895CF9388EC63DEC5E05BDE811148
|
||||
:1004300032C08FE295E70197F1F700C00000C1508C
|
||||
:10044000A9F7C8EC4FDE811126C08C2F51DE87EB57
|
||||
:100450009BE00197F1F700C00000C15098F788ECCD
|
||||
:1004600047DEC8EC3FDE811116C08C2F41DE87E0ED
|
||||
:1004700092E50197F1F700C00000C15098F7CEE176
|
||||
:1004800031DE811108C087EC9FEA0197F1F700C0C7
|
||||
:100490000000C150A9F7CF9108952F923F924F923B
|
||||
:1004A0005F926F927F928F929F92AF92BF92CF9204
|
||||
:1004B000DF92EF92FF920F931F93CF93DF9300D0C1
|
||||
:1004C0001F92CDB7DEB78091170190E0FC01EE0FCF
|
||||
:1004D000FF1FE80FF91FE05AFF4F20812983318069
|
||||
:1004E0002280019665E070E08AD280931701FC01BA
|
||||
:1004F000EE0FFF1FE80FF91FE05AFF4F8080821AAE
|
||||
:10050000990861806318770842804218550810E006
|
||||
:1005100000E0F12CE12CD12CC12C85E690E09B83EE
|
||||
:100520008A8344E6A42EB12CDDDD811135C0C801DB
|
||||
:10053000B50151D2422D460FC701B5014CD2232D32
|
||||
:10054000260FC601B50147D2862F622F9981890FE8
|
||||
:10055000F9DD8FE59AEE0197F1F700C000008A817E
|
||||
:100560009B8101979B838A83C80CD91CE60CF71CDE
|
||||
:10057000040D151D892BC1F692E39983B3DD81111A
|
||||
:100580000BC08FE295E70197F1F700C00000998159
|
||||
:10059000915099839111F2CF0F900F900F90DF91AE
|
||||
:1005A000CF911F910F91FF90EF90DF90CF90BF9070
|
||||
:1005B000AF909F908F907F906F905F904F903F9003
|
||||
:1005C0002F9008951F93CF93DF93E82F862F6BE230
|
||||
:1005D000F6D1282F892F880F890F382F330FCFEFAF
|
||||
:1005E000D0E0AE01431B51091FEF149FC001159FBE
|
||||
:1005F000900D1124BE01EFD1F62F462F319FC0017F
|
||||
:100600001124BE01E8D1962F223019F140F42223A3
|
||||
:1006100021F0213061F02F2F90E04FEF0AC02330FE
|
||||
:10062000E1F02430C1F7462F2FEF90E002C020E028
|
||||
:100630009FEF6E2F70E0FB01EE0FFF1FE60FF71F1D
|
||||
:10064000EB50FF4F418390832283DF91CF911F9125
|
||||
:100650000895262F9FEF40E0ECCF9F2F2FEFFBCF89
|
||||
:10066000CF93DF93D0E0C0E0609116016D0F8C2F27
|
||||
:10067000A9DFCF5FD45EC930B9F769E070E085EFDC
|
||||
:1006800090E01FDD809116018E5F80931601C3E01C
|
||||
:1006900029DD811108C08FE295E70197F1F700C0CD
|
||||
:1006A0000000C150A9F7DF91CF910895CF93DF9358
|
||||
:1006B00080911501823051F138F4882399F181300D
|
||||
:1006C00059F1109215011FC0833089F0CFEFD0E0AF
|
||||
:1006D0008430B9F707DD811116C0C2DF8FE295E7DC
|
||||
:1006E0000197F1F700C000002197A1F705C0D5DE02
|
||||
:1006F000D4DED3DED2DED1DE809115018F5F85306E
|
||||
:1007000000F780931501DF91CF9108958BDE8ADE8B
|
||||
:1007100089DE88DE87DEF0CF4EDE4DDE4CDE4BDE3E
|
||||
:100720004ADEEACF409112016091100180911101DF
|
||||
:1007300009DD8FEFDDDCC4EFD1E0D4DC8111E3CF44
|
||||
:100740008FE295E70197F1F700C000002197A9F724
|
||||
:10075000D3CF8FE295E70197F1F700C0000008952D
|
||||
:100760002FEF8EE994E2215080409040E1F700C0E5
|
||||
:10077000000072D080EE90E05AD08F9AC9DD789454
|
||||
:10078000089587B38C6287BB709A8DB180658DB9EF
|
||||
:1007900008958FB9779BFECF08951F920F920FB6E1
|
||||
:1007A0000F9211242F933F934F935F936F937F93F7
|
||||
:1007B0008F939F93AF93BF93EF93FF938CB19091DF
|
||||
:1007C00019019F3110F010921901E091190191E087
|
||||
:1007D0009E0F90931901F0E0E25EFE4F808384301B
|
||||
:1007E00021F08D3011F08A3089F4E0911901F0E0A8
|
||||
:1007F000E25EFE4F108210921901E0911A01F09111
|
||||
:100800001B01309719F08EE191E00995FF91EF916E
|
||||
:10081000BF91AF919F918F917F916F915F914F9118
|
||||
:100820003F912F910F900FBE0F901F9018959093AE
|
||||
:100830001B0180931A010895E0911A01F0911B01A8
|
||||
:10084000309749F080911801882329F08EE191E0DA
|
||||
:1008500009951092180108958898899A8AB1886933
|
||||
:100860008AB986EA80BD10BC8DE489B908955D9B84
|
||||
:10087000FECF8CB90895CF93DF93EC01899181115C
|
||||
:1008800003C0DF91CF910895F2DFF8CFCF93DF93CC
|
||||
:1008900000D000D000D01F92CDB7DEB74AE0BE0135
|
||||
:1008A0006F5F7F4FD8D1CE010196E5DF27960FB657
|
||||
:1008B000F894DEBF0FBECDBFDF91CF910895DF92D8
|
||||
:1008C000EF92FF920F931F93CF93DF93CDB7DEB7D5
|
||||
:1008D000C05CD1090FB6F894DEBF0FBECDBFFE01DC
|
||||
:1008E000319690ECDF011D929A95E9F77F01DF01C7
|
||||
:1008F000362F50EC27E090E074E016E0D12E9830CF
|
||||
:1009000081F1903189F1983189F1032F10E0022EA5
|
||||
:1009100002C0159507950A94E2F700FF2AC0DC9201
|
||||
:100920009F5F2150515011965111E9CFF8948F01DA
|
||||
:1009300000541F4FF70181917F012BDF0E151F051A
|
||||
:10094000C9F77894C054DF4F0FB6F894DEBF0FBEDE
|
||||
:10095000CDBFDF91CF911F910F91FF90EF90DF906E
|
||||
:100960000895382F27E0D1CF342FFCCF362F90E0D9
|
||||
:10097000CCCF7C93D5CFF4DE8091130190911401FC
|
||||
:1009800082309105B1F030F4009761F00197A1F742
|
||||
:1009900012DDF2CF8430910581F068F0059761F7A0
|
||||
:1009A00085DEEACF8FE295E70197F1F700C00000FE
|
||||
:1009B000E3CF38DDE1CF71DDDFCF52DEDDCF991B34
|
||||
:1009C00079E004C0991F961708F0961B881F7A9546
|
||||
:1009D000C9F780950895AA1BBB1B51E107C0AA1F48
|
||||
:1009E000BB1FA617B70710F0A61BB70B881F991FD0
|
||||
:1009F0005A95A9F780959095BC01CD01089597FB74
|
||||
:100A0000072E16F4009406D077FD08D0E4DF07FC2B
|
||||
:100A100005D03EF4909581959F4F0895709561950E
|
||||
:100A20007F4F0895B0E0A0E0E7E1F5E09FC15C01F1
|
||||
:100A30006B017A016115710519F0FB0191838083C7
|
||||
:100A4000E114F10449F0C7010297839728F060E0B0
|
||||
:100A500070E0CB019AC05E01E5012196F50110819D
|
||||
:100A6000812F90E0C5D0892BB1F71D3209F055C018
|
||||
:100A70002196F501118101E0E114F10409F4ABC004
|
||||
:100A8000F0E1EF16F10409F08CC0103341F48881D5
|
||||
:100A90008F7D883509F081C0198122960260E0E1DE
|
||||
:100AA000EE2EF12C88248A94982CA82CFFE0BF2EDF
|
||||
:100AB00020E060E070E0CB0127010F2C000C6608FD
|
||||
:100AC0007708FE0150ED352E310E39E0331538F43C
|
||||
:100AD0003FEB310F3A3198F549EC342E310E3E148C
|
||||
:100AE0001F04B4F52F3FB1F086169706A806B90685
|
||||
:100AF00068F1A3019201FED0232D30E050E040E0E8
|
||||
:100B0000620F731F841F951F621773078407950771
|
||||
:100B1000E8F021E021961081D4CF1B3221F4E501C9
|
||||
:100B20002296F501118100E0A7CF78E0E72EF12CA5
|
||||
:100B300088248A94982CA82C6FE1B62EB9CF3FE96F
|
||||
:100B4000310F3A3128F439EA332EC8CF2FEFE2CFF4
|
||||
:100B5000C114D10431F02223E1F02197F601D183B1
|
||||
:100B6000C08300FF07C090958095709561957F4F79
|
||||
:100B70008F4F9F4F2F3F49F482E290E090933F01C7
|
||||
:100B800080933E016FEF7FEFCB01CDB7DEB7E1E1A0
|
||||
:100B900009C101FFE6CF2297E1CF10E3E114F10490
|
||||
:100BA00021F23AE0E316F104E1F080E1E816F10405
|
||||
:100BB00009F475CFE8E0EE16F10409F4B9CF6FEF50
|
||||
:100BC0007FEFCB0197010F2C000C440B550BA1D0EC
|
||||
:100BD00049015A016DCF103309F459CF9AE0E92E3B
|
||||
:100BE000F12C89E9882E982CA82C89E1B82E60CFA9
|
||||
:100BF000911154C0803219F089508550D0F7089572
|
||||
:100C00004CE151E001D00895FA01A191B081009723
|
||||
:100C100019F41097E1F0CD01DC01CD010D90002019
|
||||
:100C200011F4C00113C0FB012191222319F02015FA
|
||||
:100C3000D9F7F3CFFB012191201519F41E921196DB
|
||||
:100C400006C02223C1F70D900020A1F7D001FA01C0
|
||||
:100C5000A193B0830895BB274A3031F4992322F43D
|
||||
:100C6000BDE2909581959F4F01C0BB27FB015527A1
|
||||
:100C7000AA27880F991FAA1FA41710F0A41B8395F9
|
||||
:100C80005051B9F7A05DAA3308F0A95DA193009770
|
||||
:100C900079F7B111B1931192CB0103C0992788273D
|
||||
:100CA0000895DC01FC01672F71917723E1F73297FA
|
||||
:100CB00004C07C916D9370836291AE17BF07C8F337
|
||||
:100CC0000895E199FECF9FBB8EBBE09A99278DB323
|
||||
:100CD0000895262FE199FECF9FBB8EBBE09A019726
|
||||
:100CE0000DB2021631F02DBB0FB6F894E29AE19ADC
|
||||
:100CF0000FBE0895DB018F939F932DD0BF91AF91CD
|
||||
:100D0000A29F800D911DA39F900DB29F900D112465
|
||||
:100D10000895A1E21A2EAA1BBB1BFD010DC0AA1F3C
|
||||
:100D2000BB1FEE1FFF1FA217B307E407F50720F054
|
||||
:100D3000A21BB30BE40BF50B661F771F881F991FCF
|
||||
:100D40001A9469F760957095809590959B01AC0118
|
||||
:100D5000BD01CF01089540D0A59F900DB49F900D87
|
||||
:100D6000A49F800D911D112408952F923F924F92C0
|
||||
:100D70005F926F927F928F929F92AF92BF92CF922B
|
||||
:100D8000DF92EF92FF920F931F93CF93DF93CDB734
|
||||
:100D9000DEB7CA1BDB0B0FB6F894DEBF0FBECDBFAC
|
||||
:100DA00009942A88398848885F846E847D848C847D
|
||||
:100DB0009B84AA84B984C884DF80EE80FD800C8186
|
||||
:100DC0001B81AA81B981CE0FD11D0FB6F894DEBF69
|
||||
:100DD0000FBECDBFED010895A29FB001B39FC0012A
|
||||
:100DE000A39F01D0B29F700D811D1124911D089504
|
||||
:040DF000F894FFCFA5
|
||||
:100DF400FF000000FF000000FFFFFF0000FFFF2CCA
|
||||
:100E040000496E76616C6964206E756D626572204E
|
||||
:100E14006F6620617267756D656E74732E0D0A00BE
|
||||
:100E24004572726F72206E756D62657220706172A8
|
||||
:100E340073696E672E0D0A003E204E657720636F3E
|
||||
:100E44006C6F723A20003E204E65772062726967AB
|
||||
:100E540068746E6573733A20003E204E6577206394
|
||||
:100E64006F6C6F72206D6F64653A20003E2053658D
|
||||
:100E74007474696E6773206C6F616465643A2000F2
|
||||
:040E84002C2000001E
|
||||
:00000001FF
|
||||
BIN
firmware/obj/light_ws2812.o
Normal file
BIN
firmware/obj/light_ws2812.o
Normal file
Binary file not shown.
BIN
firmware/obj/main.o
Normal file
BIN
firmware/obj/main.o
Normal file
Binary file not shown.
BIN
firmware/obj/spi.o
Normal file
BIN
firmware/obj/spi.o
Normal file
Binary file not shown.
BIN
firmware/obj/usart.o
Normal file
BIN
firmware/obj/usart.o
Normal file
Binary file not shown.
BIN
firmware/obj/ws2812b.o
Normal file
BIN
firmware/obj/ws2812b.o
Normal file
Binary file not shown.
10
firmware/src/defs.h
Normal file
10
firmware/src/defs.h
Normal file
@ -0,0 +1,10 @@
|
||||
#if !defined(_DEFS_H_)
|
||||
#define _DEFS_H_
|
||||
|
||||
#define F_CPU 12000000UL
|
||||
#define LED_NUMBERS 9
|
||||
#define LED_DIR DDRD
|
||||
#define LED_PORT PORTD
|
||||
#define LED_PIN PD7
|
||||
|
||||
#endif
|
||||
243
firmware/src/light_ws2812.c
Normal file
243
firmware/src/light_ws2812.c
Normal file
@ -0,0 +1,243 @@
|
||||
/*
|
||||
* light weight WS2812 lib V2.5b
|
||||
*
|
||||
* Controls WS2811/WS2812/WS2812B RGB-LEDs
|
||||
* Author: Tim (cpldcpu@gmail.com)
|
||||
*
|
||||
* Jan 18, 2014 v2.0b Initial Version
|
||||
* Nov 29, 2015 v2.3 Added SK6812RGBW support
|
||||
* Nov 11, 2023 v2.5 Added support for ports that cannot be addressed with "out"
|
||||
* Added LGT8F88A support
|
||||
* May 1, 2024 v2.6 Added support for reduced core AVRs
|
||||
*
|
||||
* License: GNU GPL v2+ (see License.txt)
|
||||
*/
|
||||
|
||||
#include "light_ws2812.h"
|
||||
#include <avr/interrupt.h>
|
||||
#include <avr/io.h>
|
||||
#include <util/delay.h>
|
||||
|
||||
// Setleds for standard RGB
|
||||
inline void ws2812_setleds(struct cRGB *ledarray, uint16_t leds)
|
||||
{
|
||||
ws2812_setleds_pin(ledarray,leds, _BV(ws2812_pin));
|
||||
}
|
||||
|
||||
inline void ws2812_setleds_pin(struct cRGB *ledarray, uint16_t leds, uint8_t pinmask)
|
||||
{
|
||||
ws2812_sendarray_mask((uint8_t*)ledarray,leds+leds+leds,pinmask);
|
||||
_delay_us(ws2812_resettime);
|
||||
}
|
||||
|
||||
// Setleds for SK6812RGBW
|
||||
inline void ws2812_setleds_rgbw(struct cRGBW *ledarray, uint16_t leds)
|
||||
{
|
||||
ws2812_sendarray_mask((uint8_t*)ledarray,leds<<2,_BV(ws2812_pin));
|
||||
_delay_us(ws2812_resettime);
|
||||
}
|
||||
|
||||
void ws2812_sendarray(uint8_t *data,uint16_t datlen)
|
||||
{
|
||||
ws2812_sendarray_mask(data,datlen,_BV(ws2812_pin));
|
||||
}
|
||||
|
||||
/*
|
||||
This routine writes an array of bytes with RGB values to the Dataout pin
|
||||
using the fast 800kHz clockless WS2811/2812 protocol.
|
||||
*/
|
||||
|
||||
// Timing in ns
|
||||
#define w_zeropulse 350
|
||||
#define w_onepulse 900
|
||||
#define w_totalperiod 1250
|
||||
|
||||
// Fixed cycles used by the inner loop
|
||||
#if defined(__LGT8F__) // LGT8F88A
|
||||
#define w_fixedlow 4
|
||||
#define w_fixedhigh 6
|
||||
#define w_fixedtotal 10
|
||||
#elif __AVR_ARCH__ == 100 // reduced core AVR
|
||||
#define w_fixedlow 2
|
||||
#define w_fixedhigh 4
|
||||
#define w_fixedtotal 8
|
||||
#else // all others
|
||||
#define w_fixedlow 3
|
||||
#define w_fixedhigh 6
|
||||
#define w_fixedtotal 10
|
||||
#endif
|
||||
|
||||
|
||||
// Insert NOPs to match the timing, if possible
|
||||
#define w_zerocycles (((F_CPU/1000)*w_zeropulse )/1000000)
|
||||
#define w_onecycles (((F_CPU/1000)*w_onepulse +500000)/1000000)
|
||||
#define w_totalcycles (((F_CPU/1000)*w_totalperiod +500000)/1000000)
|
||||
|
||||
// w1 - nops between rising edge and falling edge - low
|
||||
#define w1 (w_zerocycles-w_fixedlow)
|
||||
// w2 nops between fe low and fe high
|
||||
#define w2 (w_onecycles-w_fixedhigh-w1)
|
||||
// w3 nops to complete loop
|
||||
#define w3 (w_totalcycles-w_fixedtotal-w1-w2)
|
||||
|
||||
#if w1>0
|
||||
#define w1_nops w1
|
||||
#else
|
||||
#define w1_nops 0
|
||||
#endif
|
||||
|
||||
// The only critical timing parameter is the minimum pulse length of the "0"
|
||||
// Warn or throw error if this timing can not be met with current F_CPU settings.
|
||||
#define w_lowtime ((w1_nops+w_fixedlow)*1000000)/(F_CPU/1000)
|
||||
#if w_lowtime>550
|
||||
#error "Light_ws2812: Sorry, the clock speed is too low. Did you set F_CPU correctly?"
|
||||
#elif w_lowtime>450
|
||||
#warning "Light_ws2812: The timing is critical and may only work on WS2812B, not on WS2812(S)."
|
||||
#warning "Please consider a higher clockspeed, if possible"
|
||||
#endif
|
||||
|
||||
#if w2>0
|
||||
#define w2_nops w2
|
||||
#else
|
||||
#define w2_nops 0
|
||||
#endif
|
||||
|
||||
#if w3>0
|
||||
#define w3_nops w3
|
||||
#else
|
||||
#define w3_nops 0
|
||||
#endif
|
||||
|
||||
#define w_nop1 "nop \n\t"
|
||||
#if (ws2812_interrupt_handling)
|
||||
#define w_nop2 "brid .+0 \n\t"
|
||||
#else
|
||||
#define w_nop2 "brtc .+0 \n\t"
|
||||
#endif
|
||||
#define w_nop4 w_nop2 w_nop2
|
||||
#define w_nop8 w_nop4 w_nop4
|
||||
#define w_nop16 w_nop8 w_nop8
|
||||
|
||||
inline void ws2812_sendarray_mask(uint8_t *data,uint16_t datlen,uint8_t maskhi)
|
||||
{
|
||||
// `maskhi` is 0x80 if P?7 is LED DATA
|
||||
uint8_t curbyte,ctr,masklo;
|
||||
uint8_t sreg_prev;
|
||||
#if __AVR_ARCH__ != 100
|
||||
uint8_t *port = (uint8_t*) _SFR_MEM_ADDR(ws2812_PORTREG);
|
||||
#endif
|
||||
|
||||
ws2812_DDRREG |= maskhi; // Enable output
|
||||
|
||||
// `masklo` and `maskhi` are written to PORT? to drive the DATA line low or
|
||||
// high (rather than setting or clearing the bit in PORT?)
|
||||
masklo =~maskhi&ws2812_PORTREG;
|
||||
maskhi |= ws2812_PORTREG;
|
||||
|
||||
sreg_prev=SREG;
|
||||
|
||||
#if (ws2812_interrupt_handling)
|
||||
cli();
|
||||
#endif
|
||||
|
||||
while (datlen--) {
|
||||
curbyte=*data++;
|
||||
|
||||
__asm__ volatile(
|
||||
" ldi %0,8 \n\t"
|
||||
#if (ws2812_interrupt_handling)
|
||||
" clt \n\t"
|
||||
#endif
|
||||
"loop%=: \n\t"
|
||||
#if __AVR_ARCH__ == 100
|
||||
" out %2,%3 \n\t" // '1' [01] '0' [01] - re
|
||||
#else
|
||||
" st X,%3 \n\t" // '1' [02] '0' [02] - re
|
||||
#endif
|
||||
|
||||
#if (w1_nops&1)
|
||||
w_nop1
|
||||
#endif
|
||||
#if (w1_nops&2)
|
||||
w_nop2
|
||||
#endif
|
||||
#if (w1_nops&4)
|
||||
w_nop4
|
||||
#endif
|
||||
#if (w1_nops&8)
|
||||
w_nop8
|
||||
#endif
|
||||
#if (w1_nops&16)
|
||||
w_nop16
|
||||
#endif
|
||||
#if defined(__LGT8F__)
|
||||
" bst %1,7 \n\t" // '1' [02] '0' [02]
|
||||
" brts 1f \n\t" // '1' [04] '0' [03]
|
||||
" st X,%4 \n\t" // '1' [--] '0' [04] - fe-low
|
||||
"1: lsl %1 \n\t" // '1' [05] '0' [05]
|
||||
#elif __AVR_ARCH__ == 100
|
||||
" sbrs %1,7 \n\t" // '1' [03] '0' [02]
|
||||
" out %2,%4 \n\t" // '1' [--] '0' [03] - fe-low
|
||||
" lsl %1 \n\t" // '1' [04] '0' [04]
|
||||
#else
|
||||
" sbrs %1,7 \n\t" // '1' [04] '0' [03]
|
||||
" st X,%4 \n\t" // '1' [--] '0' [05] - fe-low
|
||||
" lsl %1 \n\t" // '1' [05] '0' [06]
|
||||
#endif
|
||||
#if (w2_nops&1)
|
||||
w_nop1
|
||||
#endif
|
||||
#if (w2_nops&2)
|
||||
w_nop2
|
||||
#endif
|
||||
#if (w2_nops&4)
|
||||
w_nop4
|
||||
#endif
|
||||
#if (w2_nops&8)
|
||||
w_nop8
|
||||
#endif
|
||||
#if (w2_nops&16)
|
||||
w_nop16
|
||||
#endif
|
||||
#if __AVR_ARCH__ == 100
|
||||
" out %2,%4 \n\t" // '1' [+1] '0' [+1] - fe-high
|
||||
#else
|
||||
" brcc skipone%= \n\t" // '1' [+1] '0' [+2] -
|
||||
" st X,%4 \n\t" // '1' [+3] '0' [--] - fe-high
|
||||
"skipone%=: " // '1' [+3] '0' [+2] -
|
||||
#endif
|
||||
#if (w3_nops&1)
|
||||
w_nop1
|
||||
#endif
|
||||
#if (w3_nops&2)
|
||||
w_nop2
|
||||
#endif
|
||||
#if (w3_nops&4)
|
||||
w_nop4
|
||||
#endif
|
||||
#if (w3_nops&8)
|
||||
w_nop8
|
||||
#endif
|
||||
#if (w3_nops&16)
|
||||
w_nop16
|
||||
#endif
|
||||
|
||||
" dec %0 \n\t" // '1' [+4] '0' [+3]
|
||||
" brne loop%=\n\t" // '1' [+5] '0' [+4]
|
||||
: "=&d" (ctr)
|
||||
#if __AVR_ARCH__ == 100
|
||||
: "r" (curbyte), "I" (_SFR_IO_ADDR(ws2812_PORTREG)), "r" (maskhi), "r" (masklo)
|
||||
#else
|
||||
: "r" (curbyte), "x" (port), "r" (maskhi), "r" (masklo)
|
||||
#endif
|
||||
|
||||
);
|
||||
}
|
||||
|
||||
SREG=sreg_prev;
|
||||
|
||||
#if (ws2812_interrupt_handling)
|
||||
sei();
|
||||
#endif
|
||||
|
||||
}
|
||||
116
firmware/src/light_ws2812.h
Normal file
116
firmware/src/light_ws2812.h
Normal file
@ -0,0 +1,116 @@
|
||||
/*
|
||||
* light weight WS2812 lib include
|
||||
*
|
||||
* Version 2.3 - Nev 29th 2015
|
||||
* Author: Tim (cpldcpu@gmail.com)
|
||||
*
|
||||
* Please do not change this file! All configuration is handled in "ws2812_config.h"
|
||||
*
|
||||
* License: GNU GPL v2+ (see License.txt)
|
||||
+
|
||||
*/
|
||||
|
||||
#ifndef LIGHT_WS2812_H_
|
||||
#define LIGHT_WS2812_H_
|
||||
|
||||
#include "ws2812_config.h"
|
||||
#include <avr/io.h>
|
||||
#include <avr/interrupt.h>
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
// Define Reset time in µs.
|
||||
//
|
||||
// This is the time the library spends waiting after writing the data.
|
||||
//
|
||||
// WS2813 needs 300 µs reset time
|
||||
// WS2812 and clones only need 50 µs
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
#if !defined(ws2812_resettime)
|
||||
#define ws2812_resettime 300
|
||||
#endif
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
// Define I/O pin
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
#if !defined(ws2812_port)
|
||||
#define ws2812_port B // Data port
|
||||
#endif
|
||||
|
||||
#if !defined(ws2812_pin)
|
||||
#define ws2812_pin 0 // Data out pin
|
||||
#endif
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
// Define interrupt behaviour
|
||||
//
|
||||
// Set to 1 if you want the library to handle interrupt toggling
|
||||
// (i.e. turning off interrupts when sending data and reverting back after).
|
||||
// Set to 0 if you need to allow interrupts (can introduce flickering!).
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
#if !defined(ws2812_interrupt_handling)
|
||||
#define ws2812_interrupt_handling 1
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Structure of the LED array
|
||||
*
|
||||
* cRGB: RGB for WS2812S/B/C/D, SK6812, SK6812Mini, SK6812WWA, APA104, APA106
|
||||
* cRGBW: RGBW for SK6812RGBW
|
||||
*/
|
||||
|
||||
struct __attribute__ ((__packed__)) cRGB { uint8_t g; uint8_t r; uint8_t b; };
|
||||
struct __attribute__ ((__packed__)) cRGBW { uint8_t g; uint8_t r; uint8_t b; uint8_t w;};
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* User Interface
|
||||
*
|
||||
* Input:
|
||||
* ledarray: An array of GRB data describing the LED colors
|
||||
* number_of_leds: The number of LEDs to write
|
||||
* pinmask (optional): Bitmask describing the output bin. e.g. _BV(PB0)
|
||||
*
|
||||
* The functions will perform the following actions:
|
||||
* - Set the data-out pin as output
|
||||
* - Send out the LED data
|
||||
* - Wait 50µs to reset the LEDs
|
||||
*/
|
||||
|
||||
void ws2812_setleds (struct cRGB *ledarray, uint16_t number_of_leds);
|
||||
void ws2812_setleds_pin (struct cRGB *ledarray, uint16_t number_of_leds,uint8_t pinmask);
|
||||
void ws2812_setleds_rgbw(struct cRGBW *ledarray, uint16_t number_of_leds);
|
||||
|
||||
/*
|
||||
* Old interface / Internal functions
|
||||
*
|
||||
* The functions take a byte-array and send to the data output as WS2812 bitstream.
|
||||
* The length is the number of bytes to send - three per LED.
|
||||
*/
|
||||
|
||||
void ws2812_sendarray (uint8_t *array,uint16_t length);
|
||||
void ws2812_sendarray_mask(uint8_t *array,uint16_t length, uint8_t pinmask);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* Internal defines
|
||||
*/
|
||||
#if !defined(CONCAT)
|
||||
#define CONCAT(a, b) a ## b
|
||||
#endif
|
||||
|
||||
#if !defined(CONCAT_EXP)
|
||||
#define CONCAT_EXP(a, b) CONCAT(a, b)
|
||||
#endif
|
||||
|
||||
#define ws2812_PORTREG CONCAT_EXP(PORT,ws2812_port)
|
||||
#define ws2812_DDRREG CONCAT_EXP(DDR,ws2812_port)
|
||||
|
||||
#endif /* LIGHT_WS2812_H_ */
|
||||
400
firmware/src/main.c
Normal file
400
firmware/src/main.c
Normal file
@ -0,0 +1,400 @@
|
||||
#include "main.h"
|
||||
|
||||
uint8_t eeprom_led_r EEMEM = 0;
|
||||
uint8_t eeprom_led_g EEMEM = 0;
|
||||
uint8_t eeprom_led_b EEMEM = 0;
|
||||
uint8_t eeprom_color_mode EEMEM = 0;
|
||||
|
||||
DeviceState_t device = {
|
||||
.current_color = {{ 0 }},
|
||||
.base_current_color = { 0, 0 ,0 },
|
||||
.current_mode = COLOR_MODE_STATIC,
|
||||
};
|
||||
|
||||
volatile bool isChangedColorOrModeInterrupt = false;
|
||||
|
||||
bool DeviceChangedColorOrModeCheck(void) {
|
||||
if (isChangedColorOrModeInterrupt) {
|
||||
isChangedColorOrModeInterrupt = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Reads the received USART buffer and changes color and mode of device.
|
||||
* Format: {R},{G},{B},{Brightness},{Color mode}
|
||||
*
|
||||
* @param rx_buffer
|
||||
*/
|
||||
|
||||
void DeviceChangeColorHandler(volatile char *rx_buffer) {
|
||||
char *sep = ",";
|
||||
char *token;
|
||||
uint8_t new_rgb_color[3] = {0};
|
||||
uint8_t brightness = 255;
|
||||
uint8_t i = 0;
|
||||
ColorMode_t color_mode = COLOR_MODE_STATIC;
|
||||
|
||||
token = strtok((char *)rx_buffer, sep);
|
||||
|
||||
while (token != NULL) {
|
||||
char *endptr;
|
||||
|
||||
if (i >= 5) {
|
||||
USART_SendStr("Invalid number of arguments.\r\n");
|
||||
i = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if (i < 3) new_rgb_color[i] = strtoul(token, &endptr, 10); // get rgb colors
|
||||
if (i == 3) brightness = strtoul(token, &endptr, 10); // get brigtness percentage
|
||||
if (i == 4) color_mode = strtoul(token, &endptr, 10); // get color mode
|
||||
|
||||
if (endptr == token && new_rgb_color[i] == 0) {
|
||||
USART_SendStr("Error number parsing.\r\n");
|
||||
return;
|
||||
}
|
||||
|
||||
i++;
|
||||
token = strtok(NULL, sep);
|
||||
}
|
||||
|
||||
i = 0;
|
||||
|
||||
DeviceSetColor(new_rgb_color[0], new_rgb_color[1], new_rgb_color[2]);
|
||||
DeviceUpdateColorSettings();
|
||||
DeviceSetBrightness(brightness);
|
||||
DeviceSetColorMode(color_mode);
|
||||
|
||||
USART_SendStr("> New color: ");
|
||||
USART_SendInt16(device.current_color[0].r);
|
||||
USART_SendChar(',');
|
||||
USART_SendInt16(device.current_color[0].g);
|
||||
USART_SendChar(',');
|
||||
USART_SendInt16(device.current_color[0].b);
|
||||
USART_SendStr("\r\n");
|
||||
USART_SendStr("> New brightness: ");
|
||||
USART_SendInt16(brightness);
|
||||
USART_SendStr("\r\n");
|
||||
USART_SendStr("> New color mode: ");
|
||||
USART_SendInt16(color_mode);
|
||||
USART_SendChar('\r');
|
||||
USART_SendChar('\n');
|
||||
|
||||
isChangedColorOrModeInterrupt = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Sets the brightness of all LEDs
|
||||
*
|
||||
* @param brightness from 0 to 255
|
||||
*/
|
||||
void DeviceSetBrightness(uint8_t brightness) {
|
||||
uint8_t i = 0;
|
||||
|
||||
do {
|
||||
device.current_color[i].r = (uint16_t)device.base_current_color.r * brightness / 255;
|
||||
device.current_color[i].g = (uint16_t)device.base_current_color.g * brightness / 255;
|
||||
device.current_color[i].b = (uint16_t)device.base_current_color.b * brightness / 255;
|
||||
} while (++i <= LED_NUMBERS - 1);
|
||||
|
||||
ws2812_setleds(device.current_color, LED_NUMBERS);
|
||||
}
|
||||
|
||||
void DeviceSetColor(uint8_t r, uint8_t g, uint8_t b) {
|
||||
uint8_t i = 0;
|
||||
|
||||
do {
|
||||
device.current_color[i].r = r;
|
||||
device.current_color[i].g = g;
|
||||
device.current_color[i].b = b;
|
||||
} while (++i <= LED_NUMBERS - 1);
|
||||
|
||||
ws2812_setleds(device.current_color, LED_NUMBERS);
|
||||
}
|
||||
|
||||
void DeviceUpdateColorSettings(void) {
|
||||
eeprom_update_byte(&eeprom_led_r, device.current_color[0].r);
|
||||
eeprom_update_byte(&eeprom_led_g, device.current_color[0].g);
|
||||
eeprom_update_byte(&eeprom_led_b, device.current_color[0].b);
|
||||
device.base_current_color.r = device.current_color[0].r;
|
||||
device.base_current_color.g = device.current_color[0].g;
|
||||
device.base_current_color.b = device.current_color[0].b;
|
||||
}
|
||||
|
||||
void DeviceSetColorMode(ColorMode_t mode) {
|
||||
device.current_mode = mode;
|
||||
eeprom_update_byte(&eeprom_color_mode, mode);
|
||||
}
|
||||
|
||||
void DeviceLoadSettings() {
|
||||
uint8_t i = 0;
|
||||
|
||||
eeprom_busy_wait();
|
||||
|
||||
device.current_mode = eeprom_read_byte(&eeprom_color_mode);
|
||||
|
||||
do {
|
||||
device.current_color[i].r = eeprom_read_byte(&eeprom_led_r);
|
||||
device.current_color[i].g = eeprom_read_byte(&eeprom_led_g);
|
||||
device.current_color[i].b = eeprom_read_byte(&eeprom_led_b);
|
||||
} while (++i < LED_NUMBERS);
|
||||
|
||||
device.base_current_color.r = device.current_color[0].r;
|
||||
device.base_current_color.g = device.current_color[0].g;
|
||||
device.base_current_color.b = device.current_color[0].b;
|
||||
|
||||
DeviceSetColor(device.current_color[0].r, device.current_color[0].g, device.current_color[0].b);
|
||||
DeviceSetColorMode(device.current_mode);
|
||||
|
||||
USART_SendStr("> Settings loaded: ");
|
||||
USART_SendInt16(device.current_color[0].r);
|
||||
USART_SendStr(", ");
|
||||
USART_SendInt16(device.current_color[0].g);
|
||||
USART_SendStr(", ");
|
||||
USART_SendInt16(device.current_color[0].b);
|
||||
USART_SendStr(", ");
|
||||
USART_SendInt16(device.current_mode);
|
||||
USART_SendStr("\r\n");
|
||||
}
|
||||
|
||||
void DeviceBreathModeHahdler(void) {
|
||||
int16_t brightness = 200;
|
||||
|
||||
do {
|
||||
if (DeviceChangedColorOrModeCheck()) return;
|
||||
|
||||
DeviceSetBrightness(brightness);
|
||||
|
||||
_delay_ms(20);
|
||||
} while(--brightness >= 0);
|
||||
|
||||
brightness = 0;
|
||||
|
||||
for (uint8_t i = 0; i < 50; i++){
|
||||
if (DeviceChangedColorOrModeCheck()) return;
|
||||
_delay_ms(10);
|
||||
}
|
||||
|
||||
do {
|
||||
if (DeviceChangedColorOrModeCheck()) return;
|
||||
|
||||
DeviceSetBrightness(brightness);
|
||||
|
||||
_delay_ms(20);
|
||||
} while (++brightness <= 200);
|
||||
|
||||
for (uint8_t i = 0; i < 100; i++){
|
||||
if (DeviceChangedColorOrModeCheck()) return;
|
||||
_delay_ms(10);
|
||||
}
|
||||
}
|
||||
|
||||
void DevicePulseModeHandler(void) {
|
||||
DeviceSetBrightness(200);
|
||||
|
||||
for (uint8_t i = 0; i < 5; i++) {
|
||||
if (DeviceChangedColorOrModeCheck()) return;
|
||||
_delay_ms(10);
|
||||
}
|
||||
|
||||
for (int16_t b = 200; b >= 0; b--) {
|
||||
if (DeviceChangedColorOrModeCheck()) return;
|
||||
|
||||
DeviceSetBrightness((uint8_t)b);
|
||||
|
||||
_delay_ms(1);
|
||||
}
|
||||
|
||||
DeviceSetBrightness(200);
|
||||
|
||||
for (int16_t b = 200; b >= 0; b--) {
|
||||
if (DeviceChangedColorOrModeCheck()) return;
|
||||
|
||||
DeviceSetBrightness((uint8_t)b);
|
||||
|
||||
_delay_ms(7);
|
||||
}
|
||||
|
||||
for (uint8_t i = 0; i < 30; i++) {
|
||||
if (DeviceChangedColorOrModeCheck()) return;
|
||||
_delay_ms(15);
|
||||
}
|
||||
}
|
||||
|
||||
void DeviceDiscoModeHandler(void) {
|
||||
static const struct { uint8_t r; uint8_t g; uint8_t b; } disco_colors[] = {
|
||||
{255, 0, 0},
|
||||
{0, 255, 0},
|
||||
{0, 0, 255},
|
||||
{255, 255, 0},
|
||||
{0, 255, 255}
|
||||
};
|
||||
|
||||
const uint8_t num_colors = sizeof(disco_colors) / sizeof(disco_colors[0]);
|
||||
static uint8_t color_idx = 0;
|
||||
|
||||
uint8_t start_r = disco_colors[color_idx].r;
|
||||
uint8_t start_g = disco_colors[color_idx].g;
|
||||
uint8_t start_b = disco_colors[color_idx].b;
|
||||
|
||||
color_idx = (color_idx + 1) % num_colors;
|
||||
|
||||
uint8_t target_r = disco_colors[color_idx].r;
|
||||
uint8_t target_g = disco_colors[color_idx].g;
|
||||
uint8_t target_b = disco_colors[color_idx].b;
|
||||
|
||||
for (uint16_t step = 0; step <= 100; step++) {
|
||||
if (DeviceChangedColorOrModeCheck()) return;
|
||||
|
||||
uint8_t r = start_r + (int16_t)(target_r - start_r) * step / 100;
|
||||
uint8_t g = start_g + (int16_t)(target_g - start_g) * step / 100;
|
||||
uint8_t b = start_b + (int16_t)(target_b - start_b) * step / 100;
|
||||
|
||||
DeviceSetColor(r, g, b);
|
||||
_delay_ms(20);
|
||||
}
|
||||
|
||||
for (uint8_t d = 0; d < 50; d++) {
|
||||
if (DeviceChangedColorOrModeCheck()) return;
|
||||
_delay_ms(10);
|
||||
}
|
||||
}
|
||||
|
||||
void set_pixel_hue(uint8_t index, uint8_t hue) {
|
||||
uint8_t r, g, b;
|
||||
uint8_t region = hue / 43;
|
||||
uint8_t remainder = (hue % 43) * 6;
|
||||
|
||||
uint8_t q = (uint16_t)255 * (255 - remainder) / 255;
|
||||
uint8_t t = (uint16_t)255 * remainder / 255;
|
||||
|
||||
switch (region) {
|
||||
case 0: r = 255; g = t; b = 0; break;
|
||||
case 1: r = q; g = 255; b = 0; break;
|
||||
case 2: r = 0; g = 255; b = t; break;
|
||||
case 3: r = 0; g = q; b = 255; break;
|
||||
case 4: r = t; g = 0; b = 255; break;
|
||||
default: r = 255; g = 0; b = q; break;
|
||||
}
|
||||
|
||||
device.current_color[index].r = r;
|
||||
device.current_color[index].g = g;
|
||||
device.current_color[index].b = b;
|
||||
}
|
||||
|
||||
void DeviceRainbowModeHandler(void) {
|
||||
static uint8_t start_hue = 0;
|
||||
|
||||
for (uint8_t i = 0; i < LED_NUMBERS; i++) {
|
||||
uint8_t hue = start_hue + (i * (255 / LED_NUMBERS));
|
||||
set_pixel_hue(i, hue);
|
||||
}
|
||||
|
||||
ws2812_setleds(device.current_color, LED_NUMBERS);
|
||||
|
||||
start_hue += 2;
|
||||
|
||||
for (uint8_t d = 0; d < 3; d++) {
|
||||
if (DeviceChangedColorOrModeCheck()) return;
|
||||
_delay_ms(10);
|
||||
}
|
||||
}
|
||||
|
||||
void DeviceStepperModeHandler(void) {
|
||||
static uint8_t effect_step = 0;
|
||||
|
||||
switch (effect_step) {
|
||||
case 0:
|
||||
DeviceSetColor(device.base_current_color.r, device.base_current_color.g, device.base_current_color.b);
|
||||
DeviceSetBrightness(255);
|
||||
for (uint16_t i = 0; i < 500; i++) {
|
||||
if (DeviceChangedColorOrModeCheck()) return;
|
||||
_delay_ms(10);
|
||||
}
|
||||
break;
|
||||
|
||||
case 1:
|
||||
for (uint8_t i = 0; i < 5; i++) {
|
||||
DeviceBreathModeHahdler();
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
for (uint8_t i = 0; i < 5; i++) {
|
||||
DevicePulseModeHandler();
|
||||
}
|
||||
break;
|
||||
|
||||
case 3:
|
||||
for (uint8_t i = 0; i < 5; i++) {
|
||||
DeviceDiscoModeHandler();
|
||||
}
|
||||
break;
|
||||
|
||||
case 4:
|
||||
for (uint16_t i = 0; i < 255; i++) {
|
||||
if (DeviceChangedColorOrModeCheck()) return;
|
||||
DeviceRainbowModeHandler();
|
||||
_delay_ms(10);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
effect_step = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
effect_step++;
|
||||
|
||||
if (effect_step > 4) {
|
||||
effect_step = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void DeviceStaticModeHandler(void) {
|
||||
_delay_ms(10);
|
||||
}
|
||||
|
||||
void System_Init() {
|
||||
_delay_ms(1000);
|
||||
|
||||
USART_Init();
|
||||
USART_SetReceiveHandler(&DeviceChangeColorHandler);
|
||||
LED_DIR |= _BV(LED_PIN);
|
||||
|
||||
DeviceLoadSettings();
|
||||
|
||||
sei();
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
System_Init();
|
||||
|
||||
while (1) {
|
||||
switch (device.current_mode) {
|
||||
case COLOR_MODE_STATIC:
|
||||
DeviceStaticModeHandler();
|
||||
break;
|
||||
case COLOR_MODE_BREATH:
|
||||
DeviceBreathModeHahdler();
|
||||
break;
|
||||
case COLOR_MODE_PULSE:
|
||||
DevicePulseModeHandler();
|
||||
break;
|
||||
case COLOR_MODE_DISCO:
|
||||
DeviceDiscoModeHandler();
|
||||
break;
|
||||
case COLOR_MODE_RAINBOW:
|
||||
DeviceRainbowModeHandler();
|
||||
break;
|
||||
case COLOR_MODE_STEPPER:
|
||||
DeviceStepperModeHandler();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
50
firmware/src/main.h
Normal file
50
firmware/src/main.h
Normal file
@ -0,0 +1,50 @@
|
||||
#if !defined(_MAIN_H)
|
||||
#define _MAIN_H
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <avr/eeprom.h>
|
||||
#include <avr/interrupt.h>
|
||||
#include <avr/io.h>
|
||||
#include <avr/eeprom.h>
|
||||
#include <avr/pgmspace.h>
|
||||
|
||||
#include "defs.h"
|
||||
#include "usart.h"
|
||||
#include "spi.h"
|
||||
|
||||
#include <util/setbaud.h>
|
||||
#include <util/delay.h>
|
||||
#include <util/atomic.h>
|
||||
#include "light_ws2812.h"
|
||||
|
||||
typedef volatile enum {
|
||||
COLOR_MODE_STATIC = 0x00,
|
||||
COLOR_MODE_BREATH = 0x01,
|
||||
COLOR_MODE_PULSE = 0x02,
|
||||
COLOR_MODE_DISCO = 0x03,
|
||||
COLOR_MODE_RAINBOW = 0x04,
|
||||
COLOR_MODE_STEPPER = 0x05
|
||||
} ColorMode_t;
|
||||
|
||||
typedef struct {
|
||||
struct cRGB current_color[LED_NUMBERS];
|
||||
struct cRGB base_current_color;
|
||||
ColorMode_t current_mode;
|
||||
} DeviceState_t;
|
||||
|
||||
bool DeviceChangedColorOrModeCheck(void);
|
||||
void DeviceSetBrightness(uint8_t brightness);
|
||||
void DeviceSetColor(uint8_t r, uint8_t g, uint8_t b);
|
||||
void DeviceSetColorMode(ColorMode_t mode);
|
||||
void DeviceUpdateColorSettings(void);
|
||||
void DeviceStaticModeHandler(void);
|
||||
void DeviceBreathModeHahdler(void);
|
||||
void DevicePulseModeHandler(void);
|
||||
void DeviceDiscoModeHandler(void);
|
||||
void DeviceRainbowModeHandler(void);
|
||||
void DeviceStepperModeHandler(void);
|
||||
|
||||
#endif // _MAIN_H
|
||||
12
firmware/src/spi.c
Normal file
12
firmware/src/spi.c
Normal file
@ -0,0 +1,12 @@
|
||||
#include "spi.h"
|
||||
|
||||
void SPI_Init(void) {
|
||||
DDRB |= _BV(PB5) | _BV(PB3) | _BV(PB2);
|
||||
SPSR |= _BV(SPI2X);
|
||||
SPCR |= _BV(SPE) | _BV(MSTR);
|
||||
}
|
||||
|
||||
void SPI_SendByte(uint8_t byte) {
|
||||
SPDR = byte;
|
||||
loop_until_bit_is_set(SPSR, SPIF);
|
||||
}
|
||||
9
firmware/src/spi.h
Normal file
9
firmware/src/spi.h
Normal file
@ -0,0 +1,9 @@
|
||||
#if !defined(_SPI_H_)
|
||||
#define _SPI_H_
|
||||
|
||||
#include <avr/io.h>
|
||||
|
||||
void SPI_SendByte(uint8_t byte);
|
||||
void SPI_Init(void);
|
||||
|
||||
#endif
|
||||
64
firmware/src/usart.c
Normal file
64
firmware/src/usart.c
Normal file
@ -0,0 +1,64 @@
|
||||
#include "usart.h"
|
||||
|
||||
void (*EOT_Handler)(volatile char *rx_buffer) = NULL;
|
||||
|
||||
volatile char rx_buffer[RX_BUFFER_SIZE];
|
||||
volatile uint8_t rx_buffer_idx = 0;
|
||||
volatile bool rx_received_packet = false;
|
||||
|
||||
ISR(USART_RXC_vect) {
|
||||
char c = UDR;
|
||||
|
||||
if (rx_buffer_idx >= RX_BUFFER_SIZE - 1) rx_buffer_idx = 0;
|
||||
|
||||
rx_buffer[rx_buffer_idx++] = c;
|
||||
|
||||
if (c == EOT || c == '\r' || c == '\n') {
|
||||
rx_buffer[rx_buffer_idx] = '\0';
|
||||
rx_buffer_idx = 0;
|
||||
if (EOT_Handler != NULL) (*EOT_Handler)(rx_buffer);
|
||||
}
|
||||
}
|
||||
|
||||
void USART_SetReceiveHandler(void (*handler)(volatile char *rx_buffer)) {
|
||||
EOT_Handler = handler;
|
||||
}
|
||||
|
||||
void USART_OnReceivePacketHandler(void) {
|
||||
if (EOT_Handler != NULL && rx_received_packet) {
|
||||
(*EOT_Handler)(rx_buffer);
|
||||
rx_received_packet = false;
|
||||
}
|
||||
}
|
||||
|
||||
void USART_Init(void) {
|
||||
/**
|
||||
* USART
|
||||
* 8-bit char size, 1 stop bit, even parity, baud 9600
|
||||
*/
|
||||
DDRD &= ~_BV(PD0);
|
||||
DDRD |= _BV(PD1);
|
||||
UCSRB |= _BV(RXEN) | _BV(TXEN) | _BV(RXCIE);
|
||||
UCSRC = _BV(URSEL) | _BV(UCSZ0) | _BV(UCSZ1) | _BV(UPM1);
|
||||
UBRRH = UBRRH_VALUE;
|
||||
UBRRL = UBRRL_VALUE;
|
||||
}
|
||||
|
||||
void USART_SendChar(char c) {
|
||||
loop_until_bit_is_set(UCSRA, UDRE);
|
||||
UDR = c;
|
||||
}
|
||||
|
||||
void USART_SendStr(char *str) {
|
||||
char c;
|
||||
|
||||
while ((c = *str++) != '\0') {
|
||||
USART_SendChar(c);
|
||||
}
|
||||
}
|
||||
|
||||
void USART_SendInt16(int16_t num) {
|
||||
char str[7];
|
||||
itoa(num, str, 10);
|
||||
USART_SendStr(str);
|
||||
}
|
||||
24
firmware/src/usart.h
Normal file
24
firmware/src/usart.h
Normal file
@ -0,0 +1,24 @@
|
||||
#if !defined(_USART_H_)
|
||||
#define _USART_H_
|
||||
|
||||
#include "defs.h"
|
||||
|
||||
#define BAUD 9600
|
||||
#define RX_BUFFER_SIZE 32
|
||||
#define EOT 0x04
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdbool.h>
|
||||
#include <avr/io.h>
|
||||
#include <avr/interrupt.h>
|
||||
#include <util/setbaud.h>
|
||||
|
||||
void USART_Init();
|
||||
void USART_SendChar(char c);
|
||||
void USART_SendStr(char *str);
|
||||
void USART_SendInt16(int16_t num);
|
||||
void USART_SetReceiveHandler(void (*handler)(volatile char *rx_buffer));
|
||||
void USART_OnReceivePacketHandler(void);
|
||||
|
||||
|
||||
#endif // _USART_H_
|
||||
47
firmware/src/ws2812_config.h
Normal file
47
firmware/src/ws2812_config.h
Normal file
@ -0,0 +1,47 @@
|
||||
/*
|
||||
* light_ws2812_config.h
|
||||
*
|
||||
* v2.4 - Nov 27, 2016
|
||||
*
|
||||
* User Configuration file for the light_ws2812_lib
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#ifndef WS2812_CONFIG_H_
|
||||
#define WS2812_CONFIG_H_
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
// Define Reset time in µs.
|
||||
//
|
||||
// This is the time the library spends waiting after writing the data.
|
||||
//
|
||||
// WS2813 needs 300 µs reset time
|
||||
// WS2812 and clones only need 50 µs
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define ws2812_resettime 300
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
// Define I/O pin
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
#define ws2812_port D // Data port
|
||||
#define ws2812_pin 7 // Data out pin
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
// Define interrupt behaviour
|
||||
//
|
||||
// Set to 1 if you want the library to handle interrupt toggling
|
||||
// (i.e. turning off interrupts when sending data and reverting back after).
|
||||
// Set to 0 if you need to allow interrupts (can introduce flickering!).
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define ws2812_interrupt_handling 1
|
||||
|
||||
#include "defs.h"
|
||||
|
||||
#endif /* WS2812_CONFIG_H_ */
|
||||
48
firmware/src/ws2812b.c
Normal file
48
firmware/src/ws2812b.c
Normal file
@ -0,0 +1,48 @@
|
||||
#include "ws2812b.h"
|
||||
#include <avr/cpufunc.h>
|
||||
|
||||
#define LEDS_COUNT 8
|
||||
#define PACKET_SIZE LEDS_COUNT * 24
|
||||
|
||||
void WS2812_SendRGB(uint8_t r, uint8_t g, uint8_t b) {
|
||||
uint8_t packet[PACKET_SIZE] = {0};
|
||||
uint8_t i = 0, j = 0, k = 7;
|
||||
uint8_t color = g;
|
||||
|
||||
do {
|
||||
if (j == 8) {
|
||||
k = 7;
|
||||
color = r;
|
||||
}
|
||||
|
||||
if (j == 16) {
|
||||
k = 7;
|
||||
color = b;
|
||||
}
|
||||
|
||||
if (j == 24) {
|
||||
j = 7;
|
||||
j = 0;
|
||||
color = g;
|
||||
}
|
||||
|
||||
if ((color >> k) & 0x01) {
|
||||
packet[i] = 0b110;
|
||||
} else {
|
||||
packet[i] = 0b100;
|
||||
}
|
||||
|
||||
j++;
|
||||
k--;
|
||||
} while (++i < PACKET_SIZE);
|
||||
|
||||
i = 0;
|
||||
|
||||
cli();
|
||||
|
||||
do {
|
||||
SPI_SendByte(packet[i]);
|
||||
} while (++i < PACKET_SIZE);
|
||||
|
||||
sei();
|
||||
}
|
||||
10
firmware/src/ws2812b.h
Normal file
10
firmware/src/ws2812b.h
Normal file
@ -0,0 +1,10 @@
|
||||
#if !defined(_WS2812B_H_)
|
||||
#define _WS2812B_H_
|
||||
|
||||
#include <avr/io.h>
|
||||
#include <avr/interrupt.h>
|
||||
#include "spi.h"
|
||||
|
||||
void WS2812_SendRGB(uint8_t r, uint8_t g, uint8_t b);
|
||||
|
||||
#endif // _USART_H_
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
2
hardware/atmega8a_rgb-night-light.kicad_pcb
Executable file
2
hardware/atmega8a_rgb-night-light.kicad_pcb
Executable file
@ -0,0 +1,2 @@
|
||||
(kicad_pcb (version 20241229) (generator "pcbnew") (generator_version "9.0")
|
||||
)
|
||||
130
hardware/atmega8a_rgb-night-light.kicad_prl
Executable file
130
hardware/atmega8a_rgb-night-light.kicad_prl
Executable file
@ -0,0 +1,130 @@
|
||||
{
|
||||
"board": {
|
||||
"active_layer": 0,
|
||||
"active_layer_preset": "All Layers",
|
||||
"auto_track_width": true,
|
||||
"hidden_netclasses": [],
|
||||
"hidden_nets": [],
|
||||
"high_contrast_mode": 0,
|
||||
"net_color_mode": 1,
|
||||
"opacity": {
|
||||
"images": 0.6,
|
||||
"pads": 1.0,
|
||||
"shapes": 1.0,
|
||||
"tracks": 1.0,
|
||||
"vias": 1.0,
|
||||
"zones": 0.6
|
||||
},
|
||||
"selection_filter": {
|
||||
"dimensions": true,
|
||||
"footprints": true,
|
||||
"graphics": true,
|
||||
"keepouts": true,
|
||||
"lockedItems": false,
|
||||
"otherItems": true,
|
||||
"pads": true,
|
||||
"text": true,
|
||||
"tracks": true,
|
||||
"vias": true,
|
||||
"zones": true
|
||||
},
|
||||
"visible_items": [
|
||||
"vias",
|
||||
"footprint_text",
|
||||
"footprint_anchors",
|
||||
"ratsnest",
|
||||
"grid",
|
||||
"footprints_front",
|
||||
"footprints_back",
|
||||
"footprint_values",
|
||||
"footprint_references",
|
||||
"tracks",
|
||||
"drc_errors",
|
||||
"drawing_sheet",
|
||||
"bitmaps",
|
||||
"pads",
|
||||
"zones",
|
||||
"drc_warnings",
|
||||
"locked_item_shadows",
|
||||
"conflict_shadows",
|
||||
"shapes"
|
||||
],
|
||||
"visible_layers": "ffffffff_ffffffff_ffffffff_ffffffff",
|
||||
"zone_display_mode": 0
|
||||
},
|
||||
"git": {
|
||||
"repo_type": "",
|
||||
"repo_username": "",
|
||||
"ssh_key": ""
|
||||
},
|
||||
"meta": {
|
||||
"filename": "atmega8a_rgb-night-light.kicad_prl",
|
||||
"version": 5
|
||||
},
|
||||
"net_inspector_panel": {
|
||||
"col_hidden": [
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false
|
||||
],
|
||||
"col_order": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
6,
|
||||
7,
|
||||
8,
|
||||
9
|
||||
],
|
||||
"col_widths": [
|
||||
162,
|
||||
147,
|
||||
91,
|
||||
67,
|
||||
91,
|
||||
91,
|
||||
91,
|
||||
71,
|
||||
91,
|
||||
91
|
||||
],
|
||||
"custom_group_rules": [],
|
||||
"expanded_rows": [],
|
||||
"filter_by_net_name": true,
|
||||
"filter_by_netclass": true,
|
||||
"filter_text": "",
|
||||
"group_by_constraint": false,
|
||||
"group_by_netclass": false,
|
||||
"show_unconnected_nets": false,
|
||||
"show_zero_pad_nets": false,
|
||||
"sort_ascending": true,
|
||||
"sorting_column": 0
|
||||
},
|
||||
"open_jobsets": [],
|
||||
"project": {
|
||||
"files": []
|
||||
},
|
||||
"schematic": {
|
||||
"selection_filter": {
|
||||
"graphics": true,
|
||||
"images": true,
|
||||
"labels": true,
|
||||
"lockedItems": false,
|
||||
"otherItems": true,
|
||||
"pins": true,
|
||||
"symbols": true,
|
||||
"text": true,
|
||||
"wires": true
|
||||
}
|
||||
}
|
||||
}
|
||||
618
hardware/atmega8a_rgb-night-light.kicad_pro
Executable file
618
hardware/atmega8a_rgb-night-light.kicad_pro
Executable file
@ -0,0 +1,618 @@
|
||||
{
|
||||
"board": {
|
||||
"3dviewports": [],
|
||||
"design_settings": {
|
||||
"defaults": {
|
||||
"apply_defaults_to_fp_fields": false,
|
||||
"apply_defaults_to_fp_shapes": false,
|
||||
"apply_defaults_to_fp_text": false,
|
||||
"board_outline_line_width": 0.05,
|
||||
"copper_line_width": 0.2,
|
||||
"copper_text_italic": false,
|
||||
"copper_text_size_h": 1.5,
|
||||
"copper_text_size_v": 1.5,
|
||||
"copper_text_thickness": 0.3,
|
||||
"copper_text_upright": false,
|
||||
"courtyard_line_width": 0.05,
|
||||
"dimension_precision": 4,
|
||||
"dimension_units": 3,
|
||||
"dimensions": {
|
||||
"arrow_length": 1270000,
|
||||
"extension_offset": 500000,
|
||||
"keep_text_aligned": true,
|
||||
"suppress_zeroes": true,
|
||||
"text_position": 0,
|
||||
"units_format": 0
|
||||
},
|
||||
"fab_line_width": 0.1,
|
||||
"fab_text_italic": false,
|
||||
"fab_text_size_h": 1.0,
|
||||
"fab_text_size_v": 1.0,
|
||||
"fab_text_thickness": 0.15,
|
||||
"fab_text_upright": false,
|
||||
"other_line_width": 0.1,
|
||||
"other_text_italic": false,
|
||||
"other_text_size_h": 1.0,
|
||||
"other_text_size_v": 1.0,
|
||||
"other_text_thickness": 0.15,
|
||||
"other_text_upright": false,
|
||||
"pads": {
|
||||
"drill": 0.8,
|
||||
"height": 1.27,
|
||||
"width": 2.54
|
||||
},
|
||||
"silk_line_width": 0.1,
|
||||
"silk_text_italic": false,
|
||||
"silk_text_size_h": 1.0,
|
||||
"silk_text_size_v": 1.0,
|
||||
"silk_text_thickness": 0.1,
|
||||
"silk_text_upright": false,
|
||||
"zones": {
|
||||
"min_clearance": 0.5
|
||||
}
|
||||
},
|
||||
"diff_pair_dimensions": [],
|
||||
"drc_exclusions": [],
|
||||
"meta": {
|
||||
"version": 2
|
||||
},
|
||||
"rule_severities": {
|
||||
"annular_width": "error",
|
||||
"clearance": "error",
|
||||
"connection_width": "warning",
|
||||
"copper_edge_clearance": "error",
|
||||
"copper_sliver": "warning",
|
||||
"courtyards_overlap": "error",
|
||||
"creepage": "error",
|
||||
"diff_pair_gap_out_of_range": "error",
|
||||
"diff_pair_uncoupled_length_too_long": "error",
|
||||
"drill_out_of_range": "error",
|
||||
"duplicate_footprints": "warning",
|
||||
"extra_footprint": "warning",
|
||||
"footprint": "error",
|
||||
"footprint_filters_mismatch": "ignore",
|
||||
"footprint_symbol_mismatch": "warning",
|
||||
"footprint_type_mismatch": "ignore",
|
||||
"hole_clearance": "error",
|
||||
"hole_to_hole": "warning",
|
||||
"holes_co_located": "warning",
|
||||
"invalid_outline": "error",
|
||||
"isolated_copper": "warning",
|
||||
"item_on_disabled_layer": "error",
|
||||
"items_not_allowed": "error",
|
||||
"length_out_of_range": "error",
|
||||
"lib_footprint_issues": "warning",
|
||||
"lib_footprint_mismatch": "warning",
|
||||
"malformed_courtyard": "error",
|
||||
"microvia_drill_out_of_range": "error",
|
||||
"mirrored_text_on_front_layer": "warning",
|
||||
"missing_courtyard": "ignore",
|
||||
"missing_footprint": "warning",
|
||||
"net_conflict": "warning",
|
||||
"nonmirrored_text_on_back_layer": "warning",
|
||||
"npth_inside_courtyard": "ignore",
|
||||
"padstack": "warning",
|
||||
"pth_inside_courtyard": "ignore",
|
||||
"shorting_items": "error",
|
||||
"silk_edge_clearance": "warning",
|
||||
"silk_over_copper": "warning",
|
||||
"silk_overlap": "warning",
|
||||
"skew_out_of_range": "error",
|
||||
"solder_mask_bridge": "error",
|
||||
"starved_thermal": "error",
|
||||
"text_height": "warning",
|
||||
"text_on_edge_cuts": "error",
|
||||
"text_thickness": "warning",
|
||||
"through_hole_pad_without_hole": "error",
|
||||
"too_many_vias": "error",
|
||||
"track_angle": "error",
|
||||
"track_dangling": "warning",
|
||||
"track_segment_length": "error",
|
||||
"track_width": "error",
|
||||
"tracks_crossing": "error",
|
||||
"unconnected_items": "error",
|
||||
"unresolved_variable": "error",
|
||||
"via_dangling": "warning",
|
||||
"zones_intersect": "error"
|
||||
},
|
||||
"rules": {
|
||||
"max_error": 0.005,
|
||||
"min_clearance": 0.0,
|
||||
"min_connection": 0.0,
|
||||
"min_copper_edge_clearance": 0.5,
|
||||
"min_groove_width": 0.0,
|
||||
"min_hole_clearance": 0.25,
|
||||
"min_hole_to_hole": 0.25,
|
||||
"min_microvia_diameter": 0.2,
|
||||
"min_microvia_drill": 0.1,
|
||||
"min_resolved_spokes": 2,
|
||||
"min_silk_clearance": 0.0,
|
||||
"min_text_height": 0.8,
|
||||
"min_text_thickness": 0.08,
|
||||
"min_through_hole_diameter": 0.3,
|
||||
"min_track_width": 0.0,
|
||||
"min_via_annular_width": 0.1,
|
||||
"min_via_diameter": 0.5,
|
||||
"solder_mask_to_copper_clearance": 0.0,
|
||||
"use_height_for_length_calcs": true
|
||||
},
|
||||
"teardrop_options": [
|
||||
{
|
||||
"td_onpthpad": true,
|
||||
"td_onroundshapesonly": false,
|
||||
"td_onsmdpad": true,
|
||||
"td_ontrackend": false,
|
||||
"td_onvia": true
|
||||
}
|
||||
],
|
||||
"teardrop_parameters": [
|
||||
{
|
||||
"td_allow_use_two_tracks": true,
|
||||
"td_curve_segcount": 0,
|
||||
"td_height_ratio": 1.0,
|
||||
"td_length_ratio": 0.5,
|
||||
"td_maxheight": 2.0,
|
||||
"td_maxlen": 1.0,
|
||||
"td_on_pad_in_zone": false,
|
||||
"td_target_name": "td_round_shape",
|
||||
"td_width_to_size_filter_ratio": 0.9
|
||||
},
|
||||
{
|
||||
"td_allow_use_two_tracks": true,
|
||||
"td_curve_segcount": 0,
|
||||
"td_height_ratio": 1.0,
|
||||
"td_length_ratio": 0.5,
|
||||
"td_maxheight": 2.0,
|
||||
"td_maxlen": 1.0,
|
||||
"td_on_pad_in_zone": false,
|
||||
"td_target_name": "td_rect_shape",
|
||||
"td_width_to_size_filter_ratio": 0.9
|
||||
},
|
||||
{
|
||||
"td_allow_use_two_tracks": true,
|
||||
"td_curve_segcount": 0,
|
||||
"td_height_ratio": 1.0,
|
||||
"td_length_ratio": 0.5,
|
||||
"td_maxheight": 2.0,
|
||||
"td_maxlen": 1.0,
|
||||
"td_on_pad_in_zone": false,
|
||||
"td_target_name": "td_track_end",
|
||||
"td_width_to_size_filter_ratio": 0.9
|
||||
}
|
||||
],
|
||||
"track_widths": [],
|
||||
"tuning_pattern_settings": {
|
||||
"diff_pair_defaults": {
|
||||
"corner_radius_percentage": 80,
|
||||
"corner_style": 1,
|
||||
"max_amplitude": 1.0,
|
||||
"min_amplitude": 0.2,
|
||||
"single_sided": false,
|
||||
"spacing": 1.0
|
||||
},
|
||||
"diff_pair_skew_defaults": {
|
||||
"corner_radius_percentage": 80,
|
||||
"corner_style": 1,
|
||||
"max_amplitude": 1.0,
|
||||
"min_amplitude": 0.2,
|
||||
"single_sided": false,
|
||||
"spacing": 0.6
|
||||
},
|
||||
"single_track_defaults": {
|
||||
"corner_radius_percentage": 80,
|
||||
"corner_style": 1,
|
||||
"max_amplitude": 1.0,
|
||||
"min_amplitude": 0.2,
|
||||
"single_sided": false,
|
||||
"spacing": 0.6
|
||||
}
|
||||
},
|
||||
"via_dimensions": [],
|
||||
"zones_allow_external_fillets": false
|
||||
},
|
||||
"ipc2581": {
|
||||
"dist": "",
|
||||
"distpn": "",
|
||||
"internal_id": "",
|
||||
"mfg": "",
|
||||
"mpn": ""
|
||||
},
|
||||
"layer_pairs": [],
|
||||
"layer_presets": [],
|
||||
"viewports": []
|
||||
},
|
||||
"boards": [],
|
||||
"cvpcb": {
|
||||
"equivalence_files": []
|
||||
},
|
||||
"erc": {
|
||||
"erc_exclusions": [],
|
||||
"meta": {
|
||||
"version": 0
|
||||
},
|
||||
"pin_map": [
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
2,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
1,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
2,
|
||||
1,
|
||||
1,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
2,
|
||||
1,
|
||||
2,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
2,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
2,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
0,
|
||||
2,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
0,
|
||||
2,
|
||||
0,
|
||||
0,
|
||||
2
|
||||
],
|
||||
[
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
2
|
||||
]
|
||||
],
|
||||
"rule_severities": {
|
||||
"bus_definition_conflict": "error",
|
||||
"bus_entry_needed": "error",
|
||||
"bus_to_bus_conflict": "error",
|
||||
"bus_to_net_conflict": "error",
|
||||
"different_unit_footprint": "error",
|
||||
"different_unit_net": "error",
|
||||
"duplicate_reference": "error",
|
||||
"duplicate_sheet_names": "error",
|
||||
"endpoint_off_grid": "warning",
|
||||
"extra_units": "error",
|
||||
"footprint_filter": "ignore",
|
||||
"footprint_link_issues": "warning",
|
||||
"four_way_junction": "ignore",
|
||||
"global_label_dangling": "warning",
|
||||
"hier_label_mismatch": "error",
|
||||
"label_dangling": "error",
|
||||
"label_multiple_wires": "warning",
|
||||
"lib_symbol_issues": "warning",
|
||||
"lib_symbol_mismatch": "warning",
|
||||
"missing_bidi_pin": "warning",
|
||||
"missing_input_pin": "warning",
|
||||
"missing_power_pin": "error",
|
||||
"missing_unit": "warning",
|
||||
"multiple_net_names": "warning",
|
||||
"net_not_bus_member": "warning",
|
||||
"no_connect_connected": "warning",
|
||||
"no_connect_dangling": "warning",
|
||||
"pin_not_connected": "error",
|
||||
"pin_not_driven": "error",
|
||||
"pin_to_pin": "warning",
|
||||
"power_pin_not_driven": "error",
|
||||
"same_local_global_label": "warning",
|
||||
"similar_label_and_power": "warning",
|
||||
"similar_labels": "warning",
|
||||
"similar_power": "warning",
|
||||
"simulation_model_issue": "ignore",
|
||||
"single_global_label": "ignore",
|
||||
"unannotated": "error",
|
||||
"unconnected_wire_endpoint": "warning",
|
||||
"unit_value_mismatch": "error",
|
||||
"unresolved_variable": "error",
|
||||
"wire_dangling": "error"
|
||||
}
|
||||
},
|
||||
"libraries": {
|
||||
"pinned_footprint_libs": [],
|
||||
"pinned_symbol_libs": []
|
||||
},
|
||||
"meta": {
|
||||
"filename": "atmega8a_rgb-night-light.kicad_pro",
|
||||
"version": 3
|
||||
},
|
||||
"net_settings": {
|
||||
"classes": [
|
||||
{
|
||||
"bus_width": 12,
|
||||
"clearance": 0.2,
|
||||
"diff_pair_gap": 0.25,
|
||||
"diff_pair_via_gap": 0.25,
|
||||
"diff_pair_width": 0.2,
|
||||
"line_style": 0,
|
||||
"microvia_diameter": 0.3,
|
||||
"microvia_drill": 0.1,
|
||||
"name": "Default",
|
||||
"pcb_color": "rgba(0, 0, 0, 0.000)",
|
||||
"priority": 2147483647,
|
||||
"schematic_color": "rgba(0, 0, 0, 0.000)",
|
||||
"track_width": 0.2,
|
||||
"via_diameter": 0.6,
|
||||
"via_drill": 0.3,
|
||||
"wire_width": 6
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"version": 4
|
||||
},
|
||||
"net_colors": null,
|
||||
"netclass_assignments": null,
|
||||
"netclass_patterns": []
|
||||
},
|
||||
"pcbnew": {
|
||||
"last_paths": {
|
||||
"gencad": "",
|
||||
"idf": "",
|
||||
"netlist": "",
|
||||
"plot": "",
|
||||
"pos_files": "",
|
||||
"specctra_dsn": "",
|
||||
"step": "",
|
||||
"svg": "",
|
||||
"vrml": ""
|
||||
},
|
||||
"page_layout_descr_file": ""
|
||||
},
|
||||
"schematic": {
|
||||
"annotate_start_num": 0,
|
||||
"bom_export_filename": "${PROJECTNAME}.csv",
|
||||
"bom_fmt_presets": [],
|
||||
"bom_fmt_settings": {
|
||||
"field_delimiter": ",",
|
||||
"keep_line_breaks": false,
|
||||
"keep_tabs": false,
|
||||
"name": "CSV",
|
||||
"ref_delimiter": ",",
|
||||
"ref_range_delimiter": "",
|
||||
"string_delimiter": "\""
|
||||
},
|
||||
"bom_presets": [],
|
||||
"bom_settings": {
|
||||
"exclude_dnp": false,
|
||||
"fields_ordered": [
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Reference",
|
||||
"name": "Reference",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Qty",
|
||||
"name": "${QUANTITY}",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": true,
|
||||
"label": "Value",
|
||||
"name": "Value",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": true,
|
||||
"label": "DNP",
|
||||
"name": "${DNP}",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": true,
|
||||
"label": "Exclude from BOM",
|
||||
"name": "${EXCLUDE_FROM_BOM}",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": true,
|
||||
"label": "Exclude from Board",
|
||||
"name": "${EXCLUDE_FROM_BOARD}",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": true,
|
||||
"label": "Footprint",
|
||||
"name": "Footprint",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Datasheet",
|
||||
"name": "Datasheet",
|
||||
"show": true
|
||||
}
|
||||
],
|
||||
"filter_string": "",
|
||||
"group_symbols": true,
|
||||
"include_excluded_from_bom": true,
|
||||
"name": "Default Editing",
|
||||
"sort_asc": true,
|
||||
"sort_field": "Reference"
|
||||
},
|
||||
"connection_grid_size": 50.0,
|
||||
"drawing": {
|
||||
"dashed_lines_dash_length_ratio": 12.0,
|
||||
"dashed_lines_gap_length_ratio": 3.0,
|
||||
"default_line_thickness": 6.0,
|
||||
"default_text_size": 50.0,
|
||||
"field_names": [],
|
||||
"intersheets_ref_own_page": false,
|
||||
"intersheets_ref_prefix": "",
|
||||
"intersheets_ref_short": false,
|
||||
"intersheets_ref_show": false,
|
||||
"intersheets_ref_suffix": "",
|
||||
"junction_size_choice": 3,
|
||||
"label_size_ratio": 0.375,
|
||||
"operating_point_overlay_i_precision": 3,
|
||||
"operating_point_overlay_i_range": "~A",
|
||||
"operating_point_overlay_v_precision": 3,
|
||||
"operating_point_overlay_v_range": "~V",
|
||||
"overbar_offset_ratio": 1.23,
|
||||
"pin_symbol_size": 25.0,
|
||||
"text_offset_ratio": 0.15
|
||||
},
|
||||
"legacy_lib_dir": "",
|
||||
"legacy_lib_list": [],
|
||||
"meta": {
|
||||
"version": 1
|
||||
},
|
||||
"net_format_name": "",
|
||||
"page_layout_descr_file": "",
|
||||
"plot_directory": "C:/Users/serzh/Desktop/",
|
||||
"space_save_all_events": true,
|
||||
"spice_current_sheet_as_root": false,
|
||||
"spice_external_command": "spice \"%I\"",
|
||||
"spice_model_current_sheet_as_root": true,
|
||||
"spice_save_all_currents": false,
|
||||
"spice_save_all_dissipations": false,
|
||||
"spice_save_all_voltages": false,
|
||||
"subpart_first_id": 65,
|
||||
"subpart_id_separator": 0
|
||||
},
|
||||
"sheets": [
|
||||
[
|
||||
"6800ce2e-e6e2-46da-a080-1bcfae5c58fe",
|
||||
"Root"
|
||||
]
|
||||
],
|
||||
"text_variables": {}
|
||||
}
|
||||
8904
hardware/atmega8a_rgb-night-light.kicad_sch
Executable file
8904
hardware/atmega8a_rgb-night-light.kicad_sch
Executable file
File diff suppressed because it is too large
Load Diff
519
hardware/ch340_adapter_smd-F_Cu.svg
Executable file
519
hardware/ch340_adapter_smd-F_Cu.svg
Executable file
@ -0,0 +1,519 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
version="1.1"
|
||||
width="297.0022mm" height="210.0072mm" viewBox="0.0000 0.0000 297.0022 210.0072">
|
||||
<title>SVG Image created as ch340_adapter_smd-F_Cu.svg date 2026/04/05 18:48:22 </title>
|
||||
<desc>Image generated by PCBNEW </desc>
|
||||
<g style="fill:#000000; fill-opacity:1.0000;stroke:#000000; stroke-opacity:1.0000;
|
||||
stroke-linecap:round; stroke-linejoin:round;"
|
||||
transform="translate(0 0) scale(1 1)">
|
||||
<path style="fill:#000000; fill-opacity:1.0000; stroke:none;fill-rule:evenodd;"
|
||||
d="M 150.8522,108.1000
|
||||
150.9479,108.0810
|
||||
151.0290,108.0268
|
||||
151.0832,107.9457
|
||||
151.1022,107.8500
|
||||
151.1022,107.0250
|
||||
151.0832,106.9293
|
||||
151.0290,106.8482
|
||||
150.9479,106.7940
|
||||
150.8522,106.7750
|
||||
149.5522,106.7750
|
||||
149.4565,106.7940
|
||||
149.3754,106.8482
|
||||
149.3212,106.9293
|
||||
149.3022,107.0250
|
||||
149.3022,107.8500
|
||||
149.3212,107.9457
|
||||
149.3754,108.0268
|
||||
149.4565,108.0810
|
||||
149.5522,108.1000
|
||||
Z" />
|
||||
<path style="fill:#000000; fill-opacity:1.0000; stroke:none;fill-rule:evenodd;"
|
||||
d="M 150.8522,111.2250
|
||||
150.9479,111.2060
|
||||
151.0290,111.1518
|
||||
151.0832,111.0707
|
||||
151.1022,110.9750
|
||||
151.1022,110.1500
|
||||
151.0832,110.0543
|
||||
151.0290,109.9732
|
||||
150.9479,109.9190
|
||||
150.8522,109.9000
|
||||
149.5522,109.9000
|
||||
149.4565,109.9190
|
||||
149.3754,109.9732
|
||||
149.3212,110.0543
|
||||
149.3022,110.1500
|
||||
149.3022,110.9750
|
||||
149.3212,111.0707
|
||||
149.3754,111.1518
|
||||
149.4565,111.2060
|
||||
149.5522,111.2250
|
||||
Z" />
|
||||
<path style="fill:#000000; fill-opacity:1.0000; stroke:none;fill-rule:evenodd;"
|
||||
d="M 142.3022,102.7500
|
||||
142.2832,102.6543
|
||||
142.2290,102.5732
|
||||
142.1479,102.5190
|
||||
142.0522,102.5000
|
||||
141.2272,102.5000
|
||||
141.1315,102.5190
|
||||
141.0504,102.5732
|
||||
140.9962,102.6543
|
||||
140.9772,102.7500
|
||||
140.9772,104.0500
|
||||
140.9962,104.1457
|
||||
141.0504,104.2268
|
||||
141.1315,104.2810
|
||||
141.2272,104.3000
|
||||
142.0522,104.3000
|
||||
142.1479,104.2810
|
||||
142.2290,104.2268
|
||||
142.2832,104.1457
|
||||
142.3022,104.0500
|
||||
Z" />
|
||||
<path style="fill:#000000; fill-opacity:1.0000; stroke:none;fill-rule:evenodd;"
|
||||
d="M 145.4272,102.7500
|
||||
145.4082,102.6543
|
||||
145.3540,102.5732
|
||||
145.2729,102.5190
|
||||
145.1772,102.5000
|
||||
144.3522,102.5000
|
||||
144.2565,102.5190
|
||||
144.1754,102.5732
|
||||
144.1212,102.6543
|
||||
144.1022,102.7500
|
||||
144.1022,104.0500
|
||||
144.1212,104.1457
|
||||
144.1754,104.2268
|
||||
144.2565,104.2810
|
||||
144.3522,104.3000
|
||||
145.1772,104.3000
|
||||
145.2729,104.2810
|
||||
145.3540,104.2268
|
||||
145.4082,104.1457
|
||||
145.4272,104.0500
|
||||
Z" />
|
||||
<path style="fill:#000000; fill-opacity:1.0000; stroke:none;fill-rule:evenodd;"
|
||||
d="M 148.1522,111.9125
|
||||
148.2096,111.9011
|
||||
148.2583,111.8686
|
||||
148.2908,111.8199
|
||||
148.3022,111.7625
|
||||
148.3022,110.3875
|
||||
148.2908,110.3301
|
||||
148.2583,110.2814
|
||||
148.2096,110.2489
|
||||
148.1522,110.2375
|
||||
147.8522,110.2375
|
||||
147.7948,110.2489
|
||||
147.7461,110.2814
|
||||
147.7136,110.3301
|
||||
147.7022,110.3875
|
||||
147.7022,111.7625
|
||||
147.7136,111.8199
|
||||
147.7461,111.8686
|
||||
147.7948,111.9011
|
||||
147.8522,111.9125
|
||||
Z" />
|
||||
<path style="fill:#000000; fill-opacity:1.0000; stroke:none;fill-rule:evenodd;"
|
||||
d="M 147.1522,111.9125
|
||||
147.2096,111.9011
|
||||
147.2583,111.8686
|
||||
147.2908,111.8199
|
||||
147.3022,111.7625
|
||||
147.3022,110.3875
|
||||
147.2908,110.3301
|
||||
147.2583,110.2814
|
||||
147.2096,110.2489
|
||||
147.1522,110.2375
|
||||
146.8522,110.2375
|
||||
146.7948,110.2489
|
||||
146.7461,110.2814
|
||||
146.7136,110.3301
|
||||
146.7022,110.3875
|
||||
146.7022,111.7625
|
||||
146.7136,111.8199
|
||||
146.7461,111.8686
|
||||
146.7948,111.9011
|
||||
146.8522,111.9125
|
||||
Z" />
|
||||
<path style="fill:#000000; fill-opacity:1.0000; stroke:none;fill-rule:evenodd;"
|
||||
d="M 146.1522,111.9125
|
||||
146.2096,111.9011
|
||||
146.2583,111.8686
|
||||
146.2908,111.8199
|
||||
146.3022,111.7625
|
||||
146.3022,110.3875
|
||||
146.2908,110.3301
|
||||
146.2583,110.2814
|
||||
146.2096,110.2489
|
||||
146.1522,110.2375
|
||||
145.8522,110.2375
|
||||
145.7948,110.2489
|
||||
145.7461,110.2814
|
||||
145.7136,110.3301
|
||||
145.7022,110.3875
|
||||
145.7022,111.7625
|
||||
145.7136,111.8199
|
||||
145.7461,111.8686
|
||||
145.7948,111.9011
|
||||
145.8522,111.9125
|
||||
Z" />
|
||||
<path style="fill:#000000; fill-opacity:1.0000; stroke:none;fill-rule:evenodd;"
|
||||
d="M 145.1522,111.9125
|
||||
145.2096,111.9011
|
||||
145.2583,111.8686
|
||||
145.2908,111.8199
|
||||
145.3022,111.7625
|
||||
145.3022,110.3875
|
||||
145.2908,110.3301
|
||||
145.2583,110.2814
|
||||
145.2096,110.2489
|
||||
145.1522,110.2375
|
||||
144.8522,110.2375
|
||||
144.7948,110.2489
|
||||
144.7461,110.2814
|
||||
144.7136,110.3301
|
||||
144.7022,110.3875
|
||||
144.7022,111.7625
|
||||
144.7136,111.8199
|
||||
144.7461,111.8686
|
||||
144.7948,111.9011
|
||||
144.8522,111.9125
|
||||
Z" />
|
||||
<path style="fill:#000000; fill-opacity:1.0000; stroke:none;fill-rule:evenodd;"
|
||||
d="M 144.1522,111.9125
|
||||
144.2096,111.9011
|
||||
144.2583,111.8686
|
||||
144.2908,111.8199
|
||||
144.3022,111.7625
|
||||
144.3022,110.3875
|
||||
144.2908,110.3301
|
||||
144.2583,110.2814
|
||||
144.2096,110.2489
|
||||
144.1522,110.2375
|
||||
143.8522,110.2375
|
||||
143.7948,110.2489
|
||||
143.7461,110.2814
|
||||
143.7136,110.3301
|
||||
143.7022,110.3875
|
||||
143.7022,111.7625
|
||||
143.7136,111.8199
|
||||
143.7461,111.8686
|
||||
143.7948,111.9011
|
||||
143.8522,111.9125
|
||||
Z" />
|
||||
<path style="fill:#000000; fill-opacity:1.0000; stroke:none;fill-rule:evenodd;"
|
||||
d="M 144.1522,106.6375
|
||||
144.2096,106.6261
|
||||
144.2583,106.5936
|
||||
144.2908,106.5449
|
||||
144.3022,106.4875
|
||||
144.3022,105.1125
|
||||
144.2908,105.0551
|
||||
144.2583,105.0064
|
||||
144.2096,104.9739
|
||||
144.1522,104.9625
|
||||
143.8522,104.9625
|
||||
143.7948,104.9739
|
||||
143.7461,105.0064
|
||||
143.7136,105.0551
|
||||
143.7022,105.1125
|
||||
143.7022,106.4875
|
||||
143.7136,106.5449
|
||||
143.7461,106.5936
|
||||
143.7948,106.6261
|
||||
143.8522,106.6375
|
||||
Z" />
|
||||
<path style="fill:#000000; fill-opacity:1.0000; stroke:none;fill-rule:evenodd;"
|
||||
d="M 145.1522,106.6375
|
||||
145.2096,106.6261
|
||||
145.2583,106.5936
|
||||
145.2908,106.5449
|
||||
145.3022,106.4875
|
||||
145.3022,105.1125
|
||||
145.2908,105.0551
|
||||
145.2583,105.0064
|
||||
145.2096,104.9739
|
||||
145.1522,104.9625
|
||||
144.8522,104.9625
|
||||
144.7948,104.9739
|
||||
144.7461,105.0064
|
||||
144.7136,105.0551
|
||||
144.7022,105.1125
|
||||
144.7022,106.4875
|
||||
144.7136,106.5449
|
||||
144.7461,106.5936
|
||||
144.7948,106.6261
|
||||
144.8522,106.6375
|
||||
Z" />
|
||||
<path style="fill:#000000; fill-opacity:1.0000; stroke:none;fill-rule:evenodd;"
|
||||
d="M 146.1522,106.6375
|
||||
146.2096,106.6261
|
||||
146.2583,106.5936
|
||||
146.2908,106.5449
|
||||
146.3022,106.4875
|
||||
146.3022,105.1125
|
||||
146.2908,105.0551
|
||||
146.2583,105.0064
|
||||
146.2096,104.9739
|
||||
146.1522,104.9625
|
||||
145.8522,104.9625
|
||||
145.7948,104.9739
|
||||
145.7461,105.0064
|
||||
145.7136,105.0551
|
||||
145.7022,105.1125
|
||||
145.7022,106.4875
|
||||
145.7136,106.5449
|
||||
145.7461,106.5936
|
||||
145.7948,106.6261
|
||||
145.8522,106.6375
|
||||
Z" />
|
||||
<path style="fill:#000000; fill-opacity:1.0000; stroke:none;fill-rule:evenodd;"
|
||||
d="M 147.1522,106.6375
|
||||
147.2096,106.6261
|
||||
147.2583,106.5936
|
||||
147.2908,106.5449
|
||||
147.3022,106.4875
|
||||
147.3022,105.1125
|
||||
147.2908,105.0551
|
||||
147.2583,105.0064
|
||||
147.2096,104.9739
|
||||
147.1522,104.9625
|
||||
146.8522,104.9625
|
||||
146.7948,104.9739
|
||||
146.7461,105.0064
|
||||
146.7136,105.0551
|
||||
146.7022,105.1125
|
||||
146.7022,106.4875
|
||||
146.7136,106.5449
|
||||
146.7461,106.5936
|
||||
146.7948,106.6261
|
||||
146.8522,106.6375
|
||||
Z" />
|
||||
<path style="fill:#000000; fill-opacity:1.0000; stroke:none;fill-rule:evenodd;"
|
||||
d="M 148.1522,106.6375
|
||||
148.2096,106.6261
|
||||
148.2583,106.5936
|
||||
148.2908,106.5449
|
||||
148.3022,106.4875
|
||||
148.3022,105.1125
|
||||
148.2908,105.0551
|
||||
148.2583,105.0064
|
||||
148.2096,104.9739
|
||||
148.1522,104.9625
|
||||
147.8522,104.9625
|
||||
147.7948,104.9739
|
||||
147.7461,105.0064
|
||||
147.7136,105.0551
|
||||
147.7022,105.1125
|
||||
147.7022,106.4875
|
||||
147.7136,106.5449
|
||||
147.7461,106.5936
|
||||
147.7948,106.6261
|
||||
147.8522,106.6375
|
||||
Z" />
|
||||
<path style="fill:#000000; fill-opacity:1.0000; stroke:none;fill-rule:evenodd;"
|
||||
d="M 144.3522,109.4875
|
||||
147.6522,109.4875
|
||||
147.6522,107.3875
|
||||
144.3522,107.3875
|
||||
Z" />
|
||||
<path style="fill:#000000; fill-opacity:1.0000; stroke:none;fill-rule:evenodd;"
|
||||
d="M 139.9522,105.6050
|
||||
139.9522,107.3050
|
||||
141.6522,107.3050
|
||||
141.6522,105.6050
|
||||
Z" />
|
||||
</g>
|
||||
<g style="fill:#000000; fill-opacity:1.0000; stroke:none;">
|
||||
<circle cx="140.8022" cy="108.9950" r="0.8500" />
|
||||
<path style="fill:#000000; fill-opacity:1.0000; stroke:none;fill-rule:evenodd;"
|
||||
d="M 152.6522,103.0700
|
||||
152.6522,104.7700
|
||||
154.3522,104.7700
|
||||
154.3522,103.0700
|
||||
Z" />
|
||||
</g>
|
||||
<g style="fill:#000000; fill-opacity:1.0000; stroke:none;">
|
||||
<circle cx="153.5022" cy="106.4600" r="0.8500" />
|
||||
</g>
|
||||
<g style="fill:#000000; fill-opacity:1.0000; stroke:none;">
|
||||
<circle cx="153.5022" cy="109.0000" r="0.8500" />
|
||||
</g>
|
||||
<g style="fill:#000000; fill-opacity:1.0000; stroke:none;">
|
||||
<circle cx="153.5022" cy="111.5400" r="0.8500" />
|
||||
</g>
|
||||
<g style="fill:none;
|
||||
stroke:#000000; stroke-width:0.4000; stroke-opacity:1;
|
||||
stroke-linecap:round; stroke-linejoin:round;">
|
||||
<path d="M139.2022 112.3000
|
||||
L140.2022 113.3000
|
||||
" />
|
||||
<path d="M140.2022 113.3000
|
||||
L147.3022 113.3000
|
||||
" />
|
||||
<path d="M148.0022 112.6000
|
||||
L148.0022 111.0750
|
||||
" />
|
||||
<path d="M139.2022 107.2000
|
||||
L139.2022 112.3000
|
||||
" />
|
||||
<path d="M147.3022 113.3000
|
||||
L148.0022 112.6000
|
||||
" />
|
||||
<path d="M139.9472 106.4550
|
||||
L139.2022 107.2000
|
||||
" />
|
||||
<path d="M140.8022 106.4550
|
||||
L139.9472 106.4550
|
||||
" />
|
||||
<path d="M146.0022 111.0750
|
||||
L146.0022 108.4375
|
||||
" />
|
||||
<path d="M146.6022 102.8000
|
||||
L146.0022 103.4000
|
||||
" />
|
||||
<path d="M146.0022 103.4000
|
||||
L144.7647 103.4000
|
||||
" />
|
||||
<path d="M146.9022 103.5000
|
||||
L146.0022 104.4000
|
||||
" />
|
||||
<path d="M146.0022 104.4000
|
||||
L146.0022 105.8000
|
||||
" />
|
||||
<path d="M150.5422 103.5000
|
||||
L146.9022 103.5000
|
||||
" />
|
||||
<path d="M153.5022 106.4600
|
||||
L150.5422 103.5000
|
||||
" />
|
||||
<path d="M152.3222 103.9200
|
||||
L151.2022 102.8000
|
||||
" />
|
||||
<path d="M151.2022 102.8000
|
||||
L146.6022 102.8000
|
||||
" />
|
||||
<path d="M153.5022 103.9200
|
||||
L152.3222 103.9200
|
||||
" />
|
||||
<path d="M147.2022 104.2000
|
||||
L147.0022 104.4000
|
||||
" />
|
||||
<path d="M147.0022 104.4000
|
||||
L147.0022 105.8000
|
||||
" />
|
||||
<path d="M149.8022 104.2000
|
||||
L147.2022 104.2000
|
||||
" />
|
||||
<path d="M151.8022 107.3000
|
||||
L151.8022 106.2000
|
||||
" />
|
||||
<path d="M153.5022 109.0000
|
||||
L151.8022 107.3000
|
||||
" />
|
||||
<path d="M151.8022 106.2000
|
||||
L149.8022 104.2000
|
||||
" />
|
||||
</g>
|
||||
<g style="fill:none;
|
||||
stroke:#000000; stroke-width:0.6000; stroke-opacity:1;
|
||||
stroke-linecap:round; stroke-linejoin:round;">
|
||||
<path d="M142.8022 105.0000
|
||||
L141.6397 103.8375
|
||||
" />
|
||||
<path d="M144.2397 108.4375
|
||||
L142.8022 107.0000
|
||||
" />
|
||||
<path d="M142.8022 107.0000
|
||||
L142.8022 105.0000
|
||||
" />
|
||||
<path d="M146.0022 108.4375
|
||||
L144.2397 108.4375
|
||||
" />
|
||||
<path d="M141.6397 103.8375
|
||||
L141.6397 103.4000
|
||||
" />
|
||||
</g>
|
||||
<g style="fill:none;
|
||||
stroke:#000000; stroke-width:0.4000; stroke-opacity:1;
|
||||
stroke-linecap:round; stroke-linejoin:round;">
|
||||
<path d="M147.0022 111.8000
|
||||
L146.2022 112.6000
|
||||
" />
|
||||
<path d="M147.0022 111.0750
|
||||
L147.0022 111.8000
|
||||
" />
|
||||
<path d="M146.2022 112.6000
|
||||
L141.2022 112.6000
|
||||
" />
|
||||
<path d="M145.0022 103.6375
|
||||
L144.7647 103.4000
|
||||
" />
|
||||
<path d="M145.0022 105.8000
|
||||
L145.0022 103.6375
|
||||
" />
|
||||
</g>
|
||||
<g style="fill:none;
|
||||
stroke:#000000; stroke-width:0.6000; stroke-opacity:1;
|
||||
stroke-linecap:round; stroke-linejoin:round;">
|
||||
<path d="M148.0772 108.4375
|
||||
L146.0022 108.4375
|
||||
" />
|
||||
<path d="M150.2022 110.5625
|
||||
L148.0772 108.4375
|
||||
" />
|
||||
</g>
|
||||
<g style="fill:none;
|
||||
stroke:#000000; stroke-width:0.4000; stroke-opacity:1;
|
||||
stroke-linecap:round; stroke-linejoin:round;">
|
||||
<path d="M148.4022 105.8000
|
||||
L148.0022 105.8000
|
||||
" />
|
||||
<path d="M150.0397 107.4375
|
||||
L148.4022 105.8000
|
||||
" />
|
||||
<path d="M150.2022 107.4375
|
||||
L150.0397 107.4375
|
||||
" />
|
||||
</g>
|
||||
<g style="fill:none;
|
||||
stroke:#000000; stroke-width:0.6000; stroke-opacity:1;
|
||||
stroke-linecap:round; stroke-linejoin:round;">
|
||||
<path d="M150.7647 110.5625
|
||||
L150.2022 110.5625
|
||||
" />
|
||||
<path d="M151.7422 111.5400
|
||||
L150.7647 110.5625
|
||||
" />
|
||||
<path d="M153.5022 111.5400
|
||||
L151.7422 111.5400
|
||||
" />
|
||||
</g>
|
||||
<g style="fill:none;
|
||||
stroke:#000000; stroke-width:0.4000; stroke-opacity:1;
|
||||
stroke-linecap:round; stroke-linejoin:round;">
|
||||
<path d="M140.8022 112.2000
|
||||
L141.2022 112.6000
|
||||
" />
|
||||
<path d="M140.8022 108.9950
|
||||
L140.8022 112.2000
|
||||
" />
|
||||
<path style="fill:none;
|
||||
stroke:#000000; stroke-width:0.2000; stroke-opacity:1;
|
||||
stroke-linecap:round; stroke-linejoin:round;fill:none"
|
||||
d="M 155.9022,101.8000
|
||||
138.3022,101.8000
|
||||
138.3022,114.0000
|
||||
155.9022,114.0000
|
||||
Z" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 12 KiB |
1
hardware/fp-info-cache
Executable file
1
hardware/fp-info-cache
Executable file
@ -0,0 +1 @@
|
||||
0
|
||||
BIN
hardware/lut.pdf
Executable file
BIN
hardware/lut.pdf
Executable file
Binary file not shown.
766
hardware/lut.svg
Executable file
766
hardware/lut.svg
Executable file
@ -0,0 +1,766 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="210mm"
|
||||
height="297mm"
|
||||
viewBox="0 0 210 297"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
xml:space="preserve"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
|
||||
sodipodi:docname="lut.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:zoom="2.0485264"
|
||||
inkscape:cx="152.3046"
|
||||
inkscape:cy="80.301624"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1009"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" /><defs
|
||||
id="defs1" /><g
|
||||
inkscape:label="Слой 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"><g
|
||||
id="g1"
|
||||
transform="rotate(90,126.16821,9.833668)"><g
|
||||
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="g16"><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 150.8522,108.1 0.0957,-0.019 0.0811,-0.0542 0.0542,-0.0811 0.019,-0.0957 v -0.825 l -0.019,-0.0957 -0.0542,-0.0811 -0.0811,-0.0542 -0.0957,-0.019 h -1.3 l -0.0957,0.019 -0.0811,0.0542 -0.0542,0.0811 -0.019,0.0957 v 0.825 l 0.019,0.0957 0.0542,0.0811 0.0811,0.0542 0.0957,0.019 z"
|
||||
id="path1" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 150.8522,111.225 0.0957,-0.019 0.0811,-0.0542 0.0542,-0.0811 0.019,-0.0957 v -0.825 l -0.019,-0.0957 -0.0542,-0.0811 -0.0811,-0.0542 -0.0957,-0.019 h -1.3 l -0.0957,0.019 -0.0811,0.0542 -0.0542,0.0811 -0.019,0.0957 v 0.825 l 0.019,0.0957 0.0542,0.0811 0.0811,0.0542 0.0957,0.019 z"
|
||||
id="path2" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 142.3022,102.75 -0.019,-0.0957 -0.0542,-0.0811 -0.0811,-0.0542 -0.0957,-0.019 h -0.825 l -0.0957,0.019 -0.0811,0.0542 -0.0542,0.0811 -0.019,0.0957 v 1.3 l 0.019,0.0957 0.0542,0.0811 0.0811,0.0542 0.0957,0.019 h 0.825 l 0.0957,-0.019 0.0811,-0.0542 0.0542,-0.0811 0.019,-0.0957 z"
|
||||
id="path3" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 145.4272,102.75 -0.019,-0.0957 -0.0542,-0.0811 -0.0811,-0.0542 -0.0957,-0.019 h -0.825 l -0.0957,0.019 -0.0811,0.0542 -0.0542,0.0811 -0.019,0.0957 v 1.3 l 0.019,0.0957 0.0542,0.0811 0.0811,0.0542 0.0957,0.019 h 0.825 l 0.0957,-0.019 0.0811,-0.0542 0.0542,-0.0811 0.019,-0.0957 z"
|
||||
id="path4" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 148.1522,111.9125 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path5" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 147.1522,111.9125 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path6" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 146.1522,111.9125 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path7" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 145.1522,111.9125 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path8" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 144.1522,111.9125 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path9" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 144.1522,106.6375 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path10" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 145.1522,106.6375 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path11" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 146.1522,106.6375 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path12" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 147.1522,106.6375 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path13" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 148.1522,106.6375 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path14" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 144.3522,109.4875 h 3.3 v -2.1 h -3.3 z"
|
||||
id="path15" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 139.9522,105.605 v 1.7 h 1.7 v -1.7 z"
|
||||
id="path16" /></g><g
|
||||
style="fill:#000000;fill-opacity:1;stroke:none"
|
||||
id="g17"><circle
|
||||
cx="140.8022"
|
||||
cy="108.995"
|
||||
r="0.85000002"
|
||||
id="circle16" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 152.6522,103.07 v 1.7 h 1.7 v -1.7 z"
|
||||
id="path17" /></g><g
|
||||
style="fill:#000000;fill-opacity:1;stroke:none"
|
||||
id="g18"><circle
|
||||
cx="153.5022"
|
||||
cy="106.46"
|
||||
r="0.85000002"
|
||||
id="circle17" /></g><g
|
||||
style="fill:#000000;fill-opacity:1;stroke:none"
|
||||
id="g19"><circle
|
||||
cx="153.5022"
|
||||
cy="109"
|
||||
r="0.85000002"
|
||||
id="circle18" /></g><g
|
||||
style="fill:#000000;fill-opacity:1;stroke:none"
|
||||
id="g20"><circle
|
||||
cx="153.5022"
|
||||
cy="111.54"
|
||||
r="0.85000002"
|
||||
id="circle19" /></g><g
|
||||
style="fill:none;stroke:#000000;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="g42"><path
|
||||
d="m 139.2022,112.3 1,1"
|
||||
id="path20" /><path
|
||||
d="m 140.2022,113.3 h 7.1"
|
||||
id="path21" /><path
|
||||
d="m 148.0022,112.6 v -1.525"
|
||||
id="path22" /><path
|
||||
d="m 139.2022,107.2 v 5.1"
|
||||
id="path23" /><path
|
||||
d="m 147.3022,113.3 0.7,-0.7"
|
||||
id="path24" /><path
|
||||
d="m 139.9472,106.455 -0.745,0.745"
|
||||
id="path25" /><path
|
||||
d="m 140.8022,106.455 h -0.855"
|
||||
id="path26" /><path
|
||||
d="m 146.0022,111.075 v -2.6375"
|
||||
id="path27" /><path
|
||||
d="m 146.6022,102.8 -0.6,0.6"
|
||||
id="path28" /><path
|
||||
d="m 146.0022,103.4 h -1.2375"
|
||||
id="path29" /><path
|
||||
d="m 146.9022,103.5 -0.9,0.9"
|
||||
id="path30" /><path
|
||||
d="m 146.0022,104.4 v 1.4"
|
||||
id="path31" /><path
|
||||
d="m 150.5422,103.5 h -3.64"
|
||||
id="path32" /><path
|
||||
d="m 153.5022,106.46 -2.96,-2.96"
|
||||
id="path33" /><path
|
||||
d="m 152.3222,103.92 -1.12,-1.12"
|
||||
id="path34" /><path
|
||||
d="m 151.2022,102.8 h -4.6"
|
||||
id="path35" /><path
|
||||
d="m 153.5022,103.92 h -1.18"
|
||||
id="path36" /><path
|
||||
d="m 147.2022,104.2 -0.2,0.2"
|
||||
id="path37" /><path
|
||||
d="m 147.0022,104.4 v 1.4"
|
||||
id="path38" /><path
|
||||
d="m 149.8022,104.2 h -2.6"
|
||||
id="path39" /><path
|
||||
d="m 151.8022,107.3 v -1.1"
|
||||
id="path40" /><path
|
||||
d="m 153.5022,109 -1.7,-1.7"
|
||||
id="path41" /><path
|
||||
d="m 151.8022,106.2 -2,-2"
|
||||
id="path42" /></g><g
|
||||
style="fill:none;stroke:#000000;stroke-width:0.6;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="g47"><path
|
||||
d="m 142.8022,105 -1.1625,-1.1625"
|
||||
id="path43" /><path
|
||||
d="M 144.2397,108.4375 142.8022,107"
|
||||
id="path44" /><path
|
||||
d="m 142.8022,107 v -2"
|
||||
id="path45" /><path
|
||||
d="m 146.0022,108.4375 h -1.7625"
|
||||
id="path46" /><path
|
||||
d="M 141.6397,103.8375 V 103.4"
|
||||
id="path47" /></g><g
|
||||
style="fill:none;stroke:#000000;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="g52"><path
|
||||
d="m 147.0022,111.8 -0.8,0.8"
|
||||
id="path48" /><path
|
||||
d="M 147.0022,111.075 V 111.8"
|
||||
id="path49" /><path
|
||||
d="m 146.2022,112.6 h -5"
|
||||
id="path50" /><path
|
||||
d="M 145.0022,103.6375 144.7647,103.4"
|
||||
id="path51" /><path
|
||||
d="m 145.0022,105.8 v -2.1625"
|
||||
id="path52" /></g><g
|
||||
style="fill:none;stroke:#000000;stroke-width:0.6;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="g54"><path
|
||||
d="m 148.0772,108.4375 h -2.075"
|
||||
id="path53" /><path
|
||||
d="m 150.2022,110.5625 -2.125,-2.125"
|
||||
id="path54" /></g><g
|
||||
style="fill:none;stroke:#000000;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="g57"><path
|
||||
d="m 148.4022,105.8 h -0.4"
|
||||
id="path55" /><path
|
||||
d="M 150.0397,107.4375 148.4022,105.8"
|
||||
id="path56" /><path
|
||||
d="m 150.2022,107.4375 h -0.1625"
|
||||
id="path57" /></g><g
|
||||
style="fill:none;stroke:#000000;stroke-width:0.6;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="g60"><path
|
||||
d="m 150.7647,110.5625 h -0.5625"
|
||||
id="path58" /><path
|
||||
d="m 151.7422,111.54 -0.9775,-0.9775"
|
||||
id="path59" /><path
|
||||
d="m 153.5022,111.54 h -1.76"
|
||||
id="path60" /></g><g
|
||||
style="fill:none;stroke:#000000;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="g63"><path
|
||||
d="m 140.8022,112.2 0.4,0.4"
|
||||
id="path61" /><path
|
||||
d="M 140.8022,108.995 V 112.2"
|
||||
id="path62" /><path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
d="m 155.9022,101.8 h -17.6 V 114 h 17.6 z"
|
||||
id="path63" /></g></g><g
|
||||
id="g2"
|
||||
transform="rotate(90,133.24047,16.942269)"><g
|
||||
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="g16-6"><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 150.8522,108.1 0.0957,-0.019 0.0811,-0.0542 0.0542,-0.0811 0.019,-0.0957 v -0.825 l -0.019,-0.0957 -0.0542,-0.0811 -0.0811,-0.0542 -0.0957,-0.019 h -1.3 l -0.0957,0.019 -0.0811,0.0542 -0.0542,0.0811 -0.019,0.0957 v 0.825 l 0.019,0.0957 0.0542,0.0811 0.0811,0.0542 0.0957,0.019 z"
|
||||
id="path1-9" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 150.8522,111.225 0.0957,-0.019 0.0811,-0.0542 0.0542,-0.0811 0.019,-0.0957 v -0.825 l -0.019,-0.0957 -0.0542,-0.0811 -0.0811,-0.0542 -0.0957,-0.019 h -1.3 l -0.0957,0.019 -0.0811,0.0542 -0.0542,0.0811 -0.019,0.0957 v 0.825 l 0.019,0.0957 0.0542,0.0811 0.0811,0.0542 0.0957,0.019 z"
|
||||
id="path2-5" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 142.3022,102.75 -0.019,-0.0957 -0.0542,-0.0811 -0.0811,-0.0542 -0.0957,-0.019 h -0.825 l -0.0957,0.019 -0.0811,0.0542 -0.0542,0.0811 -0.019,0.0957 v 1.3 l 0.019,0.0957 0.0542,0.0811 0.0811,0.0542 0.0957,0.019 h 0.825 l 0.0957,-0.019 0.0811,-0.0542 0.0542,-0.0811 0.019,-0.0957 z"
|
||||
id="path3-2" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 145.4272,102.75 -0.019,-0.0957 -0.0542,-0.0811 -0.0811,-0.0542 -0.0957,-0.019 h -0.825 l -0.0957,0.019 -0.0811,0.0542 -0.0542,0.0811 -0.019,0.0957 v 1.3 l 0.019,0.0957 0.0542,0.0811 0.0811,0.0542 0.0957,0.019 h 0.825 l 0.0957,-0.019 0.0811,-0.0542 0.0542,-0.0811 0.019,-0.0957 z"
|
||||
id="path4-1" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 148.1522,111.9125 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path5-2" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 147.1522,111.9125 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path6-1" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 146.1522,111.9125 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path7-9" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 145.1522,111.9125 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path8-0" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 144.1522,111.9125 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path9-8" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 144.1522,106.6375 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path10-1" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 145.1522,106.6375 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path11-8" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 146.1522,106.6375 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path12-0" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 147.1522,106.6375 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path13-0" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 148.1522,106.6375 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path14-5" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 144.3522,109.4875 h 3.3 v -2.1 h -3.3 z"
|
||||
id="path15-6" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 139.9522,105.605 v 1.7 h 1.7 v -1.7 z"
|
||||
id="path16-9" /></g><g
|
||||
style="fill:#000000;fill-opacity:1;stroke:none"
|
||||
id="g17-7"><circle
|
||||
cx="140.8022"
|
||||
cy="108.995"
|
||||
r="0.85000002"
|
||||
id="circle16-6" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 152.6522,103.07 v 1.7 h 1.7 v -1.7 z"
|
||||
id="path17-0" /></g><g
|
||||
style="fill:#000000;fill-opacity:1;stroke:none"
|
||||
id="g18-7"><circle
|
||||
cx="153.5022"
|
||||
cy="106.46"
|
||||
r="0.85000002"
|
||||
id="circle17-5" /></g><g
|
||||
style="fill:#000000;fill-opacity:1;stroke:none"
|
||||
id="g19-0"><circle
|
||||
cx="153.5022"
|
||||
cy="109"
|
||||
r="0.85000002"
|
||||
id="circle18-4" /></g><g
|
||||
style="fill:#000000;fill-opacity:1;stroke:none"
|
||||
id="g20-9"><circle
|
||||
cx="153.5022"
|
||||
cy="111.54"
|
||||
r="0.85000002"
|
||||
id="circle19-7" /></g><g
|
||||
style="fill:none;stroke:#000000;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="g42-7"><path
|
||||
d="m 139.2022,112.3 1,1"
|
||||
id="path20-3" /><path
|
||||
d="m 140.2022,113.3 h 7.1"
|
||||
id="path21-2" /><path
|
||||
d="m 148.0022,112.6 v -1.525"
|
||||
id="path22-3" /><path
|
||||
d="m 139.2022,107.2 v 5.1"
|
||||
id="path23-1" /><path
|
||||
d="m 147.3022,113.3 0.7,-0.7"
|
||||
id="path24-8" /><path
|
||||
d="m 139.9472,106.455 -0.745,0.745"
|
||||
id="path25-8" /><path
|
||||
d="m 140.8022,106.455 h -0.855"
|
||||
id="path26-9" /><path
|
||||
d="m 146.0022,111.075 v -2.6375"
|
||||
id="path27-1" /><path
|
||||
d="m 146.6022,102.8 -0.6,0.6"
|
||||
id="path28-1" /><path
|
||||
d="m 146.0022,103.4 h -1.2375"
|
||||
id="path29-7" /><path
|
||||
d="m 146.9022,103.5 -0.9,0.9"
|
||||
id="path30-8" /><path
|
||||
d="m 146.0022,104.4 v 1.4"
|
||||
id="path31-4" /><path
|
||||
d="m 150.5422,103.5 h -3.64"
|
||||
id="path32-0" /><path
|
||||
d="m 153.5022,106.46 -2.96,-2.96"
|
||||
id="path33-7" /><path
|
||||
d="m 152.3222,103.92 -1.12,-1.12"
|
||||
id="path34-0" /><path
|
||||
d="m 151.2022,102.8 h -4.6"
|
||||
id="path35-2" /><path
|
||||
d="m 153.5022,103.92 h -1.18"
|
||||
id="path36-9" /><path
|
||||
d="m 147.2022,104.2 -0.2,0.2"
|
||||
id="path37-5" /><path
|
||||
d="m 147.0022,104.4 v 1.4"
|
||||
id="path38-7" /><path
|
||||
d="m 149.8022,104.2 h -2.6"
|
||||
id="path39-8" /><path
|
||||
d="m 151.8022,107.3 v -1.1"
|
||||
id="path40-9" /><path
|
||||
d="m 153.5022,109 -1.7,-1.7"
|
||||
id="path41-0" /><path
|
||||
d="m 151.8022,106.2 -2,-2"
|
||||
id="path42-4" /></g><g
|
||||
style="fill:none;stroke:#000000;stroke-width:0.6;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="g47-5"><path
|
||||
d="m 142.8022,105 -1.1625,-1.1625"
|
||||
id="path43-3" /><path
|
||||
d="M 144.2397,108.4375 142.8022,107"
|
||||
id="path44-6" /><path
|
||||
d="m 142.8022,107 v -2"
|
||||
id="path45-6" /><path
|
||||
d="m 146.0022,108.4375 h -1.7625"
|
||||
id="path46-4" /><path
|
||||
d="M 141.6397,103.8375 V 103.4"
|
||||
id="path47-8" /></g><g
|
||||
style="fill:none;stroke:#000000;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="g52-9"><path
|
||||
d="m 147.0022,111.8 -0.8,0.8"
|
||||
id="path48-9" /><path
|
||||
d="M 147.0022,111.075 V 111.8"
|
||||
id="path49-3" /><path
|
||||
d="m 146.2022,112.6 h -5"
|
||||
id="path50-6" /><path
|
||||
d="M 145.0022,103.6375 144.7647,103.4"
|
||||
id="path51-6" /><path
|
||||
d="m 145.0022,105.8 v -2.1625"
|
||||
id="path52-9" /></g><g
|
||||
style="fill:none;stroke:#000000;stroke-width:0.6;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="g54-6"><path
|
||||
d="m 148.0772,108.4375 h -2.075"
|
||||
id="path53-6" /><path
|
||||
d="m 150.2022,110.5625 -2.125,-2.125"
|
||||
id="path54-6" /></g><g
|
||||
style="fill:none;stroke:#000000;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="g57-0"><path
|
||||
d="m 148.4022,105.8 h -0.4"
|
||||
id="path55-5" /><path
|
||||
d="M 150.0397,107.4375 148.4022,105.8"
|
||||
id="path56-8" /><path
|
||||
d="m 150.2022,107.4375 h -0.1625"
|
||||
id="path57-9" /></g><g
|
||||
style="fill:none;stroke:#000000;stroke-width:0.6;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="g60-3"><path
|
||||
d="m 150.7647,110.5625 h -0.5625"
|
||||
id="path58-0" /><path
|
||||
d="m 151.7422,111.54 -0.9775,-0.9775"
|
||||
id="path59-5" /><path
|
||||
d="m 153.5022,111.54 h -1.76"
|
||||
id="path60-7" /></g><g
|
||||
style="fill:none;stroke:#000000;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="g63-9"><path
|
||||
d="m 140.8022,112.2 0.4,0.4"
|
||||
id="path61-2" /><path
|
||||
d="M 140.8022,108.995 V 112.2"
|
||||
id="path62-7" /><path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
d="m 155.9022,101.8 h -17.6 V 114 h 17.6 z"
|
||||
id="path63-1" /></g></g><g
|
||||
id="g2-5"
|
||||
transform="rotate(90,140.25528,23.982598)"><g
|
||||
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="g16-6-0"><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 150.8522,108.1 0.0957,-0.019 0.0811,-0.0542 0.0542,-0.0811 0.019,-0.0957 v -0.825 l -0.019,-0.0957 -0.0542,-0.0811 -0.0811,-0.0542 -0.0957,-0.019 h -1.3 l -0.0957,0.019 -0.0811,0.0542 -0.0542,0.0811 -0.019,0.0957 v 0.825 l 0.019,0.0957 0.0542,0.0811 0.0811,0.0542 0.0957,0.019 z"
|
||||
id="path1-9-9" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 150.8522,111.225 0.0957,-0.019 0.0811,-0.0542 0.0542,-0.0811 0.019,-0.0957 v -0.825 l -0.019,-0.0957 -0.0542,-0.0811 -0.0811,-0.0542 -0.0957,-0.019 h -1.3 l -0.0957,0.019 -0.0811,0.0542 -0.0542,0.0811 -0.019,0.0957 v 0.825 l 0.019,0.0957 0.0542,0.0811 0.0811,0.0542 0.0957,0.019 z"
|
||||
id="path2-5-0" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 142.3022,102.75 -0.019,-0.0957 -0.0542,-0.0811 -0.0811,-0.0542 -0.0957,-0.019 h -0.825 l -0.0957,0.019 -0.0811,0.0542 -0.0542,0.0811 -0.019,0.0957 v 1.3 l 0.019,0.0957 0.0542,0.0811 0.0811,0.0542 0.0957,0.019 h 0.825 l 0.0957,-0.019 0.0811,-0.0542 0.0542,-0.0811 0.019,-0.0957 z"
|
||||
id="path3-2-8" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 145.4272,102.75 -0.019,-0.0957 -0.0542,-0.0811 -0.0811,-0.0542 -0.0957,-0.019 h -0.825 l -0.0957,0.019 -0.0811,0.0542 -0.0542,0.0811 -0.019,0.0957 v 1.3 l 0.019,0.0957 0.0542,0.0811 0.0811,0.0542 0.0957,0.019 h 0.825 l 0.0957,-0.019 0.0811,-0.0542 0.0542,-0.0811 0.019,-0.0957 z"
|
||||
id="path4-1-8" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 148.1522,111.9125 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path5-2-5" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 147.1522,111.9125 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path6-1-1" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 146.1522,111.9125 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path7-9-8" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 145.1522,111.9125 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path8-0-3" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 144.1522,111.9125 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path9-8-8" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 144.1522,106.6375 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path10-1-7" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 145.1522,106.6375 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path11-8-7" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 146.1522,106.6375 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path12-0-9" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 147.1522,106.6375 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path13-0-0" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 148.1522,106.6375 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path14-5-2" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 144.3522,109.4875 h 3.3 v -2.1 h -3.3 z"
|
||||
id="path15-6-8" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 139.9522,105.605 v 1.7 h 1.7 v -1.7 z"
|
||||
id="path16-9-6" /></g><g
|
||||
style="fill:#000000;fill-opacity:1;stroke:none"
|
||||
id="g17-7-0"><circle
|
||||
cx="140.8022"
|
||||
cy="108.995"
|
||||
r="0.85000002"
|
||||
id="circle16-6-3" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 152.6522,103.07 v 1.7 h 1.7 v -1.7 z"
|
||||
id="path17-0-0" /></g><g
|
||||
style="fill:#000000;fill-opacity:1;stroke:none"
|
||||
id="g18-7-9"><circle
|
||||
cx="153.5022"
|
||||
cy="106.46"
|
||||
r="0.85000002"
|
||||
id="circle17-5-8" /></g><g
|
||||
style="fill:#000000;fill-opacity:1;stroke:none"
|
||||
id="g19-0-7"><circle
|
||||
cx="153.5022"
|
||||
cy="109"
|
||||
r="0.85000002"
|
||||
id="circle18-4-0" /></g><g
|
||||
style="fill:#000000;fill-opacity:1;stroke:none"
|
||||
id="g20-9-7"><circle
|
||||
cx="153.5022"
|
||||
cy="111.54"
|
||||
r="0.85000002"
|
||||
id="circle19-7-5" /></g><g
|
||||
style="fill:none;stroke:#000000;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="g42-7-2"><path
|
||||
d="m 139.2022,112.3 1,1"
|
||||
id="path20-3-2" /><path
|
||||
d="m 140.2022,113.3 h 7.1"
|
||||
id="path21-2-8" /><path
|
||||
d="m 148.0022,112.6 v -1.525"
|
||||
id="path22-3-2" /><path
|
||||
d="m 139.2022,107.2 v 5.1"
|
||||
id="path23-1-6" /><path
|
||||
d="m 147.3022,113.3 0.7,-0.7"
|
||||
id="path24-8-7" /><path
|
||||
d="m 139.9472,106.455 -0.745,0.745"
|
||||
id="path25-8-5" /><path
|
||||
d="m 140.8022,106.455 h -0.855"
|
||||
id="path26-9-9" /><path
|
||||
d="m 146.0022,111.075 v -2.6375"
|
||||
id="path27-1-4" /><path
|
||||
d="m 146.6022,102.8 -0.6,0.6"
|
||||
id="path28-1-7" /><path
|
||||
d="m 146.0022,103.4 h -1.2375"
|
||||
id="path29-7-4" /><path
|
||||
d="m 146.9022,103.5 -0.9,0.9"
|
||||
id="path30-8-5" /><path
|
||||
d="m 146.0022,104.4 v 1.4"
|
||||
id="path31-4-3" /><path
|
||||
d="m 150.5422,103.5 h -3.64"
|
||||
id="path32-0-1" /><path
|
||||
d="m 153.5022,106.46 -2.96,-2.96"
|
||||
id="path33-7-3" /><path
|
||||
d="m 152.3222,103.92 -1.12,-1.12"
|
||||
id="path34-0-2" /><path
|
||||
d="m 151.2022,102.8 h -4.6"
|
||||
id="path35-2-7" /><path
|
||||
d="m 153.5022,103.92 h -1.18"
|
||||
id="path36-9-2" /><path
|
||||
d="m 147.2022,104.2 -0.2,0.2"
|
||||
id="path37-5-6" /><path
|
||||
d="m 147.0022,104.4 v 1.4"
|
||||
id="path38-7-3" /><path
|
||||
d="m 149.8022,104.2 h -2.6"
|
||||
id="path39-8-4" /><path
|
||||
d="m 151.8022,107.3 v -1.1"
|
||||
id="path40-9-0" /><path
|
||||
d="m 153.5022,109 -1.7,-1.7"
|
||||
id="path41-0-8" /><path
|
||||
d="m 151.8022,106.2 -2,-2"
|
||||
id="path42-4-2" /></g><g
|
||||
style="fill:none;stroke:#000000;stroke-width:0.6;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="g47-5-6"><path
|
||||
d="m 142.8022,105 -1.1625,-1.1625"
|
||||
id="path43-3-8" /><path
|
||||
d="M 144.2397,108.4375 142.8022,107"
|
||||
id="path44-6-9" /><path
|
||||
d="m 142.8022,107 v -2"
|
||||
id="path45-6-1" /><path
|
||||
d="m 146.0022,108.4375 h -1.7625"
|
||||
id="path46-4-3" /><path
|
||||
d="M 141.6397,103.8375 V 103.4"
|
||||
id="path47-8-6" /></g><g
|
||||
style="fill:none;stroke:#000000;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="g52-9-6"><path
|
||||
d="m 147.0022,111.8 -0.8,0.8"
|
||||
id="path48-9-3" /><path
|
||||
d="M 147.0022,111.075 V 111.8"
|
||||
id="path49-3-6" /><path
|
||||
d="m 146.2022,112.6 h -5"
|
||||
id="path50-6-1" /><path
|
||||
d="M 145.0022,103.6375 144.7647,103.4"
|
||||
id="path51-6-7" /><path
|
||||
d="m 145.0022,105.8 v -2.1625"
|
||||
id="path52-9-2" /></g><g
|
||||
style="fill:none;stroke:#000000;stroke-width:0.6;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="g54-6-0"><path
|
||||
d="m 148.0772,108.4375 h -2.075"
|
||||
id="path53-6-8" /><path
|
||||
d="m 150.2022,110.5625 -2.125,-2.125"
|
||||
id="path54-6-0" /></g><g
|
||||
style="fill:none;stroke:#000000;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="g57-0-6"><path
|
||||
d="m 148.4022,105.8 h -0.4"
|
||||
id="path55-5-0" /><path
|
||||
d="M 150.0397,107.4375 148.4022,105.8"
|
||||
id="path56-8-4" /><path
|
||||
d="m 150.2022,107.4375 h -0.1625"
|
||||
id="path57-9-9" /></g><g
|
||||
style="fill:none;stroke:#000000;stroke-width:0.6;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="g60-3-3"><path
|
||||
d="m 150.7647,110.5625 h -0.5625"
|
||||
id="path58-0-2" /><path
|
||||
d="m 151.7422,111.54 -0.9775,-0.9775"
|
||||
id="path59-5-2" /><path
|
||||
d="m 153.5022,111.54 h -1.76"
|
||||
id="path60-7-4" /></g><g
|
||||
style="fill:none;stroke:#000000;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="g63-9-9"><path
|
||||
d="m 140.8022,112.2 0.4,0.4"
|
||||
id="path61-2-6" /><path
|
||||
d="M 140.8022,108.995 V 112.2"
|
||||
id="path62-7-7" /><path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
d="m 155.9022,101.8 h -17.6 V 114 h 17.6 z"
|
||||
id="path63-1-4" /></g></g><g
|
||||
id="g2-8"
|
||||
transform="rotate(90,147.19515,30.903231)"><g
|
||||
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="g16-6-9"><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 150.8522,108.1 0.0957,-0.019 0.0811,-0.0542 0.0542,-0.0811 0.019,-0.0957 v -0.825 l -0.019,-0.0957 -0.0542,-0.0811 -0.0811,-0.0542 -0.0957,-0.019 h -1.3 l -0.0957,0.019 -0.0811,0.0542 -0.0542,0.0811 -0.019,0.0957 v 0.825 l 0.019,0.0957 0.0542,0.0811 0.0811,0.0542 0.0957,0.019 z"
|
||||
id="path1-9-0" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 150.8522,111.225 0.0957,-0.019 0.0811,-0.0542 0.0542,-0.0811 0.019,-0.0957 v -0.825 l -0.019,-0.0957 -0.0542,-0.0811 -0.0811,-0.0542 -0.0957,-0.019 h -1.3 l -0.0957,0.019 -0.0811,0.0542 -0.0542,0.0811 -0.019,0.0957 v 0.825 l 0.019,0.0957 0.0542,0.0811 0.0811,0.0542 0.0957,0.019 z"
|
||||
id="path2-5-6" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 142.3022,102.75 -0.019,-0.0957 -0.0542,-0.0811 -0.0811,-0.0542 -0.0957,-0.019 h -0.825 l -0.0957,0.019 -0.0811,0.0542 -0.0542,0.0811 -0.019,0.0957 v 1.3 l 0.019,0.0957 0.0542,0.0811 0.0811,0.0542 0.0957,0.019 h 0.825 l 0.0957,-0.019 0.0811,-0.0542 0.0542,-0.0811 0.019,-0.0957 z"
|
||||
id="path3-2-2" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 145.4272,102.75 -0.019,-0.0957 -0.0542,-0.0811 -0.0811,-0.0542 -0.0957,-0.019 h -0.825 l -0.0957,0.019 -0.0811,0.0542 -0.0542,0.0811 -0.019,0.0957 v 1.3 l 0.019,0.0957 0.0542,0.0811 0.0811,0.0542 0.0957,0.019 h 0.825 l 0.0957,-0.019 0.0811,-0.0542 0.0542,-0.0811 0.019,-0.0957 z"
|
||||
id="path4-1-0" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 148.1522,111.9125 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path5-2-9" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 147.1522,111.9125 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path6-1-2" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 146.1522,111.9125 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path7-9-6" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 145.1522,111.9125 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path8-0-0" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 144.1522,111.9125 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path9-8-5" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 144.1522,106.6375 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path10-1-5" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 145.1522,106.6375 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path11-8-9" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 146.1522,106.6375 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path12-0-1" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 147.1522,106.6375 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path13-0-4" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 148.1522,106.6375 0.0574,-0.0114 0.0487,-0.0325 0.0325,-0.0487 0.0114,-0.0574 v -1.375 l -0.0114,-0.0574 -0.0325,-0.0487 -0.0487,-0.0325 -0.0574,-0.0114 h -0.3 l -0.0574,0.0114 -0.0487,0.0325 -0.0325,0.0487 -0.0114,0.0574 v 1.375 l 0.0114,0.0574 0.0325,0.0487 0.0487,0.0325 0.0574,0.0114 z"
|
||||
id="path14-5-1" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 144.3522,109.4875 h 3.3 v -2.1 h -3.3 z"
|
||||
id="path15-6-82" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 139.9522,105.605 v 1.7 h 1.7 v -1.7 z"
|
||||
id="path16-9-9" /></g><g
|
||||
style="fill:#000000;fill-opacity:1;stroke:none"
|
||||
id="g17-7-3"><circle
|
||||
cx="140.8022"
|
||||
cy="108.995"
|
||||
r="0.85000002"
|
||||
id="circle16-6-0" /><path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 152.6522,103.07 v 1.7 h 1.7 v -1.7 z"
|
||||
id="path17-0-4" /></g><g
|
||||
style="fill:#000000;fill-opacity:1;stroke:none"
|
||||
id="g18-7-5"><circle
|
||||
cx="153.5022"
|
||||
cy="106.46"
|
||||
r="0.85000002"
|
||||
id="circle17-5-86" /></g><g
|
||||
style="fill:#000000;fill-opacity:1;stroke:none"
|
||||
id="g19-0-8"><circle
|
||||
cx="153.5022"
|
||||
cy="109"
|
||||
r="0.85000002"
|
||||
id="circle18-4-5" /></g><g
|
||||
style="fill:#000000;fill-opacity:1;stroke:none"
|
||||
id="g20-9-3"><circle
|
||||
cx="153.5022"
|
||||
cy="111.54"
|
||||
r="0.85000002"
|
||||
id="circle19-7-4" /></g><g
|
||||
style="fill:none;stroke:#000000;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="g42-7-0"><path
|
||||
d="m 139.2022,112.3 1,1"
|
||||
id="path20-3-1" /><path
|
||||
d="m 140.2022,113.3 h 7.1"
|
||||
id="path21-2-7" /><path
|
||||
d="m 148.0022,112.6 v -1.525"
|
||||
id="path22-3-1" /><path
|
||||
d="m 139.2022,107.2 v 5.1"
|
||||
id="path23-1-4" /><path
|
||||
d="m 147.3022,113.3 0.7,-0.7"
|
||||
id="path24-8-9" /><path
|
||||
d="m 139.9472,106.455 -0.745,0.745"
|
||||
id="path25-8-6" /><path
|
||||
d="m 140.8022,106.455 h -0.855"
|
||||
id="path26-9-7" /><path
|
||||
d="m 146.0022,111.075 v -2.6375"
|
||||
id="path27-1-8" /><path
|
||||
d="m 146.6022,102.8 -0.6,0.6"
|
||||
id="path28-1-2" /><path
|
||||
d="m 146.0022,103.4 h -1.2375"
|
||||
id="path29-7-6" /><path
|
||||
d="m 146.9022,103.5 -0.9,0.9"
|
||||
id="path30-8-55" /><path
|
||||
d="m 146.0022,104.4 v 1.4"
|
||||
id="path31-4-0" /><path
|
||||
d="m 150.5422,103.5 h -3.64"
|
||||
id="path32-0-2" /><path
|
||||
d="m 153.5022,106.46 -2.96,-2.96"
|
||||
id="path33-7-5" /><path
|
||||
d="m 152.3222,103.92 -1.12,-1.12"
|
||||
id="path34-0-1" /><path
|
||||
d="m 151.2022,102.8 h -4.6"
|
||||
id="path35-2-74" /><path
|
||||
d="m 153.5022,103.92 h -1.18"
|
||||
id="path36-9-3" /><path
|
||||
d="m 147.2022,104.2 -0.2,0.2"
|
||||
id="path37-5-2" /><path
|
||||
d="m 147.0022,104.4 v 1.4"
|
||||
id="path38-7-2" /><path
|
||||
d="m 149.8022,104.2 h -2.6"
|
||||
id="path39-8-0" /><path
|
||||
d="m 151.8022,107.3 v -1.1"
|
||||
id="path40-9-4" /><path
|
||||
d="m 153.5022,109 -1.7,-1.7"
|
||||
id="path41-0-9" /><path
|
||||
d="m 151.8022,106.2 -2,-2"
|
||||
id="path42-4-6" /></g><g
|
||||
style="fill:none;stroke:#000000;stroke-width:0.6;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="g47-5-9"><path
|
||||
d="m 142.8022,105 -1.1625,-1.1625"
|
||||
id="path43-3-1" /><path
|
||||
d="M 144.2397,108.4375 142.8022,107"
|
||||
id="path44-6-4" /><path
|
||||
d="m 142.8022,107 v -2"
|
||||
id="path45-6-9" /><path
|
||||
d="m 146.0022,108.4375 h -1.7625"
|
||||
id="path46-4-4" /><path
|
||||
d="M 141.6397,103.8375 V 103.4"
|
||||
id="path47-8-2" /></g><g
|
||||
style="fill:none;stroke:#000000;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="g52-9-9"><path
|
||||
d="m 147.0022,111.8 -0.8,0.8"
|
||||
id="path48-9-4" /><path
|
||||
d="M 147.0022,111.075 V 111.8"
|
||||
id="path49-3-3" /><path
|
||||
d="m 146.2022,112.6 h -5"
|
||||
id="path50-6-5" /><path
|
||||
d="M 145.0022,103.6375 144.7647,103.4"
|
||||
id="path51-6-8" /><path
|
||||
d="m 145.0022,105.8 v -2.1625"
|
||||
id="path52-9-4" /></g><g
|
||||
style="fill:none;stroke:#000000;stroke-width:0.6;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="g54-6-2"><path
|
||||
d="m 148.0772,108.4375 h -2.075"
|
||||
id="path53-6-4" /><path
|
||||
d="m 150.2022,110.5625 -2.125,-2.125"
|
||||
id="path54-6-7" /></g><g
|
||||
style="fill:none;stroke:#000000;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="g57-0-3"><path
|
||||
d="m 148.4022,105.8 h -0.4"
|
||||
id="path55-5-2" /><path
|
||||
d="M 150.0397,107.4375 148.4022,105.8"
|
||||
id="path56-8-8" /><path
|
||||
d="m 150.2022,107.4375 h -0.1625"
|
||||
id="path57-9-4" /></g><g
|
||||
style="fill:none;stroke:#000000;stroke-width:0.6;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="g60-3-7"><path
|
||||
d="m 150.7647,110.5625 h -0.5625"
|
||||
id="path58-0-0" /><path
|
||||
d="m 151.7422,111.54 -0.9775,-0.9775"
|
||||
id="path59-5-5" /><path
|
||||
d="m 153.5022,111.54 h -1.76"
|
||||
id="path60-7-9" /></g><g
|
||||
style="fill:none;stroke:#000000;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="g63-9-7"><path
|
||||
d="m 140.8022,112.2 0.4,0.4"
|
||||
id="path61-2-0" /><path
|
||||
d="M 140.8022,108.995 V 112.2"
|
||||
id="path62-7-3" /><path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
d="m 155.9022,101.8 h -17.6 V 114 h 17.6 z"
|
||||
id="path63-1-1" /></g></g></g></svg>
|
||||
|
After Width: | Height: | Size: 47 KiB |
5
hardware/sym-lib-table
Executable file
5
hardware/sym-lib-table
Executable file
@ -0,0 +1,5 @@
|
||||
(sym_lib_table
|
||||
(version 7)
|
||||
(lib (name "IP2326-BMS-2S-3S")(type "KiCad")(uri "${KIPRJMOD}/IP2326-BMS-2S-3S.kicad_sym")(options "")(descr ""))
|
||||
(lib (name "Power")(type "KiCad")(uri "${KIPRJMOD}/Power.kicad_sym")(options "")(descr ""))
|
||||
)
|
||||
Loading…
x
Reference in New Issue
Block a user