Compare commits
30 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
d44dade02d | ||
|
90504217be | ||
|
51605d8d1c | ||
|
4eece42354 | ||
|
d0fbfa4481 | ||
|
e1f4675ef8 | ||
|
d32e0b6ee5 | ||
|
dded78cb83 | ||
|
4fd5096c96 | ||
|
41d2190488 | ||
|
d6f9989379 | ||
|
e30963a990 | ||
|
e6da99b4a6 | ||
|
f241e7cf04 | ||
|
dfab0e57be | ||
|
8310c0dd7f | ||
|
d68451e48b | ||
|
b1ae22b367 | ||
|
b26c97e136 | ||
|
896580a239 | ||
|
6a76239f40 | ||
|
55817da407 | ||
|
584c263eaa | ||
|
42db319ae9 | ||
|
81cebe6472 | ||
|
732b91caef | ||
|
35263d8595 | ||
|
15de286b3f | ||
|
4b22b19ab6 | ||
|
77b927d1fc |
@ -1,485 +1,54 @@
|
|||||||
EESchema-LIBRARY Version 2.4
|
EESchema-LIBRARY Version 2.4
|
||||||
#encoding utf-8
|
#encoding utf-8
|
||||||
#
|
#
|
||||||
# 000_my_lib:DSN-MINI-360
|
# 00_mylib_Logo
|
||||||
#
|
#
|
||||||
DEF 000_my_lib:DSN-MINI-360 MOD 0 40 Y Y 1 F P
|
DEF 00_mylib_Logo Log 0 0 N N 1 F N
|
||||||
F0 "MOD" 350 -50 50 H V C CNN
|
F0 "Log" 0 0 50 H I C CNN
|
||||||
F1 "000_my_lib:DSN-MINI-360" 200 350 50 H V C CNN
|
F1 "00_mylib_Logo" 0 100 50 H V C CNN
|
||||||
F2 "" 250 150 50 H I C CNN
|
F2 "" 0 0 50 H I C CNN
|
||||||
F3 "" 250 150 50 H I C CNN
|
F3 "" 0 0 50 H I C CNN
|
||||||
DRAW
|
DRAW
|
||||||
S 0 300 450 0 0 0 0 f
|
|
||||||
X GND ~ -100 50 100 R 50 50 1 1 P
|
|
||||||
X GND ~ 550 50 100 L 50 50 1 1 P
|
|
||||||
X IN ~ -100 250 100 R 50 50 1 1 P
|
|
||||||
X OUT ~ 550 250 100 L 50 50 1 1 P
|
|
||||||
ENDDRAW
|
ENDDRAW
|
||||||
ENDDEF
|
ENDDEF
|
||||||
#
|
#
|
||||||
# 000_my_lib:MAX3032
|
# 00_mylib_OWN_DCDC-CANNode
|
||||||
#
|
#
|
||||||
DEF 000_my_lib:MAX3032 U 0 20 Y Y 1 F N
|
DEF 00_mylib_OWN_DCDC-CANNode MOD 0 40 N N 1 L N
|
||||||
F0 "U" -300 750 50 H V L CNN
|
F0 "MOD" 0 0 45 H I C CNN
|
||||||
F1 "000_my_lib:MAX3032" 100 750 50 H V L CNN
|
F1 "00_mylib_OWN_DCDC-CANNode" 0 0 45 H I C CNN
|
||||||
F2 "Package_SO:SOIC-16_3.9x9.9mm_P1.27mm" -100 -800 50 H I C CNN
|
|
||||||
F3 "" 50 -100 50 H I C CNN
|
|
||||||
$FPLIST
|
|
||||||
TSSOP*4.4x5mm*P0.65mm*
|
|
||||||
$ENDFPLIST
|
|
||||||
DRAW
|
|
||||||
C 0 -300 14 1 0 0 F
|
|
||||||
C 0 300 14 1 0 0 F
|
|
||||||
C 75 -500 20 1 0 0 N
|
|
||||||
C 75 -200 20 1 0 0 N
|
|
||||||
C 75 100 20 1 0 0 N
|
|
||||||
C 75 400 20 1 0 0 N
|
|
||||||
T 0 -35 450 40 0 1 0 D1 Normal 0 C C
|
|
||||||
T 0 -35 150 40 0 1 0 D2 Normal 0 C C
|
|
||||||
T 0 -35 -150 40 0 1 0 D3 Normal 0 C C
|
|
||||||
T 0 -35 -450 40 0 1 0 D4 Normal 0 C C
|
|
||||||
S -350 700 400 -700 1 0 10 f
|
|
||||||
P 2 1 0 0 150 -500 95 -500 N
|
|
||||||
P 2 1 0 0 150 -200 95 -200 N
|
|
||||||
P 2 1 0 0 150 100 95 100 N
|
|
||||||
P 2 1 0 0 150 400 95 400 N
|
|
||||||
P 3 1 0 0 75 -435 75 -400 150 -400 N
|
|
||||||
P 3 1 0 0 75 165 75 200 150 200 N
|
|
||||||
P 3 1 0 0 75 465 75 500 150 500 N
|
|
||||||
P 2 0 1 0 -100 -450 -200 -450 N
|
|
||||||
P 2 0 1 0 -100 -150 -200 -150 N
|
|
||||||
P 2 0 1 0 -100 150 -200 150 N
|
|
||||||
P 2 0 1 0 -100 450 -200 450 N
|
|
||||||
P 2 0 1 0 0 -300 -100 -300 N
|
|
||||||
P 2 0 1 0 0 -200 0 -400 N
|
|
||||||
P 2 0 1 0 0 300 -100 300 N
|
|
||||||
P 2 0 1 0 0 400 0 200 N
|
|
||||||
P 2 0 1 0 75 -480 75 -465 N
|
|
||||||
P 2 0 1 0 75 -180 75 -165 N
|
|
||||||
P 2 0 1 0 75 120 75 135 N
|
|
||||||
P 2 0 1 0 75 420 75 435 N
|
|
||||||
P 2 0 1 0 350 -400 350 -400 N
|
|
||||||
P 3 0 1 0 150 -100 75 -100 75 -135 N
|
|
||||||
P 4 1 1 10 -100 -350 -100 -550 100 -450 -100 -350 N
|
|
||||||
P 4 1 1 10 -100 -50 -100 -250 100 -150 -100 -50 N
|
|
||||||
P 4 1 1 10 -100 250 -100 50 100 150 -100 250 N
|
|
||||||
P 4 1 1 10 -100 550 -100 350 100 450 -100 550 N
|
|
||||||
X DI1 1 -450 450 100 R 50 50 1 1 I
|
|
||||||
X DO3+ 10 500 -100 100 L 50 50 1 1 O
|
|
||||||
X DO3- 11 500 -200 100 L 50 50 1 1 O
|
|
||||||
X EN34 12 -450 -300 100 R 50 50 1 1 I
|
|
||||||
X DO4- 13 500 -500 100 L 50 50 1 1 O
|
|
||||||
X DO4+ 14 500 -400 100 L 50 50 1 1 O
|
|
||||||
X DI4 15 -450 -450 100 R 50 50 1 1 I
|
|
||||||
X VCC 16 0 800 100 D 50 50 1 1 W
|
|
||||||
X DO1+ 2 500 500 100 L 50 50 1 1 O
|
|
||||||
X DO1- 3 500 400 100 L 50 50 1 1 O
|
|
||||||
X EN12 4 -450 300 100 R 50 50 1 1 I
|
|
||||||
X DO2- 5 500 100 100 L 50 50 1 1 O
|
|
||||||
X DO2+ 6 500 200 100 L 50 50 1 1 O
|
|
||||||
X DI2 7 -450 150 100 R 50 50 1 1 I
|
|
||||||
X GND 8 0 -800 100 U 50 50 1 1 W
|
|
||||||
X DI3 9 -450 -150 100 R 50 50 1 1 I
|
|
||||||
ENDDRAW
|
|
||||||
ENDDEF
|
|
||||||
#
|
|
||||||
# Connector_Generic:Conn_01x04
|
|
||||||
#
|
|
||||||
DEF Connector_Generic:Conn_01x04 J 0 40 Y N 1 F N
|
|
||||||
F0 "J" 0 200 50 H V C CNN
|
|
||||||
F1 "Connector_Generic:Conn_01x04" 0 -300 50 H V C CNN
|
|
||||||
F2 "" 0 0 50 H I C CNN
|
F2 "" 0 0 50 H I C CNN
|
||||||
F3 "" 0 0 50 H I C CNN
|
F3 "" 0 0 50 H I C CNN
|
||||||
$FPLIST
|
$FPLIST
|
||||||
Connector*:*_1x??_*
|
*OWN_DC-DC*
|
||||||
$ENDFPLIST
|
$ENDFPLIST
|
||||||
DRAW
|
DRAW
|
||||||
S -50 -195 0 -205 1 1 6 N
|
T 0 -174 128 56 0 1 0 + Normal 0 C C
|
||||||
S -50 -95 0 -105 1 1 6 N
|
T 0 226 128 56 0 1 0 + Normal 0 C C
|
||||||
S -50 5 0 -5 1 1 6 N
|
T 0 7 28 56 0 1 0 DCDC Normal 0 C C
|
||||||
S -50 105 0 95 1 1 6 N
|
S -150 100 150 -50 1 1 0 N
|
||||||
S -50 150 50 -250 1 1 10 f
|
P 2 1 0 0 -300 -200 300 -200 N
|
||||||
X Pin_1 1 -200 100 150 R 50 50 1 1 P
|
P 2 1 0 0 -300 -100 -300 -200 N
|
||||||
X Pin_2 2 -200 0 150 R 50 50 1 1 P
|
P 2 1 0 0 -300 -100 0 -100 N
|
||||||
X Pin_3 3 -200 -100 150 R 50 50 1 1 P
|
P 2 1 0 0 -300 200 -300 -100 N
|
||||||
X Pin_4 4 -200 -200 150 R 50 50 1 1 P
|
P 2 1 0 0 -30 -150 30 -150 N
|
||||||
|
P 2 1 0 0 0 -100 0 -150 N
|
||||||
|
P 2 1 0 0 0 -100 300 -100 N
|
||||||
|
P 2 1 0 0 300 -200 300 -100 N
|
||||||
|
P 2 1 0 0 300 -100 300 200 N
|
||||||
|
P 2 1 0 0 300 200 -300 200 N
|
||||||
|
X IN+ IN+ -400 100 200 R 40 40 1 1 W
|
||||||
|
X IN- IN- -400 -100 200 R 40 40 1 1 W
|
||||||
|
X OUT+ OUT+ 400 100 200 L 40 40 1 1 w
|
||||||
|
X OUT- OUT- 400 -100 200 L 40 40 1 1 w
|
||||||
ENDDRAW
|
ENDDRAW
|
||||||
ENDDEF
|
ENDDEF
|
||||||
#
|
#
|
||||||
# Connector_Generic:Conn_01x10
|
# CANNode-rescue_Teensy3.2-teensy
|
||||||
#
|
#
|
||||||
DEF Connector_Generic:Conn_01x10 J 0 40 Y N 1 F N
|
DEF CANNode-rescue_Teensy3.2-teensy U 0 40 Y Y 1 F N
|
||||||
F0 "J" 0 500 50 H V C CNN
|
|
||||||
F1 "Connector_Generic:Conn_01x10" 0 -600 50 H V C CNN
|
|
||||||
F2 "" 0 0 50 H I C CNN
|
|
||||||
F3 "" 0 0 50 H I C CNN
|
|
||||||
$FPLIST
|
|
||||||
Connector*:*_1x??_*
|
|
||||||
$ENDFPLIST
|
|
||||||
DRAW
|
|
||||||
S -50 -495 0 -505 1 1 6 N
|
|
||||||
S -50 -395 0 -405 1 1 6 N
|
|
||||||
S -50 -295 0 -305 1 1 6 N
|
|
||||||
S -50 -195 0 -205 1 1 6 N
|
|
||||||
S -50 -95 0 -105 1 1 6 N
|
|
||||||
S -50 5 0 -5 1 1 6 N
|
|
||||||
S -50 105 0 95 1 1 6 N
|
|
||||||
S -50 205 0 195 1 1 6 N
|
|
||||||
S -50 305 0 295 1 1 6 N
|
|
||||||
S -50 405 0 395 1 1 6 N
|
|
||||||
S -50 450 50 -550 1 1 10 f
|
|
||||||
X Pin_1 1 -200 400 150 R 50 50 1 1 P
|
|
||||||
X Pin_10 10 -200 -500 150 R 50 50 1 1 P
|
|
||||||
X Pin_2 2 -200 300 150 R 50 50 1 1 P
|
|
||||||
X Pin_3 3 -200 200 150 R 50 50 1 1 P
|
|
||||||
X Pin_4 4 -200 100 150 R 50 50 1 1 P
|
|
||||||
X Pin_5 5 -200 0 150 R 50 50 1 1 P
|
|
||||||
X Pin_6 6 -200 -100 150 R 50 50 1 1 P
|
|
||||||
X Pin_7 7 -200 -200 150 R 50 50 1 1 P
|
|
||||||
X Pin_8 8 -200 -300 150 R 50 50 1 1 P
|
|
||||||
X Pin_9 9 -200 -400 150 R 50 50 1 1 P
|
|
||||||
ENDDRAW
|
|
||||||
ENDDEF
|
|
||||||
#
|
|
||||||
# Connector_Generic:Conn_02x03_Odd_Even
|
|
||||||
#
|
|
||||||
DEF Connector_Generic:Conn_02x03_Odd_Even J 0 40 Y N 1 F N
|
|
||||||
F0 "J" 50 200 50 H V C CNN
|
|
||||||
F1 "Connector_Generic:Conn_02x03_Odd_Even" 50 -200 50 H V C CNN
|
|
||||||
F2 "" 0 0 50 H I C CNN
|
|
||||||
F3 "" 0 0 50 H I C CNN
|
|
||||||
$FPLIST
|
|
||||||
Connector*:*_2x??_*
|
|
||||||
$ENDFPLIST
|
|
||||||
DRAW
|
|
||||||
S -50 -95 0 -105 1 1 6 N
|
|
||||||
S -50 5 0 -5 1 1 6 N
|
|
||||||
S -50 105 0 95 1 1 6 N
|
|
||||||
S -50 150 150 -150 1 1 10 f
|
|
||||||
S 150 -95 100 -105 1 1 6 N
|
|
||||||
S 150 5 100 -5 1 1 6 N
|
|
||||||
S 150 105 100 95 1 1 6 N
|
|
||||||
X Pin_1 1 -200 100 150 R 50 50 1 1 P
|
|
||||||
X Pin_2 2 300 100 150 L 50 50 1 1 P
|
|
||||||
X Pin_3 3 -200 0 150 R 50 50 1 1 P
|
|
||||||
X Pin_4 4 300 0 150 L 50 50 1 1 P
|
|
||||||
X Pin_5 5 -200 -100 150 R 50 50 1 1 P
|
|
||||||
X Pin_6 6 300 -100 150 L 50 50 1 1 P
|
|
||||||
ENDDRAW
|
|
||||||
ENDDEF
|
|
||||||
#
|
|
||||||
# Connector_Generic:Conn_02x04_Odd_Even
|
|
||||||
#
|
|
||||||
DEF Connector_Generic:Conn_02x04_Odd_Even J 0 40 Y N 1 F N
|
|
||||||
F0 "J" 50 200 50 H V C CNN
|
|
||||||
F1 "Connector_Generic:Conn_02x04_Odd_Even" 50 -300 50 H V C CNN
|
|
||||||
F2 "" 0 0 50 H I C CNN
|
|
||||||
F3 "" 0 0 50 H I C CNN
|
|
||||||
$FPLIST
|
|
||||||
Connector*:*_2x??_*
|
|
||||||
$ENDFPLIST
|
|
||||||
DRAW
|
|
||||||
S -50 -195 0 -205 1 1 6 N
|
|
||||||
S -50 -95 0 -105 1 1 6 N
|
|
||||||
S -50 5 0 -5 1 1 6 N
|
|
||||||
S -50 105 0 95 1 1 6 N
|
|
||||||
S -50 150 150 -250 1 1 10 f
|
|
||||||
S 150 -195 100 -205 1 1 6 N
|
|
||||||
S 150 -95 100 -105 1 1 6 N
|
|
||||||
S 150 5 100 -5 1 1 6 N
|
|
||||||
S 150 105 100 95 1 1 6 N
|
|
||||||
X Pin_1 1 -200 100 150 R 50 50 1 1 P
|
|
||||||
X Pin_2 2 300 100 150 L 50 50 1 1 P
|
|
||||||
X Pin_3 3 -200 0 150 R 50 50 1 1 P
|
|
||||||
X Pin_4 4 300 0 150 L 50 50 1 1 P
|
|
||||||
X Pin_5 5 -200 -100 150 R 50 50 1 1 P
|
|
||||||
X Pin_6 6 300 -100 150 L 50 50 1 1 P
|
|
||||||
X Pin_7 7 -200 -200 150 R 50 50 1 1 P
|
|
||||||
X Pin_8 8 300 -200 150 L 50 50 1 1 P
|
|
||||||
ENDDRAW
|
|
||||||
ENDDEF
|
|
||||||
#
|
|
||||||
# Device:CP_Small
|
|
||||||
#
|
|
||||||
DEF Device:CP_Small C 0 10 N N 1 F N
|
|
||||||
F0 "C" 10 70 50 H V L CNN
|
|
||||||
F1 "Device:CP_Small" 10 -80 50 H V L CNN
|
|
||||||
F2 "" 0 0 50 H I C CNN
|
|
||||||
F3 "" 0 0 50 H I C CNN
|
|
||||||
$FPLIST
|
|
||||||
CP_*
|
|
||||||
$ENDFPLIST
|
|
||||||
DRAW
|
|
||||||
S -60 -12 60 -27 0 1 0 F
|
|
||||||
S -60 27 60 12 0 1 0 N
|
|
||||||
P 2 0 1 0 -50 60 -30 60 N
|
|
||||||
P 2 0 1 0 -40 50 -40 70 N
|
|
||||||
X ~ 1 0 100 73 D 50 50 1 1 P
|
|
||||||
X ~ 2 0 -100 73 U 50 50 1 1 P
|
|
||||||
ENDDRAW
|
|
||||||
ENDDEF
|
|
||||||
#
|
|
||||||
# Device:C_Small
|
|
||||||
#
|
|
||||||
DEF Device:C_Small C 0 10 N N 1 F N
|
|
||||||
F0 "C" 10 70 50 H V L CNN
|
|
||||||
F1 "Device:C_Small" 10 -80 50 H V L CNN
|
|
||||||
F2 "" 0 0 50 H I C CNN
|
|
||||||
F3 "" 0 0 50 H I C CNN
|
|
||||||
$FPLIST
|
|
||||||
C_*
|
|
||||||
$ENDFPLIST
|
|
||||||
DRAW
|
|
||||||
P 2 0 1 13 -60 -20 60 -20 N
|
|
||||||
P 2 0 1 12 -60 20 60 20 N
|
|
||||||
X ~ 1 0 100 80 D 50 50 1 1 P
|
|
||||||
X ~ 2 0 -100 80 U 50 50 1 1 P
|
|
||||||
ENDDRAW
|
|
||||||
ENDDEF
|
|
||||||
#
|
|
||||||
# Device:Jumper_NC_Small
|
|
||||||
#
|
|
||||||
DEF Device:Jumper_NC_Small JP 0 30 N N 1 F N
|
|
||||||
F0 "JP" 0 80 50 H V C CNN
|
|
||||||
F1 "Device:Jumper_NC_Small" 10 -60 50 H V C CNN
|
|
||||||
F2 "" 0 0 50 H I C CNN
|
|
||||||
F3 "" 0 0 50 H I C CNN
|
|
||||||
DRAW
|
|
||||||
A 0 -10 57 450 1350 0 1 0 N 40 30 -40 30
|
|
||||||
C -40 0 20 0 1 0 N
|
|
||||||
C 40 0 20 0 1 0 N
|
|
||||||
X 1 1 -100 0 40 R 50 50 0 1 P
|
|
||||||
X 2 2 100 0 40 L 50 50 0 1 P
|
|
||||||
ENDDRAW
|
|
||||||
ENDDEF
|
|
||||||
#
|
|
||||||
# Device:R_Small
|
|
||||||
#
|
|
||||||
DEF Device:R_Small R 0 10 N N 1 F N
|
|
||||||
F0 "R" 30 20 50 H V L CNN
|
|
||||||
F1 "Device:R_Small" 30 -40 50 H V L CNN
|
|
||||||
F2 "" 0 0 50 H I C CNN
|
|
||||||
F3 "" 0 0 50 H I C CNN
|
|
||||||
$FPLIST
|
|
||||||
R_*
|
|
||||||
$ENDFPLIST
|
|
||||||
DRAW
|
|
||||||
S -30 70 30 -70 0 1 8 N
|
|
||||||
X ~ 1 0 100 30 D 50 50 1 1 P
|
|
||||||
X ~ 2 0 -100 30 U 50 50 1 1 P
|
|
||||||
ENDDRAW
|
|
||||||
ENDDEF
|
|
||||||
#
|
|
||||||
# Interface:PCA9306
|
|
||||||
#
|
|
||||||
DEF Interface:PCA9306 U 0 40 Y Y 1 F N
|
|
||||||
F0 "U" -300 450 50 H V L CNN
|
|
||||||
F1 "Interface:PCA9306" 200 450 50 H V L CNN
|
|
||||||
F2 "" -400 350 50 H I C CNN
|
|
||||||
F3 "" -300 450 50 H I C CNN
|
|
||||||
$FPLIST
|
|
||||||
SSOP*2.95x2.8mm*P0.65mm*
|
|
||||||
VSSOP*2.3x2mm*P0.5mm*
|
|
||||||
X2SON*1.4x1mm*P0.35mm*
|
|
||||||
$ENDFPLIST
|
|
||||||
DRAW
|
|
||||||
S -300 400 300 -400 0 1 10 f
|
|
||||||
X GND 1 0 -500 100 U 50 50 1 1 W
|
|
||||||
X VREF1 2 -100 500 100 D 50 50 1 1 W
|
|
||||||
X SCL1 3 -400 0 100 R 50 50 1 1 B
|
|
||||||
X SDA1 4 -400 -100 100 R 50 50 1 1 B
|
|
||||||
X SDA2 5 400 -100 100 L 50 50 1 1 B
|
|
||||||
X SCL2 6 400 0 100 L 50 50 1 1 B
|
|
||||||
X VREF2 7 100 500 100 D 50 50 1 1 W
|
|
||||||
X EN 8 400 100 100 L 50 50 1 1 I
|
|
||||||
ENDDRAW
|
|
||||||
ENDDEF
|
|
||||||
#
|
|
||||||
# Interface_CAN_LIN:SN65HVD230
|
|
||||||
#
|
|
||||||
DEF Interface_CAN_LIN:SN65HVD230 U 0 40 Y Y 1 F N
|
|
||||||
F0 "U" -100 400 50 H V R CNN
|
|
||||||
F1 "Interface_CAN_LIN:SN65HVD230" -100 300 50 H V R CNN
|
|
||||||
F2 "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" 0 -500 50 H I C CNN
|
|
||||||
F3 "" -100 400 50 H I C CNN
|
|
||||||
ALIAS SN65HVD231
|
|
||||||
$FPLIST
|
|
||||||
SOIC*3.9x4.9mm*P1.27mm*
|
|
||||||
$ENDFPLIST
|
|
||||||
DRAW
|
|
||||||
S -300 200 300 -300 0 1 10 f
|
|
||||||
X D 1 -400 100 100 R 50 50 1 1 I
|
|
||||||
X GND 2 0 -400 100 U 50 50 1 1 W
|
|
||||||
X VCC 3 0 300 100 D 50 50 1 1 W
|
|
||||||
X R 4 -400 0 100 R 50 50 1 1 O
|
|
||||||
X Vref 5 -400 -100 100 R 50 50 1 1 O
|
|
||||||
X CANL 6 400 -100 100 L 50 50 1 1 B
|
|
||||||
X CANH 7 400 0 100 L 50 50 1 1 B
|
|
||||||
X Rs 8 -400 -200 100 R 50 50 1 1 I
|
|
||||||
ENDDRAW
|
|
||||||
ENDDEF
|
|
||||||
#
|
|
||||||
# Interface_UART:MAX3485
|
|
||||||
#
|
|
||||||
DEF Interface_UART:MAX3485 U 0 20 Y Y 1 F N
|
|
||||||
F0 "U" -240 450 50 H V C CNN
|
|
||||||
F1 "Interface_UART:MAX3485" 30 450 50 H V L CNN
|
|
||||||
F2 "" 0 -700 50 H I C CNN
|
|
||||||
F3 "" 0 50 50 H I C CNN
|
|
||||||
ALIAS MAX483E MAX485E MAX487E MAX1487E MAX3485 MAX3483 MAX3486
|
|
||||||
$FPLIST
|
|
||||||
DIP*W7.62mm*
|
|
||||||
SOIC*3.9x4.9mm*P1.27mm*
|
|
||||||
$ENDFPLIST
|
|
||||||
DRAW
|
|
||||||
C -12 -145 14 0 1 10 F
|
|
||||||
C -1 59 14 0 1 10 F
|
|
||||||
C 65 75 14 0 1 10 F
|
|
||||||
S -300 400 300 -500 0 1 10 f
|
|
||||||
S 50 125 50 125 0 1 0 N
|
|
||||||
P 2 0 1 10 -160 -200 -75 -200 N
|
|
||||||
P 2 0 1 10 -160 100 -50 100 N
|
|
||||||
P 2 0 1 10 -50 -126 -50 -136 N
|
|
||||||
P 2 0 1 10 -25 -200 210 -200 N
|
|
||||||
P 3 0 1 10 -160 -100 -50 -100 -50 -125 N
|
|
||||||
P 3 0 1 10 0 50 0 0 -160 0 N
|
|
||||||
P 3 0 1 10 50 125 150 125 150 -200 N
|
|
||||||
P 3 0 1 10 100 75 100 -150 0 -150 N
|
|
||||||
P 4 0 1 10 -75 -125 -75 -225 25 -175 -75 -125 N
|
|
||||||
P 4 0 1 10 -50 100 50 150 50 50 -50 100 N
|
|
||||||
P 4 0 1 10 75 75 175 75 175 100 210 100 N
|
|
||||||
X RO 1 -400 100 100 R 50 50 1 1 O
|
|
||||||
X ~RE 2 -400 0 100 R 50 50 1 1 I
|
|
||||||
X DE 3 -400 -100 100 R 50 50 1 1 I
|
|
||||||
X DI 4 -400 -200 100 R 50 50 1 1 I
|
|
||||||
X GND 5 0 -600 100 U 50 50 1 1 W
|
|
||||||
X A 6 400 -200 100 L 50 50 1 1 B
|
|
||||||
X B 7 400 100 100 L 50 50 1 1 B
|
|
||||||
X VCC 8 0 500 100 D 50 50 1 1 W
|
|
||||||
ENDDRAW
|
|
||||||
ENDDEF
|
|
||||||
#
|
|
||||||
# Jumper:Jumper_3_Bridged12
|
|
||||||
#
|
|
||||||
DEF Jumper:Jumper_3_Bridged12 JP 0 0 Y N 1 F N
|
|
||||||
F0 "JP" -100 -100 50 H V C CNN
|
|
||||||
F1 "Jumper:Jumper_3_Bridged12" 0 110 50 H V C CNN
|
|
||||||
F2 "" 0 0 50 H I C CNN
|
|
||||||
F3 "" 0 0 50 H I C CNN
|
|
||||||
$FPLIST
|
|
||||||
Jumper*Bridged12*
|
|
||||||
$ENDFPLIST
|
|
||||||
DRAW
|
|
||||||
A -65 -50 89 1282 518 0 1 0 N -120 20 -10 20
|
|
||||||
C -130 0 20 0 0 0 N
|
|
||||||
C 0 0 20 0 0 0 N
|
|
||||||
C 130 0 20 0 0 0 N
|
|
||||||
P 2 0 1 0 0 -50 0 -20 N
|
|
||||||
X A 1 -250 0 100 R 50 50 1 1 P
|
|
||||||
X C 2 0 -150 100 U 50 50 1 1 I
|
|
||||||
X B 3 250 0 100 L 50 50 1 1 P
|
|
||||||
ENDDRAW
|
|
||||||
ENDDEF
|
|
||||||
#
|
|
||||||
# Regulator_Linear:LM1117-5.0
|
|
||||||
#
|
|
||||||
DEF Regulator_Linear:LM1117-5.0 U 0 10 Y Y 1 F N
|
|
||||||
F0 "U" -150 125 50 H V C CNN
|
|
||||||
F1 "Regulator_Linear:LM1117-5.0" 0 125 50 H V L CNN
|
|
||||||
F2 "" 0 0 50 H I C CNN
|
|
||||||
F3 "" 0 0 50 H I C CNN
|
|
||||||
ALIAS LM1117-2.5 LM1117-3.3 LM1117-5.0 TLV1117-15 TLV1117-18 TLV1117-25 TLV1117-33 TLV1117-50
|
|
||||||
$FPLIST
|
|
||||||
SOT?223*
|
|
||||||
TO?263*
|
|
||||||
TO?252*
|
|
||||||
TO?220*
|
|
||||||
$ENDFPLIST
|
|
||||||
DRAW
|
|
||||||
S -200 -200 200 75 0 1 10 f
|
|
||||||
X GND 1 0 -300 100 U 50 50 1 1 W
|
|
||||||
X VO 2 300 0 100 L 50 50 1 1 w
|
|
||||||
X VI 3 -300 0 100 R 50 50 1 1 W
|
|
||||||
ENDDRAW
|
|
||||||
ENDDEF
|
|
||||||
#
|
|
||||||
# power:+12V
|
|
||||||
#
|
|
||||||
DEF power:+12V #PWR 0 0 Y Y 1 F P
|
|
||||||
F0 "#PWR" 0 -150 50 H I C CNN
|
|
||||||
F1 "power:+12V" 0 140 50 H V C CNN
|
|
||||||
F2 "" 0 0 50 H I C CNN
|
|
||||||
F3 "" 0 0 50 H I C CNN
|
|
||||||
DRAW
|
|
||||||
P 2 0 1 0 -30 50 0 100 N
|
|
||||||
P 2 0 1 0 0 0 0 100 N
|
|
||||||
P 2 0 1 0 0 100 30 50 N
|
|
||||||
X +12V 1 0 0 0 U 50 50 1 1 W N
|
|
||||||
ENDDRAW
|
|
||||||
ENDDEF
|
|
||||||
#
|
|
||||||
# power:+3.3V
|
|
||||||
#
|
|
||||||
DEF power:+3.3V #PWR 0 0 Y Y 1 F P
|
|
||||||
F0 "#PWR" 0 -150 50 H I C CNN
|
|
||||||
F1 "power:+3.3V" 0 140 50 H V C CNN
|
|
||||||
F2 "" 0 0 50 H I C CNN
|
|
||||||
F3 "" 0 0 50 H I C CNN
|
|
||||||
ALIAS +3.3V
|
|
||||||
DRAW
|
|
||||||
P 2 0 1 0 -30 50 0 100 N
|
|
||||||
P 2 0 1 0 0 0 0 100 N
|
|
||||||
P 2 0 1 0 0 100 30 50 N
|
|
||||||
X +3V3 1 0 0 0 U 50 50 1 1 W N
|
|
||||||
ENDDRAW
|
|
||||||
ENDDEF
|
|
||||||
#
|
|
||||||
# power:+5V
|
|
||||||
#
|
|
||||||
DEF power:+5V #PWR 0 0 Y Y 1 F P
|
|
||||||
F0 "#PWR" 0 -150 50 H I C CNN
|
|
||||||
F1 "power:+5V" 0 140 50 H V C CNN
|
|
||||||
F2 "" 0 0 50 H I C CNN
|
|
||||||
F3 "" 0 0 50 H I C CNN
|
|
||||||
DRAW
|
|
||||||
P 2 0 1 0 -30 50 0 100 N
|
|
||||||
P 2 0 1 0 0 0 0 100 N
|
|
||||||
P 2 0 1 0 0 100 30 50 N
|
|
||||||
X +5V 1 0 0 0 U 50 50 1 1 W N
|
|
||||||
ENDDRAW
|
|
||||||
ENDDEF
|
|
||||||
#
|
|
||||||
# power:GND
|
|
||||||
#
|
|
||||||
DEF power:GND #PWR 0 0 Y Y 1 F P
|
|
||||||
F0 "#PWR" 0 -250 50 H I C CNN
|
|
||||||
F1 "power:GND" 0 -150 50 H V C CNN
|
|
||||||
F2 "" 0 0 50 H I C CNN
|
|
||||||
F3 "" 0 0 50 H I C CNN
|
|
||||||
DRAW
|
|
||||||
P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N
|
|
||||||
X GND 1 0 0 0 D 50 50 1 1 W N
|
|
||||||
ENDDRAW
|
|
||||||
ENDDEF
|
|
||||||
#
|
|
||||||
# power:PWR_FLAG
|
|
||||||
#
|
|
||||||
DEF power:PWR_FLAG #FLG 0 0 N N 1 F P
|
|
||||||
F0 "#FLG" 0 75 50 H I C CNN
|
|
||||||
F1 "power:PWR_FLAG" 0 150 50 H V C CNN
|
|
||||||
F2 "" 0 0 50 H I C CNN
|
|
||||||
F3 "" 0 0 50 H I C CNN
|
|
||||||
DRAW
|
|
||||||
P 6 0 1 0 0 0 0 50 -40 75 0 100 40 75 0 50 N
|
|
||||||
X pwr 1 0 0 0 U 50 50 0 0 w
|
|
||||||
ENDDRAW
|
|
||||||
ENDDEF
|
|
||||||
#
|
|
||||||
# teensy:Teensy3.2
|
|
||||||
#
|
|
||||||
DEF teensy:Teensy3.2 U 0 40 Y Y 1 F N
|
|
||||||
F0 "U" -700 -850 60 H V C CNN
|
F0 "U" -700 -850 60 H V C CNN
|
||||||
F1 "teensy:Teensy3.2" 550 -850 60 H V C CNN
|
F1 "CANNode-rescue_Teensy3.2-teensy" 550 -850 60 H V C CNN
|
||||||
F2 "" -200 -800 60 H V C CNN
|
F2 "" -200 -800 60 H V C CNN
|
||||||
F3 "" -200 -800 60 H V C CNN
|
F3 "" -200 -800 60 H V C CNN
|
||||||
DRAW
|
DRAW
|
||||||
@ -520,4 +89,398 @@ X 7_RX3_DOUT 9 -950 -100 200 R 50 50 1 1 B
|
|||||||
ENDDRAW
|
ENDDRAW
|
||||||
ENDDEF
|
ENDDEF
|
||||||
#
|
#
|
||||||
|
# Connector_Generic_Conn_01x03
|
||||||
|
#
|
||||||
|
DEF Connector_Generic_Conn_01x03 J 0 40 Y N 1 F N
|
||||||
|
F0 "J" 0 200 50 H V C CNN
|
||||||
|
F1 "Connector_Generic_Conn_01x03" 0 -200 50 H V C CNN
|
||||||
|
F2 "" 0 0 50 H I C CNN
|
||||||
|
F3 "" 0 0 50 H I C CNN
|
||||||
|
$FPLIST
|
||||||
|
Connector*:*_1x??_*
|
||||||
|
$ENDFPLIST
|
||||||
|
DRAW
|
||||||
|
S -50 -95 0 -105 1 1 6 N
|
||||||
|
S -50 5 0 -5 1 1 6 N
|
||||||
|
S -50 105 0 95 1 1 6 N
|
||||||
|
S -50 150 50 -150 1 1 10 f
|
||||||
|
X Pin_1 1 -200 100 150 R 50 50 1 1 P
|
||||||
|
X Pin_2 2 -200 0 150 R 50 50 1 1 P
|
||||||
|
X Pin_3 3 -200 -100 150 R 50 50 1 1 P
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# Connector_Generic_Conn_01x04
|
||||||
|
#
|
||||||
|
DEF Connector_Generic_Conn_01x04 J 0 40 Y N 1 F N
|
||||||
|
F0 "J" 0 200 50 H V C CNN
|
||||||
|
F1 "Connector_Generic_Conn_01x04" 0 -300 50 H V C CNN
|
||||||
|
F2 "" 0 0 50 H I C CNN
|
||||||
|
F3 "" 0 0 50 H I C CNN
|
||||||
|
$FPLIST
|
||||||
|
Connector*:*_1x??_*
|
||||||
|
$ENDFPLIST
|
||||||
|
DRAW
|
||||||
|
S -50 -195 0 -205 1 1 6 N
|
||||||
|
S -50 -95 0 -105 1 1 6 N
|
||||||
|
S -50 5 0 -5 1 1 6 N
|
||||||
|
S -50 105 0 95 1 1 6 N
|
||||||
|
S -50 150 50 -250 1 1 10 f
|
||||||
|
X Pin_1 1 -200 100 150 R 50 50 1 1 P
|
||||||
|
X Pin_2 2 -200 0 150 R 50 50 1 1 P
|
||||||
|
X Pin_3 3 -200 -100 150 R 50 50 1 1 P
|
||||||
|
X Pin_4 4 -200 -200 150 R 50 50 1 1 P
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# Connector_Generic_Conn_01x10
|
||||||
|
#
|
||||||
|
DEF Connector_Generic_Conn_01x10 J 0 40 Y N 1 F N
|
||||||
|
F0 "J" 0 500 50 H V C CNN
|
||||||
|
F1 "Connector_Generic_Conn_01x10" 0 -600 50 H V C CNN
|
||||||
|
F2 "" 0 0 50 H I C CNN
|
||||||
|
F3 "" 0 0 50 H I C CNN
|
||||||
|
$FPLIST
|
||||||
|
Connector*:*_1x??_*
|
||||||
|
$ENDFPLIST
|
||||||
|
DRAW
|
||||||
|
S -50 -495 0 -505 1 1 6 N
|
||||||
|
S -50 -395 0 -405 1 1 6 N
|
||||||
|
S -50 -295 0 -305 1 1 6 N
|
||||||
|
S -50 -195 0 -205 1 1 6 N
|
||||||
|
S -50 -95 0 -105 1 1 6 N
|
||||||
|
S -50 5 0 -5 1 1 6 N
|
||||||
|
S -50 105 0 95 1 1 6 N
|
||||||
|
S -50 205 0 195 1 1 6 N
|
||||||
|
S -50 305 0 295 1 1 6 N
|
||||||
|
S -50 405 0 395 1 1 6 N
|
||||||
|
S -50 450 50 -550 1 1 10 f
|
||||||
|
X Pin_1 1 -200 400 150 R 50 50 1 1 P
|
||||||
|
X Pin_10 10 -200 -500 150 R 50 50 1 1 P
|
||||||
|
X Pin_2 2 -200 300 150 R 50 50 1 1 P
|
||||||
|
X Pin_3 3 -200 200 150 R 50 50 1 1 P
|
||||||
|
X Pin_4 4 -200 100 150 R 50 50 1 1 P
|
||||||
|
X Pin_5 5 -200 0 150 R 50 50 1 1 P
|
||||||
|
X Pin_6 6 -200 -100 150 R 50 50 1 1 P
|
||||||
|
X Pin_7 7 -200 -200 150 R 50 50 1 1 P
|
||||||
|
X Pin_8 8 -200 -300 150 R 50 50 1 1 P
|
||||||
|
X Pin_9 9 -200 -400 150 R 50 50 1 1 P
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# Connector_Generic_Conn_02x03_Odd_Even
|
||||||
|
#
|
||||||
|
DEF Connector_Generic_Conn_02x03_Odd_Even J 0 40 Y N 1 F N
|
||||||
|
F0 "J" 50 200 50 H V C CNN
|
||||||
|
F1 "Connector_Generic_Conn_02x03_Odd_Even" 50 -200 50 H V C CNN
|
||||||
|
F2 "" 0 0 50 H I C CNN
|
||||||
|
F3 "" 0 0 50 H I C CNN
|
||||||
|
$FPLIST
|
||||||
|
Connector*:*_2x??_*
|
||||||
|
$ENDFPLIST
|
||||||
|
DRAW
|
||||||
|
S -50 -95 0 -105 1 1 6 N
|
||||||
|
S -50 5 0 -5 1 1 6 N
|
||||||
|
S -50 105 0 95 1 1 6 N
|
||||||
|
S -50 150 150 -150 1 1 10 f
|
||||||
|
S 150 -95 100 -105 1 1 6 N
|
||||||
|
S 150 5 100 -5 1 1 6 N
|
||||||
|
S 150 105 100 95 1 1 6 N
|
||||||
|
X Pin_1 1 -200 100 150 R 50 50 1 1 P
|
||||||
|
X Pin_2 2 300 100 150 L 50 50 1 1 P
|
||||||
|
X Pin_3 3 -200 0 150 R 50 50 1 1 P
|
||||||
|
X Pin_4 4 300 0 150 L 50 50 1 1 P
|
||||||
|
X Pin_5 5 -200 -100 150 R 50 50 1 1 P
|
||||||
|
X Pin_6 6 300 -100 150 L 50 50 1 1 P
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# Connector_Generic_Conn_02x04_Odd_Even
|
||||||
|
#
|
||||||
|
DEF Connector_Generic_Conn_02x04_Odd_Even J 0 40 Y N 1 F N
|
||||||
|
F0 "J" 50 200 50 H V C CNN
|
||||||
|
F1 "Connector_Generic_Conn_02x04_Odd_Even" 50 -300 50 H V C CNN
|
||||||
|
F2 "" 0 0 50 H I C CNN
|
||||||
|
F3 "" 0 0 50 H I C CNN
|
||||||
|
$FPLIST
|
||||||
|
Connector*:*_2x??_*
|
||||||
|
$ENDFPLIST
|
||||||
|
DRAW
|
||||||
|
S -50 -195 0 -205 1 1 6 N
|
||||||
|
S -50 -95 0 -105 1 1 6 N
|
||||||
|
S -50 5 0 -5 1 1 6 N
|
||||||
|
S -50 105 0 95 1 1 6 N
|
||||||
|
S -50 150 150 -250 1 1 10 f
|
||||||
|
S 150 -195 100 -205 1 1 6 N
|
||||||
|
S 150 -95 100 -105 1 1 6 N
|
||||||
|
S 150 5 100 -5 1 1 6 N
|
||||||
|
S 150 105 100 95 1 1 6 N
|
||||||
|
X Pin_1 1 -200 100 150 R 50 50 1 1 P
|
||||||
|
X Pin_2 2 300 100 150 L 50 50 1 1 P
|
||||||
|
X Pin_3 3 -200 0 150 R 50 50 1 1 P
|
||||||
|
X Pin_4 4 300 0 150 L 50 50 1 1 P
|
||||||
|
X Pin_5 5 -200 -100 150 R 50 50 1 1 P
|
||||||
|
X Pin_6 6 300 -100 150 L 50 50 1 1 P
|
||||||
|
X Pin_7 7 -200 -200 150 R 50 50 1 1 P
|
||||||
|
X Pin_8 8 300 -200 150 L 50 50 1 1 P
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# Device_C_Small
|
||||||
|
#
|
||||||
|
DEF Device_C_Small C 0 10 N N 1 F N
|
||||||
|
F0 "C" 10 70 50 H V L CNN
|
||||||
|
F1 "Device_C_Small" 10 -80 50 H V L CNN
|
||||||
|
F2 "" 0 0 50 H I C CNN
|
||||||
|
F3 "" 0 0 50 H I C CNN
|
||||||
|
$FPLIST
|
||||||
|
C_*
|
||||||
|
$ENDFPLIST
|
||||||
|
DRAW
|
||||||
|
P 2 0 1 13 -60 -20 60 -20 N
|
||||||
|
P 2 0 1 12 -60 20 60 20 N
|
||||||
|
X ~ 1 0 100 80 D 50 50 1 1 P
|
||||||
|
X ~ 2 0 -100 80 U 50 50 1 1 P
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# Device_Jumper_NC_Small
|
||||||
|
#
|
||||||
|
DEF Device_Jumper_NC_Small JP 0 30 N N 1 F N
|
||||||
|
F0 "JP" 0 80 50 H V C CNN
|
||||||
|
F1 "Device_Jumper_NC_Small" 10 -60 50 H V C CNN
|
||||||
|
F2 "" 0 0 50 H I C CNN
|
||||||
|
F3 "" 0 0 50 H I C CNN
|
||||||
|
$FPLIST
|
||||||
|
SolderJumper*Bridged*
|
||||||
|
Jumper*
|
||||||
|
TestPoint*2Pads*
|
||||||
|
TestPoint*Bridge*
|
||||||
|
$ENDFPLIST
|
||||||
|
DRAW
|
||||||
|
A 0 -10 57 450 1350 0 1 0 N 40 30 -40 30
|
||||||
|
C -40 0 20 0 1 0 N
|
||||||
|
C 40 0 20 0 1 0 N
|
||||||
|
X 1 1 -100 0 40 R 50 50 0 1 P
|
||||||
|
X 2 2 100 0 40 L 50 50 0 1 P
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# Device_R_Small
|
||||||
|
#
|
||||||
|
DEF Device_R_Small R 0 10 N N 1 F N
|
||||||
|
F0 "R" 30 20 50 H V L CNN
|
||||||
|
F1 "Device_R_Small" 30 -40 50 H V L CNN
|
||||||
|
F2 "" 0 0 50 H I C CNN
|
||||||
|
F3 "" 0 0 50 H I C CNN
|
||||||
|
$FPLIST
|
||||||
|
R_*
|
||||||
|
$ENDFPLIST
|
||||||
|
DRAW
|
||||||
|
S -30 70 30 -70 0 1 8 N
|
||||||
|
X ~ 1 0 100 30 D 50 50 1 1 P
|
||||||
|
X ~ 2 0 -100 30 U 50 50 1 1 P
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# Interface_CAN_LIN_SN65HVD230
|
||||||
|
#
|
||||||
|
DEF Interface_CAN_LIN_SN65HVD230 U 0 40 Y Y 1 F N
|
||||||
|
F0 "U" -100 400 50 H V R CNN
|
||||||
|
F1 "Interface_CAN_LIN_SN65HVD230" -100 300 50 H V R CNN
|
||||||
|
F2 "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" 0 -500 50 H I C CNN
|
||||||
|
F3 "" -100 400 50 H I C CNN
|
||||||
|
ALIAS SN65HVD231
|
||||||
|
$FPLIST
|
||||||
|
SOIC*3.9x4.9mm*P1.27mm*
|
||||||
|
$ENDFPLIST
|
||||||
|
DRAW
|
||||||
|
S -300 200 300 -300 0 1 10 f
|
||||||
|
X D 1 -400 100 100 R 50 50 1 1 I
|
||||||
|
X GND 2 0 -400 100 U 50 50 1 1 W
|
||||||
|
X VCC 3 0 300 100 D 50 50 1 1 W
|
||||||
|
X R 4 -400 0 100 R 50 50 1 1 O
|
||||||
|
X Vref 5 -400 -100 100 R 50 50 1 1 O
|
||||||
|
X CANL 6 400 -100 100 L 50 50 1 1 B
|
||||||
|
X CANH 7 400 0 100 L 50 50 1 1 B
|
||||||
|
X Rs 8 -400 -200 100 R 50 50 1 1 I
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# Interface_PCA9306
|
||||||
|
#
|
||||||
|
DEF Interface_PCA9306 U 0 40 Y Y 1 F N
|
||||||
|
F0 "U" -300 450 50 H V L CNN
|
||||||
|
F1 "Interface_PCA9306" 200 450 50 H V L CNN
|
||||||
|
F2 "" -400 350 50 H I C CNN
|
||||||
|
F3 "" -300 450 50 H I C CNN
|
||||||
|
$FPLIST
|
||||||
|
SSOP*2.95x2.8mm*P0.65mm*
|
||||||
|
VSSOP*2.3x2mm*P0.5mm*
|
||||||
|
X2SON*1.4x1mm*P0.35mm*
|
||||||
|
$ENDFPLIST
|
||||||
|
DRAW
|
||||||
|
S -300 400 300 -400 0 1 10 f
|
||||||
|
X GND 1 0 -500 100 U 50 50 1 1 W
|
||||||
|
X VREF1 2 -100 500 100 D 50 50 1 1 W
|
||||||
|
X SCL1 3 -400 0 100 R 50 50 1 1 B
|
||||||
|
X SDA1 4 -400 -100 100 R 50 50 1 1 B
|
||||||
|
X SDA2 5 400 -100 100 L 50 50 1 1 B
|
||||||
|
X SCL2 6 400 0 100 L 50 50 1 1 B
|
||||||
|
X VREF2 7 100 500 100 D 50 50 1 1 W
|
||||||
|
X EN 8 400 100 100 L 50 50 1 1 I
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# Interface_UART_MAX3485
|
||||||
|
#
|
||||||
|
DEF Interface_UART_MAX3485 U 0 20 Y Y 1 F N
|
||||||
|
F0 "U" -240 450 50 H V C CNN
|
||||||
|
F1 "Interface_UART_MAX3485" 30 450 50 H V L CNN
|
||||||
|
F2 "" 0 -700 50 H I C CNN
|
||||||
|
F3 "" 0 50 50 H I C CNN
|
||||||
|
ALIAS MAX483E MAX485E MAX487E MAX1487E MAX3485 MAX3483 MAX3486
|
||||||
|
$FPLIST
|
||||||
|
DIP*W7.62mm*
|
||||||
|
SOIC*3.9x4.9mm*P1.27mm*
|
||||||
|
$ENDFPLIST
|
||||||
|
DRAW
|
||||||
|
C -12 -145 14 0 1 10 F
|
||||||
|
C -1 59 14 0 1 10 F
|
||||||
|
C 65 75 14 0 1 10 F
|
||||||
|
S -300 400 300 -500 0 1 10 f
|
||||||
|
S 50 125 50 125 0 1 0 N
|
||||||
|
P 2 0 1 10 -160 -200 -75 -200 N
|
||||||
|
P 2 0 1 10 -160 100 -50 100 N
|
||||||
|
P 2 0 1 10 -50 -126 -50 -136 N
|
||||||
|
P 2 0 1 10 -25 -200 210 -200 N
|
||||||
|
P 3 0 1 10 -160 -100 -50 -100 -50 -125 N
|
||||||
|
P 3 0 1 10 0 50 0 0 -160 0 N
|
||||||
|
P 3 0 1 10 50 125 150 125 150 -200 N
|
||||||
|
P 3 0 1 10 100 75 100 -150 0 -150 N
|
||||||
|
P 4 0 1 10 -75 -125 -75 -225 25 -175 -75 -125 N
|
||||||
|
P 4 0 1 10 -50 100 50 150 50 50 -50 100 N
|
||||||
|
P 4 0 1 10 75 75 175 75 175 100 210 100 N
|
||||||
|
X RO 1 -400 100 100 R 50 50 1 1 O
|
||||||
|
X ~RE 2 -400 0 100 R 50 50 1 1 I
|
||||||
|
X DE 3 -400 -100 100 R 50 50 1 1 I
|
||||||
|
X DI 4 -400 -200 100 R 50 50 1 1 I
|
||||||
|
X GND 5 0 -600 100 U 50 50 1 1 W
|
||||||
|
X A 6 400 -200 100 L 50 50 1 1 B
|
||||||
|
X B 7 400 100 100 L 50 50 1 1 B
|
||||||
|
X VCC 8 0 500 100 D 50 50 1 1 W
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# Jumper_Jumper_3_Bridged12
|
||||||
|
#
|
||||||
|
DEF Jumper_Jumper_3_Bridged12 JP 0 0 Y N 1 F N
|
||||||
|
F0 "JP" -100 -100 50 H V C CNN
|
||||||
|
F1 "Jumper_Jumper_3_Bridged12" 0 110 50 H V C CNN
|
||||||
|
F2 "" 0 0 50 H I C CNN
|
||||||
|
F3 "" 0 0 50 H I C CNN
|
||||||
|
$FPLIST
|
||||||
|
Jumper*
|
||||||
|
TestPoint*3Pads*
|
||||||
|
TestPoint*Bridge*
|
||||||
|
$ENDFPLIST
|
||||||
|
DRAW
|
||||||
|
A -65 -50 89 1282 518 0 1 0 N -120 20 -10 20
|
||||||
|
C -130 0 20 0 0 0 N
|
||||||
|
C 0 0 20 0 0 0 N
|
||||||
|
C 130 0 20 0 0 0 N
|
||||||
|
P 2 0 1 0 0 -50 0 -20 N
|
||||||
|
X A 1 -250 0 100 R 50 50 1 1 P
|
||||||
|
X C 2 0 -150 100 U 50 50 1 1 I
|
||||||
|
X B 3 250 0 100 L 50 50 1 1 P
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# Mechanical_MountingHole
|
||||||
|
#
|
||||||
|
DEF Mechanical_MountingHole H 0 40 Y Y 1 F N
|
||||||
|
F0 "H" 0 200 50 H V C CNN
|
||||||
|
F1 "Mechanical_MountingHole" 0 125 50 H V C CNN
|
||||||
|
F2 "" 0 0 50 H I C CNN
|
||||||
|
F3 "" 0 0 50 H I C CNN
|
||||||
|
$FPLIST
|
||||||
|
MountingHole*
|
||||||
|
$ENDFPLIST
|
||||||
|
DRAW
|
||||||
|
C 0 0 50 0 1 50 N
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# power_+12V
|
||||||
|
#
|
||||||
|
DEF power_+12V #PWR 0 0 Y Y 1 F P
|
||||||
|
F0 "#PWR" 0 -150 50 H I C CNN
|
||||||
|
F1 "power_+12V" 0 140 50 H V C CNN
|
||||||
|
F2 "" 0 0 50 H I C CNN
|
||||||
|
F3 "" 0 0 50 H I C CNN
|
||||||
|
DRAW
|
||||||
|
P 2 0 1 0 -30 50 0 100 N
|
||||||
|
P 2 0 1 0 0 0 0 100 N
|
||||||
|
P 2 0 1 0 0 100 30 50 N
|
||||||
|
X +12V 1 0 0 0 U 50 50 1 1 W N
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# power_+3.3V
|
||||||
|
#
|
||||||
|
DEF power_+3.3V #PWR 0 0 Y Y 1 F P
|
||||||
|
F0 "#PWR" 0 -150 50 H I C CNN
|
||||||
|
F1 "power_+3.3V" 0 140 50 H V C CNN
|
||||||
|
F2 "" 0 0 50 H I C CNN
|
||||||
|
F3 "" 0 0 50 H I C CNN
|
||||||
|
ALIAS +3.3V
|
||||||
|
DRAW
|
||||||
|
P 2 0 1 0 -30 50 0 100 N
|
||||||
|
P 2 0 1 0 0 0 0 100 N
|
||||||
|
P 2 0 1 0 0 100 30 50 N
|
||||||
|
X +3V3 1 0 0 0 U 50 50 1 1 W N
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# power_+5V
|
||||||
|
#
|
||||||
|
DEF power_+5V #PWR 0 0 Y Y 1 F P
|
||||||
|
F0 "#PWR" 0 -150 50 H I C CNN
|
||||||
|
F1 "power_+5V" 0 140 50 H V C CNN
|
||||||
|
F2 "" 0 0 50 H I C CNN
|
||||||
|
F3 "" 0 0 50 H I C CNN
|
||||||
|
DRAW
|
||||||
|
P 2 0 1 0 -30 50 0 100 N
|
||||||
|
P 2 0 1 0 0 0 0 100 N
|
||||||
|
P 2 0 1 0 0 100 30 50 N
|
||||||
|
X +5V 1 0 0 0 U 50 50 1 1 W N
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# power_GND
|
||||||
|
#
|
||||||
|
DEF power_GND #PWR 0 0 Y Y 1 F P
|
||||||
|
F0 "#PWR" 0 -250 50 H I C CNN
|
||||||
|
F1 "power_GND" 0 -150 50 H V C CNN
|
||||||
|
F2 "" 0 0 50 H I C CNN
|
||||||
|
F3 "" 0 0 50 H I C CNN
|
||||||
|
DRAW
|
||||||
|
P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N
|
||||||
|
X GND 1 0 0 0 D 50 50 1 1 W N
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
# power_PWR_FLAG
|
||||||
|
#
|
||||||
|
DEF power_PWR_FLAG #FLG 0 0 N N 1 F P
|
||||||
|
F0 "#FLG" 0 75 50 H I C CNN
|
||||||
|
F1 "power_PWR_FLAG" 0 150 50 H V C CNN
|
||||||
|
F2 "" 0 0 50 H I C CNN
|
||||||
|
F3 "" 0 0 50 H I C CNN
|
||||||
|
DRAW
|
||||||
|
P 6 0 1 0 0 0 0 50 -40 75 0 100 40 75 0 50 N
|
||||||
|
X pwr 1 0 0 0 U 50 50 0 0 w
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
#End Library
|
#End Library
|
||||||
|
@ -1,29 +1,10 @@
|
|||||||
update=Date
|
update=Tue 30 Jun 2020 09:41:16 PM CEST
|
||||||
version=1
|
version=1
|
||||||
last_client=kicad
|
last_client=kicad
|
||||||
[general]
|
[general]
|
||||||
version=1
|
version=1
|
||||||
RootSch=
|
RootSch=
|
||||||
BoardNm=
|
BoardNm=
|
||||||
[pcbnew]
|
|
||||||
version=1
|
|
||||||
LastNetListRead=
|
|
||||||
UseCmpFile=1
|
|
||||||
PadDrill=0.600000000000
|
|
||||||
PadDrillOvalY=0.600000000000
|
|
||||||
PadSizeH=1.500000000000
|
|
||||||
PadSizeV=1.500000000000
|
|
||||||
PcbTextSizeV=1.500000000000
|
|
||||||
PcbTextSizeH=1.500000000000
|
|
||||||
PcbTextThickness=0.300000000000
|
|
||||||
ModuleTextSizeV=1.000000000000
|
|
||||||
ModuleTextSizeH=1.000000000000
|
|
||||||
ModuleTextSizeThickness=0.150000000000
|
|
||||||
SolderMaskClearance=0.000000000000
|
|
||||||
SolderMaskMinWidth=0.000000000000
|
|
||||||
DrawSegmentWidth=0.200000000000
|
|
||||||
BoardOutlineThickness=0.100000000000
|
|
||||||
ModuleOutlineThickness=0.150000000000
|
|
||||||
[cvpcb]
|
[cvpcb]
|
||||||
version=1
|
version=1
|
||||||
NetIExt=net
|
NetIExt=net
|
||||||
@ -37,7 +18,250 @@ PageLayoutDescrFile=
|
|||||||
PlotDirectoryName=images/
|
PlotDirectoryName=images/
|
||||||
SubpartIdSeparator=0
|
SubpartIdSeparator=0
|
||||||
SubpartFirstId=65
|
SubpartFirstId=65
|
||||||
NetFmtName=
|
NetFmtName=Pcbnew
|
||||||
SpiceAjustPassiveValues=0
|
SpiceAjustPassiveValues=0
|
||||||
LabSize=50
|
LabSize=50
|
||||||
ERC_TestSimilarLabels=1
|
ERC_TestSimilarLabels=1
|
||||||
|
[pcbnew]
|
||||||
|
version=1
|
||||||
|
PageLayoutDescrFile=
|
||||||
|
LastNetListRead=CANNode.net
|
||||||
|
CopperLayerCount=4
|
||||||
|
BoardThickness=1.6
|
||||||
|
AllowMicroVias=0
|
||||||
|
AllowBlindVias=0
|
||||||
|
RequireCourtyardDefinitions=0
|
||||||
|
ProhibitOverlappingCourtyards=1
|
||||||
|
MinTrackWidth=0.1524
|
||||||
|
MinViaDiameter=0.6858
|
||||||
|
MinViaDrill=0.3302
|
||||||
|
MinMicroViaDiameter=0.2
|
||||||
|
MinMicroViaDrill=0.09999999999999999
|
||||||
|
MinHoleToHole=0.25
|
||||||
|
TrackWidth1=0.3
|
||||||
|
TrackWidth2=0.175
|
||||||
|
TrackWidth3=0.2
|
||||||
|
TrackWidth4=0.25
|
||||||
|
TrackWidth5=0.3
|
||||||
|
TrackWidth6=0.4
|
||||||
|
TrackWidth7=0.6
|
||||||
|
TrackWidth8=0.8
|
||||||
|
TrackWidth9=1.6
|
||||||
|
ViaDiameter1=0.6858
|
||||||
|
ViaDrill1=0.3302
|
||||||
|
dPairWidth1=0.3
|
||||||
|
dPairGap1=0.175
|
||||||
|
dPairViaGap1=0.25
|
||||||
|
SilkLineWidth=0.15
|
||||||
|
SilkTextSizeV=1
|
||||||
|
SilkTextSizeH=1
|
||||||
|
SilkTextSizeThickness=0.15
|
||||||
|
SilkTextItalic=0
|
||||||
|
SilkTextUpright=1
|
||||||
|
CopperLineWidth=0.2
|
||||||
|
CopperTextSizeV=1.5
|
||||||
|
CopperTextSizeH=1.5
|
||||||
|
CopperTextThickness=0.3
|
||||||
|
CopperTextItalic=0
|
||||||
|
CopperTextUpright=1
|
||||||
|
EdgeCutLineWidth=0.2
|
||||||
|
CourtyardLineWidth=0.05
|
||||||
|
OthersLineWidth=0.15
|
||||||
|
OthersTextSizeV=1
|
||||||
|
OthersTextSizeH=1
|
||||||
|
OthersTextSizeThickness=0.15
|
||||||
|
OthersTextItalic=0
|
||||||
|
OthersTextUpright=1
|
||||||
|
SolderMaskClearance=0.2
|
||||||
|
SolderMaskMinWidth=0.25
|
||||||
|
SolderPasteClearance=0
|
||||||
|
SolderPasteRatio=-0
|
||||||
|
[pcbnew/Layer.F.Cu]
|
||||||
|
Name=F.Cu
|
||||||
|
Type=0
|
||||||
|
Enabled=1
|
||||||
|
[pcbnew/Layer.In1.Cu]
|
||||||
|
Name=In1.Cu
|
||||||
|
Type=0
|
||||||
|
Enabled=1
|
||||||
|
[pcbnew/Layer.In2.Cu]
|
||||||
|
Name=In2.Cu
|
||||||
|
Type=0
|
||||||
|
Enabled=1
|
||||||
|
[pcbnew/Layer.In3.Cu]
|
||||||
|
Name=In3.Cu
|
||||||
|
Type=0
|
||||||
|
Enabled=0
|
||||||
|
[pcbnew/Layer.In4.Cu]
|
||||||
|
Name=In4.Cu
|
||||||
|
Type=0
|
||||||
|
Enabled=0
|
||||||
|
[pcbnew/Layer.In5.Cu]
|
||||||
|
Name=In5.Cu
|
||||||
|
Type=0
|
||||||
|
Enabled=0
|
||||||
|
[pcbnew/Layer.In6.Cu]
|
||||||
|
Name=In6.Cu
|
||||||
|
Type=0
|
||||||
|
Enabled=0
|
||||||
|
[pcbnew/Layer.In7.Cu]
|
||||||
|
Name=In7.Cu
|
||||||
|
Type=0
|
||||||
|
Enabled=0
|
||||||
|
[pcbnew/Layer.In8.Cu]
|
||||||
|
Name=In8.Cu
|
||||||
|
Type=0
|
||||||
|
Enabled=0
|
||||||
|
[pcbnew/Layer.In9.Cu]
|
||||||
|
Name=In9.Cu
|
||||||
|
Type=0
|
||||||
|
Enabled=0
|
||||||
|
[pcbnew/Layer.In10.Cu]
|
||||||
|
Name=In10.Cu
|
||||||
|
Type=0
|
||||||
|
Enabled=0
|
||||||
|
[pcbnew/Layer.In11.Cu]
|
||||||
|
Name=In11.Cu
|
||||||
|
Type=0
|
||||||
|
Enabled=0
|
||||||
|
[pcbnew/Layer.In12.Cu]
|
||||||
|
Name=In12.Cu
|
||||||
|
Type=0
|
||||||
|
Enabled=0
|
||||||
|
[pcbnew/Layer.In13.Cu]
|
||||||
|
Name=In13.Cu
|
||||||
|
Type=0
|
||||||
|
Enabled=0
|
||||||
|
[pcbnew/Layer.In14.Cu]
|
||||||
|
Name=In14.Cu
|
||||||
|
Type=0
|
||||||
|
Enabled=0
|
||||||
|
[pcbnew/Layer.In15.Cu]
|
||||||
|
Name=In15.Cu
|
||||||
|
Type=0
|
||||||
|
Enabled=0
|
||||||
|
[pcbnew/Layer.In16.Cu]
|
||||||
|
Name=In16.Cu
|
||||||
|
Type=0
|
||||||
|
Enabled=0
|
||||||
|
[pcbnew/Layer.In17.Cu]
|
||||||
|
Name=In17.Cu
|
||||||
|
Type=0
|
||||||
|
Enabled=0
|
||||||
|
[pcbnew/Layer.In18.Cu]
|
||||||
|
Name=In18.Cu
|
||||||
|
Type=0
|
||||||
|
Enabled=0
|
||||||
|
[pcbnew/Layer.In19.Cu]
|
||||||
|
Name=In19.Cu
|
||||||
|
Type=0
|
||||||
|
Enabled=0
|
||||||
|
[pcbnew/Layer.In20.Cu]
|
||||||
|
Name=In20.Cu
|
||||||
|
Type=0
|
||||||
|
Enabled=0
|
||||||
|
[pcbnew/Layer.In21.Cu]
|
||||||
|
Name=In21.Cu
|
||||||
|
Type=0
|
||||||
|
Enabled=0
|
||||||
|
[pcbnew/Layer.In22.Cu]
|
||||||
|
Name=In22.Cu
|
||||||
|
Type=0
|
||||||
|
Enabled=0
|
||||||
|
[pcbnew/Layer.In23.Cu]
|
||||||
|
Name=In23.Cu
|
||||||
|
Type=0
|
||||||
|
Enabled=0
|
||||||
|
[pcbnew/Layer.In24.Cu]
|
||||||
|
Name=In24.Cu
|
||||||
|
Type=0
|
||||||
|
Enabled=0
|
||||||
|
[pcbnew/Layer.In25.Cu]
|
||||||
|
Name=In25.Cu
|
||||||
|
Type=0
|
||||||
|
Enabled=0
|
||||||
|
[pcbnew/Layer.In26.Cu]
|
||||||
|
Name=In26.Cu
|
||||||
|
Type=0
|
||||||
|
Enabled=0
|
||||||
|
[pcbnew/Layer.In27.Cu]
|
||||||
|
Name=In27.Cu
|
||||||
|
Type=0
|
||||||
|
Enabled=0
|
||||||
|
[pcbnew/Layer.In28.Cu]
|
||||||
|
Name=In28.Cu
|
||||||
|
Type=0
|
||||||
|
Enabled=0
|
||||||
|
[pcbnew/Layer.In29.Cu]
|
||||||
|
Name=In29.Cu
|
||||||
|
Type=0
|
||||||
|
Enabled=0
|
||||||
|
[pcbnew/Layer.In30.Cu]
|
||||||
|
Name=In30.Cu
|
||||||
|
Type=0
|
||||||
|
Enabled=0
|
||||||
|
[pcbnew/Layer.B.Cu]
|
||||||
|
Name=B.Cu
|
||||||
|
Type=0
|
||||||
|
Enabled=1
|
||||||
|
[pcbnew/Layer.B.Adhes]
|
||||||
|
Enabled=1
|
||||||
|
[pcbnew/Layer.F.Adhes]
|
||||||
|
Enabled=1
|
||||||
|
[pcbnew/Layer.B.Paste]
|
||||||
|
Enabled=1
|
||||||
|
[pcbnew/Layer.F.Paste]
|
||||||
|
Enabled=1
|
||||||
|
[pcbnew/Layer.B.SilkS]
|
||||||
|
Enabled=1
|
||||||
|
[pcbnew/Layer.F.SilkS]
|
||||||
|
Enabled=1
|
||||||
|
[pcbnew/Layer.B.Mask]
|
||||||
|
Enabled=1
|
||||||
|
[pcbnew/Layer.F.Mask]
|
||||||
|
Enabled=1
|
||||||
|
[pcbnew/Layer.Dwgs.User]
|
||||||
|
Enabled=1
|
||||||
|
[pcbnew/Layer.Cmts.User]
|
||||||
|
Enabled=1
|
||||||
|
[pcbnew/Layer.Eco1.User]
|
||||||
|
Enabled=1
|
||||||
|
[pcbnew/Layer.Eco2.User]
|
||||||
|
Enabled=1
|
||||||
|
[pcbnew/Layer.Edge.Cuts]
|
||||||
|
Enabled=1
|
||||||
|
[pcbnew/Layer.Margin]
|
||||||
|
Enabled=1
|
||||||
|
[pcbnew/Layer.B.CrtYd]
|
||||||
|
Enabled=1
|
||||||
|
[pcbnew/Layer.F.CrtYd]
|
||||||
|
Enabled=1
|
||||||
|
[pcbnew/Layer.B.Fab]
|
||||||
|
Enabled=1
|
||||||
|
[pcbnew/Layer.F.Fab]
|
||||||
|
Enabled=1
|
||||||
|
[pcbnew/Layer.Rescue]
|
||||||
|
Enabled=0
|
||||||
|
[pcbnew/Netclasses]
|
||||||
|
[pcbnew/Netclasses/Default]
|
||||||
|
Name=Default
|
||||||
|
Clearance=0.175
|
||||||
|
TrackWidth=0.3
|
||||||
|
ViaDiameter=0.6858
|
||||||
|
ViaDrill=0.3302
|
||||||
|
uViaDiameter=0.3
|
||||||
|
uViaDrill=0.1
|
||||||
|
dPairWidth=0.3
|
||||||
|
dPairGap=0.175
|
||||||
|
dPairViaGap=0.25
|
||||||
|
[pcbnew/Netclasses/1]
|
||||||
|
Name=Power
|
||||||
|
Clearance=0.2
|
||||||
|
TrackWidth=0.5
|
||||||
|
ViaDiameter=1.25
|
||||||
|
ViaDrill=0.5
|
||||||
|
uViaDiameter=0.65
|
||||||
|
uViaDrill=0.2
|
||||||
|
dPairWidth=0.3
|
||||||
|
dPairGap=0.25
|
||||||
|
dPairViaGap=0.25
|
||||||
|
1326
Hardware/kicad/DiffWS2811/DiffWS2811.kicad_pcb
Normal file
BIN
Hardware/kicad/DiffWS2811/DiffWS2811.pdf
Normal file
43
Hardware/kicad/DiffWS2811/DiffWS2811.pro
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
update=Tue Oct 22 14:04:36 2019
|
||||||
|
version=1
|
||||||
|
last_client=eeschema
|
||||||
|
[general]
|
||||||
|
version=1
|
||||||
|
RootSch=
|
||||||
|
BoardNm=
|
||||||
|
[pcbnew]
|
||||||
|
version=1
|
||||||
|
LastNetListRead=
|
||||||
|
UseCmpFile=1
|
||||||
|
PadDrill=0.600000000000
|
||||||
|
PadDrillOvalY=0.600000000000
|
||||||
|
PadSizeH=1.500000000000
|
||||||
|
PadSizeV=1.500000000000
|
||||||
|
PcbTextSizeV=1.500000000000
|
||||||
|
PcbTextSizeH=1.500000000000
|
||||||
|
PcbTextThickness=0.300000000000
|
||||||
|
ModuleTextSizeV=1.000000000000
|
||||||
|
ModuleTextSizeH=1.000000000000
|
||||||
|
ModuleTextSizeThickness=0.150000000000
|
||||||
|
SolderMaskClearance=0.000000000000
|
||||||
|
SolderMaskMinWidth=0.000000000000
|
||||||
|
DrawSegmentWidth=0.200000000000
|
||||||
|
BoardOutlineThickness=0.100000000000
|
||||||
|
ModuleOutlineThickness=0.150000000000
|
||||||
|
[cvpcb]
|
||||||
|
version=1
|
||||||
|
NetIExt=net
|
||||||
|
[eeschema]
|
||||||
|
version=1
|
||||||
|
LibDir=
|
||||||
|
[eeschema/libraries]
|
||||||
|
[schematic_editor]
|
||||||
|
version=1
|
||||||
|
PageLayoutDescrFile=
|
||||||
|
PlotDirectoryName=
|
||||||
|
SubpartIdSeparator=0
|
||||||
|
SubpartFirstId=65
|
||||||
|
NetFmtName=
|
||||||
|
SpiceAjustPassiveValues=0
|
||||||
|
LabSize=50
|
||||||
|
ERC_TestSimilarLabels=1
|
419
Hardware/kicad/DiffWS2811/DiffWS2811.sch
Normal file
@ -0,0 +1,419 @@
|
|||||||
|
EESchema Schematic File Version 4
|
||||||
|
LIBS:DiffWS2811-cache
|
||||||
|
EELAYER 26 0
|
||||||
|
EELAYER END
|
||||||
|
$Descr A4 11693 8268
|
||||||
|
encoding utf-8
|
||||||
|
Sheet 1 1
|
||||||
|
Title ""
|
||||||
|
Date ""
|
||||||
|
Rev ""
|
||||||
|
Comp ""
|
||||||
|
Comment1 ""
|
||||||
|
Comment2 ""
|
||||||
|
Comment3 ""
|
||||||
|
Comment4 ""
|
||||||
|
$EndDescr
|
||||||
|
$Comp
|
||||||
|
L 000_my_lib:DSN-MINI-360 MOD1
|
||||||
|
U 1 1 5C0664F1
|
||||||
|
P 2900 3550
|
||||||
|
F 0 "MOD1" H 2900 3500 50 0000 C CNN
|
||||||
|
F 1 "DSN-MINI-360" H 3125 3934 50 0001 C CNN
|
||||||
|
F 2 "000_my_footprints:DC-DC" H 3150 3700 50 0001 C CNN
|
||||||
|
F 3 "" H 3150 3700 50 0001 C CNN
|
||||||
|
1 2900 3550
|
||||||
|
1 0 0 -1
|
||||||
|
$EndComp
|
||||||
|
$Comp
|
||||||
|
L Interface_UART:MAX485E U1
|
||||||
|
U 1 1 5C06691A
|
||||||
|
P 3850 2300
|
||||||
|
F 0 "U1" H 4100 1750 50 0000 C CNN
|
||||||
|
F 1 "MAX485E" H 3650 1750 50 0000 C CNN
|
||||||
|
F 2 "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" H 3850 1600 50 0001 C CNN
|
||||||
|
F 3 "https://datasheets.maximintegrated.com/en/ds/MAX1487E-MAX491E.pdf" H 3850 2350 50 0001 C CNN
|
||||||
|
1 3850 2300
|
||||||
|
-1 0 0 -1
|
||||||
|
$EndComp
|
||||||
|
$Comp
|
||||||
|
L Device:R_Small R1
|
||||||
|
U 1 1 5C066BB7
|
||||||
|
P 3150 2350
|
||||||
|
F 0 "R1" H 3209 2350 50 0000 L CNN
|
||||||
|
F 1 "R_Small" H 3209 2305 50 0001 L CNN
|
||||||
|
F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder" H 3150 2350 50 0001 C CNN
|
||||||
|
F 3 "~" H 3150 2350 50 0001 C CNN
|
||||||
|
1 3150 2350
|
||||||
|
1 0 0 -1
|
||||||
|
$EndComp
|
||||||
|
$Comp
|
||||||
|
L Connector_Generic:Conn_01x04 J1
|
||||||
|
U 1 1 5C066D15
|
||||||
|
P 2750 2400
|
||||||
|
F 0 "J1" H 2670 1975 50 0000 C CNN
|
||||||
|
F 1 "Conn_01x04" H 3200 2100 50 0001 C CNN
|
||||||
|
F 2 "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical" H 2750 2400 50 0001 C CNN
|
||||||
|
F 3 "~" H 2750 2400 50 0001 C CNN
|
||||||
|
1 2750 2400
|
||||||
|
-1 0 0 1
|
||||||
|
$EndComp
|
||||||
|
$Comp
|
||||||
|
L Connector_Generic:Conn_01x03 J2
|
||||||
|
U 1 1 5C066E44
|
||||||
|
P 4850 2200
|
||||||
|
F 0 "J2" H 4930 2196 50 0000 L CNN
|
||||||
|
F 1 "Conn_01x03" H 4930 2151 50 0001 L CNN
|
||||||
|
F 2 "Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical" H 4850 2200 50 0001 C CNN
|
||||||
|
F 3 "~" H 4850 2200 50 0001 C CNN
|
||||||
|
1 4850 2200
|
||||||
|
1 0 0 1
|
||||||
|
$EndComp
|
||||||
|
$Comp
|
||||||
|
L Device:C_Small C1
|
||||||
|
U 1 1 5C066F30
|
||||||
|
P 4150 3350
|
||||||
|
F 0 "C1" H 4242 3396 50 0000 L CNN
|
||||||
|
F 1 "C_Small" H 4242 3305 50 0001 L CNN
|
||||||
|
F 2 "Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder" H 4150 3350 50 0001 C CNN
|
||||||
|
F 3 "~" H 4150 3350 50 0001 C CNN
|
||||||
|
1 4150 3350
|
||||||
|
1 0 0 -1
|
||||||
|
$EndComp
|
||||||
|
$Comp
|
||||||
|
L Device:Jumper_NO_Small JP1
|
||||||
|
U 1 1 5C066FFC
|
||||||
|
P 3100 3200
|
||||||
|
F 0 "JP1" H 3100 3385 50 0000 C CNN
|
||||||
|
F 1 "Jumper" H 3100 3294 50 0000 C CNN
|
||||||
|
F 2 "Jumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mm" H 3100 3200 50 0001 C CNN
|
||||||
|
F 3 "~" H 3100 3200 50 0001 C CNN
|
||||||
|
1 3100 3200
|
||||||
|
1 0 0 -1
|
||||||
|
$EndComp
|
||||||
|
$Comp
|
||||||
|
L power:GND #PWR0101
|
||||||
|
U 1 1 5C0670C6
|
||||||
|
P 3000 2550
|
||||||
|
F 0 "#PWR0101" H 3000 2300 50 0001 C CNN
|
||||||
|
F 1 "GND" H 3005 2377 50 0001 C CNN
|
||||||
|
F 2 "" H 3000 2550 50 0001 C CNN
|
||||||
|
F 3 "" H 3000 2550 50 0001 C CNN
|
||||||
|
1 3000 2550
|
||||||
|
1 0 0 -1
|
||||||
|
$EndComp
|
||||||
|
$Comp
|
||||||
|
L power:VCC #PWR0102
|
||||||
|
U 1 1 5C067142
|
||||||
|
P 3850 1750
|
||||||
|
F 0 "#PWR0102" H 3850 1600 50 0001 C CNN
|
||||||
|
F 1 "VCC" H 4000 1800 50 0000 C CNN
|
||||||
|
F 2 "" H 3850 1750 50 0001 C CNN
|
||||||
|
F 3 "" H 3850 1750 50 0001 C CNN
|
||||||
|
1 3850 1750
|
||||||
|
1 0 0 -1
|
||||||
|
$EndComp
|
||||||
|
$Comp
|
||||||
|
L power:-VSW #PWR0103
|
||||||
|
U 1 1 5C06719C
|
||||||
|
P 3000 2150
|
||||||
|
F 0 "#PWR0103" H 3000 2250 50 0001 C CNN
|
||||||
|
F 1 "-VSW" H 3015 2323 50 0000 C CNN
|
||||||
|
F 2 "" H 3000 2150 50 0001 C CNN
|
||||||
|
F 3 "" H 3000 2150 50 0001 C CNN
|
||||||
|
1 3000 2150
|
||||||
|
1 0 0 -1
|
||||||
|
$EndComp
|
||||||
|
$Comp
|
||||||
|
L power:GND #PWR0104
|
||||||
|
U 1 1 5C067280
|
||||||
|
P 3100 3700
|
||||||
|
F 0 "#PWR0104" H 3100 3450 50 0001 C CNN
|
||||||
|
F 1 "GND" H 3105 3527 50 0001 C CNN
|
||||||
|
F 2 "" H 3100 3700 50 0001 C CNN
|
||||||
|
F 3 "" H 3100 3700 50 0001 C CNN
|
||||||
|
1 3100 3700
|
||||||
|
1 0 0 -1
|
||||||
|
$EndComp
|
||||||
|
$Comp
|
||||||
|
L power:-VSW #PWR0106
|
||||||
|
U 1 1 5C0672B2
|
||||||
|
P 2750 3150
|
||||||
|
F 0 "#PWR0106" H 2750 3250 50 0001 C CNN
|
||||||
|
F 1 "-VSW" H 2765 3323 50 0000 C CNN
|
||||||
|
F 2 "" H 2750 3150 50 0001 C CNN
|
||||||
|
F 3 "" H 2750 3150 50 0001 C CNN
|
||||||
|
1 2750 3150
|
||||||
|
1 0 0 -1
|
||||||
|
$EndComp
|
||||||
|
$Comp
|
||||||
|
L power:VCC #PWR0107
|
||||||
|
U 1 1 5C0672DA
|
||||||
|
P 3450 3150
|
||||||
|
F 0 "#PWR0107" H 3450 3000 50 0001 C CNN
|
||||||
|
F 1 "VCC" H 3467 3323 50 0000 C CNN
|
||||||
|
F 2 "" H 3450 3150 50 0001 C CNN
|
||||||
|
F 3 "" H 3450 3150 50 0001 C CNN
|
||||||
|
1 3450 3150
|
||||||
|
1 0 0 -1
|
||||||
|
$EndComp
|
||||||
|
Wire Wire Line
|
||||||
|
3850 1750 3850 1800
|
||||||
|
Wire Wire Line
|
||||||
|
2750 3150 2750 3200
|
||||||
|
Wire Wire Line
|
||||||
|
2750 3200 2900 3200
|
||||||
|
Wire Wire Line
|
||||||
|
3200 3200 3300 3200
|
||||||
|
Wire Wire Line
|
||||||
|
3450 3200 3450 3150
|
||||||
|
Wire Wire Line
|
||||||
|
3450 3200 3450 3300
|
||||||
|
Connection ~ 3450 3200
|
||||||
|
Wire Wire Line
|
||||||
|
2800 3300 2750 3300
|
||||||
|
Connection ~ 2750 3200
|
||||||
|
Wire Wire Line
|
||||||
|
2950 2200 3000 2200
|
||||||
|
Wire Wire Line
|
||||||
|
3000 2200 3000 2150
|
||||||
|
Wire Wire Line
|
||||||
|
2950 2500 3000 2500
|
||||||
|
Wire Wire Line
|
||||||
|
3000 2500 3000 2550
|
||||||
|
Wire Wire Line
|
||||||
|
2950 2400 3050 2400
|
||||||
|
Wire Wire Line
|
||||||
|
3050 2400 3050 2500
|
||||||
|
Wire Wire Line
|
||||||
|
3050 2500 3150 2500
|
||||||
|
Wire Wire Line
|
||||||
|
3150 2500 3150 2450
|
||||||
|
Wire Wire Line
|
||||||
|
3150 2250 3150 2200
|
||||||
|
Wire Wire Line
|
||||||
|
3150 2200 3050 2200
|
||||||
|
Wire Wire Line
|
||||||
|
3050 2200 3050 2300
|
||||||
|
Wire Wire Line
|
||||||
|
3050 2300 2950 2300
|
||||||
|
Wire Wire Line
|
||||||
|
3450 2200 3150 2200
|
||||||
|
Connection ~ 3150 2200
|
||||||
|
Wire Wire Line
|
||||||
|
3450 2500 3150 2500
|
||||||
|
Connection ~ 3150 2500
|
||||||
|
$Comp
|
||||||
|
L power:VCC #PWR0108
|
||||||
|
U 1 1 5C069637
|
||||||
|
P 4150 3150
|
||||||
|
F 0 "#PWR0108" H 4150 3000 50 0001 C CNN
|
||||||
|
F 1 "VCC" H 4300 3200 50 0000 C CNN
|
||||||
|
F 2 "" H 4150 3150 50 0001 C CNN
|
||||||
|
F 3 "" H 4150 3150 50 0001 C CNN
|
||||||
|
1 4150 3150
|
||||||
|
1 0 0 -1
|
||||||
|
$EndComp
|
||||||
|
$Comp
|
||||||
|
L power:GND #PWR0109
|
||||||
|
U 1 1 5C069650
|
||||||
|
P 4150 3550
|
||||||
|
F 0 "#PWR0109" H 4150 3300 50 0001 C CNN
|
||||||
|
F 1 "GND" H 4155 3377 50 0001 C CNN
|
||||||
|
F 2 "" H 4150 3550 50 0001 C CNN
|
||||||
|
F 3 "" H 4150 3550 50 0001 C CNN
|
||||||
|
1 4150 3550
|
||||||
|
1 0 0 -1
|
||||||
|
$EndComp
|
||||||
|
Wire Wire Line
|
||||||
|
4150 3150 4150 3200
|
||||||
|
Wire Wire Line
|
||||||
|
4150 3450 4150 3500
|
||||||
|
$Comp
|
||||||
|
L power:GND #PWR0110
|
||||||
|
U 1 1 5C06A0D9
|
||||||
|
P 3850 2950
|
||||||
|
F 0 "#PWR0110" H 3850 2700 50 0001 C CNN
|
||||||
|
F 1 "GND" H 3855 2777 50 0001 C CNN
|
||||||
|
F 2 "" H 3850 2950 50 0001 C CNN
|
||||||
|
F 3 "" H 3850 2950 50 0001 C CNN
|
||||||
|
1 3850 2950
|
||||||
|
1 0 0 -1
|
||||||
|
$EndComp
|
||||||
|
Wire Wire Line
|
||||||
|
3850 2900 3850 2950
|
||||||
|
$Comp
|
||||||
|
L power:GND #PWR0111
|
||||||
|
U 1 1 5C06A85A
|
||||||
|
P 4300 2550
|
||||||
|
F 0 "#PWR0111" H 4300 2300 50 0001 C CNN
|
||||||
|
F 1 "GND" H 4305 2377 50 0001 C CNN
|
||||||
|
F 2 "" H 4300 2550 50 0001 C CNN
|
||||||
|
F 3 "" H 4300 2550 50 0001 C CNN
|
||||||
|
1 4300 2550
|
||||||
|
1 0 0 -1
|
||||||
|
$EndComp
|
||||||
|
Wire Wire Line
|
||||||
|
4250 2400 4300 2400
|
||||||
|
Wire Wire Line
|
||||||
|
4300 2400 4300 2500
|
||||||
|
Wire Wire Line
|
||||||
|
4300 2500 4250 2500
|
||||||
|
Wire Wire Line
|
||||||
|
4300 2300 4300 2400
|
||||||
|
Wire Wire Line
|
||||||
|
4300 2300 4250 2300
|
||||||
|
Connection ~ 4300 2400
|
||||||
|
Wire Wire Line
|
||||||
|
4300 2500 4300 2550
|
||||||
|
Connection ~ 4300 2500
|
||||||
|
$Comp
|
||||||
|
L power:VCC #PWR0112
|
||||||
|
U 1 1 5C06BD25
|
||||||
|
P 4600 2050
|
||||||
|
F 0 "#PWR0112" H 4600 1900 50 0001 C CNN
|
||||||
|
F 1 "VCC" H 4750 2100 50 0000 C CNN
|
||||||
|
F 2 "" H 4600 2050 50 0001 C CNN
|
||||||
|
F 3 "" H 4600 2050 50 0001 C CNN
|
||||||
|
1 4600 2050
|
||||||
|
1 0 0 -1
|
||||||
|
$EndComp
|
||||||
|
$Comp
|
||||||
|
L power:GND #PWR0113
|
||||||
|
U 1 1 5C06CC4B
|
||||||
|
P 4600 2350
|
||||||
|
F 0 "#PWR0113" H 4600 2100 50 0001 C CNN
|
||||||
|
F 1 "GND" H 4605 2177 50 0001 C CNN
|
||||||
|
F 2 "" H 4600 2350 50 0001 C CNN
|
||||||
|
F 3 "" H 4600 2350 50 0001 C CNN
|
||||||
|
1 4600 2350
|
||||||
|
1 0 0 -1
|
||||||
|
$EndComp
|
||||||
|
Wire Wire Line
|
||||||
|
4650 2200 4500 2200
|
||||||
|
Wire Wire Line
|
||||||
|
4650 2100 4600 2100
|
||||||
|
Wire Wire Line
|
||||||
|
4600 2100 4600 2050
|
||||||
|
Wire Wire Line
|
||||||
|
4650 2300 4600 2300
|
||||||
|
Wire Wire Line
|
||||||
|
4600 2300 4600 2350
|
||||||
|
$Comp
|
||||||
|
L Device:R_Small R2
|
||||||
|
U 1 1 5C06E1D6
|
||||||
|
P 4400 2200
|
||||||
|
F 0 "R2" V 4296 2200 50 0000 C CNN
|
||||||
|
F 1 "R_Small" V 4295 2200 50 0001 C CNN
|
||||||
|
F 2 "Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder" H 4400 2200 50 0001 C CNN
|
||||||
|
F 3 "~" H 4400 2200 50 0001 C CNN
|
||||||
|
1 4400 2200
|
||||||
|
0 1 1 0
|
||||||
|
$EndComp
|
||||||
|
Wire Wire Line
|
||||||
|
4250 2200 4300 2200
|
||||||
|
$Comp
|
||||||
|
L power:PWR_FLAG #FLG0101
|
||||||
|
U 1 1 5C07179E
|
||||||
|
P 2900 3150
|
||||||
|
F 0 "#FLG0101" H 2900 3225 50 0001 C CNN
|
||||||
|
F 1 "PWR_FLAG" H 2900 3324 50 0001 C CNN
|
||||||
|
F 2 "" H 2900 3150 50 0001 C CNN
|
||||||
|
F 3 "~" H 2900 3150 50 0001 C CNN
|
||||||
|
1 2900 3150
|
||||||
|
1 0 0 -1
|
||||||
|
$EndComp
|
||||||
|
$Comp
|
||||||
|
L power:PWR_FLAG #FLG0102
|
||||||
|
U 1 1 5C071EE6
|
||||||
|
P 3300 3150
|
||||||
|
F 0 "#FLG0102" H 3300 3225 50 0001 C CNN
|
||||||
|
F 1 "PWR_FLAG" H 3300 3324 50 0001 C CNN
|
||||||
|
F 2 "" H 3300 3150 50 0001 C CNN
|
||||||
|
F 3 "~" H 3300 3150 50 0001 C CNN
|
||||||
|
1 3300 3150
|
||||||
|
1 0 0 -1
|
||||||
|
$EndComp
|
||||||
|
Wire Wire Line
|
||||||
|
3300 3150 3300 3200
|
||||||
|
Connection ~ 3300 3200
|
||||||
|
Wire Wire Line
|
||||||
|
3300 3200 3450 3200
|
||||||
|
Wire Wire Line
|
||||||
|
2900 3150 2900 3200
|
||||||
|
Connection ~ 2900 3200
|
||||||
|
Wire Wire Line
|
||||||
|
2900 3200 3000 3200
|
||||||
|
Wire Wire Line
|
||||||
|
2750 3200 2750 3300
|
||||||
|
$Comp
|
||||||
|
L power:PWR_FLAG #FLG0103
|
||||||
|
U 1 1 5C07505B
|
||||||
|
P 3350 3600
|
||||||
|
F 0 "#FLG0103" H 3350 3675 50 0001 C CNN
|
||||||
|
F 1 "PWR_FLAG" H 3350 3774 50 0001 C CNN
|
||||||
|
F 2 "" H 3350 3600 50 0001 C CNN
|
||||||
|
F 3 "~" H 3350 3600 50 0001 C CNN
|
||||||
|
1 3350 3600
|
||||||
|
1 0 0 -1
|
||||||
|
$EndComp
|
||||||
|
Wire Wire Line
|
||||||
|
3400 3300 3450 3300
|
||||||
|
Wire Wire Line
|
||||||
|
3100 3700 3100 3650
|
||||||
|
Wire Wire Line
|
||||||
|
3350 3600 3350 3700
|
||||||
|
Wire Wire Line
|
||||||
|
3350 3700 3100 3700
|
||||||
|
Connection ~ 3100 3700
|
||||||
|
$Comp
|
||||||
|
L Device:C_Small C2
|
||||||
|
U 1 1 5C07E1E5
|
||||||
|
P 4400 3350
|
||||||
|
F 0 "C2" H 4492 3396 50 0000 L CNN
|
||||||
|
F 1 "C_Small" H 4492 3305 50 0001 L CNN
|
||||||
|
F 2 "Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder" H 4400 3350 50 0001 C CNN
|
||||||
|
F 3 "~" H 4400 3350 50 0001 C CNN
|
||||||
|
1 4400 3350
|
||||||
|
1 0 0 -1
|
||||||
|
$EndComp
|
||||||
|
Wire Wire Line
|
||||||
|
4150 3200 4400 3200
|
||||||
|
Wire Wire Line
|
||||||
|
4400 3200 4400 3250
|
||||||
|
Connection ~ 4150 3200
|
||||||
|
Wire Wire Line
|
||||||
|
4150 3200 4150 3250
|
||||||
|
Wire Wire Line
|
||||||
|
4400 3450 4400 3500
|
||||||
|
Wire Wire Line
|
||||||
|
4400 3500 4150 3500
|
||||||
|
Connection ~ 4150 3500
|
||||||
|
Wire Wire Line
|
||||||
|
4150 3500 4150 3550
|
||||||
|
$Comp
|
||||||
|
L Device:CP_Small C3
|
||||||
|
U 1 1 5C07F5DF
|
||||||
|
P 4600 3350
|
||||||
|
F 0 "C3" H 4688 3396 50 0000 L CNN
|
||||||
|
F 1 "CP_Small" H 4688 3305 50 0000 L CNN
|
||||||
|
F 2 "Capacitor_SMD:CP_Elec_3x5.4" H 4600 3350 50 0001 C CNN
|
||||||
|
F 3 "~" H 4600 3350 50 0001 C CNN
|
||||||
|
1 4600 3350
|
||||||
|
1 0 0 -1
|
||||||
|
$EndComp
|
||||||
|
Wire Wire Line
|
||||||
|
4400 3200 4600 3200
|
||||||
|
Wire Wire Line
|
||||||
|
4600 3200 4600 3250
|
||||||
|
Connection ~ 4400 3200
|
||||||
|
Wire Wire Line
|
||||||
|
4600 3450 4600 3500
|
||||||
|
Wire Wire Line
|
||||||
|
4600 3500 4400 3500
|
||||||
|
Connection ~ 4400 3500
|
||||||
|
Text Label 3300 2200 0 50 ~ 0
|
||||||
|
D+
|
||||||
|
Text Label 3300 2500 0 50 ~ 0
|
||||||
|
D-
|
||||||
|
$EndSCHEMATC
|
1256
Hardware/kicad/DiffWS2811/DiffWS2811_min.kicad_pcb
Normal file
33
Hardware/kicad/DiffWS2811/DiffWS2811_min.pro
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
update=22/05/2015 07:44:53
|
||||||
|
version=1
|
||||||
|
last_client=kicad
|
||||||
|
[general]
|
||||||
|
version=1
|
||||||
|
RootSch=
|
||||||
|
BoardNm=
|
||||||
|
[pcbnew]
|
||||||
|
version=1
|
||||||
|
LastNetListRead=
|
||||||
|
UseCmpFile=1
|
||||||
|
PadDrill=0.600000000000
|
||||||
|
PadDrillOvalY=0.600000000000
|
||||||
|
PadSizeH=1.500000000000
|
||||||
|
PadSizeV=1.500000000000
|
||||||
|
PcbTextSizeV=1.500000000000
|
||||||
|
PcbTextSizeH=1.500000000000
|
||||||
|
PcbTextThickness=0.300000000000
|
||||||
|
ModuleTextSizeV=1.000000000000
|
||||||
|
ModuleTextSizeH=1.000000000000
|
||||||
|
ModuleTextSizeThickness=0.150000000000
|
||||||
|
SolderMaskClearance=0.000000000000
|
||||||
|
SolderMaskMinWidth=0.000000000000
|
||||||
|
DrawSegmentWidth=0.200000000000
|
||||||
|
BoardOutlineThickness=0.100000000000
|
||||||
|
ModuleOutlineThickness=0.150000000000
|
||||||
|
[cvpcb]
|
||||||
|
version=1
|
||||||
|
NetIExt=net
|
||||||
|
[eeschema]
|
||||||
|
version=1
|
||||||
|
LibDir=
|
||||||
|
[eeschema/libraries]
|
1554
Hardware/kicad/Modified.lib
Normal file
Before Width: | Height: | Size: 424 KiB After Width: | Height: | Size: 380 KiB |
@ -3,7 +3,7 @@
|
|||||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"
|
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"
|
||||||
width="25.0012cm" height="20cm" viewBox="0 0 98430 78740 ">
|
width="25.0012cm" height="20cm" viewBox="0 0 98430 78740 ">
|
||||||
<title>SVG Picture created as CANNode.svg date 2018/11/17 02:32:52 </title>
|
<title>SVG Picture created as CANNode.svg date 2018/11/19 11:19:47 </title>
|
||||||
<desc>Picture generated by Eeschema-SVG </desc>
|
<desc>Picture generated by Eeschema-SVG </desc>
|
||||||
<g style="fill:#000000; fill-opacity:1;stroke:#000000; stroke-opacity:1;
|
<g style="fill:#000000; fill-opacity:1;stroke:#000000; stroke-opacity:1;
|
||||||
stroke-linecap:round; stroke-linejoin:round; "
|
stroke-linecap:round; stroke-linejoin:round; "
|
||||||
@ -6587,135 +6587,136 @@ stroke-linecap:round; stroke-linejoin:round;">
|
|||||||
stroke:#840000; stroke-width:0; stroke-opacity:1;
|
stroke:#840000; stroke-width:0; stroke-opacity:1;
|
||||||
stroke-linecap:round; stroke-linejoin:round;">
|
stroke-linecap:round; stroke-linejoin:round;">
|
||||||
</g>
|
</g>
|
||||||
|
<g style="fill:#FFFFC2; fill-opacity:0.0;
|
||||||
|
stroke:#FFFFC2; stroke-width:0; stroke-opacity:1;
|
||||||
|
stroke-linecap:round; stroke-linejoin:round;">
|
||||||
|
</g>
|
||||||
|
<g style="fill:#FFFFC2; fill-opacity:0.6;
|
||||||
|
stroke:#FFFFC2; stroke-width:0; stroke-opacity:1;
|
||||||
|
stroke-linecap:round; stroke-linejoin:round;">
|
||||||
|
<rect x="24500" y="51500" width="4000" height="3000" rx="0" />
|
||||||
|
</g>
|
||||||
|
<g style="fill:#840000; fill-opacity:0.6;
|
||||||
|
stroke:#840000; stroke-width:0; stroke-opacity:1;
|
||||||
|
stroke-linecap:round; stroke-linejoin:round;">
|
||||||
|
</g>
|
||||||
<g style="fill:#840000; fill-opacity:0.0;
|
<g style="fill:#840000; fill-opacity:0.0;
|
||||||
stroke:#840000; stroke-width:60; stroke-opacity:1;
|
stroke:#840000; stroke-width:60; stroke-opacity:1;
|
||||||
stroke-linecap:round; stroke-linejoin:round;">
|
stroke-linecap:round; stroke-linejoin:round;">
|
||||||
<path d="M24540 51780
|
<rect x="24500" y="51500" width="4000" height="3000" rx="0" />
|
||||||
L24970 51780
|
<path d="M26500 54500
|
||||||
|
L26500 55500
|
||||||
" />
|
" />
|
||||||
<path d="M24760 51990
|
</g>
|
||||||
L24760 51560
|
<g style="fill:#008484; fill-opacity:0.0;
|
||||||
|
stroke:#008484; stroke-width:60; stroke-opacity:1;
|
||||||
|
stroke-linecap:round; stroke-linejoin:round;">
|
||||||
|
<path d="M26250 53680
|
||||||
|
L26220 53730
|
||||||
|
L26220 53800
|
||||||
|
L26250 53870
|
||||||
|
L26290 53920
|
||||||
|
L26340 53950
|
||||||
|
L26440 53970
|
||||||
|
L26510 53970
|
||||||
|
L26600 53950
|
||||||
|
L26650 53920
|
||||||
|
L26700 53870
|
||||||
|
L26720 53800
|
||||||
|
L26720 53760
|
||||||
|
L26700 53680
|
||||||
|
L26670 53660
|
||||||
|
L26510 53660
|
||||||
|
L26510 53760
|
||||||
" />
|
" />
|
||||||
<path d="M28540 51780
|
<path d="M26720 53450
|
||||||
L28970 51780
|
L26220 53450
|
||||||
|
L26720 53160
|
||||||
|
L26220 53160
|
||||||
" />
|
" />
|
||||||
<path d="M28760 51990
|
<path d="M26720 52920
|
||||||
L28760 51560
|
L26220 52920
|
||||||
|
L26220 52800
|
||||||
|
L26250 52730
|
||||||
|
L26290 52680
|
||||||
|
L26340 52660
|
||||||
|
L26440 52640
|
||||||
|
L26510 52640
|
||||||
|
L26600 52660
|
||||||
|
L26650 52680
|
||||||
|
L26700 52730
|
||||||
|
L26720 52800
|
||||||
|
L26720 52920
|
||||||
" />
|
" />
|
||||||
<path d="M26580 52990
|
</g>
|
||||||
L26580 52430
|
<g style="fill:#840000; fill-opacity:0.0;
|
||||||
L26710 52430
|
stroke:#840000; stroke-width:60; stroke-opacity:1;
|
||||||
L26790 52460
|
stroke-linecap:round; stroke-linejoin:round;">
|
||||||
L26850 52510
|
|
||||||
L26870 52560
|
|
||||||
L26900 52670
|
|
||||||
L26900 52750
|
|
||||||
L26870 52860
|
|
||||||
L26850 52910
|
|
||||||
L26790 52960
|
|
||||||
L26710 52990
|
|
||||||
L26580 52990
|
|
||||||
" />
|
|
||||||
<path d="M27460 52940
|
|
||||||
L27430 52960
|
|
||||||
L27350 52990
|
|
||||||
L27300 52990
|
|
||||||
L27220 52960
|
|
||||||
L27170 52910
|
|
||||||
L27140 52860
|
|
||||||
L27110 52750
|
|
||||||
L27110 52670
|
|
||||||
L27140 52560
|
|
||||||
L27170 52510
|
|
||||||
L27220 52460
|
|
||||||
L27300 52430
|
|
||||||
L27350 52430
|
|
||||||
L27430 52460
|
|
||||||
L27460 52480
|
|
||||||
" />
|
|
||||||
<path d="M27700 52990
|
|
||||||
L27700 52430
|
|
||||||
L27830 52430
|
|
||||||
L27910 52460
|
|
||||||
L27970 52510
|
|
||||||
L27990 52560
|
|
||||||
L28020 52670
|
|
||||||
L28020 52750
|
|
||||||
L27990 52860
|
|
||||||
L27970 52910
|
|
||||||
L27910 52960
|
|
||||||
L27830 52990
|
|
||||||
L27700 52990
|
|
||||||
" />
|
|
||||||
<path d="M28580 52940
|
|
||||||
L28550 52960
|
|
||||||
L28470 52990
|
|
||||||
L28420 52990
|
|
||||||
L28340 52960
|
|
||||||
L28290 52910
|
|
||||||
L28260 52860
|
|
||||||
L28230 52750
|
|
||||||
L28230 52670
|
|
||||||
L28260 52560
|
|
||||||
L28290 52510
|
|
||||||
L28340 52460
|
|
||||||
L28420 52430
|
|
||||||
L28470 52430
|
|
||||||
L28550 52460
|
|
||||||
L28580 52480
|
|
||||||
" />
|
|
||||||
<polyline fill="none;"
|
|
||||||
points="23500,55000
|
|
||||||
29500,55000
|
|
||||||
" />
|
|
||||||
<polyline fill="none;"
|
|
||||||
points="23500,54000
|
|
||||||
23500,55000
|
|
||||||
" />
|
|
||||||
<polyline fill="none;"
|
|
||||||
points="23500,54000
|
|
||||||
26500,54000
|
|
||||||
" />
|
|
||||||
<polyline fill="none;"
|
|
||||||
points="23500,51000
|
|
||||||
23500,54000
|
|
||||||
" />
|
|
||||||
<polyline fill="none;"
|
|
||||||
points="26200,54500
|
|
||||||
26800,54500
|
|
||||||
" />
|
|
||||||
<polyline fill="none;"
|
|
||||||
points="26500,54000
|
|
||||||
26500,54500
|
|
||||||
" />
|
|
||||||
<polyline fill="none;"
|
|
||||||
points="26500,54000
|
|
||||||
29500,54000
|
|
||||||
" />
|
|
||||||
<polyline fill="none;"
|
|
||||||
points="29500,55000
|
|
||||||
29500,54000
|
|
||||||
" />
|
|
||||||
<polyline fill="none;"
|
|
||||||
points="29500,54000
|
|
||||||
29500,51000
|
|
||||||
" />
|
|
||||||
<polyline fill="none;"
|
|
||||||
points="29500,51000
|
|
||||||
23500,51000
|
|
||||||
" />
|
|
||||||
<path d="M24500 52000
|
<path d="M24500 52000
|
||||||
L22500 52000
|
L23500 52000
|
||||||
" />
|
" />
|
||||||
<path d="M24500 54000
|
</g>
|
||||||
L22500 54000
|
<g style="fill:#008484; fill-opacity:0.0;
|
||||||
|
stroke:#008484; stroke-width:60; stroke-opacity:1;
|
||||||
|
stroke-linecap:round; stroke-linejoin:round;">
|
||||||
|
<path d="M25040 52220
|
||||||
|
L25040 51720
|
||||||
" />
|
" />
|
||||||
|
<path d="M25280 52220
|
||||||
|
L25280 51720
|
||||||
|
L25570 52220
|
||||||
|
L25570 51720
|
||||||
|
" />
|
||||||
|
</g>
|
||||||
|
<g style="fill:#840000; fill-opacity:0.0;
|
||||||
|
stroke:#840000; stroke-width:60; stroke-opacity:1;
|
||||||
|
stroke-linecap:round; stroke-linejoin:round;">
|
||||||
<path d="M28500 52000
|
<path d="M28500 52000
|
||||||
L30500 52000
|
L29500 52000
|
||||||
" />
|
" />
|
||||||
<path d="M28500 54000
|
</g>
|
||||||
L30500 54000
|
<g style="fill:#008484; fill-opacity:0.0;
|
||||||
|
stroke:#008484; stroke-width:60; stroke-opacity:1;
|
||||||
|
stroke-linecap:round; stroke-linejoin:round;">
|
||||||
|
<path d="M26850 51720
|
||||||
|
L26950 51720
|
||||||
|
L26990 51750
|
||||||
|
L27040 51790
|
||||||
|
L27070 51890
|
||||||
|
L27070 52050
|
||||||
|
L27040 52150
|
||||||
|
L26990 52200
|
||||||
|
L26950 52220
|
||||||
|
L26850 52220
|
||||||
|
L26800 52200
|
||||||
|
L26760 52150
|
||||||
|
L26730 52050
|
||||||
|
L26730 51890
|
||||||
|
L26760 51790
|
||||||
|
L26800 51750
|
||||||
|
L26850 51720
|
||||||
" />
|
" />
|
||||||
|
<path d="M27280 51720
|
||||||
|
L27280 52130
|
||||||
|
L27300 52170
|
||||||
|
L27330 52200
|
||||||
|
L27370 52220
|
||||||
|
L27470 52220
|
||||||
|
L27520 52200
|
||||||
|
L27540 52170
|
||||||
|
L27570 52130
|
||||||
|
L27570 51720
|
||||||
|
" />
|
||||||
|
<path d="M27730 51720
|
||||||
|
L28020 51720
|
||||||
|
" />
|
||||||
|
<path d="M27870 52220
|
||||||
|
L27870 51720
|
||||||
|
" />
|
||||||
|
</g>
|
||||||
|
<g style="fill:#008484; fill-opacity:0.0;
|
||||||
|
stroke:#008484; stroke-width:0; stroke-opacity:1;
|
||||||
|
stroke-linecap:round; stroke-linejoin:round;">
|
||||||
</g>
|
</g>
|
||||||
<g style="fill:#840000; fill-opacity:0.0;
|
<g style="fill:#840000; fill-opacity:0.0;
|
||||||
stroke:#840000; stroke-width:0; stroke-opacity:1;
|
stroke:#840000; stroke-width:0; stroke-opacity:1;
|
||||||
@ -9206,24 +9207,12 @@ stroke-linecap:round; stroke-linejoin:round;">
|
|||||||
<path d="M22000 52000
|
<path d="M22000 52000
|
||||||
L22000 51000
|
L22000 51000
|
||||||
" />
|
" />
|
||||||
<path d="M22500 52000
|
|
||||||
L22000 52000
|
|
||||||
" />
|
|
||||||
<path d="M22500 54000
|
|
||||||
L22000 54000
|
|
||||||
" />
|
|
||||||
<path d="M22000 55000
|
<path d="M22000 55000
|
||||||
L22000 54000
|
L22000 54000
|
||||||
" />
|
" />
|
||||||
<path d="M30500 54000
|
|
||||||
L31000 54000
|
|
||||||
" />
|
|
||||||
<path d="M31000 54000
|
<path d="M31000 54000
|
||||||
L31000 55000
|
L31000 55000
|
||||||
" />
|
" />
|
||||||
<path d="M30500 52000
|
|
||||||
L31000 52000
|
|
||||||
" />
|
|
||||||
<path d="M31000 52000
|
<path d="M31000 52000
|
||||||
L31000 51000
|
L31000 51000
|
||||||
" />
|
" />
|
||||||
@ -21374,5 +21363,272 @@ L60000 54000
|
|||||||
<path d="M60000 54000
|
<path d="M60000 54000
|
||||||
L60000 54500
|
L60000 54500
|
||||||
" />
|
" />
|
||||||
|
</g>
|
||||||
|
<g style="fill:#008400; fill-opacity:0.0;
|
||||||
|
stroke:#008400; stroke-width:0; stroke-opacity:1;
|
||||||
|
stroke-linecap:round; stroke-linejoin:round;">
|
||||||
|
</g>
|
||||||
|
<g style="fill:#840000; fill-opacity:0.0;
|
||||||
|
stroke:#840000; stroke-width:0; stroke-opacity:1;
|
||||||
|
stroke-linecap:round; stroke-linejoin:round;">
|
||||||
|
</g>
|
||||||
|
<g style="fill:#840000; fill-opacity:1.0;
|
||||||
|
stroke:#840000; stroke-width:60; stroke-opacity:1;
|
||||||
|
stroke-linecap:round; stroke-linejoin:round;">
|
||||||
|
<rect x="21400" y="53120" width="1200" height="150" rx="0" />
|
||||||
|
</g>
|
||||||
|
<g style="fill:#840000; fill-opacity:0.0;
|
||||||
|
stroke:#840000; stroke-width:60; stroke-opacity:1;
|
||||||
|
stroke-linecap:round; stroke-linejoin:round;">
|
||||||
|
<rect x="21400" y="52730" width="1200" height="150" rx="0" />
|
||||||
|
<polyline fill="none;"
|
||||||
|
points="21500,52400
|
||||||
|
21700,52400
|
||||||
|
" />
|
||||||
|
<polyline fill="none;"
|
||||||
|
points="21600,52500
|
||||||
|
21600,52300
|
||||||
|
" />
|
||||||
|
<path d="M22000 52730
|
||||||
|
L22000 52000
|
||||||
|
" />
|
||||||
|
<path d="M22000 53270
|
||||||
|
L22000 54000
|
||||||
|
" />
|
||||||
|
</g>
|
||||||
|
<g style="fill:#008484; fill-opacity:0.0;
|
||||||
|
stroke:#008484; stroke-width:60; stroke-opacity:1;
|
||||||
|
stroke-linecap:round; stroke-linejoin:round;">
|
||||||
|
<path d="M23300 52730
|
||||||
|
L23280 52760
|
||||||
|
L23210 52780
|
||||||
|
L23160 52780
|
||||||
|
L23090 52760
|
||||||
|
L23040 52710
|
||||||
|
L23020 52660
|
||||||
|
L22990 52570
|
||||||
|
L22990 52500
|
||||||
|
L23020 52400
|
||||||
|
L23040 52350
|
||||||
|
L23090 52310
|
||||||
|
L23160 52280
|
||||||
|
L23210 52280
|
||||||
|
L23280 52310
|
||||||
|
L23300 52330
|
||||||
|
" />
|
||||||
|
<path d="M23780 52780
|
||||||
|
L23490 52780
|
||||||
|
" />
|
||||||
|
<path d="M23640 52780
|
||||||
|
L23640 52280
|
||||||
|
L23590 52350
|
||||||
|
L23540 52400
|
||||||
|
L23490 52420
|
||||||
|
" />
|
||||||
|
<path d="M24260 52780
|
||||||
|
L23970 52780
|
||||||
|
" />
|
||||||
|
<path d="M24110 52780
|
||||||
|
L24110 52280
|
||||||
|
L24070 52350
|
||||||
|
L24020 52400
|
||||||
|
L23970 52420
|
||||||
|
" />
|
||||||
|
<path d="M23310 53640
|
||||||
|
L23290 53670
|
||||||
|
L23210 53690
|
||||||
|
L23170 53690
|
||||||
|
L23100 53670
|
||||||
|
L23050 53620
|
||||||
|
L23020 53570
|
||||||
|
L23000 53480
|
||||||
|
L23000 53410
|
||||||
|
L23020 53310
|
||||||
|
L23050 53260
|
||||||
|
L23100 53220
|
||||||
|
L23170 53190
|
||||||
|
L23210 53190
|
||||||
|
L23290 53220
|
||||||
|
L23310 53240
|
||||||
|
" />
|
||||||
|
<path d="M23520 53690
|
||||||
|
L23520 53190
|
||||||
|
L23710 53190
|
||||||
|
L23760 53220
|
||||||
|
L23790 53240
|
||||||
|
L23810 53290
|
||||||
|
L23810 53360
|
||||||
|
L23790 53410
|
||||||
|
L23760 53430
|
||||||
|
L23710 53450
|
||||||
|
L23520 53450
|
||||||
|
" />
|
||||||
|
</g>
|
||||||
|
<g style="fill:#008484; fill-opacity:0.0;
|
||||||
|
stroke:#008484; stroke-width:0; stroke-opacity:1;
|
||||||
|
stroke-linecap:round; stroke-linejoin:round;">
|
||||||
|
</g>
|
||||||
|
<g style="fill:#008400; fill-opacity:0.0;
|
||||||
|
stroke:#008400; stroke-width:0; stroke-opacity:1;
|
||||||
|
stroke-linecap:round; stroke-linejoin:round;">
|
||||||
|
</g>
|
||||||
|
<g style="fill:#008400; fill-opacity:1.0;
|
||||||
|
stroke:#008400; stroke-width:100; stroke-opacity:1;
|
||||||
|
stroke-linecap:round; stroke-linejoin:round;">
|
||||||
|
<circle cx="22000" cy="52000" r="200" />
|
||||||
|
</g>
|
||||||
|
<g style="fill:#008400; fill-opacity:1.0;
|
||||||
|
stroke:#008400; stroke-width:0; stroke-opacity:1;
|
||||||
|
stroke-linecap:round; stroke-linejoin:round;">
|
||||||
|
</g>
|
||||||
|
<g style="fill:#008400; fill-opacity:1.0;
|
||||||
|
stroke:#008400; stroke-width:100; stroke-opacity:1;
|
||||||
|
stroke-linecap:round; stroke-linejoin:round;">
|
||||||
|
<circle cx="22000" cy="54000" r="200" />
|
||||||
|
</g>
|
||||||
|
<g style="fill:#008400; fill-opacity:1.0;
|
||||||
|
stroke:#008400; stroke-width:0; stroke-opacity:1;
|
||||||
|
stroke-linecap:round; stroke-linejoin:round;">
|
||||||
|
</g>
|
||||||
|
<g style="fill:#840000; fill-opacity:1.0;
|
||||||
|
stroke:#840000; stroke-width:0; stroke-opacity:1;
|
||||||
|
stroke-linecap:round; stroke-linejoin:round;">
|
||||||
|
</g>
|
||||||
|
<g style="fill:#840000; fill-opacity:1.0;
|
||||||
|
stroke:#840000; stroke-width:60; stroke-opacity:1;
|
||||||
|
stroke-linecap:round; stroke-linejoin:round;">
|
||||||
|
<rect x="30400" y="53120" width="1200" height="150" rx="0" />
|
||||||
|
</g>
|
||||||
|
<g style="fill:#840000; fill-opacity:0.0;
|
||||||
|
stroke:#840000; stroke-width:60; stroke-opacity:1;
|
||||||
|
stroke-linecap:round; stroke-linejoin:round;">
|
||||||
|
<rect x="30400" y="52730" width="1200" height="150" rx="0" />
|
||||||
|
<polyline fill="none;"
|
||||||
|
points="30500,52400
|
||||||
|
30700,52400
|
||||||
|
" />
|
||||||
|
<polyline fill="none;"
|
||||||
|
points="30600,52500
|
||||||
|
30600,52300
|
||||||
|
" />
|
||||||
|
<path d="M31000 52730
|
||||||
|
L31000 52000
|
||||||
|
" />
|
||||||
|
<path d="M31000 53270
|
||||||
|
L31000 54000
|
||||||
|
" />
|
||||||
|
</g>
|
||||||
|
<g style="fill:#008484; fill-opacity:0.0;
|
||||||
|
stroke:#008484; stroke-width:60; stroke-opacity:1;
|
||||||
|
stroke-linecap:round; stroke-linejoin:round;">
|
||||||
|
<path d="M32300 52730
|
||||||
|
L32280 52760
|
||||||
|
L32210 52780
|
||||||
|
L32160 52780
|
||||||
|
L32090 52760
|
||||||
|
L32040 52710
|
||||||
|
L32020 52660
|
||||||
|
L31990 52570
|
||||||
|
L31990 52500
|
||||||
|
L32020 52400
|
||||||
|
L32040 52350
|
||||||
|
L32090 52310
|
||||||
|
L32160 52280
|
||||||
|
L32210 52280
|
||||||
|
L32280 52310
|
||||||
|
L32300 52330
|
||||||
|
" />
|
||||||
|
<path d="M32780 52780
|
||||||
|
L32490 52780
|
||||||
|
" />
|
||||||
|
<path d="M32640 52780
|
||||||
|
L32640 52280
|
||||||
|
L32590 52350
|
||||||
|
L32540 52400
|
||||||
|
L32490 52420
|
||||||
|
" />
|
||||||
|
<path d="M32970 52330
|
||||||
|
L32990 52310
|
||||||
|
L33040 52280
|
||||||
|
L33160 52280
|
||||||
|
L33210 52310
|
||||||
|
L33230 52330
|
||||||
|
L33260 52380
|
||||||
|
L33260 52420
|
||||||
|
L33230 52500
|
||||||
|
L32950 52780
|
||||||
|
L33260 52780
|
||||||
|
" />
|
||||||
|
<path d="M32310 53640
|
||||||
|
L32290 53670
|
||||||
|
L32210 53690
|
||||||
|
L32170 53690
|
||||||
|
L32100 53670
|
||||||
|
L32050 53620
|
||||||
|
L32020 53570
|
||||||
|
L32000 53480
|
||||||
|
L32000 53410
|
||||||
|
L32020 53310
|
||||||
|
L32050 53260
|
||||||
|
L32100 53220
|
||||||
|
L32170 53190
|
||||||
|
L32210 53190
|
||||||
|
L32290 53220
|
||||||
|
L32310 53240
|
||||||
|
" />
|
||||||
|
<path d="M32520 53690
|
||||||
|
L32520 53190
|
||||||
|
L32710 53190
|
||||||
|
L32760 53220
|
||||||
|
L32790 53240
|
||||||
|
L32810 53290
|
||||||
|
L32810 53360
|
||||||
|
L32790 53410
|
||||||
|
L32760 53430
|
||||||
|
L32710 53450
|
||||||
|
L32520 53450
|
||||||
|
" />
|
||||||
|
</g>
|
||||||
|
<g style="fill:#008484; fill-opacity:0.0;
|
||||||
|
stroke:#008484; stroke-width:0; stroke-opacity:1;
|
||||||
|
stroke-linecap:round; stroke-linejoin:round;">
|
||||||
|
</g>
|
||||||
|
<g style="fill:#008400; fill-opacity:0.0;
|
||||||
|
stroke:#008400; stroke-width:0; stroke-opacity:1;
|
||||||
|
stroke-linecap:round; stroke-linejoin:round;">
|
||||||
|
</g>
|
||||||
|
<g style="fill:#008400; fill-opacity:1.0;
|
||||||
|
stroke:#008400; stroke-width:100; stroke-opacity:1;
|
||||||
|
stroke-linecap:round; stroke-linejoin:round;">
|
||||||
|
<circle cx="31000" cy="52000" r="200" />
|
||||||
|
</g>
|
||||||
|
<g style="fill:#008400; fill-opacity:1.0;
|
||||||
|
stroke:#008400; stroke-width:0; stroke-opacity:1;
|
||||||
|
stroke-linecap:round; stroke-linejoin:round;">
|
||||||
|
</g>
|
||||||
|
<g style="fill:#008400; fill-opacity:1.0;
|
||||||
|
stroke:#008400; stroke-width:100; stroke-opacity:1;
|
||||||
|
stroke-linecap:round; stroke-linejoin:round;">
|
||||||
|
<circle cx="31000" cy="54000" r="200" />
|
||||||
|
</g>
|
||||||
|
<g style="fill:#008400; fill-opacity:1.0;
|
||||||
|
stroke:#008400; stroke-width:60; stroke-opacity:1;
|
||||||
|
stroke-linecap:round; stroke-linejoin:round;">
|
||||||
|
</g>
|
||||||
|
<g style="fill:#008400; fill-opacity:0.0;
|
||||||
|
stroke:#008400; stroke-width:60; stroke-opacity:1;
|
||||||
|
stroke-linecap:round; stroke-linejoin:round;">
|
||||||
|
<path d="M30000 52000
|
||||||
|
L31000 52000
|
||||||
|
" />
|
||||||
|
<path d="M30000 54000
|
||||||
|
L31000 54000
|
||||||
|
" />
|
||||||
|
<path d="M22000 52000
|
||||||
|
L23500 52000
|
||||||
|
" />
|
||||||
|
<path d="M22000 54000
|
||||||
|
L23500 54000
|
||||||
|
" />
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 371 KiB After Width: | Height: | Size: 378 KiB |
BIN
Hardware/kicad/images/CANNode_rev2.0.jpg
Normal file
After Width: | Height: | Size: 1.1 MiB |
BIN
Hardware/kicad/images/CANNode_rev2.0.pdf
Normal file
BIN
Hardware/kicad/images/CANNode_rev2.0_jlcpcb_bottom.png
Normal file
After Width: | Height: | Size: 36 KiB |
BIN
Hardware/kicad/images/CANNode_rev2.0_jlcpcb_top.png
Normal file
After Width: | Height: | Size: 103 KiB |
BIN
Hardware/kicad/images/CANNode_rev2.0_small.jpg
Normal file
After Width: | Height: | Size: 206 KiB |
Before Width: | Height: | Size: 721 KiB After Width: | Height: | Size: 696 KiB |
BIN
Hardware/kicad/images/CANNode_rev2.5.pdf
Normal file
24071
Hardware/kicad/images/CANNode_rev2.5.svg
Normal file
After Width: | Height: | Size: 445 KiB |
BIN
Hardware/kicad/images/CANNode_rev2.5_top.png
Normal file
After Width: | Height: | Size: 157 KiB |
44
Hardware/kicad/max481e.lib
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
EESchema-LIBRARY Version 2.4
|
||||||
|
#encoding utf-8
|
||||||
|
#
|
||||||
|
# MAX481E
|
||||||
|
#
|
||||||
|
DEF MAX481E U 0 20 Y Y 1 F N
|
||||||
|
F0 "U" -240 450 50 H V C CNN
|
||||||
|
F1 "MAX481E" 30 450 50 H V L CNN
|
||||||
|
F2 "" 0 -700 50 H I C CNN
|
||||||
|
F3 "" 0 50 50 H I C CNN
|
||||||
|
ALIAS MAX483E MAX485E MAX487E MAX1487E MAX3485 MAX3483 MAX3486
|
||||||
|
$FPLIST
|
||||||
|
DIP*W7.62mm*
|
||||||
|
SOIC*3.9x4.9mm*P1.27mm*
|
||||||
|
$ENDFPLIST
|
||||||
|
DRAW
|
||||||
|
C -12 -145 14 0 1 10 F
|
||||||
|
C -1 59 14 0 1 10 F
|
||||||
|
C 65 75 14 0 1 10 F
|
||||||
|
S -300 400 300 -500 0 1 10 f
|
||||||
|
S 50 125 50 125 0 1 0 N
|
||||||
|
P 2 0 1 10 -160 -200 -75 -200 N
|
||||||
|
P 2 0 1 10 -160 100 -50 100 N
|
||||||
|
P 2 0 1 10 -50 -126 -50 -136 N
|
||||||
|
P 2 0 1 10 -25 -200 210 -200 N
|
||||||
|
P 3 0 1 10 -160 -100 -50 -100 -50 -125 N
|
||||||
|
P 3 0 1 10 0 50 0 0 -160 0 N
|
||||||
|
P 3 0 1 10 50 125 150 125 150 -200 N
|
||||||
|
P 3 0 1 10 100 75 100 -150 0 -150 N
|
||||||
|
P 4 0 1 10 -75 -125 -75 -225 25 -175 -75 -125 N
|
||||||
|
P 4 0 1 10 -50 100 50 150 50 50 -50 100 N
|
||||||
|
P 4 0 1 10 75 75 175 75 175 100 210 100 N
|
||||||
|
X RO 1 -400 100 100 R 50 50 1 1 O
|
||||||
|
X ~RE 2 -400 0 100 R 50 50 1 1 I
|
||||||
|
X DE 3 -400 -100 100 R 50 50 1 1 I
|
||||||
|
X DI 4 -400 -200 100 R 50 50 1 1 I
|
||||||
|
X GND 5 0 -600 100 U 50 50 1 1 W
|
||||||
|
X A 6 400 -200 100 L 50 50 1 1 B
|
||||||
|
X B 7 400 100 100 L 50 50 1 1 B
|
||||||
|
X VCC 8 0 500 100 D 50 50 1 1 W
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
#End Library
|
29
Hardware/kicad/pca9306.lib
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
EESchema-LIBRARY Version 2.4
|
||||||
|
#encoding utf-8
|
||||||
|
#
|
||||||
|
# PCA9306
|
||||||
|
#
|
||||||
|
DEF PCA9306 U 0 40 Y Y 1 F N
|
||||||
|
F0 "U" -300 450 50 H V L CNN
|
||||||
|
F1 "PCA9306" 200 450 50 H V L CNN
|
||||||
|
F2 "" -400 350 50 H I C CNN
|
||||||
|
F3 "" -300 450 50 H I C CNN
|
||||||
|
$FPLIST
|
||||||
|
SSOP*2.95x2.8mm*P0.65mm*
|
||||||
|
VSSOP*2.3x2mm*P0.5mm*
|
||||||
|
X2SON*1.4x1mm*P0.35mm*
|
||||||
|
$ENDFPLIST
|
||||||
|
DRAW
|
||||||
|
S -300 400 300 -400 0 1 10 f
|
||||||
|
X GND 1 0 -500 100 U 50 50 1 1 W
|
||||||
|
X VREF1 2 -100 500 100 D 50 50 1 1 W
|
||||||
|
X SCL1 3 -400 -100 100 R 50 50 1 1 B
|
||||||
|
X SDA1 4 -400 0 100 R 50 50 1 1 B
|
||||||
|
X SDA2 5 400 0 100 L 50 50 1 1 B
|
||||||
|
X SCL2 6 400 -100 100 L 50 50 1 1 B
|
||||||
|
X VREF2 7 100 500 100 D 50 50 1 1 W
|
||||||
|
X EN 8 400 100 100 L 50 50 1 1 I
|
||||||
|
ENDDRAW
|
||||||
|
ENDDEF
|
||||||
|
#
|
||||||
|
#End Library
|
23
platformio.ini
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
#
|
||||||
|
# Project Configuration File
|
||||||
|
#
|
||||||
|
# A detailed documentation with the EXAMPLES is located here:
|
||||||
|
# http://docs.platformio.org/en/latest/projectconf.html
|
||||||
|
#
|
||||||
|
|
||||||
|
# A sign `#` at the beginning of the line indicates a comment
|
||||||
|
# Comment lines are ignored.
|
||||||
|
|
||||||
|
# Simple and base environment
|
||||||
|
# [env:mybaseenv]
|
||||||
|
# platform = %INSTALLED_PLATFORM_NAME_HERE%
|
||||||
|
# framework =
|
||||||
|
# board =
|
||||||
|
#
|
||||||
|
# Automatic targets - enable auto-uploading
|
||||||
|
# targets = upload
|
||||||
|
|
||||||
|
[env:teensy31]
|
||||||
|
platform = teensy
|
||||||
|
framework = arduino
|
||||||
|
board = teensy31
|
121
src/CANNode.cpp
@ -1,10 +1,9 @@
|
|||||||
#include <Arduino.h>
|
// #include <Arduino.h>
|
||||||
|
|
||||||
// -------------------------------------------------------------
|
// -------------------------------------------------------------
|
||||||
// CANNode for Teensy 3.1/3.2
|
// CANNode for Teensy 3.1/3.2
|
||||||
// GPLv2
|
// GPLv2
|
||||||
// by wiebel (c) 2015-2018
|
// by wiebel (c) 2015-2018
|
||||||
// github_push_test_01
|
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <Metro.h>
|
#include <Metro.h>
|
||||||
@ -14,7 +13,9 @@
|
|||||||
|
|
||||||
// For Node definition:
|
// For Node definition:
|
||||||
|
|
||||||
#include "Node_2_def.h"
|
//#include "Node_1_def.h" // Dachstuhl
|
||||||
|
#include "Node_2_def.h" // Werkstatt
|
||||||
|
//#include "Node_3_def.h" // Keller
|
||||||
|
|
||||||
// Metro ticks in ms
|
// Metro ticks in ms
|
||||||
#define METRO_CAN_tick 1
|
#define METRO_CAN_tick 1
|
||||||
@ -64,13 +65,15 @@ FlexCAN CANbus(CAN_speed);
|
|||||||
// FLEXCAN0_MCR &= ~FLEXCAN_MCR_SRX_DIS;
|
// FLEXCAN0_MCR &= ~FLEXCAN_MCR_SRX_DIS;
|
||||||
// OneWire
|
// OneWire
|
||||||
uint8_t addr[8];
|
uint8_t addr[8];
|
||||||
|
uint8_t data[8];
|
||||||
uint8_t buffer[DS2406_BUF_LEN];
|
uint8_t buffer[DS2406_BUF_LEN];
|
||||||
uint8_t readout,trig_event,event_idx,tmp;
|
uint8_t readout,recheck,trig_event,event_idx,tmp;
|
||||||
OneWire OW_1(OW_pin);
|
OneWire OW_1(OW_pin);
|
||||||
|
|
||||||
telegram_comp_t mesg_comp;
|
telegram_comp_t mesg_comp;
|
||||||
|
|
||||||
static CAN_message_t txmsg,rxmsg;
|
static CAN_message_t global_txmsg,rxmsg;
|
||||||
|
CAN_message_t txmsg;
|
||||||
static uint8_t hex[17] = "0123456789abcdef";
|
static uint8_t hex[17] = "0123456789abcdef";
|
||||||
|
|
||||||
int txCount,rxCount;
|
int txCount,rxCount;
|
||||||
@ -131,19 +134,27 @@ uint32_t forgeid(uint8_t prio, uint8_t dst, uint8_t cmd, uint8_t type=0){
|
|||||||
// Type: 0: SINGLE, 1: FIRST, 2: CONT, 3: LAST
|
// Type: 0: SINGLE, 1: FIRST, 2: CONT, 3: LAST
|
||||||
return (prio<<26)+(type<<24)+(dst<<16)+(NODE_ID<<8)+cmd;
|
return (prio<<26)+(type<<24)+(dst<<16)+(NODE_ID<<8)+cmd;
|
||||||
}
|
}
|
||||||
int CAN_send(uint8_t prio, uint8_t dst, uint8_t cmd, uint8_t data[], uint8_t type=0){
|
|
||||||
|
int CAN_send(uint8_t prio, uint8_t dst, uint8_t cmd, uint8_t* data, uint8_t data_size, uint8_t type=0){
|
||||||
|
txmsg.ext = 1;
|
||||||
|
txmsg.timeout = 100;
|
||||||
txmsg.id = forgeid(prio, dst, cmd, type);
|
txmsg.id = forgeid(prio, dst, cmd, type);
|
||||||
txmsg.len = sizeof(data);
|
txmsg.len = data_size;
|
||||||
for (uint8_t i = 0; i < txmsg.len; i++) { txmsg.buf[i] = data[i]; }
|
for (uint8_t i = 0; i < txmsg.len; i++) { txmsg.buf[i] = data[i]; }
|
||||||
CANbus.write(txmsg);
|
return CANbus.write(txmsg);
|
||||||
|
// txmsg.buf[0]++;
|
||||||
|
// txmsg.len = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int CAN_send(uint8_t prio, uint8_t dst, uint8_t cmd, uint8_t data, uint8_t type=0){
|
int CAN_send(uint8_t prio, uint8_t dst, uint8_t cmd, uint8_t data, uint8_t type=0){
|
||||||
|
txmsg.ext = 1;
|
||||||
|
txmsg.timeout = 100;
|
||||||
txmsg.id = forgeid(prio, dst, cmd, type);
|
txmsg.id = forgeid(prio, dst, cmd, type);
|
||||||
//txmsg.len = sizeof(data);
|
|
||||||
txmsg.len = 1;
|
txmsg.len = 1;
|
||||||
txmsg.buf[0] = data;
|
txmsg.buf[0] = data;
|
||||||
CANbus.write(txmsg);
|
return CANbus.write(txmsg);
|
||||||
|
// txmsg.buf[0]++;
|
||||||
|
// txmsg.len = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -164,16 +175,18 @@ void send_event (uint8_t trig_event){
|
|||||||
|
|
||||||
for (uint8_t e_idx = 0; tx_events[e_idx].tag != 0; e_idx++)
|
for (uint8_t e_idx = 0; tx_events[e_idx].tag != 0; e_idx++)
|
||||||
if ( tx_events[e_idx].tag == trig_event ) {
|
if ( tx_events[e_idx].tag == trig_event ) {
|
||||||
|
txmsg.ext = 1;
|
||||||
|
txmsg.timeout = 100;
|
||||||
txmsg.id = event2id(tx_events[e_idx]);
|
txmsg.id = event2id(tx_events[e_idx]);
|
||||||
txmsg.len = 1;
|
txmsg.len = 1;
|
||||||
// txmsg.timeout = 100;
|
|
||||||
txmsg.buf[0]= tx_events[e_idx].data;
|
txmsg.buf[0]= tx_events[e_idx].data;
|
||||||
CANbus.write(txmsg);
|
CANbus.write(txmsg);
|
||||||
Serial.print(F("Sending to CAN ID: "));
|
Serial.print(F("Sending to CAN ID: "));
|
||||||
Serial.print(txmsg.id);
|
Serial.print(txmsg.id);
|
||||||
Serial.print(F("DATA: "));
|
Serial.print(F("DATA: "));
|
||||||
Serial.println(txmsg.buf[0]);
|
Serial.println(txmsg.buf[0]);
|
||||||
txmsg.len = 0;
|
// txmsg.buf[0]++;
|
||||||
|
// txmsg.len = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -205,20 +218,16 @@ for (uint8_t i = 0; action_map[i].tag != 0 ; i++) {
|
|||||||
}
|
}
|
||||||
bool new_state = digitalRead(outputs[action_map[i].outputs_idx].address);
|
bool new_state = digitalRead(outputs[action_map[i].outputs_idx].address);
|
||||||
if ( old_state == new_state) {
|
if ( old_state == new_state) {
|
||||||
switch ( new_state ) {
|
data[0]=action_map[i].outputs_idx;
|
||||||
case 0:
|
data[1]=new_state ^ outputs[action_map[i].outputs_idx].invert;
|
||||||
CAN_send(NOTIFY, 0xFF, OFF, action_map[i].outputs_idx);
|
Serial.println(F("Sending nochange to CAN"));
|
||||||
case 1:
|
CAN_send(NOTIFY, 0x0, STATE_OUT, data, 2);
|
||||||
CAN_send(NOTIFY, 0xFF, ON, action_map[i].outputs_idx);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
switch ( new_state ) {
|
data[0]=action_map[i].outputs_idx;
|
||||||
case 0:
|
data[1]=new_state ^ outputs[action_map[i].outputs_idx].invert;
|
||||||
CAN_send(NOTIFY, 0xFF, T_OFF, action_map[i].outputs_idx);
|
Serial.println(F("Sending change to CAN"));
|
||||||
case 1:
|
CAN_send(NOTIFY, 0x0, NEWSTATE_OUT, data, 2);
|
||||||
CAN_send(NOTIFY, 0xFF, T_ON, action_map[i].outputs_idx);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -237,8 +246,6 @@ void setup(void)
|
|||||||
pinMode(CAN_RS_PIN,OUTPUT);
|
pinMode(CAN_RS_PIN,OUTPUT);
|
||||||
digitalWrite(CAN_RS_PIN,0);
|
digitalWrite(CAN_RS_PIN,0);
|
||||||
CANbus.begin();
|
CANbus.begin();
|
||||||
txmsg.ext = 1;
|
|
||||||
txmsg.timeout = 100;
|
|
||||||
|
|
||||||
// outputs
|
// outputs
|
||||||
for (size_t i = 0; outputs[i].type != NOP; i++) {
|
for (size_t i = 0; outputs[i].type != NOP; i++) {
|
||||||
@ -294,13 +301,11 @@ void loop(void)
|
|||||||
}
|
}
|
||||||
if (new_owd) {
|
if (new_owd) {
|
||||||
// send new ID to all
|
// send new ID to all
|
||||||
CAN_send(NOTIFY, 0xFF, NEW_TWID, addr);
|
|
||||||
Serial.print("Found a device: ");
|
Serial.print("Found a device: ");
|
||||||
print_OW_Device(addr);
|
print_OW_Device(addr);
|
||||||
|
|
||||||
Serial.println();
|
Serial.println();
|
||||||
|
CAN_send(NOTIFY, 0x0, NEW_TWID, addr, sizeof(addr));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (METRO_OW_read.check() ) {
|
if (METRO_OW_read.check() ) {
|
||||||
@ -324,19 +329,29 @@ void loop(void)
|
|||||||
}
|
}
|
||||||
// if ((switches_state[s_idx] != readout) && (readout != 255 )) {
|
// if ((switches_state[s_idx] != readout) && (readout != 255 )) {
|
||||||
if (switches_state[s_idx] != readout) {
|
if (switches_state[s_idx] != readout) {
|
||||||
tmp = readout ^ switches_state[s_idx];
|
delay(1);
|
||||||
switches_state[s_idx] = readout;
|
recheck = read_DS2406(switches[s_idx].addr);
|
||||||
action[0] = tmp & 0x08;
|
if (readout == recheck) {
|
||||||
action[1] = tmp & 0x04;
|
tmp = readout ^ switches_state[s_idx];
|
||||||
|
switches_state[s_idx] = readout;
|
||||||
|
action[0] = tmp & 0x08;
|
||||||
|
action[1] = tmp & 0x04;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (action[0]) {
|
if (action[0]) {
|
||||||
Serial.print("pioA of switch ");
|
Serial.print("pioA of switch ");
|
||||||
Serial.print(switches[s_idx].nick);
|
Serial.print(switches[s_idx].nick);
|
||||||
if (readout & 0x08) {
|
if (readout & 0x08) {
|
||||||
Serial.println(F(" is now OFF"));
|
Serial.println(F(" is now OFF"));
|
||||||
|
data[0]=switches[s_idx].nick;
|
||||||
|
data[1]=0;
|
||||||
|
CAN_send(NOTIFY, 0x0, STATE_IN, data, 2);
|
||||||
send_event(switches[s_idx].event_tag[0]);
|
send_event(switches[s_idx].event_tag[0]);
|
||||||
} else {
|
} else {
|
||||||
Serial.println(F(" is now ON"));
|
Serial.println(F(" is now ON"));
|
||||||
|
data[0]=switches[s_idx].nick;
|
||||||
|
data[1]=1;
|
||||||
|
CAN_send(NOTIFY, 0x0, STATE_IN, data, 2);
|
||||||
send_event(switches[s_idx].event_tag[1]);
|
send_event(switches[s_idx].event_tag[1]);
|
||||||
}
|
}
|
||||||
action[0] = 0;
|
action[0] = 0;
|
||||||
@ -346,9 +361,15 @@ void loop(void)
|
|||||||
Serial.print(switches[s_idx].nick);
|
Serial.print(switches[s_idx].nick);
|
||||||
if (readout & 0x04) {
|
if (readout & 0x04) {
|
||||||
Serial.println(F(" is now OFF"));
|
Serial.println(F(" is now OFF"));
|
||||||
|
data[0]=switches[s_idx].nick;
|
||||||
|
data[1]=2;
|
||||||
|
CAN_send(NOTIFY, 0x0, STATE_IN, data, 2);
|
||||||
send_event(switches[s_idx].event_tag[2]);
|
send_event(switches[s_idx].event_tag[2]);
|
||||||
} else {
|
} else {
|
||||||
Serial.println(F(" is now ON"));
|
Serial.println(F(" is now ON"));
|
||||||
|
data[0]=switches[s_idx].nick;
|
||||||
|
data[1]=3;
|
||||||
|
CAN_send(NOTIFY, 0x0, STATE_IN, data, 2);
|
||||||
send_event(switches[s_idx].event_tag[3]);
|
send_event(switches[s_idx].event_tag[3]);
|
||||||
}
|
}
|
||||||
action[1] = 0;
|
action[1] = 0;
|
||||||
@ -397,18 +418,18 @@ void loop(void)
|
|||||||
}
|
}
|
||||||
rxCount = 0;
|
rxCount = 0;
|
||||||
}
|
}
|
||||||
txTimer = 100;//milliseconds
|
// txTimer = 10;//milliseconds
|
||||||
if (txmsg.len != 0){
|
// if (txmsg.len != 0){
|
||||||
Serial.print("PUT=");
|
// Serial.print("PUT=");
|
||||||
Serial.print(txmsg.id,HEX);
|
// Serial.print(txmsg.id,HEX);
|
||||||
for (uint8_t i=0; i<txmsg.len; i++){
|
// for (uint8_t i=0; i<txmsg.len; i++){
|
||||||
Serial.print(":");
|
// Serial.print(":");
|
||||||
Serial.print(txmsg.buf[i],HEX);
|
// Serial.print(txmsg.buf[i],HEX);
|
||||||
}
|
// }
|
||||||
Serial.print("\n");
|
// Serial.print("\n");
|
||||||
CANbus.write(txmsg);
|
// CANbus.write(txmsg);
|
||||||
txmsg.buf[0]++;
|
// txmsg.buf[0]++;
|
||||||
txmsg.len = 0;
|
// txmsg.len = 0;
|
||||||
}
|
// }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
enum out_type { GPIO, PWM, OW, I2C, SPI, WS2811, DMX, NOP };
|
enum out_type { GPIO, PWM, OW, I2C, SPI, WS2811, DMX, NOP };
|
||||||
enum event_type { LOCAL, SEND};
|
enum event_type { LOCAL, SEND};
|
||||||
|
|
||||||
enum cmd_type { OFF, ON, VALUE, TOGGLE, T_OFF, T_ON, BIN_DUMP, NEW_TWID };
|
enum cmd_type { OFF, ON, VALUE, TOGGLE, STATE_OUT, STATE_IN, NEWSTATE_OUT, NEWSTATE_IN, BIN_DUMP, NEW_TWID };
|
||||||
enum telegram_prio { ALERT, EVENT, NOTIFY, INFO };
|
enum telegram_prio { ALERT, EVENT, NOTIFY, INFO };
|
||||||
|
|
||||||
typedef struct CAN_telegram_t {
|
typedef struct CAN_telegram_t {
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
static uint8_t node_id PROGMEM= { NODE_ID };
|
static uint8_t node_id PROGMEM= { NODE_ID };
|
||||||
static OW_switch_t switches[N_SWITCHES] PROGMEM={
|
static OW_switch_t switches[N_SWITCHES] PROGMEM={
|
||||||
// nick, addr[8], event_tag[sw1, sw2]
|
// nick, addr[8], event_tag[sw1, sw2]
|
||||||
{ 255, { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }, { 0, 0, 0, 0 } },
|
// { 255, { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }, { 0, 0, 0, 0 } },
|
||||||
{ 201, { 0x12, 0x5b, 0x27, 0x50, 0x0, 0x0, 0x0, 0x26 }, { 1, 11, 2, 12 } }, // Flur -> Bad
|
{ 201, { 0x12, 0x5b, 0x27, 0x50, 0x0, 0x0, 0x0, 0x26 }, { 1, 11, 2, 12 } }, // Flur -> Bad
|
||||||
{ 202, { 0x12, 0xF7, 0x95, 0x4F, 0x0, 0x0, 0x0, 0x69 }, { 9, 9, 7, 7 } }, // Treppe Unten
|
{ 202, { 0x12, 0xF7, 0x95, 0x4F, 0x0, 0x0, 0x0, 0x69 }, { 9, 9, 7, 7 } }, // Treppe Unten
|
||||||
// { 203, { 0x12, 0x68, 0x31, 0x67, 0x0, 0x0, 0x0, 0xBC }, { 5, 6 } },
|
// { 203, { 0x12, 0x68, 0x31, 0x67, 0x0, 0x0, 0x0, 0xBC }, { 5, 6 } },
|
||||||
@ -40,7 +40,7 @@ static OW_switch_t switches[N_SWITCHES] PROGMEM={
|
|||||||
{ 011, { 0x12, 0x9A, 0x94, 0x4F, 0x0, 0x0, 0x0, 0x2D }, { 6, 6, 255, 254 } }, // Bjarne
|
{ 011, { 0x12, 0x9A, 0x94, 0x4F, 0x0, 0x0, 0x0, 0x2D }, { 6, 6, 255, 254 } }, // Bjarne
|
||||||
{ 012, { 0x12, 0x2F, 0x98, 0x4F, 0x0, 0x0, 0x0, 0xE0 }, { 8, 8, 0, 0 } }, // SZ
|
{ 012, { 0x12, 0x2F, 0x98, 0x4F, 0x0, 0x0, 0x0, 0xE0 }, { 8, 8, 0, 0 } }, // SZ
|
||||||
{ 255, { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }, { 0, 0, 0, 0 } },
|
{ 255, { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }, { 0, 0, 0, 0 } },
|
||||||
{ 0, { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }, { 0, 0, 0, 0 } }
|
{ 0, { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }, { 0, 0, 0, 0 } } // END MARK
|
||||||
};
|
};
|
||||||
static uint8_t switches_state[N_SWITCHES];
|
static uint8_t switches_state[N_SWITCHES];
|
||||||
static outputs_t outputs[N_OUTPUTS] PROGMEM={
|
static outputs_t outputs[N_OUTPUTS] PROGMEM={
|
||||||
|
@ -29,11 +29,22 @@
|
|||||||
static uint8_t node_id PROGMEM= { NODE_ID };
|
static uint8_t node_id PROGMEM= { NODE_ID };
|
||||||
static OW_switch_t switches[N_SWITCHES] PROGMEM={
|
static OW_switch_t switches[N_SWITCHES] PROGMEM={
|
||||||
// nick, addr[8], event_tag[pioA_FALL, pioA_RISE, pioB_FALL, pioB_RISE]
|
// nick, addr[8], event_tag[pioA_FALL, pioA_RISE, pioB_FALL, pioB_RISE]
|
||||||
{ 255, { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }, { 0, 0, 0, 0 } },
|
// { 255, { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }, { 0, 0, 0, 0 } },
|
||||||
|
{ 11, { 0x12, 0xF2, 0x2A, 0x66, 0x0, 0x0, 0x0, 0x41 }, { 31, 31, 0, 0 } }, // EZ -> Flur
|
||||||
|
{ 12, { 0x12, 0x37, 0x8A, 0x4F, 0x0, 0x0, 0x0, 0xE5 }, { 32, 32, 32, 32 } }, // im keller TEST
|
||||||
|
{ 13, { 0x12, 0x71, 0x51, 0x57, 0x0, 0x0, 0x0, 0x28 }, { 32, 32, 0, 0 } }, // Küche Kühlschank
|
||||||
|
{ 14, { 0x12, 0x5e, 0xff, 0x55, 0x0, 0x0, 0x0, 0x2c }, { 32, 32, 33, 33 } }, // Küche Terasse
|
||||||
|
|
||||||
{ 21, { 0x12, 0x86, 0xB4, 0x54, 0x0, 0x0, 0x0, 0x5F }, { 23, 23, 37, 37 } }, // Flur
|
{ 21, { 0x12, 0x86, 0xB4, 0x54, 0x0, 0x0, 0x0, 0x5F }, { 23, 23, 37, 37 } }, // Flur
|
||||||
{ 22, { 0x12, 0xC7, 0x2F, 0xCF, 0x0, 0x0, 0x0, 0xAF }, { 22, 22, 21, 21 } }, // WZ
|
{ 22, { 0x12, 0xCE, 0x6E, 0xCA, 0x0, 0x0, 0x0, 0x9C }, { 22, 22, 21, 21 } }, // WZ
|
||||||
|
{ 23, { 0x12, 0x15, 0xD4, 0x86, 0x0, 0x0, 0x0, 0xA0 }, { 31, 31, 32, 32 } }, // EZ -> Küche
|
||||||
|
// { 22, { 0x12, 0xC7, 0x2F, 0xCF, 0x0, 0x0, 0x0, 0xAF }, { 22, 22, 21, 21 } }, // WZ
|
||||||
// { 22, { 0x12, 0x5E, 0xFF, 0x55, 0x0, 0x0, 0x0, 0x2C }, { 21, 21, 22, 22 } }, // WZ
|
// { 22, { 0x12, 0x5E, 0xFF, 0x55, 0x0, 0x0, 0x0, 0x2C }, { 21, 21, 22, 22 } }, // WZ
|
||||||
{ 0, { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }, { 0, 0, 0, 0 } }
|
|
||||||
|
//{ 21, { 0x12, 0x86, 0xB4, 0x54, 0x0, 0x0, 0x0, 0x5F }, { 3, 3, 4, 4 } },
|
||||||
|
// { 31, { 0x12, 0x88, 0xDD, 0x53, 0x0, 0x0, 0x0, 0x28 }, { 210, 211, 220, 221 } }, // Rolladenschalter (A - UP, B - DOWN)
|
||||||
|
{ 31, { 0x12, 0x8F, 0xE2, 0x86 ,0x0, 0x0, 0x0, 0xC6}, { 220, 221, 210, 211 } }, // Rolladenschalter (A - UP, B - DOWN)
|
||||||
|
{ 0, { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }, { 0, 0, 0, 0 } } // END MARK
|
||||||
};
|
};
|
||||||
static uint8_t switches_state[N_SWITCHES];
|
static uint8_t switches_state[N_SWITCHES];
|
||||||
static outputs_t outputs[N_OUTPUTS] PROGMEM={
|
static outputs_t outputs[N_OUTPUTS] PROGMEM={
|
||||||
@ -56,15 +67,22 @@ static uint8_t outputs_state[N_OUTPUTS];
|
|||||||
static event_t tx_events[N_EVENTS] PROGMEM={
|
static event_t tx_events[N_EVENTS] PROGMEM={
|
||||||
// | --- ID --- |
|
// | --- ID --- |
|
||||||
// tag, prio, dst, cmd, data
|
// tag, prio, dst, cmd, data
|
||||||
|
{ 13, 0x03, 0x01, TOGGLE, 0x03},
|
||||||
|
{ 14, 0x03, 0x01, TOGGLE, 0x04},
|
||||||
|
{ 15, 0x03, 0x01, TOGGLE, 0x05},
|
||||||
|
{ 16, 0x03, 0x01, TOGGLE, 0x06},
|
||||||
|
{ 18, 0x03, 0x01, TOGGLE, 0x08},
|
||||||
{ 21, 0x03, 0x02, TOGGLE, 0x01},
|
{ 21, 0x03, 0x02, TOGGLE, 0x01},
|
||||||
{ 22, 0x03, 0x02, TOGGLE, 0x02},
|
{ 22, 0x03, 0x02, TOGGLE, 0x02},
|
||||||
{ 23, 0x03, 0x02, TOGGLE, 0x03},
|
{ 23, 0x03, 0x02, TOGGLE, 0x03},
|
||||||
{ 13, 0x03, 0x01, TOGGLE, 0x03},
|
{ 31, 0x03, 0x03, TOGGLE, 0x01},
|
||||||
{ 14, 0x03, 0x01, TOGGLE, 0x04},
|
{ 32, 0x03, 0x03, TOGGLE, 0x02},
|
||||||
{ 5, 0x03, 0x01, TOGGLE, 0x05},
|
{ 33, 0x03, 0x03, TOGGLE, 0x03},
|
||||||
{ 6, 0x03, 0x01, TOGGLE, 0x06},
|
{ 34, 0x03, 0x03, TOGGLE, 0x04},
|
||||||
|
{ 35, 0x03, 0x03, TOGGLE, 0x05},
|
||||||
|
{ 36, 0x03, 0x03, TOGGLE, 0x06},
|
||||||
{ 37, 0x03, 0x03, TOGGLE, 0x07},
|
{ 37, 0x03, 0x03, TOGGLE, 0x07},
|
||||||
{ 8, 0x03, 0x01, TOGGLE, 0x08},
|
{ 38, 0x03, 0x03, TOGGLE, 0x08},
|
||||||
{ 11, 0x03, 0x01, ON, 0x01},
|
{ 11, 0x03, 0x01, ON, 0x01},
|
||||||
{ 12, 0x03, 0x01, ON, 0x02},
|
{ 12, 0x03, 0x01, ON, 0x02},
|
||||||
{ 210, 0x03, 0xff, OFF, 0x06},
|
{ 210, 0x03, 0xff, OFF, 0x06},
|
||||||
|
@ -13,14 +13,14 @@
|
|||||||
#define DEBUG 0 // 1 for noisy serial
|
#define DEBUG 0 // 1 for noisy serial
|
||||||
#define LED 13
|
#define LED 13
|
||||||
|
|
||||||
#define RELAY1 0
|
#define RELAY1 0 // EZ
|
||||||
#define RELAY2 1
|
#define RELAY2 1 // Küche
|
||||||
#define RELAY3 23
|
#define RELAY3 23 // Terrasse
|
||||||
#define RELAY4 22
|
#define RELAY4 22 // RO_Garten
|
||||||
#define RELAY5 17
|
#define RELAY5 17 // RO_Garten
|
||||||
#define RELAY6 16
|
#define RELAY6 16 //
|
||||||
#define RELAY7 9
|
#define RELAY7 19 // EG Flur
|
||||||
#define RELAY8 10
|
#define RELAY8 18 //
|
||||||
|
|
||||||
// OneWire
|
// OneWire
|
||||||
#define OW_pin 14
|
#define OW_pin 14
|
||||||
@ -32,26 +32,24 @@ static OW_switch_t switches[N_SWITCHES] PROGMEM={
|
|||||||
{ 11, { 0x12, 0xF2, 0x2A, 0x66, 0x0, 0x0, 0x0, 0x41 }, { 1, 1, 0, 0 } }, // EZ -> Flur
|
{ 11, { 0x12, 0xF2, 0x2A, 0x66, 0x0, 0x0, 0x0, 0x41 }, { 1, 1, 0, 0 } }, // EZ -> Flur
|
||||||
{ 12, { 0x12, 0x37, 0x8A, 0x4F, 0x0, 0x0, 0x0, 0xE5 }, { 2, 2, 2, 2 } }, // im keller TEST
|
{ 12, { 0x12, 0x37, 0x8A, 0x4F, 0x0, 0x0, 0x0, 0xE5 }, { 2, 2, 2, 2 } }, // im keller TEST
|
||||||
{ 13, { 0x12, 0x71, 0x51, 0x57, 0x0, 0x0, 0x0, 0x28 }, { 2, 2, 0, 0 } }, // Küche Kühlschank
|
{ 13, { 0x12, 0x71, 0x51, 0x57, 0x0, 0x0, 0x0, 0x28 }, { 2, 2, 0, 0 } }, // Küche Kühlschank
|
||||||
|
{ 14, { 0x12, 0x5e, 0xff, 0x55, 0x0, 0x0, 0x0, 0x2c }, { 2, 2, 3, 3 } }, // Küche Terasse
|
||||||
//{ 21, { 0x12, 0x86, 0xB4, 0x54, 0x0, 0x0, 0x0, 0x5F }, { 3, 3, 4, 4 } },
|
//{ 21, { 0x12, 0x86, 0xB4, 0x54, 0x0, 0x0, 0x0, 0x5F }, { 3, 3, 4, 4 } },
|
||||||
{ 22, { 0x12, 0x84, 0xAD, 0x4F, 0x0, 0x0, 0x0, 0x12 }, { 1, 1, 2, 2 } }, // EZ -> Küche
|
{ 22, { 0x12, 0x84, 0xAD, 0x4F, 0x0, 0x0, 0x0, 0x12 }, { 1, 1, 2, 2 } }, // EZ -> Küche
|
||||||
// { 31, { 0x12, 0x88, 0xDD, 0x53, 0x0, 0x0, 0x0, 0x28 }, { 210, 211, 220, 221 } }, // Roldenschalter (A - UP, B - DOWN)
|
// { 31, { 0x12, 0x88, 0xDD, 0x53, 0x0, 0x0, 0x0, 0x28 }, { 210, 211, 220, 221 } }, // Rolladenschalter (A - UP, B - DOWN)
|
||||||
|
{ 31, { 0x12, 0x8F, 0xE2, 0x86 ,0x0, 0x0, 0x0, 0xC6}, { 220, 221, 210, 211 } }, // Rolladenschalter (A - UP, B - DOWN)
|
||||||
|
{ 0, { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }, { 0, 0, 0, 0 } } // END MARK
|
||||||
};
|
};
|
||||||
static uint8_t switches_state[N_SWITCHES];
|
static uint8_t switches_state[N_SWITCHES];
|
||||||
static outputs_t outputs[N_OUTPUTS] PROGMEM={
|
static outputs_t outputs[N_OUTPUTS] PROGMEM={
|
||||||
// type, address(PIN), initial value, inverted
|
// type, address(PIN), initial value, inverted
|
||||||
{ GPIO, 0, 0, true }, // 0
|
{ GPIO, RELAY1, 0, true },
|
||||||
{ GPIO, 1, 0, true }, // 1
|
{ GPIO, RELAY2, 0, true },
|
||||||
{ GPIO, 23, 0, true }, // 2
|
{ GPIO, RELAY3, 0, true },
|
||||||
{ GPIO, 22, 0, true }, // 3
|
{ GPIO, RELAY4, 0, true },
|
||||||
{ GPIO, 17, 0, true }, // 4
|
{ GPIO, RELAY5, 0, true },
|
||||||
{ GPIO, 16, 0, true }, // 5
|
{ GPIO, RELAY6, 0, true },
|
||||||
<<<<<<< HEAD
|
{ GPIO, RELAY7, 0, true },
|
||||||
{ GPIO, 9, 255, true }, // 6
|
{ GPIO, RELAY8, 0, true },
|
||||||
{ GPIO, 10, 0, true }, // 7
|
|
||||||
=======
|
|
||||||
{ GPIO, 19, 0, true }, // 6
|
|
||||||
{ GPIO, 18, 0, true }, // 7
|
|
||||||
>>>>>>> led
|
|
||||||
{ NOP, 0xFF, 0, 0 }
|
{ NOP, 0xFF, 0, 0 }
|
||||||
};
|
};
|
||||||
static uint8_t outputs_state[N_OUTPUTS];
|
static uint8_t outputs_state[N_OUTPUTS];
|
||||||
@ -72,10 +70,10 @@ static event_t tx_events[N_EVENTS] PROGMEM={
|
|||||||
{ 8, 0x03, 0x03, TOGGLE, 0x08},
|
{ 8, 0x03, 0x03, TOGGLE, 0x08},
|
||||||
{ 11, 0x03, 0x01, ON, 0x01},
|
{ 11, 0x03, 0x01, ON, 0x01},
|
||||||
{ 12, 0x03, 0x01, ON, 0x02},
|
{ 12, 0x03, 0x01, ON, 0x02},
|
||||||
{ 210, 0x03, 0xff, OFF, 0x06},
|
{ 210, 0x03, 0x03, OFF, 0x04},
|
||||||
{ 211, 0x03, 0xff, ON, 0x06},
|
{ 211, 0x03, 0x03, ON, 0x04},
|
||||||
{ 220, 0x03, 0xff, OFF, 0x07},
|
{ 220, 0x03, 0x03, OFF, 0x05},
|
||||||
{ 221, 0x03, 0xff, ON, 0x07},
|
{ 221, 0x03, 0x03, ON, 0x05},
|
||||||
{ 255, 0x03, 0xff, OFF, 0x09},
|
{ 255, 0x03, 0xff, OFF, 0x09},
|
||||||
{ 254, 0x03, 0xff, ON, 0x09},
|
{ 254, 0x03, 0xff, ON, 0x09},
|
||||||
{ 10, 0x03, 0xff, TOGGLE, 0x01},
|
{ 10, 0x03, 0xff, TOGGLE, 0x01},
|
||||||
@ -95,13 +93,13 @@ static event_t tx_events[N_EVENTS] PROGMEM={
|
|||||||
|
|
||||||
static action_t action_map[N_ACTIONS] PROGMEM={
|
static action_t action_map[N_ACTIONS] PROGMEM={
|
||||||
// tag, output_idx
|
// tag, output_idx
|
||||||
{1, 0},
|
{1, 0}, // EZ
|
||||||
{2, 1},
|
{2, 1}, // Küche
|
||||||
{3, 2},
|
{3, 2}, // Terrasse
|
||||||
{4, 3},
|
{4, 3}, // RO_Garten
|
||||||
{5, 4},
|
{5, 4}, // RO_Garten
|
||||||
{6, 5},
|
{6, 5},
|
||||||
{7, 6},
|
{7, 6}, // EG_Flur
|
||||||
{8, 7},
|
{8, 7},
|
||||||
{9, 0},{9, 1},{9, 2},{9, 3},{9, 4},{9, 5},{9, 6},{9, 7},
|
{9, 0},{9, 1},{9, 2},{9, 3},{9, 4},{9, 5},{9, 6},{9, 7},
|
||||||
{210, 210},
|
{210, 210},
|
||||||
|
109
tools/can2coil.py
Executable file
@ -0,0 +1,109 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
from __future__ import absolute_import, print_function
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import argparse
|
||||||
|
import socket
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
import can
|
||||||
|
from can import Bus, BusState, Logger
|
||||||
|
|
||||||
|
import paho.mqtt.client as mqtt
|
||||||
|
|
||||||
|
sub_topic = "coil"
|
||||||
|
coil_map = {
|
||||||
|
'EZ': [ 0x03, 0x01 ],
|
||||||
|
'K': [ 0x03, 0x02 ],
|
||||||
|
'WZ1': [ 0x02, 0x01 ],
|
||||||
|
'WZ2': [ 0x02, 0x02 ],
|
||||||
|
'TER': [ 0x03, 0x03 ],
|
||||||
|
'FE': [ 0x03, 0x07 ],
|
||||||
|
'TRE': [ 0x02, 0x03 ],
|
||||||
|
'FO': [ 0x01, 0x03 ],
|
||||||
|
'TRO': [ 0x01, 0x07 ],
|
||||||
|
'KI1': [ 0x01, 0x06 ],
|
||||||
|
'KI2': [ 0x01, 0x04 ],
|
||||||
|
'SCH': [ 0x01, 0x08 ],
|
||||||
|
'B1': [ 0x01, 0x01 ],
|
||||||
|
'B2': [ 0x01, 0x02 ],
|
||||||
|
'ROL_EZ_G_DOWN': [0x03, 0x05],
|
||||||
|
'ROL_EZ_G_UP': [0x03,0x04],
|
||||||
|
'ROL_EZ_N_DOWN': [0x03, 0x06],
|
||||||
|
'ROL_EZ_N_UP': [0x03,0x08],
|
||||||
|
'EG1': [ 0x02, 0x09 ],
|
||||||
|
'EG2': [ 0x03, 0x09 ],
|
||||||
|
'OG': [ 0x01, 0x09 ],
|
||||||
|
'ALL': [ 0xFF, 0x09 ],
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd_map = {
|
||||||
|
'off': 0,
|
||||||
|
'0': 0,
|
||||||
|
'on': 1,
|
||||||
|
'1': 1,
|
||||||
|
'value': 2,
|
||||||
|
'toggle': 3
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def decon(msg_id):
|
||||||
|
msg_prio=msg_id>>26
|
||||||
|
msg_type=(msg_id>>24) & 0x03
|
||||||
|
msg_dst=(msg_id>>16) & 0xFF
|
||||||
|
msg_src=(msg_id>>8) & 0xFF
|
||||||
|
msg_cmd=msg_id & 0xFF
|
||||||
|
# print("msg_id: ", hex(msg_id), "prio: ", hex(msg_prio),"type: ", hex(msg_type)," dst: ", hex(msg_dst)," src: ", hex(msg_src)," cmd: ",hex(msg_cmd))
|
||||||
|
return [msg_prio, msg_type, msg_dst, msg_src, msg_cmd]
|
||||||
|
|
||||||
|
def con(msg_dst,msg_cmd,msg_prio=3,msg_type=0,msg_src=11, ):
|
||||||
|
msg_id=(msg_prio<<26) + \
|
||||||
|
((msg_type&0x03)<<24) +\
|
||||||
|
((msg_dst&0xFF)<<16) +\
|
||||||
|
((msg_src&0xFF)<<8) +\
|
||||||
|
(msg_cmd&0xFF)
|
||||||
|
print("Constructed ID: "+hex(msg_id))
|
||||||
|
return msg_id
|
||||||
|
|
||||||
|
def on_connect(mcp_mqtt, userdata, flags, rc):
|
||||||
|
print("Connected with result code "+str(rc))
|
||||||
|
mcp_mqtt.subscribe(sub_topic+"/+")
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
can_filters = []
|
||||||
|
config = {"can_filters": can_filters, "single_handle": True}
|
||||||
|
config["interface"] = "socketcan_native"
|
||||||
|
config["bitrate"] = 125000
|
||||||
|
canbus = can.Bus("can1", **config)
|
||||||
|
# canBuffer= canbus.BufferedReader()
|
||||||
|
print('Connected to {}: {}'.format(canbus.__class__.__name__, canbus.channel_info))
|
||||||
|
print('Can Logger (Started on {})\n'.format(datetime.now()))
|
||||||
|
|
||||||
|
mcp_mqtt = mqtt.Client()
|
||||||
|
mcp_mqtt.on_connect = on_connect
|
||||||
|
mcp_mqtt.user_data_set(canbus)
|
||||||
|
mcp_mqtt.connect("mcp", 1883, 60)
|
||||||
|
|
||||||
|
mcp_mqtt.publish("coil/welcome", "1" , retain=0)
|
||||||
|
try:
|
||||||
|
while True:
|
||||||
|
msg = canbus.recv(1)
|
||||||
|
# msg = canBuffer.get_message()
|
||||||
|
if msg is not None:
|
||||||
|
de=decon(msg.arbitration_id)
|
||||||
|
m= { "prio": hex(de[0]), "type": hex(de[1]), "dst": hex(de[2]), "src": hex(de[3]), "cmd": hex(de[4]), "action": hex(msg.data[0]) }
|
||||||
|
if de[2]==0 and de[4] == 6:
|
||||||
|
print("received state: ", hex(de[3]), hex(msg.data[0]), hex(msg.data[1]))
|
||||||
|
for key, address in coil_map.items():
|
||||||
|
if address[0] == de[3] and address[1] == msg.data[0]+1:
|
||||||
|
print("coil/"+key+" changed to "+str(msg.data[1]))
|
||||||
|
mcp_mqtt.publish("coil/"+key+"/state", msg.data[1] , retain=1)
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
pass
|
||||||
|
finally:
|
||||||
|
canbus.shutdown()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
85
tools/can2mqtt.py
Executable file
@ -0,0 +1,85 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
from __future__ import absolute_import, print_function
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import argparse
|
||||||
|
import socket
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
import can
|
||||||
|
from can import Bus, BusState, Logger
|
||||||
|
|
||||||
|
import paho.mqtt.client as mqtt
|
||||||
|
|
||||||
|
def decon(msg_id):
|
||||||
|
msg_prio=msg_id>>26
|
||||||
|
msg_type=(msg_id>>24) & 0x03
|
||||||
|
msg_dst=(msg_id>>16) & 0xFF
|
||||||
|
msg_src=(msg_id>>8) & 0xFF
|
||||||
|
msg_cmd=msg_id & 0xFF
|
||||||
|
print("prio: ", hex(msg_prio),"type: ", hex(msg_type)," dst: ", hex(msg_dst)," src: ", hex(msg_src)," cmd: ",hex(msg_cmd))
|
||||||
|
return [msg_prio, msg_type, msg_dst, msg_src, msg_cmd]
|
||||||
|
|
||||||
|
def on_connect(mcp_mqtt, userdata, flags, rc):
|
||||||
|
print("Connected with result code "+str(rc))
|
||||||
|
|
||||||
|
# Subscribing in on_connect() means that if we lose the connection and
|
||||||
|
# reconnect then subscriptions will be renewed.
|
||||||
|
mcp_mqtt.subscribe("can/raw")
|
||||||
|
mcp_mqtt.subscribe("ctest/#")
|
||||||
|
|
||||||
|
def on_message(mcp_mqtt, userdata, msg):
|
||||||
|
local_bus=userdata
|
||||||
|
topic=msg.topic
|
||||||
|
print("data Received topic: ", topic)
|
||||||
|
m_decode=str(msg.payload.decode("utf-8","ignore"))
|
||||||
|
print("data Received",m_decode)
|
||||||
|
msg_id=int(m_decode.split('#')[0],16)
|
||||||
|
|
||||||
|
msg_data=int(m_decode.split('#')[1],16)
|
||||||
|
print(msg_data)
|
||||||
|
m = can.Message(arbitration_id=msg_id,
|
||||||
|
data=[msg_data],
|
||||||
|
extended_id=True)
|
||||||
|
try:
|
||||||
|
local_bus.send(m)
|
||||||
|
except BaseException as e:
|
||||||
|
logging.error("Error sending can message {%s}: %s" % (m, e))
|
||||||
|
print("data sent to CAN",m)
|
||||||
|
def main():
|
||||||
|
verbosity = 2
|
||||||
|
|
||||||
|
logging_level_name = ['critical', 'error', 'warning', 'info', 'debug', 'subdebug'][min(5, verbosity)]
|
||||||
|
can.set_logging_level(logging_level_name)
|
||||||
|
|
||||||
|
can_filters = []
|
||||||
|
config = {"can_filters": can_filters, "single_handle": True}
|
||||||
|
config["interface"] = "socketcan"
|
||||||
|
config["bitrate"] = 125000
|
||||||
|
bus = Bus("can1", **config)
|
||||||
|
|
||||||
|
print('Connected to {}: {}'.format(bus.__class__.__name__, bus.channel_info))
|
||||||
|
print('Can Logger (Started on {})\n'.format(datetime.now()))
|
||||||
|
|
||||||
|
mcp_mqtt = mqtt.Client()
|
||||||
|
mcp_mqtt.on_connect = on_connect
|
||||||
|
mcp_mqtt.on_message = on_message
|
||||||
|
mcp_mqtt.user_data_set(bus)
|
||||||
|
mcp_mqtt.connect("mcp", 1883, 60)
|
||||||
|
|
||||||
|
try:
|
||||||
|
while True:
|
||||||
|
mcp_mqtt.loop_start()
|
||||||
|
msg = bus.recv(1)
|
||||||
|
if msg is not None:
|
||||||
|
de=decon(msg.arbitration_id)
|
||||||
|
m= { "prio": hex(de[0]), "type": hex(de[1]), "dst": hex(de[2]), "src": hex(de[3]), "cmd": hex(de[4]), "data": "".join("%02x" % b for b in msg.data) }
|
||||||
|
print(m)
|
||||||
|
mcp_mqtt.publish("can/rx", str(m))
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
pass
|
||||||
|
finally:
|
||||||
|
bus.shutdown()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
63
tools/canfixer.py
Executable file
@ -0,0 +1,63 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# coding: utf-8
|
||||||
|
|
||||||
|
|
||||||
|
from __future__ import absolute_import, print_function
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import argparse
|
||||||
|
import socket
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
import can
|
||||||
|
from can import Bus, BusState, Logger
|
||||||
|
|
||||||
|
|
||||||
|
def decon(msg_id):
|
||||||
|
msg_prio=msg_id>>26
|
||||||
|
msg_type=(msg_id>>24) & 0x03
|
||||||
|
msg_dst=(msg_id>>16) & 0xFF
|
||||||
|
msg_src=(msg_id>>8) & 0xFF
|
||||||
|
msg_cmd=msg_id & 0xFF
|
||||||
|
print("prio: ", hex(msg_prio),"type: ", hex(msg_type)," dst: ", hex(msg_dst)," src: ", hex(msg_src)," cmd: ",hex(msg_cmd))
|
||||||
|
return [msg_prio, msg_type, msg_dst, msg_src, msg_cmd]
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
verbosity = 2
|
||||||
|
|
||||||
|
logging_level_name = ['critical', 'error', 'warning', 'info', 'debug', 'subdebug'][min(5, verbosity)]
|
||||||
|
can.set_logging_level(logging_level_name)
|
||||||
|
|
||||||
|
can_filters = []
|
||||||
|
config = {"can_filters": can_filters, "single_handle": True}
|
||||||
|
config["interface"] = "socketcan"
|
||||||
|
config["bitrate"] = 125000
|
||||||
|
bus = Bus("can1", **config)
|
||||||
|
|
||||||
|
print('Connected to {}: {}'.format(bus.__class__.__name__, bus.channel_info))
|
||||||
|
print('Can Logger (Started on {})\n'.format(datetime.now()))
|
||||||
|
|
||||||
|
try:
|
||||||
|
while True:
|
||||||
|
msg = bus.recv(1)
|
||||||
|
if msg is not None:
|
||||||
|
de=decon(msg.arbitration_id)
|
||||||
|
m= { "prio": hex(de[0]), "type": hex(de[1]), "dst": hex(de[2]), "src": hex(de[3]), "cmd": hex(de[4]), "target": hex(msg.data[0]) }
|
||||||
|
if de[2] is 3 and msg.data[0] is 3 and de[1] is 0 and de[3] is 3 and de[4] is 3 :
|
||||||
|
print(m)
|
||||||
|
m = can.Message(arbitration_id=0x0C030900,
|
||||||
|
data=[3],
|
||||||
|
extended_id=True)
|
||||||
|
try:
|
||||||
|
bus.send(m)
|
||||||
|
except BaseException as e:
|
||||||
|
logging.error("Error sending can message {%s}: %s" % (m, e))
|
||||||
|
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
pass
|
||||||
|
finally:
|
||||||
|
bus.shutdown()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
163
tools/coil2can.py
Executable file
@ -0,0 +1,163 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
from __future__ import absolute_import, print_function
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import argparse
|
||||||
|
import socket
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
import can
|
||||||
|
from can import Bus, BusState, Logger
|
||||||
|
|
||||||
|
import paho.mqtt.client as mqtt
|
||||||
|
|
||||||
|
sub_topic = "coil"
|
||||||
|
coil_map = {
|
||||||
|
'EZ': [ 0x03, 0x01 ],
|
||||||
|
'K': [ 0x03, 0x02 ],
|
||||||
|
'WZ1': [ 0x02, 0x01 ],
|
||||||
|
'WZ2': [ 0x02, 0x02 ],
|
||||||
|
'TER': [ 0x03, 0x03 ],
|
||||||
|
'FE': [ 0x03, 0x07 ],
|
||||||
|
'TRE': [ 0x02, 0x03 ],
|
||||||
|
'FO': [ 0x01, 0x03 ],
|
||||||
|
'TRO': [ 0x01, 0x07 ],
|
||||||
|
'KI1': [ 0x01, 0x06 ],
|
||||||
|
'KI2': [ 0x01, 0x04 ],
|
||||||
|
'SCH': [ 0x01, 0x08 ],
|
||||||
|
'B1': [ 0x01, 0x01 ],
|
||||||
|
'B2': [ 0x01, 0x02 ],
|
||||||
|
'ROL_EZ_G_DOWN': [0x03, 0x05, -1],
|
||||||
|
'ROL_EZ_G_UP': [0x03,0x04, -1],
|
||||||
|
'ROL_EZ_N_DOWN': [0x03, 0x06, -2],
|
||||||
|
'ROL_EZ_N_UP': [0x03,0x08, -2],
|
||||||
|
'EG1': [ 0x02, 0x09 ],
|
||||||
|
'EG2': [ 0x03, 0x09 ],
|
||||||
|
'OG': [ 0x01, 0x09 ],
|
||||||
|
'ALL': [ 0xFF, 0x09 ],
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd_map = {
|
||||||
|
'off': 0,
|
||||||
|
'0': 0,
|
||||||
|
'on': 1,
|
||||||
|
'1': 1,
|
||||||
|
'value': 2,
|
||||||
|
'toggle': 3
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def decon(msg_id):
|
||||||
|
msg_prio=msg_id>>26
|
||||||
|
msg_type=(msg_id>>24) & 0x03
|
||||||
|
msg_dst=(msg_id>>16) & 0xFF
|
||||||
|
msg_src=(msg_id>>8) & 0xFF
|
||||||
|
msg_cmd=msg_id & 0xFF
|
||||||
|
# print("msg_id: ", hex(msg_id), "prio: ", hex(msg_prio),"type: ", hex(msg_type)," dst: ", hex(msg_dst)," src: ", hex(msg_src)," cmd: ",hex(msg_cmd))
|
||||||
|
return [msg_prio, msg_type, msg_dst, msg_src, msg_cmd]
|
||||||
|
|
||||||
|
def con(msg_dst,msg_cmd,msg_prio=3,msg_type=0,msg_src=11, ):
|
||||||
|
msg_id=(msg_prio<<26) + \
|
||||||
|
((msg_type&0x03)<<24) +\
|
||||||
|
((msg_dst&0xFF)<<16) +\
|
||||||
|
((msg_src&0xFF)<<8) +\
|
||||||
|
(msg_cmd&0xFF)
|
||||||
|
print("Constructed ID: "+hex(msg_id))
|
||||||
|
return msg_id
|
||||||
|
|
||||||
|
def on_connect(mcp_mqtt, userdata, flags, rc):
|
||||||
|
print("Connected with result code "+str(rc))
|
||||||
|
|
||||||
|
# Subscribing in on_connect() means that if we lose the connection and
|
||||||
|
# reconnect then subscriptions will be renewed.
|
||||||
|
mcp_mqtt.subscribe(sub_topic+"/+")
|
||||||
|
print("Subscribed to:"+sub_topic+"/+")
|
||||||
|
|
||||||
|
def on_message(mcp_mqtt, userdata, msg):
|
||||||
|
local_bus=userdata
|
||||||
|
print("data Received topic: ", msg.topic)
|
||||||
|
m_decode=str(msg.payload.decode("utf-8","ignore"))
|
||||||
|
print("data Received",m_decode)
|
||||||
|
msg_cmd=cmd_map[m_decode]
|
||||||
|
sub=msg.topic[len(sub_topic)+1:]
|
||||||
|
coil=sub
|
||||||
|
print("substring: "+coil)
|
||||||
|
addr = coil_map[coil]
|
||||||
|
print("Addr:", addr)
|
||||||
|
if msg_cmd == 2:
|
||||||
|
msg_data.append(value)
|
||||||
|
print("msg_cmd",msg_cmd, len(addr))
|
||||||
|
if msg_cmd is not 0 and len(addr) is 3:
|
||||||
|
print("hello 001")
|
||||||
|
for key, value in coil_map.items():
|
||||||
|
print("checking: ", key)
|
||||||
|
if len(value) is 3:
|
||||||
|
print("value_2 is", value[2], "Addr: ", addr[2])
|
||||||
|
if value[2] is addr[2]:
|
||||||
|
msg_id=con(msg_dst=value[0],msg_cmd=0)
|
||||||
|
msg_data=[value[1]]
|
||||||
|
m = can.Message(arbitration_id=msg_id,
|
||||||
|
data=msg_data,
|
||||||
|
extended_id=True)
|
||||||
|
try:
|
||||||
|
local_bus.send(m)
|
||||||
|
except BaseException as e:
|
||||||
|
logging.error("Error sending can message {%s}: %s" % (m, e))
|
||||||
|
print("data sent to CAN",m)
|
||||||
|
|
||||||
|
msg_id=con(msg_dst=addr[0],msg_cmd=msg_cmd)
|
||||||
|
msg_data=[addr[1]]
|
||||||
|
|
||||||
|
m = can.Message(arbitration_id=msg_id,
|
||||||
|
data=msg_data,
|
||||||
|
extended_id=True)
|
||||||
|
try:
|
||||||
|
local_bus.send(m)
|
||||||
|
except BaseException as e:
|
||||||
|
logging.error("Error sending can message {%s}: %s" % (m, e))
|
||||||
|
print("data sent to CAN",m)
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
verbosity = 2
|
||||||
|
|
||||||
|
logging_level_name = ['critical', 'error', 'warning', 'info', 'debug', 'subdebug'][min(5, verbosity)]
|
||||||
|
can.set_logging_level(logging_level_name)
|
||||||
|
|
||||||
|
can_filters = []
|
||||||
|
config = {"can_filters": can_filters, "single_handle": True}
|
||||||
|
config["interface"] = "socketcan"
|
||||||
|
config["bitrate"] = 125000
|
||||||
|
bus = Bus("can1", **config)
|
||||||
|
|
||||||
|
print('Connected to {}: {}'.format(bus.__class__.__name__, bus.channel_info))
|
||||||
|
print('Can Logger (Started on {})\n'.format(datetime.now()))
|
||||||
|
|
||||||
|
mcp_mqtt = mqtt.Client()
|
||||||
|
mcp_mqtt.on_connect = on_connect
|
||||||
|
mcp_mqtt.on_message = on_message
|
||||||
|
mcp_mqtt.user_data_set(bus)
|
||||||
|
mcp_mqtt.connect("mcp", 1883, 60)
|
||||||
|
mcp_mqtt.loop_start()
|
||||||
|
|
||||||
|
try:
|
||||||
|
while True:
|
||||||
|
msg = bus.recv(1)
|
||||||
|
if msg is not None:
|
||||||
|
de=decon(msg.arbitration_id)
|
||||||
|
m= { "prio": hex(de[0]), "type": hex(de[1]), "dst": hex(de[2]), "src": hex(de[3]), "cmd": hex(de[4]), "action": hex(msg.data[0]) }
|
||||||
|
if de[2]==0 and de[4] == 6:
|
||||||
|
print("received state: ", hex(de[3]), hex(msg.data[0]), hex(msg.data[1]))
|
||||||
|
for key in coil_map:
|
||||||
|
address=coil_map[key]
|
||||||
|
if address[0] == de[3] and address[1] == msg.data[0]+1:
|
||||||
|
print("coil/"+key+" changed to "+str(msg.data[1]))
|
||||||
|
mcp_mqtt.publish("coil/"+key+"/state", msg.data[1] , retain=1)
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
pass
|
||||||
|
finally:
|
||||||
|
bus.shutdown()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
41
tools/data2obj.py
Executable file
@ -0,0 +1,41 @@
|
|||||||
|
#! /usr/bin/env python
|
||||||
|
import sys
|
||||||
|
|
||||||
|
msg_id=int(str(sys.argv[1]),0) & 0x1FFFFFFF
|
||||||
|
msg_prio=msg_id>>26
|
||||||
|
msg_type=(msg_id>>24) & 0x03
|
||||||
|
msg_dst=(msg_id>>16) & 0xFF
|
||||||
|
msg_src=(msg_id>>8) & 0xFF
|
||||||
|
msg_cmd=msg_id & 0xFF
|
||||||
|
|
||||||
|
#print('id: {0:b}'.format(msg_id))
|
||||||
|
print('id: {0:#010x} {0:#031b}'.format(msg_id ,msg_id))
|
||||||
|
#print("id:", hex(msg_id), format(40,str(bin(msg_id))))
|
||||||
|
|
||||||
|
print('prio: {0:#03x} {0:#04b}'.format(msg_prio))
|
||||||
|
print('type: {0:#03x} {0:#04b}'.format(msg_type))
|
||||||
|
print('dst: {0:#04x} {0:#010b}'.format(msg_dst))
|
||||||
|
print('src: {0:#04x} {0:#010b}'.format(msg_src))
|
||||||
|
print('cmd: {0:#04x} {0:#010b}'.format(msg_cmd))
|
||||||
|
|
||||||
|
|
||||||
|
nmsg_prio=msg_id>>26
|
||||||
|
nmsg_type=(msg_id>>24) & 0x03
|
||||||
|
nmsg_src=(msg_id>>18) & 0x3F
|
||||||
|
nmsg_dst=(msg_id>>12) & 0x3F
|
||||||
|
nmsg_targ=(msg_id>>6) & 0x3F
|
||||||
|
nmsg_cmd=msg_id & 0x1F
|
||||||
|
|
||||||
|
|
||||||
|
print('New schema')
|
||||||
|
|
||||||
|
#print('id: {0:b}'.format(msg_id))
|
||||||
|
print('id: {0:#010x} {0:#031b}'.format(msg_id))
|
||||||
|
#print("id:", hex(msg_id), format(40,str(bin(msg_id))))
|
||||||
|
|
||||||
|
print('prio: {0:#04x} {0:#04b}'.format(nmsg_prio))
|
||||||
|
print('type: {0:#04x} {0:#04b}'.format(nmsg_type))
|
||||||
|
print('src: {0:#04x} {0:#08b}'.format(nmsg_src))
|
||||||
|
print('dst: {0:#04x} {0:#08b}'.format(nmsg_dst))
|
||||||
|
print('target: {0:#04x} {0:#08b}'.format(nmsg_targ))
|
||||||
|
print('cmd: {0:#04x} {0:#07b}'.format(nmsg_cmd))
|
170
tools/light2can.py
Executable file
@ -0,0 +1,170 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
from __future__ import absolute_import, print_function
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import argparse
|
||||||
|
import socket
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
import can
|
||||||
|
from can import Bus, BusState, Logger
|
||||||
|
|
||||||
|
import paho.mqtt.client as mqtt
|
||||||
|
|
||||||
|
sub_topic = "light"
|
||||||
|
aliases = {
|
||||||
|
'Esszimmer': 'EZ',
|
||||||
|
'Esszimmer oben': 'EZ',
|
||||||
|
'Küche': 'K',
|
||||||
|
'Wohnzimmer1': 'WZ1',
|
||||||
|
'Wohnzimmer2': 'WZ2',
|
||||||
|
'Wohnzimmer Nord': 'WZ1',
|
||||||
|
'Wohnzimmer Süd': 'WZ2',
|
||||||
|
'Wohnzimmer Tür': 'WZ1',
|
||||||
|
'Wohnzimmer TV': 'WZ2',
|
||||||
|
'Wohnzimmer Fernseher': 'WZ2',
|
||||||
|
'Bad Decke': 'B1',
|
||||||
|
'Bad Spiegel': 'B2',
|
||||||
|
'Bjarne': 'K1',
|
||||||
|
'Inka': 'K2',
|
||||||
|
'Schlafzimmer': 'SCH',
|
||||||
|
'Flur EG': 'FE',
|
||||||
|
'Flur unten': 'FE',
|
||||||
|
'Flur OG': 'FO',
|
||||||
|
'Flur oben': 'FO',
|
||||||
|
'Treppe EG': 'TRE',
|
||||||
|
'Treppe unten': 'TRE',
|
||||||
|
'Treppe OG': 'TRO',
|
||||||
|
'Treppe oben': 'TRO'
|
||||||
|
}
|
||||||
|
light_map = {
|
||||||
|
'EZ': [ 0x03, 0x01 ],
|
||||||
|
'K': [ 0x03, 0x02 ],
|
||||||
|
'WZ1': [ 0x02, 0x01 ],
|
||||||
|
'WZ2': [ 0x02, 0x02 ],
|
||||||
|
'TER': [ 0x03, 0x03 ],
|
||||||
|
'FE': [ 0x03, 0x07 ],
|
||||||
|
'TRE': [ 0x02, 0x03 ],
|
||||||
|
'FO': [ 0x01, 0x03 ],
|
||||||
|
'TRO': [ 0x01, 0x07 ],
|
||||||
|
'KI1': [ 0x01, 0x06 ],
|
||||||
|
'KI2': [ 0x01, 0x04 ],
|
||||||
|
'SCH': [ 0x01, 0x08 ],
|
||||||
|
'B1': [ 0x01, 0x01 ],
|
||||||
|
'B2': [ 0x01, 0x02 ],
|
||||||
|
'EG1': [ 0x02, 0x09 ],
|
||||||
|
'EG2': [ 0x03, 0x09 ],
|
||||||
|
'OG': [ 0x01, 0x09 ],
|
||||||
|
'ALL': [ 0xFF, 0x09 ],
|
||||||
|
}
|
||||||
|
cmd_map = {
|
||||||
|
'off': 0,
|
||||||
|
'0': 0,
|
||||||
|
'on': 1,
|
||||||
|
'1': 1,
|
||||||
|
'value': 2,
|
||||||
|
'toggle': 3
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def decon(msg_id):
|
||||||
|
msg_prio=msg_id>>26
|
||||||
|
msg_type=(msg_id>>24) & 0x03
|
||||||
|
msg_dst=(msg_id>>16) & 0xFF
|
||||||
|
msg_src=(msg_id>>8) & 0xFF
|
||||||
|
msg_cmd=msg_id & 0xFF
|
||||||
|
# print("msg_id: ", hex(msg_id), "prio: ", hex(msg_prio),"type: ", hex(msg_type)," dst: ", hex(msg_dst)," src: ", hex(msg_src)," cmd: ",hex(msg_cmd))
|
||||||
|
return [msg_prio, msg_type, msg_dst, msg_src, msg_cmd]
|
||||||
|
|
||||||
|
def con(msg_dst,msg_cmd,msg_prio=3,msg_type=0,msg_src=11, ):
|
||||||
|
msg_id=(msg_prio<<26) + \
|
||||||
|
((msg_type&0x03)<<24) +\
|
||||||
|
((msg_dst&0xFF)<<16) +\
|
||||||
|
((msg_src&0xFF)<<8) +\
|
||||||
|
(msg_cmd&0xFF)
|
||||||
|
print("Constructed ID: "+hex(msg_id))
|
||||||
|
return msg_id
|
||||||
|
|
||||||
|
def on_connect(mcp_mqtt, userdata, flags, rc):
|
||||||
|
print("Connected with result code "+str(rc))
|
||||||
|
|
||||||
|
# Subscribing in on_connect() means that if we lose the connection and
|
||||||
|
# reconnect then subscriptions will be renewed.
|
||||||
|
mcp_mqtt.subscribe(sub_topic+"/+")
|
||||||
|
print("Subscribed to:"+sub_topic+"/+")
|
||||||
|
|
||||||
|
def on_message(mcp_mqtt, userdata, msg):
|
||||||
|
local_bus=userdata
|
||||||
|
print("data Received topic: ", msg.topic)
|
||||||
|
m_decode=str(msg.payload.decode("utf-8","ignore"))
|
||||||
|
print("data Received",m_decode)
|
||||||
|
msg_cmd=cmd_map[m_decode]
|
||||||
|
sub=msg.topic[len(sub_topic)+1:]
|
||||||
|
light=aliases.get(sub,None)
|
||||||
|
if light is None:
|
||||||
|
light=sub
|
||||||
|
print("substring: "+light)
|
||||||
|
addr = light_map[light]
|
||||||
|
msg_id=con(msg_dst=addr[0],msg_cmd=msg_cmd)
|
||||||
|
msg_data=[addr[1]]
|
||||||
|
print(msg_data)
|
||||||
|
if msg_cmd == 2:
|
||||||
|
msg_data.append(value)
|
||||||
|
print(msg_data)
|
||||||
|
m = can.Message(arbitration_id=msg_id,
|
||||||
|
data=msg_data,
|
||||||
|
extended_id=True)
|
||||||
|
try:
|
||||||
|
local_bus.send(m)
|
||||||
|
except BaseException as e:
|
||||||
|
logging.error("Error sending can message {%s}: %s" % (m, e))
|
||||||
|
print("data sent to CAN",m)
|
||||||
|
if light == 'ALL':
|
||||||
|
print("ALL detected")
|
||||||
|
for key in light_map:
|
||||||
|
mcp_mqtt.publish("light/"+key+"/state", msg_cmd, retain=1)
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
verbosity = 2
|
||||||
|
|
||||||
|
logging_level_name = ['critical', 'error', 'warning', 'info', 'debug', 'subdebug'][min(5, verbosity)]
|
||||||
|
can.set_logging_level(logging_level_name)
|
||||||
|
|
||||||
|
can_filters = []
|
||||||
|
config = {"can_filters": can_filters, "single_handle": True}
|
||||||
|
config["interface"] = "socketcan_native"
|
||||||
|
config["bitrate"] = 125000
|
||||||
|
bus = Bus("can1", **config)
|
||||||
|
|
||||||
|
print('Connected to {}: {}'.format(bus.__class__.__name__, bus.channel_info))
|
||||||
|
print('Can Logger (Started on {})\n'.format(datetime.now()))
|
||||||
|
|
||||||
|
mcp_mqtt = mqtt.Client()
|
||||||
|
mcp_mqtt.on_connect = on_connect
|
||||||
|
mcp_mqtt.on_message = on_message
|
||||||
|
mcp_mqtt.user_data_set(bus)
|
||||||
|
mcp_mqtt.connect("mcp", 1883, 60)
|
||||||
|
mcp_mqtt.loop_start()
|
||||||
|
|
||||||
|
try:
|
||||||
|
while True:
|
||||||
|
msg = bus.recv(1)
|
||||||
|
if msg is not None:
|
||||||
|
de=decon(msg.arbitration_id)
|
||||||
|
m= { "prio": hex(de[0]), "type": hex(de[1]), "dst": hex(de[2]), "src": hex(de[3]), "cmd": hex(de[4]), "action": hex(msg.data[0]) }
|
||||||
|
if de[2]==0 and de[4] == 6:
|
||||||
|
print("received state: ", hex(de[3]), hex(msg.data[0]), hex(msg.data[1]))
|
||||||
|
for key in light_map:
|
||||||
|
address=light_map[key]
|
||||||
|
if address[0] == de[3] and address[1] == msg.data[0]+1:
|
||||||
|
print("light/"+key+" changed to "+str(msg.data[1]))
|
||||||
|
mcp_mqtt.publish("light/"+key+"/state", msg.data[1] , retain=1)
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
pass
|
||||||
|
finally:
|
||||||
|
bus.shutdown()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
214
tools/mqtt2can.py
Executable file
@ -0,0 +1,214 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
from __future__ import absolute_import, print_function
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import argparse
|
||||||
|
import socket
|
||||||
|
import logging
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
import can
|
||||||
|
from can import Bus, BusState, Logger
|
||||||
|
|
||||||
|
import paho.mqtt.client as mqtt
|
||||||
|
|
||||||
|
base_topic="house"
|
||||||
|
|
||||||
|
coil_topic = "coil"
|
||||||
|
light_topic = "light"
|
||||||
|
switch_topic = "switch"
|
||||||
|
|
||||||
|
coil_map = {
|
||||||
|
# tag, node, address, affinity
|
||||||
|
# tag: (L)ight, (E)G, (O)G, (F)lur, (S)chlaf, (A)ussen
|
||||||
|
'EZ': [ "LE", 0x03, 0x01 ],
|
||||||
|
'K': [ "LE", 0x03, 0x02 ],
|
||||||
|
'WZ1': [ "LE", 0x02, 0x01 ],
|
||||||
|
'WZ2': [ "LE", 0x02, 0x02 ],
|
||||||
|
'TER': [ "LEA", 0x03, 0x03 ],
|
||||||
|
'FE': [ "LFE", 0x03, 0x07 ],
|
||||||
|
'TRE': [ "LFE", 0x02, 0x03 ],
|
||||||
|
'FO': [ "LFO", 0x01, 0x03 ],
|
||||||
|
'TRO': [ "LFO", 0x01, 0x07 ],
|
||||||
|
'KI1': [ "LSO", 0x01, 0x06 ],
|
||||||
|
'KI2': [ "LSO", 0x01, 0x04 ],
|
||||||
|
'SCH': [ "LSO", 0x01, 0x08 ],
|
||||||
|
'B1': [ "LO", 0x01, 0x01 ],
|
||||||
|
'B2': [ "LO", 0x01, 0x02 ],
|
||||||
|
'ROL_EZ_G_DOWN': [ "", 0x03, 0x05, -1],
|
||||||
|
'ROL_EZ_G_UP': [ "", 0x03, 0x04, -1],
|
||||||
|
'ROL_EZ_N_DOWN': [ "", 0x03, 0x06, -2],
|
||||||
|
'ROL_EZ_N_UP': [ "", 0x03, 0x08, -2],
|
||||||
|
# 'EG1': [ 0, 0x02, 0x09 ],
|
||||||
|
# 'EG2': [ 0, 0x03, 0x09 ],
|
||||||
|
# 'OG': [ 0, 0x01, 0x09 ],
|
||||||
|
'ALL': [ "", 0xFF, 0x09 ],
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd_map = {
|
||||||
|
'off': 0,
|
||||||
|
'0': 0,
|
||||||
|
'on': 1,
|
||||||
|
'1': 1,
|
||||||
|
'value': 2,
|
||||||
|
'toggle': 3
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def decon(msg_id):
|
||||||
|
msg_prio=msg_id>>26
|
||||||
|
msg_type=(msg_id>>24) & 0x03
|
||||||
|
msg_dst=(msg_id>>16) & 0xFF
|
||||||
|
msg_src=(msg_id>>8) & 0xFF
|
||||||
|
msg_cmd=msg_id & 0xFF
|
||||||
|
# print("msg_id: ", hex(msg_id), "prio: ", hex(msg_prio),"type: ", hex(msg_type)," dst: ", hex(msg_dst)," src: ", hex(msg_src)," cmd: ",hex(msg_cmd))
|
||||||
|
return [msg_prio, msg_type, msg_dst, msg_src, msg_cmd]
|
||||||
|
|
||||||
|
def con(msg_dst,msg_cmd,msg_prio=3,msg_type=0,msg_src=11, ):
|
||||||
|
msg_id=(msg_prio<<26) + \
|
||||||
|
((msg_type&0x03)<<24) +\
|
||||||
|
((msg_dst&0xFF)<<16) +\
|
||||||
|
((msg_src&0xFF)<<8) +\
|
||||||
|
(msg_cmd&0xFF)
|
||||||
|
print("Constructed ID: "+hex(msg_id))
|
||||||
|
return msg_id
|
||||||
|
|
||||||
|
def coil_action(coil, payload, bus, tag=0 ):
|
||||||
|
try:
|
||||||
|
cmd=cmd_map[payload]
|
||||||
|
except BaseException as e:
|
||||||
|
logging.error("Error finding command {%s}: %s" % (payload, e))
|
||||||
|
print("Coil: ",coil,"cmd:", payload)
|
||||||
|
try:
|
||||||
|
addr = coil_map[coil]
|
||||||
|
print("Addr:", addr)
|
||||||
|
if cmd == 2:
|
||||||
|
print("TBD")
|
||||||
|
# msg_data.append(value)
|
||||||
|
print("cmd", cmd,"length: ", len(addr))
|
||||||
|
if tag is not 0:
|
||||||
|
if tag not in addr[0]:
|
||||||
|
print("not tagged with: ",tag)
|
||||||
|
return
|
||||||
|
|
||||||
|
if cmd is not 0 and len(addr) is 4:
|
||||||
|
print("Applying affinity")
|
||||||
|
for key, value in coil_map.items():
|
||||||
|
print("checking: ", key)
|
||||||
|
if len(value) is 4:
|
||||||
|
print("value_2 is", value[3], "Addr: ", addr[3])
|
||||||
|
if value[3] is addr[3]:
|
||||||
|
msg_id=con(msg_dst=value[1],msg_cmd=0)
|
||||||
|
msg_data=[value[2]]
|
||||||
|
m = can.Message(arbitration_id=msg_id,
|
||||||
|
data=msg_data,
|
||||||
|
extended_id=True)
|
||||||
|
try:
|
||||||
|
bus.send(m)
|
||||||
|
print("data sent to CAN",m)
|
||||||
|
except BaseException as e:
|
||||||
|
logging.error("Error sending can message {%s}: %s" % (m, e))
|
||||||
|
|
||||||
|
msg_id=con(msg_dst=addr[1],msg_cmd=cmd)
|
||||||
|
msg_data=[addr[2]]
|
||||||
|
print(msg_id)
|
||||||
|
m = can.Message(arbitration_id=msg_id,
|
||||||
|
data=msg_data,
|
||||||
|
extended_id=True)
|
||||||
|
try:
|
||||||
|
bus.send(m)
|
||||||
|
print("data sent to CAN",m)
|
||||||
|
except BaseException as e:
|
||||||
|
logging.error("Error sending can message {%s}: %s" % (m, e))
|
||||||
|
|
||||||
|
except BaseException as e:
|
||||||
|
logging.error("Error finding coil %s" % (coil))
|
||||||
|
|
||||||
|
def on_connect(mcp_mqtt, userdata, flags, rc):
|
||||||
|
print("Connected with result code "+str(rc))
|
||||||
|
|
||||||
|
# Subscribing in on_connect() means that if we lose the connection and
|
||||||
|
# reconnect then subscriptions will be renewed.
|
||||||
|
mcp_mqtt.subscribe(base_topic+"/#", 0)
|
||||||
|
print("Subscribed to: "+base_topic+"/#")
|
||||||
|
|
||||||
|
def on_message_coil(mcp_mqtt, bus, msg):
|
||||||
|
print("data Received topic: ", msg.topic)
|
||||||
|
m_decode=str(msg.payload.decode("utf-8","ignore"))
|
||||||
|
print("data Received",m_decode)
|
||||||
|
sub=msg.topic[len(base_topic)+len(coil_topic)+2:]
|
||||||
|
coil_action(sub, m_decode, bus)
|
||||||
|
|
||||||
|
|
||||||
|
def on_message_light(mcp_mqtt, bus, msg):
|
||||||
|
print("data Received topic: ", msg.topic)
|
||||||
|
m_decode=str(msg.payload.decode("utf-8","ignore"))
|
||||||
|
print("data Received",m_decode)
|
||||||
|
sub=msg.topic[len(base_topic)+len(light_topic)+2:]
|
||||||
|
coil_action(sub, m_decode, bus, "L")
|
||||||
|
|
||||||
|
|
||||||
|
def on_message(mcp_mqtt, obj, msg):
|
||||||
|
# This callback will be called for messages that we receive that do not
|
||||||
|
# match any patterns defined in topic specific callbacks, i.e. in this case
|
||||||
|
print(msg.topic + " " + str(msg.qos) + " " + str(msg.payload))
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
verbosity = 2
|
||||||
|
|
||||||
|
logging_level_name = ['critical', 'error', 'warning', 'info', 'debug', 'subdebug'][min(5, verbosity)]
|
||||||
|
can.set_logging_level(logging_level_name)
|
||||||
|
|
||||||
|
can_filters = []
|
||||||
|
config = {"can_filters": can_filters, "single_handle": True}
|
||||||
|
config["interface"] = "socketcan"
|
||||||
|
config["bitrate"] = 125000
|
||||||
|
bus = Bus("can1", **config)
|
||||||
|
|
||||||
|
print('Connected to {}: {}'.format(bus.__class__.__name__, bus.channel_info))
|
||||||
|
print('Can Logger (Started on {})\n'.format(datetime.now()))
|
||||||
|
|
||||||
|
mcp_mqtt = mqtt.Client()
|
||||||
|
mcp_mqtt.on_connect = on_connect
|
||||||
|
# mcp_mqtt.on_message = on_message
|
||||||
|
mcp_mqtt.user_data_set(bus)
|
||||||
|
mcp_mqtt.loop_start()
|
||||||
|
|
||||||
|
mcp_mqtt.message_callback_add(base_topic+"/"+coil_topic+"/+", on_message_coil)
|
||||||
|
mcp_mqtt.message_callback_add(base_topic+"/"+light_topic+"/+", on_message_light)
|
||||||
|
mcp_mqtt.on_message = on_message
|
||||||
|
mcp_mqtt.connect("mcp", 1883, 60)
|
||||||
|
|
||||||
|
mcp_mqtt.loop_start()
|
||||||
|
#mcp_mqtt.loop_forever()
|
||||||
|
|
||||||
|
|
||||||
|
try:
|
||||||
|
while True:
|
||||||
|
msg = bus.recv(1)
|
||||||
|
if msg is not None:
|
||||||
|
de=decon(msg.arbitration_id)
|
||||||
|
m= { "prio": hex(de[0]), "type": hex(de[1]), "dst": hex(de[2]), "src": hex(de[3]), "cmd": hex(de[4]), "action": hex(msg.data[0]) }
|
||||||
|
if de[2]==0 and de[4] == 6:
|
||||||
|
print("received state: ", hex(de[3]), hex(msg.data[0]), hex(msg.data[1]))
|
||||||
|
for key in coil_map:
|
||||||
|
address=coil_map[key]
|
||||||
|
if address[1] == de[3] and address[2] == msg.data[0]+1:
|
||||||
|
print("coil/"+key+" changed to "+str(msg.data[1]))
|
||||||
|
mcp_mqtt.publish(base_topic+"/"+coil_topic+"/"+key+"/state", msg.data[1] , retain=1)
|
||||||
|
if "L" in address[0]:
|
||||||
|
print("light/"+key+" changed to "+str(msg.data[1]))
|
||||||
|
mcp_mqtt.publish(base_topic+"/"+light_topic+"/"+key+"/state", msg.data[1] , retain=1)
|
||||||
|
elif de[2]==0 and de[4] == 5:
|
||||||
|
print("received state: ", de[3], msg.data[0], bin(msg.data[1]))
|
||||||
|
mcp_mqtt.publish(base_topic+"/"+switch_topic+"/"+str(de[3])+"-"+str(msg.data[0]), bin(msg.data[1]) , retain=1)
|
||||||
|
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
pass
|
||||||
|
finally:
|
||||||
|
bus.shutdown()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
55
tools/obj2data.py
Executable file
@ -0,0 +1,55 @@
|
|||||||
|
#! /usr/bin/env python
|
||||||
|
import sys
|
||||||
|
import json
|
||||||
|
#stuff = json.loads(sys.argv[1])
|
||||||
|
|
||||||
|
|
||||||
|
#data = json.load(sys.stdin)
|
||||||
|
|
||||||
|
|
||||||
|
#print(json.dumps(sys.stdin, sort_keys=True, indent=4))
|
||||||
|
###print str(sys.argv[1])
|
||||||
|
#print(stuff['foo'])
|
||||||
|
|
||||||
|
#print(json.dumps(data, indent=4))
|
||||||
|
|
||||||
|
#msg_id=int(str(sys.argv[1]),0)
|
||||||
|
#msg_prio=msg_id>>26
|
||||||
|
#msg_type=(msg_id>>24) & 0x03
|
||||||
|
#msg_dst=(msg_id>>16) & 0xFF
|
||||||
|
#msg_src=(msg_id>>8) & 0xFF
|
||||||
|
#msg_cmd=msg_id & 0xFF
|
||||||
|
|
||||||
|
#print "id:", hex(msg_id), bin(msg_id)
|
||||||
|
#print "prio:", hex(msg_prio), bin(msg_prio)
|
||||||
|
#print "type:", hex(msg_type), bin(msg_type)
|
||||||
|
#print "dst:", hex(msg_dst), bin(msg_dst)
|
||||||
|
#print "src:", hex(msg_src), bin(msg_src)
|
||||||
|
#print "cmd:", hex(msg_cmd), bin(msg_cmd)
|
||||||
|
import sys
|
||||||
|
import simplejson as json
|
||||||
|
|
||||||
|
|
||||||
|
def main(args):
|
||||||
|
try:
|
||||||
|
inputFile = open(args[1])
|
||||||
|
input = json.load(inputFile)
|
||||||
|
inputFile.close()
|
||||||
|
except IndexError:
|
||||||
|
usage()
|
||||||
|
return False
|
||||||
|
if len(args) < 3:
|
||||||
|
print json.dumps(input, sort_keys = False, indent = 10)
|
||||||
|
else:
|
||||||
|
outputFile = open(args[2], "w")
|
||||||
|
json.dump(input, outputFile, sort_keys = False, indent = 4)
|
||||||
|
outputFile.close()
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def usage():
|
||||||
|
print __doc__
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
sys.exit(not main(sys.argv))
|
149
tools/shutter2can.py
Executable file
@ -0,0 +1,149 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
from __future__ import absolute_import, print_function
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import argparse
|
||||||
|
import socket
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
import can
|
||||||
|
from can import Bus, BusState, Logger
|
||||||
|
|
||||||
|
import paho.mqtt.client as mqtt
|
||||||
|
|
||||||
|
sub_topic = "shutter"
|
||||||
|
aliases = {
|
||||||
|
'Esszimmer_Garten': 'EZ_G',
|
||||||
|
'Esszimmer_Nachbar': 'EZ_N',
|
||||||
|
'Wohnzimmer1': 'WZ1',
|
||||||
|
'Wohnzimmer2': 'WZ2',
|
||||||
|
'Wohnzimmer3': 'WZ3',
|
||||||
|
'Wohnzimmer4': 'WZ4',
|
||||||
|
}
|
||||||
|
event_map = {
|
||||||
|
'stop': 0,
|
||||||
|
'off': 0,
|
||||||
|
'up': 1,
|
||||||
|
'down': 2
|
||||||
|
}
|
||||||
|
coil_map = {
|
||||||
|
# up , down
|
||||||
|
'EZ_G': [ 0x03, 0x04 , 0x03, 0x05 ],
|
||||||
|
'EZ_N': [ 0x03, 0x08 , 0x03, 0x06 ],
|
||||||
|
'WZ1': [ 0x00, 0x01 , 0x00, 0x01 ],
|
||||||
|
'WZ2': [ 0x00, 0x01 , 0x00, 0x01 ],
|
||||||
|
'WZ3': [ 0x00, 0x01 , 0x00, 0x01 ],
|
||||||
|
'WZ4': [ 0x00, 0x01 , 0x00, 0x01 ]
|
||||||
|
}
|
||||||
|
cmd_map = {
|
||||||
|
'off': 0,
|
||||||
|
'on': 1,
|
||||||
|
'value': 2,
|
||||||
|
'toggle': 3
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def decon(msg_id):
|
||||||
|
msg_prio=msg_id>>26
|
||||||
|
msg_type=(msg_id>>24) & 0x03
|
||||||
|
msg_dst=(msg_id>>16) & 0xFF
|
||||||
|
msg_src=(msg_id>>8) & 0xFF
|
||||||
|
msg_cmd=msg_id & 0xFF
|
||||||
|
print("msg_id: ", hex(msg_id), "prio: ", hex(msg_prio),"type: ", hex(msg_type)," dst: ", hex(msg_dst)," src: ", hex(msg_src)," cmd: ",hex(msg_cmd))
|
||||||
|
return [msg_prio, msg_type, msg_dst, msg_src, msg_cmd]
|
||||||
|
|
||||||
|
def con(msg_dst,msg_cmd,msg_prio=3,msg_type=0,msg_src=11, ):
|
||||||
|
msg_id=(msg_prio<<26) + \
|
||||||
|
((msg_type&0x03)<<24) +\
|
||||||
|
((msg_dst&0xFF)<<16) +\
|
||||||
|
((msg_src&0xFF)<<8) +\
|
||||||
|
(msg_cmd&0xFF)
|
||||||
|
print("Constructed ID: "+hex(msg_id))
|
||||||
|
return msg_id
|
||||||
|
|
||||||
|
def on_connect(mcp_mqtt, userdata, flags, rc):
|
||||||
|
print("Connected with result code "+str(rc))
|
||||||
|
|
||||||
|
# Subscribing in on_connect() means that if we lose the connection and
|
||||||
|
# reconnect then subscriptions will be renewed.
|
||||||
|
mcp_mqtt.subscribe(sub_topic+"/+")
|
||||||
|
print("Subscribed to:"+sub_topic+"/+")
|
||||||
|
|
||||||
|
def on_message(mcp_mqtt, userdata, msg):
|
||||||
|
local_bus=userdata
|
||||||
|
print("data Received topic: ", msg.topic)
|
||||||
|
m_decode=str(msg.payload.decode("utf-8","ignore"))
|
||||||
|
print("data Received",m_decode)
|
||||||
|
data=m_decode
|
||||||
|
sub=msg.topic[len(sub_topic)+1:]
|
||||||
|
event=event_map[data]
|
||||||
|
coils={
|
||||||
|
'up': [ coil_map[sub][0], coil_map[sub][1] ],
|
||||||
|
'down': [ coil_map[sub][2], coil_map[sub][3] ]
|
||||||
|
}
|
||||||
|
if event is not None: # it's 0,1,2
|
||||||
|
for key, value in coils.items():
|
||||||
|
msg_id=con(msg_dst=value[0],msg_cmd=0)
|
||||||
|
msg_data=[value[1]]
|
||||||
|
print("turning off: ",sub,value[0],value[1])
|
||||||
|
m = can.Message(arbitration_id=msg_id,
|
||||||
|
data=msg_data,
|
||||||
|
extended_id=True)
|
||||||
|
print("going to sent to CAN",m)
|
||||||
|
try:
|
||||||
|
local_bus.send(m)
|
||||||
|
except BaseException as e:
|
||||||
|
logging.error("Error sending can message {%s}: %s" % (m, e))
|
||||||
|
print("data sent to CAN",m)
|
||||||
|
if event is not 0:
|
||||||
|
addr = coils[data]
|
||||||
|
print("turning on: ",addr[0],addr[1])
|
||||||
|
msg_id=con(msg_dst=addr[0],msg_cmd=1)
|
||||||
|
msg_data=[addr[1]]
|
||||||
|
print(msg_data)
|
||||||
|
m = can.Message(arbitration_id=msg_id,
|
||||||
|
data=msg_data,
|
||||||
|
extended_id=True)
|
||||||
|
print("going to sent to CAN",m)
|
||||||
|
|
||||||
|
try:
|
||||||
|
local_bus.send(m)
|
||||||
|
except BaseException as e:
|
||||||
|
logging.error("Error sending can message {%s}: %s" % (m, e))
|
||||||
|
print("data sent to CAN",m)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
verbosity = 2
|
||||||
|
|
||||||
|
logging_level_name = ['critical', 'error', 'warning', 'info', 'debug', 'subdebug'][min(5, verbosity)]
|
||||||
|
can.set_logging_level(logging_level_name)
|
||||||
|
|
||||||
|
can_filters = []
|
||||||
|
config = {"can_filters": can_filters, "single_handle": True}
|
||||||
|
config["interface"] = "socketcan"
|
||||||
|
config["bitrate"] = 125000
|
||||||
|
bus = Bus("can1", **config)
|
||||||
|
|
||||||
|
print('Connected to {}: {}'.format(bus.__class__.__name__, bus.channel_info))
|
||||||
|
print('Can Logger (Started on {})\n'.format(datetime.now()))
|
||||||
|
|
||||||
|
mcp_mqtt = mqtt.Client()
|
||||||
|
mcp_mqtt.on_connect = on_connect
|
||||||
|
mcp_mqtt.on_message = on_message
|
||||||
|
mcp_mqtt.user_data_set(bus)
|
||||||
|
mcp_mqtt.connect("mcp", 1883, 60)
|
||||||
|
|
||||||
|
try:
|
||||||
|
while True:
|
||||||
|
mcp_mqtt.loop()
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
pass
|
||||||
|
finally:
|
||||||
|
bus.shutdown()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
141
tools/sunevents2can.py
Executable file
@ -0,0 +1,141 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# coding: utf-8
|
||||||
|
|
||||||
|
from __future__ import absolute_import, print_function
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import argparse
|
||||||
|
import socket
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
import can
|
||||||
|
from can import Bus, BusState, Logger
|
||||||
|
|
||||||
|
import paho.mqtt.client as mqtt
|
||||||
|
|
||||||
|
topic = "sunevents"
|
||||||
|
event_map = {
|
||||||
|
'sunrise': "up",
|
||||||
|
'night': "down",
|
||||||
|
}
|
||||||
|
coil_map = {
|
||||||
|
'ROL_EZ_DOWN': [0x03,0x05],
|
||||||
|
'ROL_EZ_UP': [0x03,0x04]
|
||||||
|
}
|
||||||
|
group_map = {
|
||||||
|
'up': ['ROL_EZ_UP'],
|
||||||
|
'down': ['ROL_EZ_DOWN']
|
||||||
|
}
|
||||||
|
cmd_map = {
|
||||||
|
'off': 0,
|
||||||
|
'on': 1,
|
||||||
|
'value': 2,
|
||||||
|
'toggle': 3
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def decon(msg_id):
|
||||||
|
msg_prio=msg_id>>26
|
||||||
|
msg_type=(msg_id>>24) & 0x03
|
||||||
|
msg_dst=(msg_id>>16) & 0xFF
|
||||||
|
msg_src=(msg_id>>8) & 0xFF
|
||||||
|
msg_cmd=msg_id & 0xFF
|
||||||
|
# print("msg_id: ", hex(msg_id), "prio: ", hex(msg_prio),"type: ", hex(msg_type)," dst: ", hex(msg_dst)," src: ", hex(msg_src)," cmd: ",hex(msg_cmd))
|
||||||
|
return [msg_prio, msg_type, msg_dst, msg_src, msg_cmd]
|
||||||
|
|
||||||
|
def con(msg_dst,msg_cmd,msg_prio=3,msg_type=0,msg_src=11, ):
|
||||||
|
msg_id=(msg_prio<<26) + \
|
||||||
|
((msg_type&0x03)<<24) +\
|
||||||
|
((msg_dst&0xFF)<<16) +\
|
||||||
|
((msg_src&0xFF)<<8) +\
|
||||||
|
(msg_cmd&0xFF)
|
||||||
|
print("Constructed ID: "+hex(msg_id))
|
||||||
|
return msg_id
|
||||||
|
|
||||||
|
def on_connect(mcp_mqtt, userdata, flags, rc):
|
||||||
|
print("Connected with result code "+str(rc))
|
||||||
|
|
||||||
|
# Subscribing in on_connect() means that if we lose the connection and
|
||||||
|
# reconnect then subscriptions will be renewed.
|
||||||
|
mcp_mqtt.subscribe(topic)
|
||||||
|
print("Subscribed to:",topic)
|
||||||
|
|
||||||
|
def on_message(mcp_mqtt, userdata, msg):
|
||||||
|
local_bus=userdata
|
||||||
|
print("data Received topic: ", msg.topic)
|
||||||
|
m_decode=str(msg.payload.decode("utf-8","ignore"))
|
||||||
|
print("data Received",m_decode)
|
||||||
|
data=m_decode
|
||||||
|
event=event_map[data]
|
||||||
|
if event is not None:
|
||||||
|
# event=sub
|
||||||
|
for key, value in coil_map.items():
|
||||||
|
msg_id=con(msg_dst=value[0],msg_cmd=0)
|
||||||
|
msg_data=[value[1]]
|
||||||
|
print("turning off: ",key,value[0],value[1])
|
||||||
|
m = can.Message(arbitration_id=msg_id,
|
||||||
|
data=msg_data,
|
||||||
|
extended_id=True)
|
||||||
|
print("going to sent to CAN",m)
|
||||||
|
try:
|
||||||
|
local_bus.send(m)
|
||||||
|
except BaseException as e:
|
||||||
|
logging.error("Error sending can message {%s}: %s" % (m, e))
|
||||||
|
print("data sent to CAN",m)
|
||||||
|
|
||||||
|
print("Group: ",event)
|
||||||
|
for coil in group_map[event]:
|
||||||
|
print("turning on", coil)
|
||||||
|
addr = coil_map[coil]
|
||||||
|
msg_id=con(msg_dst=addr[0],msg_cmd=1)
|
||||||
|
msg_data=[addr[1]]
|
||||||
|
print(msg_data)
|
||||||
|
m = can.Message(arbitration_id=msg_id,
|
||||||
|
data=msg_data,
|
||||||
|
extended_id=True)
|
||||||
|
print("going to sent to CAN",m)
|
||||||
|
|
||||||
|
try:
|
||||||
|
local_bus.send(m)
|
||||||
|
except BaseException as e:
|
||||||
|
logging.error("Error sending can message {%s}: %s" % (m, e))
|
||||||
|
print("data sent to CAN",m)
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
verbosity = 2
|
||||||
|
|
||||||
|
logging_level_name = ['critical', 'error', 'warning', 'info', 'debug', 'subdebug'][min(5, verbosity)]
|
||||||
|
can.set_logging_level(logging_level_name)
|
||||||
|
|
||||||
|
can_filters = []
|
||||||
|
config = {"can_filters": can_filters, "single_handle": True}
|
||||||
|
config["interface"] = "socketcan"
|
||||||
|
config["bitrate"] = 125000
|
||||||
|
bus = Bus("can1", **config)
|
||||||
|
|
||||||
|
print('Connected to {}: {}'.format(bus.__class__.__name__, bus.channel_info))
|
||||||
|
print('Can Logger (Started on {})\n'.format(datetime.now()))
|
||||||
|
|
||||||
|
mcp_mqtt = mqtt.Client()
|
||||||
|
mcp_mqtt.on_connect = on_connect
|
||||||
|
mcp_mqtt.on_message = on_message
|
||||||
|
mcp_mqtt.user_data_set(bus)
|
||||||
|
mcp_mqtt.connect("mcp", 1883, 60)
|
||||||
|
|
||||||
|
try:
|
||||||
|
while True:
|
||||||
|
mcp_mqtt.loop_start()
|
||||||
|
msg = bus.recv(1)
|
||||||
|
if msg is not None:
|
||||||
|
de=decon(msg.arbitration_id)
|
||||||
|
m= { "prio": hex(de[0]), "type": hex(de[1]), "dst": hex(de[2]), "src": hex(de[3]), "cmd": hex(de[4]), "action": hex(msg.data[0]) }
|
||||||
|
# print(m)
|
||||||
|
# mcp_mqtt.publish("can/rx", str(m))
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
pass
|
||||||
|
finally:
|
||||||
|
bus.shutdown()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|