Compare commits

..
10 Commits
Author SHA1 Message Date
Serge NOEL 6c71191c9b Attiny version 2026-10-01 11:26:19 +02:00
Serge NOEL 1cf5d753c3 Avant ATTiny1614 2026-09-29 16:34:01 +02:00
Gyuri b2d99a5fbc Create LICENSE 2021-02-17 07:50:52 +01:00
Gyuri 6c278a124f Update README.md 2021-02-16 22:37:31 +01:00
Gyuri bc2bda4f30 Update README.md 2021-02-16 22:35:39 +01:00
Gyuri f02d4ad76b Update dcc_decoder_green.ino
F_CPU used to calculate PWM
notifyCVAck fixed
2021-02-16 21:50:31 +01:00
Gyuri 4bec43341f Update README.md 2021-02-15 20:31:47 +01:00
Gyuri 0736420074 Update README.md 2021-02-15 20:30:06 +01:00
Gyuri a7267b5d23 JMRI pics 2021-02-14 20:25:47 +01:00
Gyuri f496578c13 Update README.md 2021-02-14 17:57:15 +01:00
28 changed files with 19304 additions and 3937 deletions
@@ -5,12 +5,7 @@
//#define RESET_FACTORY_DEFAULTS
// Uncomment any of the lines below to enable debug messages for different parts of the code
//#define DEBUG_FUNCTIONS
//#define DEBUG_SPEED
//#define DEBUG_PWM
//#define DEBUG_DCC_ACK
//#define DEBUG_DCC_MSG
//#define DEBUG_STATE
#if defined(DEBUG_FUNCTIONS) or defined(DEBUG_SPEED) or defined(DEBUG_PWM) or defined(DEBUG_DCC_ACK) or defined(DEBUG_DCC_MSG) or defined(DEBUG_STATE)
#define DEBUG_PRINT
@@ -365,17 +360,6 @@ void notifyDccSpeed(uint16_t Addr, DCC_ADDR_TYPE AddrType, uint8_t Speed, DCC_DI
* Returns:
* None
*/
#ifdef DEBUG_SPEED
Serial.print("notifyDccSpeed: Addr: ");
Serial.print(Addr,DEC);
Serial.print( (AddrType == DCC_ADDR_SHORT) ? "-S" : "-L" );
Serial.print(" Speed: ");
Serial.print(Speed,DEC);
Serial.print(" Steps: ");
Serial.print(SpeedSteps,DEC);
Serial.print(" Dir: ");
Serial.println( (Dir == DCC_DIR_FWD) ? "Forward" : "Reverse" );
#endif
newDirection = Dir;
newSpeed = Speed;
numSpeedSteps = SpeedSteps;
@@ -402,14 +386,6 @@ void notifyDccFunc(uint16_t Addr, DCC_ADDR_TYPE AddrType, FN_GROUP FuncGrp, uint
* Returns:
* None
*/
#ifdef DEBUG_FUNCTIONS
Serial.print("notifyDccFunc: Addr: ");
Serial.print(Addr,DEC);
Serial.print( (AddrType == DCC_ADDR_SHORT) ? 'S' : 'L' );
Serial.print(" Function Group: ");
Serial.print(FuncGrp,DEC);
#endif
switch(FuncGrp){
case FN_0_4:
bitWrite(newFunctionState, 0, FuncState & FN_BIT_00);
@@ -417,30 +393,18 @@ void notifyDccFunc(uint16_t Addr, DCC_ADDR_TYPE AddrType, FN_GROUP FuncGrp, uint
bitWrite(newFunctionState, 2, FuncState & FN_BIT_02);
bitWrite(newFunctionState, 3, FuncState & FN_BIT_03);
bitWrite(newFunctionState, 4, FuncState & FN_BIT_04);
#ifdef DEBUG_FUNCTIONS
Serial.print(" FN 0-4: ");
Serial.print(newFunctionState & 0x1F);
#endif
break;
case FN_5_8:
bitWrite(newFunctionState, 5, FuncState & FN_BIT_05);
bitWrite(newFunctionState, 6, FuncState & FN_BIT_06);
bitWrite(newFunctionState, 7, FuncState & FN_BIT_07);
bitWrite(newFunctionState, 8, FuncState & FN_BIT_08);
#ifdef DEBUG_FUNCTIONS
Serial.print(" FN 5-8: ");
Serial.print((newFunctionState >> 5) & 0xF);
#endif
break;
case FN_9_12:
bitWrite(newFunctionState, 9, FuncState & FN_BIT_09);
bitWrite(newFunctionState, 10, FuncState & FN_BIT_10);
bitWrite(newFunctionState, 11, FuncState & FN_BIT_11);
bitWrite(newFunctionState, 12, FuncState & FN_BIT_12);
#ifdef DEBUG_FUNCTIONS
Serial.print(" FN 9-12: ");
Serial.print((newFunctionState >> 9) & 0xF);
#endif
break;
case FN_13_20:
bitWrite(newFunctionState, 13, FuncState & FN_BIT_13);
@@ -451,10 +415,6 @@ void notifyDccFunc(uint16_t Addr, DCC_ADDR_TYPE AddrType, FN_GROUP FuncGrp, uint
bitWrite(newFunctionState, 18, FuncState & FN_BIT_18);
bitWrite(newFunctionState, 19, FuncState & FN_BIT_19);
bitWrite(newFunctionState, 20, FuncState & FN_BIT_20);
#ifdef DEBUG_FUNCTIONS
Serial.print(" FN 13-20: ");
Serial.print((newFunctionState >> 13) & 0xFF);
#endif
break;
case FN_21_28:
bitWrite(newFunctionState, 21, FuncState & FN_BIT_21);
@@ -465,15 +425,8 @@ void notifyDccFunc(uint16_t Addr, DCC_ADDR_TYPE AddrType, FN_GROUP FuncGrp, uint
bitWrite(newFunctionState, 26, FuncState & FN_BIT_26);
bitWrite(newFunctionState, 27, FuncState & FN_BIT_27);
bitWrite(newFunctionState, 28, FuncState & FN_BIT_28);
#ifdef DEBUG_FUNCTIONS
Serial.print(" FN 21-28: ");
Serial.print((newFunctionState >> 21) & 0xFF);
#endif
break;
}
#ifdef DEBUG_FUNCTIONS
Serial.println();
#endif
}
#ifdef DEBUG_DCC_MSG
@@ -512,16 +465,12 @@ void notifyCVAck(void){
* Returns:
* None
*/
static bool ackDir = true;
#ifdef DEBUG_DCC_ACK
Serial.println("notifyCVAck") ;
#endif
digitalWrite(MOTOR_IN1_PIN, ackDir);
digitalWrite(MOTOR_IN2_PIN, !ackDir);
static bool ackDir = false;
OCR1A = ackDir ? maxOCR : 0;
OCR1B = ackDir ? 0 : maxOCR;
delay(6);
digitalWrite(MOTOR_IN1_PIN, 1);
digitalWrite(MOTOR_IN2_PIN, 1);
OCR1A = 0;
OCR1B = 0;
ackDir = !ackDir;
}
@@ -579,7 +528,7 @@ void setup(){
unlockNumber = dcc.getCV(CV_UNLOCK_NUMBER);
lockingNumber = dcc.getCV(CV_LOCKING_NUMBER);
// set up PWM timer
maxOCR = 8000 / constrain(pwmFreq, 1, 40); // 1-40 kHz
maxOCR = (F_CPU / 2000) / constrain(pwmFreq, 1, 40); // 1-40 kHz
TCCR1A = _BV(COM1A1) | _BV(COM1A0) | _BV(COM1B1) | _BV(COM1B0); // TIMER1 A and B invert PWM
TCCR1B = _BV(WGM13) | _BV(CS10); // TIMER1 prescaler=1, phase and frequency correct mode PWM, TOP=ICR1
ICR1 = maxOCR;
@@ -633,14 +582,8 @@ void loop(){
targetSpeed = actualSpeed = 0;
OCR1A = 0;
OCR1B = 0;
#ifdef DEBUG_PWM
Serial.println("Emergency stop");
#endif
}else if(newSpeed == 1){ // Stop if speed = 1
targetSpeed = 0;
#ifdef DEBUG_PWM
Serial.println("Regular stop");
#endif
}else{ // Calculate PWM value in the range 1..255
uint8_t vScF1; // start to mid
uint8_t vScF2; // mid to high
Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

@@ -0,0 +1,24 @@
### Footprint positions - created on 2026-09-29T16:15:05+0200 ###
### Printed by KiCad version 9.0.3
## Unit = mm, Angle = deg.
## Side : bottom
# Ref Val Package PosX PosY Rot Side
C5 100nF C_0603_1608Metric 59.9186 -111.7093 -90.0000 bottom
C6 4.7uF C_0603_1608Metric 58.3946 -111.7091 90.0000 bottom
C7 4.7uF C_0603_1608Metric 57.3786 -105.6639 -90.0000 bottom
D1 D_Bridge_+-AA TO-269AA 65.3304 -114.0206 0.0000 bottom
D2 MM3Z4V7ST1G D_SOD-323 56.7182 -114.8842 90.0000 bottom
D3 NSR0530HT1G D_SOD-323 62.6110 -107.1118 0.0000 bottom
D4 NSR0530HT1G D_SOD-323 62.6110 -105.1306 0.0000 bottom
R2 27k R_0603_1608Metric 59.9441 -114.0714 0.0000 bottom
R3 27k R_0603_1608Metric 59.1819 -109.4486 0.0000 bottom
R4 27k R_0603_1608Metric 59.1566 -107.9246 0.0000 bottom
R5 4.7k R_0603_1608Metric 56.8706 -111.7091 -90.0000 bottom
R6 4.7k R_0603_1608Metric 58.9534 -105.6641 90.0000 bottom
R11 1k R_0603_1608Metric 63.4238 -109.8295 -90.0000 bottom
T1 2N7002DWCT SOT-363_SC-70-6 57.2770 -117.9830 180.0000 bottom
T2 2N7002DWCT SOT-363_SC-70-6 51.6890 -116.0526 -90.0000 bottom
T3 2N7002DWCT SOT-363_SC-70-6 51.6890 -112.5982 -90.0000 bottom
T4 2N7002DWCT SOT-363_SC-70-6 51.6786 -105.7402 -90.0000 bottom
T5 2N7002DWCT SOT-363_SC-70-6 51.6786 -109.1438 -90.0000 bottom
## End
@@ -0,0 +1,25 @@
### Footprint positions - created on 2026-09-29T16:15:05+0200 ###
### Printed by KiCad version 9.0.3
## Unit = mm, Angle = deg.
## Side : top
# Ref Val Package PosX PosY Rot Side
C1 100nF C_0603_1608Metric 51.2318 -106.4514 0.0000 top
C2 100nF C_0603_1608Metric 55.0925 -106.4260 180.0000 top
C3 470pF C_0603_1608Metric 65.1002 -114.2491 -90.0000 top
C4 2.2uF C_0805_2012Metric 67.8330 -118.9355 0.0000 top
C8 10pF C_0603_1608Metric 59.7915 -119.1260 0.0000 top
C9 10pF C_0603_1608Metric 63.5762 -114.2493 -90.0000 top
C10 100nF C_0603_1608Metric 68.0721 -113.5126 0.0000 top
D5 Ye_LED LED_0603_1608Metric 57.4040 -105.6895 -90.0000 top
D6 Gr_LED LED_0603_1608Metric 65.2780 -105.6895 90.0000 top
D7 Rd_LED LED_0603_1608Metric 62.0522 -114.2493 90.0000 top
D8 Bl_LED LED_0603_1608Metric 52.1717 -118.8466 180.0000 top
IC1 MIC5205-5.0YM5-TR SOT-23-5 67.7750 -116.1034 180.0000 top
IC2 ATMEGA328P-AUR TQFP-32_7x7mm_P0.8mm 56.0000 -112.5410 90.0000 top
IC3 DRV8872DDAR Texas_HTSOP-8-1EP_3.9x4.9mm_P1.27mm_EP2.95x4.9mm_Mask2.4x3.1mm_ThermalVias 66.2480 -109.9820 0.0000 top
R1 4.7k R_0603_1608Metric 48.7426 -109.6518 -90.0000 top
R7 1k R_0603_1608Metric 55.3211 -118.8466 180.0000 top
R9 1k R_0603_1608Metric 55.0925 -104.9020 0.0000 top
R10 1k R_0603_1608Metric 66.9290 -105.6895 90.0000 top
X1 16M Crystal_SMD_2520-2Pin_2.5x2.0mm_HandSoldering 62.8015 -117.8400 -90.0000 top
## End
@@ -0,0 +1,21 @@
"Id";"Designator";"Footprint";"Quantity";"Designation";"Supplier and ref";
1;"C1,C2,C10,C5";"C_0603_1608Metric";4;"100nF";;;
2;"C3";"C_0603_1608Metric";1;"470pF";;;
3;"C4";"C_0805_2012Metric";1;"2.2uF";;;
4;"D7";"LED_0603_1608Metric";1;"Rd_LED";;;
5;"IC3";"Texas_HTSOP-8-1EP_3.9x4.9mm_P1.27mm_EP2.95x4.9mm_Mask2.4x3.1mm_ThermalVias";1;"DRV8872DDAR";;;
6;"R1,R5,R6";"R_0603_1608Metric";3;"4.7k";;;
7;"R10,R7,R9,R11";"R_0603_1608Metric";4;"1k";;;
8;"C8,C9";"C_0603_1608Metric";2;"10pF";;;
9;"D5";"LED_0603_1608Metric";1;"Ye_LED";;;
10;"D6";"LED_0603_1608Metric";1;"Gr_LED";;;
11;"IC1";"SOT-23-5";1;"MIC5205-5.0YM5-TR";;;
12;"IC2";"TQFP-32_7x7mm_P0.8mm";1;"ATMEGA328P-AUR";;;
13;"D8";"LED_0603_1608Metric";1;"Bl_LED";;;
14;"X1";"Crystal_SMD_2520-2Pin_2.5x2.0mm_HandSoldering";1;"16M";;;
15;"C6,C7";"C_0603_1608Metric";2;"4.7uF";;;
16;"D3,D4";"D_SOD-323";2;"NSR0530HT1G";;;
17;"R2,R3,R4";"R_0603_1608Metric";3;"27k";;;
18;"T1,T2,T5,T3,T4";"SOT-363_SC-70-6";5;"2N7002DWCT";;;
19;"D2";"D_SOD-323";1;"MM3Z4V7ST1G";;;
20;"D1";"TO-269AA";1;"D_Bridge_+-AA";;;
1 Id Designator Footprint Quantity Designation Supplier and ref
2 1 C1,C2,C10,C5 C_0603_1608Metric 4 100nF
3 2 C3 C_0603_1608Metric 1 470pF
4 3 C4 C_0805_2012Metric 1 2.2uF
5 4 D7 LED_0603_1608Metric 1 Rd_LED
6 5 IC3 Texas_HTSOP-8-1EP_3.9x4.9mm_P1.27mm_EP2.95x4.9mm_Mask2.4x3.1mm_ThermalVias 1 DRV8872DDAR
7 6 R1,R5,R6 R_0603_1608Metric 3 4.7k
8 7 R10,R7,R9,R11 R_0603_1608Metric 4 1k
9 8 C8,C9 C_0603_1608Metric 2 10pF
10 9 D5 LED_0603_1608Metric 1 Ye_LED
11 10 D6 LED_0603_1608Metric 1 Gr_LED
12 11 IC1 SOT-23-5 1 MIC5205-5.0YM5-TR
13 12 IC2 TQFP-32_7x7mm_P0.8mm 1 ATMEGA328P-AUR
14 13 D8 LED_0603_1608Metric 1 Bl_LED
15 14 X1 Crystal_SMD_2520-2Pin_2.5x2.0mm_HandSoldering 1 16M
16 15 C6,C7 C_0603_1608Metric 2 4.7uF
17 16 D3,D4 D_SOD-323 2 NSR0530HT1G
18 17 R2,R3,R4 R_0603_1608Metric 3 27k
19 18 T1,T2,T5,T3,T4 SOT-363_SC-70-6 5 2N7002DWCT
20 19 D2 D_SOD-323 1 MM3Z4V7ST1G
21 20 D1 TO-269AA 1 D_Bridge_+-AA
@@ -0,0 +1,12 @@
M48
; DRILL file {KiCad 9.0.3} date 2026-09-29T16:14:39+0200
; FORMAT={-:-/ absolute / metric / decimal}
; #@! TF.CreationDate,2026-09-29T16:14:39+02:00
; #@! TF.GenerationSoftware,Kicad,Pcbnew,9.0.3
; #@! TF.FileFunction,NonPlated,1,4,NPTH
FMAT,2
METRIC
%
G90
G05
M30
@@ -0,0 +1,54 @@
M48
; DRILL file {KiCad 9.0.3} date 2026-09-29T16:14:39+0200
; FORMAT={-:-/ absolute / metric / decimal}
; #@! TF.CreationDate,2026-09-29T16:14:39+02:00
; #@! TF.GenerationSoftware,Kicad,Pcbnew,9.0.3
; #@! TF.FileFunction,Plated,1,4,PTH
FMAT,2
METRIC
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
T1C0.330
; #@! TA.AperFunction,Plated,PTH,ViaDrill
T2C0.400
%
G90
G05
T1
X65.598Y-108.682
X65.598Y-109.982
X65.598Y-111.282
X66.898Y-108.682
X66.898Y-109.982
X66.898Y-111.282
T2
X49.513Y-118.889
X49.802Y-112.962
X50.317Y-111.125
X50.47Y-107.671
X50.529Y-109.039
X52.33Y-109.169
X52.857Y-105.632
X52.95Y-107.442
X53.123Y-115.795
X53.15Y-109.906
X53.15Y-112.678
X53.315Y-111.213
X53.823Y-105.943
X54.656Y-109.554
X54.686Y-113.309
X55.448Y-110.588
X55.804Y-114.478
X56.159Y-109.753
X56.718Y-114.941
X57.226Y-109.703
X57.3Y-118.589
X57.785Y-114.071
X58.85Y-115.391
X60.173Y-116.066
X60.274Y-104.877
X65.059Y-116.113
X66.218Y-113.309
X69.123Y-110.617
X69.59Y-117.053
X69.672Y-106.959
M30
@@ -0,0 +1,21 @@
"Id";"Designator";"Footprint";"Quantity";"Designation";"Supplier and ref";
1;"C1,C2,C10,C5";"C_0603_1608Metric";4;"100nF";;;
2;"C3";"C_0603_1608Metric";1;"470pF";;;
3;"C4";"C_0805_2012Metric";1;"2.2uF";;;
4;"D7";"LED_0603_1608Metric";1;"Rd_LED";;;
5;"IC3";"Texas_HTSOP-8-1EP_3.9x4.9mm_P1.27mm_EP2.95x4.9mm_Mask2.4x3.1mm_ThermalVias";1;"DRV8872DDAR";;;
6;"R1,R5,R6";"R_0603_1608Metric";3;"4.7k";;;
7;"R10,R7,R9,R11";"R_0603_1608Metric";4;"1k";;;
8;"C8,C9";"C_0603_1608Metric";2;"10pF";;;
9;"D5";"LED_0603_1608Metric";1;"Ye_LED";;;
10;"D6";"LED_0603_1608Metric";1;"Gr_LED";;;
11;"IC1";"SOT-23-5";1;"MIC5205-5.0YM5-TR";;;
12;"IC2";"TQFP-32_7x7mm_P0.8mm";1;"ATMEGA328P-AUR";;;
13;"D8";"LED_0603_1608Metric";1;"Bl_LED";;;
14;"X1";"Crystal_SMD_2520-2Pin_2.5x2.0mm_HandSoldering";1;"16M";;;
15;"C6,C7";"C_0603_1608Metric";2;"4.7uF";;;
16;"D3,D4";"D_SOD-323";2;"NSR0530HT1G";;;
17;"R2,R3,R4";"R_0603_1608Metric";3;"27k";;;
18;"T1,T2,T5,T3,T4";"SOT-363_SC-70-6";5;"2N7002DWCT";;;
19;"D2";"D_SOD-323";1;"MM3Z4V7ST1G";;;
20;"D1";"TO-269AA";1;"D_Bridge_+-AA";;;
1 Id Designator Footprint Quantity Designation Supplier and ref
2 1 C1,C2,C10,C5 C_0603_1608Metric 4 100nF
3 2 C3 C_0603_1608Metric 1 470pF
4 3 C4 C_0805_2012Metric 1 2.2uF
5 4 D7 LED_0603_1608Metric 1 Rd_LED
6 5 IC3 Texas_HTSOP-8-1EP_3.9x4.9mm_P1.27mm_EP2.95x4.9mm_Mask2.4x3.1mm_ThermalVias 1 DRV8872DDAR
7 6 R1,R5,R6 R_0603_1608Metric 3 4.7k
8 7 R10,R7,R9,R11 R_0603_1608Metric 4 1k
9 8 C8,C9 C_0603_1608Metric 2 10pF
10 9 D5 LED_0603_1608Metric 1 Ye_LED
11 10 D6 LED_0603_1608Metric 1 Gr_LED
12 11 IC1 SOT-23-5 1 MIC5205-5.0YM5-TR
13 12 IC2 TQFP-32_7x7mm_P0.8mm 1 ATMEGA328P-AUR
14 13 D8 LED_0603_1608Metric 1 Bl_LED
15 14 X1 Crystal_SMD_2520-2Pin_2.5x2.0mm_HandSoldering 1 16M
16 15 C6,C7 C_0603_1608Metric 2 4.7uF
17 16 D3,D4 D_SOD-323 2 NSR0530HT1G
18 17 R2,R3,R4 R_0603_1608Metric 3 27k
19 18 T1,T2,T5,T3,T4 SOT-363_SC-70-6 5 2N7002DWCT
20 19 D2 D_SOD-323 1 MM3Z4V7ST1G
21 20 D1 TO-269AA 1 D_Bridge_+-AA
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,135 @@
{
"board": {
"active_layer": 0,
"active_layer_preset": "",
"auto_track_width": true,
"hidden_netclasses": [],
"hidden_nets": [],
"high_contrast_mode": 1,
"net_color_mode": 1,
"opacity": {
"images": 0.6,
"pads": 1.0,
"shapes": 1.0,
"tracks": 1.0,
"vias": 1.0,
"zones": 0.6
},
"selection_filter": {
"dimensions": true,
"footprints": true,
"graphics": true,
"keepouts": true,
"lockedItems": false,
"otherItems": true,
"pads": true,
"text": true,
"tracks": true,
"vias": true,
"zones": true
},
"visible_items": [
"vias",
"footprint_text",
"footprint_anchors",
"ratsnest",
"grid",
"footprints_front",
"footprints_back",
"footprint_values",
"tracks",
"drc_errors",
"drawing_sheet",
"bitmaps",
"pads",
"zones",
"drc_warnings",
"locked_item_shadows",
"conflict_shadows",
"shapes"
],
"visible_layers": "00000000_00000000_0000000a_aaaaaaff",
"zone_display_mode": 0
},
"git": {
"repo_type": "",
"repo_username": "",
"ssh_key": ""
},
"meta": {
"filename": "Lokdecoder_TI_altQuartz.kicad_prl",
"version": 5
},
"net_inspector_panel": {
"col_hidden": [
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false
],
"col_order": [
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11
],
"col_widths": [
162,
147,
91,
67,
91,
91,
91,
71,
91,
91,
91,
91
],
"custom_group_rules": [],
"expanded_rows": [],
"filter_by_net_name": true,
"filter_by_netclass": true,
"filter_text": "",
"group_by_constraint": false,
"group_by_netclass": false,
"show_unconnected_nets": false,
"show_zero_pad_nets": false,
"sort_ascending": true,
"sorting_column": 0
},
"open_jobsets": [],
"project": {
"files": []
},
"schematic": {
"selection_filter": {
"graphics": true,
"images": true,
"labels": true,
"lockedItems": false,
"otherItems": true,
"pins": true,
"symbols": true,
"text": true,
"wires": true
}
}
}
@@ -0,0 +1,844 @@
{
"board": {
"3dviewports": [],
"design_settings": {
"defaults": {
"apply_defaults_to_fp_fields": false,
"apply_defaults_to_fp_shapes": false,
"apply_defaults_to_fp_text": false,
"board_outline_line_width": 0.05,
"copper_line_width": 0.2,
"copper_text_italic": false,
"copper_text_size_h": 1.5,
"copper_text_size_v": 1.5,
"copper_text_thickness": 0.3,
"copper_text_upright": false,
"courtyard_line_width": 0.05,
"dimension_precision": 4,
"dimension_units": 3,
"dimensions": {
"arrow_length": 1270000,
"extension_offset": 500000,
"keep_text_aligned": true,
"suppress_zeroes": true,
"text_position": 0,
"units_format": 0
},
"fab_line_width": 0.1,
"fab_text_italic": false,
"fab_text_size_h": 1.0,
"fab_text_size_v": 1.0,
"fab_text_thickness": 0.15,
"fab_text_upright": false,
"other_line_width": 0.1,
"other_text_italic": false,
"other_text_size_h": 1.0,
"other_text_size_v": 1.0,
"other_text_thickness": 0.15,
"other_text_upright": false,
"pads": {
"drill": 0.762,
"height": 1.524,
"width": 1.524
},
"silk_line_width": 0.12,
"silk_text_italic": false,
"silk_text_size_h": 1.0,
"silk_text_size_v": 1.0,
"silk_text_thickness": 0.15,
"silk_text_upright": false,
"zones": {
"min_clearance": 0.254
}
},
"diff_pair_dimensions": [
{
"gap": 0.0,
"via_gap": 0.0,
"width": 0.0
}
],
"drc_exclusions": [],
"meta": {
"filename": "board_design_settings.json",
"version": 2
},
"rule_severities": {
"annular_width": "error",
"clearance": "error",
"connection_width": "warning",
"copper_edge_clearance": "error",
"copper_sliver": "warning",
"courtyards_overlap": "error",
"creepage": "error",
"diff_pair_gap_out_of_range": "error",
"diff_pair_uncoupled_length_too_long": "error",
"drill_out_of_range": "error",
"duplicate_footprints": "warning",
"extra_footprint": "warning",
"footprint": "error",
"footprint_filters_mismatch": "ignore",
"footprint_symbol_mismatch": "warning",
"footprint_type_mismatch": "ignore",
"hole_clearance": "error",
"hole_to_hole": "warning",
"holes_co_located": "warning",
"invalid_outline": "error",
"isolated_copper": "warning",
"item_on_disabled_layer": "error",
"items_not_allowed": "error",
"length_out_of_range": "error",
"lib_footprint_issues": "warning",
"lib_footprint_mismatch": "warning",
"malformed_courtyard": "error",
"microvia_drill_out_of_range": "error",
"mirrored_text_on_front_layer": "warning",
"missing_courtyard": "ignore",
"missing_footprint": "warning",
"net_conflict": "warning",
"nonmirrored_text_on_back_layer": "warning",
"npth_inside_courtyard": "ignore",
"padstack": "warning",
"pth_inside_courtyard": "ignore",
"shorting_items": "error",
"silk_edge_clearance": "warning",
"silk_over_copper": "warning",
"silk_overlap": "warning",
"skew_out_of_range": "error",
"solder_mask_bridge": "error",
"starved_thermal": "error",
"text_height": "warning",
"text_on_edge_cuts": "error",
"text_thickness": "warning",
"through_hole_pad_without_hole": "error",
"too_many_vias": "error",
"track_angle": "error",
"track_dangling": "warning",
"track_segment_length": "error",
"track_width": "error",
"tracks_crossing": "error",
"unconnected_items": "error",
"unresolved_variable": "error",
"via_dangling": "warning",
"zones_intersect": "error"
},
"rules": {
"max_error": 0.005,
"min_clearance": 0.0,
"min_connection": 0.0,
"min_copper_edge_clearance": 0.025,
"min_groove_width": 0.0,
"min_hole_clearance": 0.25,
"min_hole_to_hole": 0.25,
"min_microvia_diameter": 0.45,
"min_microvia_drill": 0.1,
"min_resolved_spokes": 2,
"min_silk_clearance": 0.0,
"min_text_height": 0.8,
"min_text_thickness": 0.08,
"min_through_hole_diameter": 0.3,
"min_track_width": 0.2,
"min_via_annular_width": 0.1,
"min_via_diameter": 0.45,
"solder_mask_to_copper_clearance": 0.0,
"use_height_for_length_calcs": true
},
"teardrop_options": [
{
"td_onpthpad": true,
"td_onroundshapesonly": false,
"td_onsmdpad": true,
"td_ontrackend": false,
"td_onvia": true
}
],
"teardrop_parameters": [
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_round_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_rect_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_track_end",
"td_width_to_size_filter_ratio": 0.9
}
],
"track_widths": [
0.0,
0.3,
0.5,
1.0
],
"tuning_pattern_settings": {
"diff_pair_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 1.0
},
"diff_pair_skew_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
},
"single_track_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
}
},
"via_dimensions": [
{
"diameter": 0.0,
"drill": 0.0
},
{
"diameter": 0.3,
"drill": 0.2
}
],
"zones_allow_external_fillets": false
},
"ipc2581": {
"dist": "",
"distpn": "",
"internal_id": "",
"mfg": "",
"mpn": ""
},
"layer_pairs": [],
"layer_presets": [],
"viewports": []
},
"boards": [],
"cvpcb": {
"equivalence_files": []
},
"erc": {
"erc_exclusions": [],
"meta": {
"version": 0
},
"pin_map": [
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
1,
0,
1,
2
],
[
0,
1,
0,
0,
0,
0,
1,
1,
2,
1,
1,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
2
],
[
1,
1,
1,
1,
1,
0,
1,
1,
1,
1,
1,
2
],
[
0,
0,
0,
1,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
1,
2,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
0,
2,
1,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2
]
],
"rule_severities": {
"bus_definition_conflict": "error",
"bus_entry_needed": "error",
"bus_to_bus_conflict": "error",
"bus_to_net_conflict": "error",
"different_unit_footprint": "error",
"different_unit_net": "error",
"duplicate_reference": "error",
"duplicate_sheet_names": "error",
"endpoint_off_grid": "warning",
"extra_units": "error",
"footprint_filter": "ignore",
"footprint_link_issues": "warning",
"four_way_junction": "ignore",
"global_label_dangling": "warning",
"hier_label_mismatch": "error",
"label_dangling": "error",
"label_multiple_wires": "warning",
"lib_symbol_issues": "warning",
"lib_symbol_mismatch": "warning",
"missing_bidi_pin": "warning",
"missing_input_pin": "warning",
"missing_power_pin": "error",
"missing_unit": "warning",
"multiple_net_names": "warning",
"net_not_bus_member": "warning",
"no_connect_connected": "warning",
"no_connect_dangling": "warning",
"pin_not_connected": "error",
"pin_not_driven": "error",
"pin_to_pin": "warning",
"power_pin_not_driven": "error",
"same_local_global_label": "warning",
"similar_label_and_power": "warning",
"similar_labels": "warning",
"similar_power": "warning",
"simulation_model_issue": "ignore",
"single_global_label": "ignore",
"unannotated": "error",
"unconnected_wire_endpoint": "warning",
"unit_value_mismatch": "error",
"unresolved_variable": "error",
"wire_dangling": "error"
}
},
"libraries": {
"pinned_footprint_libs": [],
"pinned_symbol_libs": []
},
"meta": {
"filename": "Lokdecoder_TI_altQuartz.kicad_pro",
"version": 3
},
"net_settings": {
"classes": [
{
"bus_width": 12,
"clearance": 0.2,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"microvia_diameter": 0.45,
"microvia_drill": 0.1,
"name": "Default",
"pcb_color": "rgba(0, 0, 0, 0.000)",
"priority": 2147483647,
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.25,
"via_diameter": 0.8,
"via_drill": 0.4,
"wire_width": 6
}
],
"meta": {
"version": 4
},
"net_colors": null,
"netclass_assignments": null,
"netclass_patterns": [
{
"netclass": "Default",
"pattern": "+5V"
},
{
"netclass": "Default",
"pattern": "/A0"
},
{
"netclass": "Default",
"pattern": "/A1"
},
{
"netclass": "Default",
"pattern": "/A2"
},
{
"netclass": "Default",
"pattern": "/A3"
},
{
"netclass": "Default",
"pattern": "/A4"
},
{
"netclass": "Default",
"pattern": "/A5"
},
{
"netclass": "Default",
"pattern": "/A6"
},
{
"netclass": "Default",
"pattern": "/A7"
},
{
"netclass": "Default",
"pattern": "/AUX1"
},
{
"netclass": "Default",
"pattern": "/AUX1_TTL"
},
{
"netclass": "Default",
"pattern": "/AUX2"
},
{
"netclass": "Default",
"pattern": "/AUX2_TTL"
},
{
"netclass": "Default",
"pattern": "/AUX3"
},
{
"netclass": "Default",
"pattern": "/AUX4"
},
{
"netclass": "Default",
"pattern": "/AUX5"
},
{
"netclass": "Default",
"pattern": "/AUX6"
},
{
"netclass": "Default",
"pattern": "/AUX7"
},
{
"netclass": "Default",
"pattern": "/AUX8"
},
{
"netclass": "Default",
"pattern": "/D0"
},
{
"netclass": "Default",
"pattern": "/D1"
},
{
"netclass": "Default",
"pattern": "/D10"
},
{
"netclass": "Default",
"pattern": "/D12"
},
{
"netclass": "Default",
"pattern": "/D13"
},
{
"netclass": "Default",
"pattern": "/D2"
},
{
"netclass": "Default",
"pattern": "/D4"
},
{
"netclass": "Default",
"pattern": "/D5"
},
{
"netclass": "Default",
"pattern": "/D6"
},
{
"netclass": "Default",
"pattern": "/D7"
},
{
"netclass": "Default",
"pattern": "/D8"
},
{
"netclass": "Default",
"pattern": "/D9"
},
{
"netclass": "Default",
"pattern": "/DCC1"
},
{
"netclass": "Default",
"pattern": "/DCC2"
},
{
"netclass": "Default",
"pattern": "/DTR"
},
{
"netclass": "Default",
"pattern": "/F0f"
},
{
"netclass": "Default",
"pattern": "/F0r"
},
{
"netclass": "Default",
"pattern": "/MOT1"
},
{
"netclass": "Default",
"pattern": "/MOT2"
},
{
"netclass": "Default",
"pattern": "/RESET"
},
{
"netclass": "Default",
"pattern": "GND"
},
{
"netclass": "Default",
"pattern": "Net-(C2-Pad1)"
},
{
"netclass": "Default",
"pattern": "Net-(C3-Pad2)"
},
{
"netclass": "Default",
"pattern": "Net-(C8-Pad2)"
},
{
"netclass": "Default",
"pattern": "Net-(C9-Pad2)"
},
{
"netclass": "Default",
"pattern": "Net-(D3-Pad1)"
},
{
"netclass": "Default",
"pattern": "Net-(D4-Pad1)"
},
{
"netclass": "Default",
"pattern": "Net-(D5-Pad1)"
},
{
"netclass": "Default",
"pattern": "Net-(D6-Pad1)"
},
{
"netclass": "Default",
"pattern": "Net-(D7-Pad1)"
},
{
"netclass": "Default",
"pattern": "Net-(D8-Pad1)"
},
{
"netclass": "Default",
"pattern": "VCC"
}
]
},
"pcbnew": {
"last_paths": {
"gencad": "",
"idf": "",
"netlist": "",
"plot": "JLPCB/gerbers/",
"pos_files": "JLPCB/",
"specctra_dsn": "",
"step": "",
"svg": "",
"vrml": ""
},
"page_layout_descr_file": ""
},
"schematic": {
"annotate_start_num": 0,
"bom_export_filename": "${PROJECTNAME}.csv",
"bom_fmt_presets": [],
"bom_fmt_settings": {
"field_delimiter": ",",
"keep_line_breaks": false,
"keep_tabs": false,
"name": "CSV",
"ref_delimiter": ",",
"ref_range_delimiter": "",
"string_delimiter": "\""
},
"bom_presets": [],
"bom_settings": {
"exclude_dnp": false,
"fields_ordered": [
{
"group_by": false,
"label": "Reference",
"name": "Reference",
"show": true
},
{
"group_by": false,
"label": "Qty",
"name": "${QUANTITY}",
"show": true
},
{
"group_by": true,
"label": "Value",
"name": "Value",
"show": true
},
{
"group_by": true,
"label": "DNP",
"name": "${DNP}",
"show": true
},
{
"group_by": true,
"label": "Exclude from BOM",
"name": "${EXCLUDE_FROM_BOM}",
"show": true
},
{
"group_by": true,
"label": "Exclude from Board",
"name": "${EXCLUDE_FROM_BOARD}",
"show": true
},
{
"group_by": true,
"label": "Footprint",
"name": "Footprint",
"show": true
},
{
"group_by": false,
"label": "Datasheet",
"name": "Datasheet",
"show": true
}
],
"filter_string": "",
"group_symbols": true,
"include_excluded_from_bom": true,
"name": "Default Editing",
"sort_asc": true,
"sort_field": "Reference"
},
"connection_grid_size": 50.0,
"drawing": {
"dashed_lines_dash_length_ratio": 12.0,
"dashed_lines_gap_length_ratio": 3.0,
"default_line_thickness": 6.0,
"default_text_size": 50.0,
"field_names": [],
"intersheets_ref_own_page": false,
"intersheets_ref_prefix": "",
"intersheets_ref_short": false,
"intersheets_ref_show": false,
"intersheets_ref_suffix": "",
"junction_size_choice": 3,
"label_size_ratio": 0.25,
"operating_point_overlay_i_precision": 3,
"operating_point_overlay_i_range": "~A",
"operating_point_overlay_v_precision": 3,
"operating_point_overlay_v_range": "~V",
"overbar_offset_ratio": 1.23,
"pin_symbol_size": 0.0,
"text_offset_ratio": 0.08
},
"legacy_lib_dir": "",
"legacy_lib_list": [],
"meta": {
"version": 1
},
"net_format_name": "",
"page_layout_descr_file": "",
"plot_directory": "",
"space_save_all_events": true,
"spice_current_sheet_as_root": false,
"spice_external_command": "spice \"%I\"",
"spice_model_current_sheet_as_root": true,
"spice_save_all_currents": false,
"spice_save_all_dissipations": false,
"spice_save_all_voltages": false,
"subpart_first_id": 65,
"subpart_id_separator": 0
},
"sheets": [
[
"2f7e9111-b907-47ad-8ba9-e986630c4265",
"Root"
]
],
"text_variables": {}
}
File diff suppressed because it is too large Load Diff
@@ -1,13 +1,12 @@
M48
; DRILL file {KiCad (5.1.6)-1} date 01/08/21 10:09:46
; FORMAT={-:-/ absolute / inch / decimal}
; #@! TF.CreationDate,2021-01-08T10:09:46+01:00
; #@! TF.GenerationSoftware,Kicad,Pcbnew,(5.1.6)-1
; DRILL file {KiCad 9.0.3} date 2026-09-29T16:13:55+0200
; FORMAT={-:-/ absolute / metric / decimal}
; #@! TF.CreationDate,2026-09-29T16:13:55+02:00
; #@! TF.GenerationSoftware,Kicad,Pcbnew,9.0.3
; #@! TF.FileFunction,NonPlated,1,4,NPTH
FMAT,2
INCH
METRIC
%
G90
G05
T0
M30
@@ -1,53 +1,54 @@
M48
; DRILL file {KiCad (5.1.6)-1} date 01/08/21 10:09:46
; FORMAT={-:-/ absolute / inch / decimal}
; #@! TF.CreationDate,2021-01-08T10:09:46+01:00
; #@! TF.GenerationSoftware,Kicad,Pcbnew,(5.1.6)-1
; DRILL file {KiCad 9.0.3} date 2026-09-29T16:13:55+0200
; FORMAT={-:-/ absolute / metric / decimal}
; #@! TF.CreationDate,2026-09-29T16:13:55+02:00
; #@! TF.GenerationSoftware,Kicad,Pcbnew,9.0.3
; #@! TF.FileFunction,Plated,1,4,PTH
FMAT,2
INCH
T1C0.0130
T2C0.0157
METRIC
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
T1C0.330
; #@! TA.AperFunction,Plated,PTH,ViaDrill
T2C0.400
%
G90
G05
T1
X2.5826Y-4.2788
X2.5826Y-4.33
X2.5826Y-4.3812
X2.6338Y-4.2788
X2.6338Y-4.33
X2.6338Y-4.3812
X65.598Y-108.682
X65.598Y-109.982
X65.598Y-111.282
X66.898Y-108.682
X66.898Y-109.982
X66.898Y-111.282
T2
X1.9493Y-4.6807
X1.9607Y-4.4473
X1.981Y-4.375
X1.987Y-4.239
X1.9893Y-4.2929
X2.0602Y-4.298
X2.081Y-4.1588
X2.0847Y-4.23
X2.0914Y-4.5589
X2.0925Y-4.327
X2.0925Y-4.4361
X2.099Y-4.3785
X2.119Y-4.171
X2.1518Y-4.3132
X2.153Y-4.461
X2.183Y-4.3539
X2.197Y-4.507
X2.211Y-4.321
X2.233Y-4.5252
X2.253Y-4.319
X2.2559Y-4.6688
X2.275Y-4.491
X2.3169Y-4.543
X2.369Y-4.5695
X2.373Y-4.129
X2.5614Y-4.5714
X2.607Y-4.461
X2.7214Y-4.355
X2.7398Y-4.6084
X2.743Y-4.211
T0
X49.513Y-118.889
X49.802Y-112.962
X50.317Y-111.125
X50.47Y-107.671
X50.529Y-109.039
X52.33Y-109.169
X52.857Y-105.632
X52.95Y-107.442
X53.123Y-115.795
X53.15Y-109.906
X53.15Y-112.678
X53.315Y-111.213
X53.823Y-105.943
X54.656Y-109.554
X54.686Y-113.309
X55.448Y-110.588
X55.804Y-114.478
X56.159Y-109.753
X56.718Y-114.941
X57.226Y-109.703
X57.3Y-118.589
X57.785Y-114.071
X58.85Y-115.391
X60.173Y-116.066
X60.274Y-104.877
X65.059Y-116.113
X66.218Y-113.309
X69.123Y-110.617
X69.59Y-117.053
X69.672Y-106.959
M30
+121
View File
@@ -0,0 +1,121 @@
Creative Commons Legal Code
CC0 1.0 Universal
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
HEREUNDER.
Statement of Purpose
The laws of most jurisdictions throughout the world automatically confer
exclusive Copyright and Related Rights (defined below) upon the creator
and subsequent owner(s) (each and all, an "owner") of an original work of
authorship and/or a database (each, a "Work").
Certain owners wish to permanently relinquish those rights to a Work for
the purpose of contributing to a commons of creative, cultural and
scientific works ("Commons") that the public can reliably and without fear
of later claims of infringement build upon, modify, incorporate in other
works, reuse and redistribute as freely as possible in any form whatsoever
and for any purposes, including without limitation commercial purposes.
These owners may contribute to the Commons to promote the ideal of a free
culture and the further production of creative, cultural and scientific
works, or to gain reputation or greater distribution for their Work in
part through the use and efforts of others.
For these and/or other purposes and motivations, and without any
expectation of additional consideration or compensation, the person
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
is an owner of Copyright and Related Rights in the Work, voluntarily
elects to apply CC0 to the Work and publicly distribute the Work under its
terms, with knowledge of his or her Copyright and Related Rights in the
Work and the meaning and intended legal effect of CC0 on those rights.
1. Copyright and Related Rights. A Work made available under CC0 may be
protected by copyright and related or neighboring rights ("Copyright and
Related Rights"). Copyright and Related Rights include, but are not
limited to, the following:
i. the right to reproduce, adapt, distribute, perform, display,
communicate, and translate a Work;
ii. moral rights retained by the original author(s) and/or performer(s);
iii. publicity and privacy rights pertaining to a person's image or
likeness depicted in a Work;
iv. rights protecting against unfair competition in regards to a Work,
subject to the limitations in paragraph 4(a), below;
v. rights protecting the extraction, dissemination, use and reuse of data
in a Work;
vi. database rights (such as those arising under Directive 96/9/EC of the
European Parliament and of the Council of 11 March 1996 on the legal
protection of databases, and under any national implementation
thereof, including any amended or successor version of such
directive); and
vii. other similar, equivalent or corresponding rights throughout the
world based on applicable law or treaty, and any national
implementations thereof.
2. Waiver. To the greatest extent permitted by, but not in contravention
of, applicable law, Affirmer hereby overtly, fully, permanently,
irrevocably and unconditionally waives, abandons, and surrenders all of
Affirmer's Copyright and Related Rights and associated claims and causes
of action, whether now known or unknown (including existing as well as
future claims and causes of action), in the Work (i) in all territories
worldwide, (ii) for the maximum duration provided by applicable law or
treaty (including future time extensions), (iii) in any current or future
medium and for any number of copies, and (iv) for any purpose whatsoever,
including without limitation commercial, advertising or promotional
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
member of the public at large and to the detriment of Affirmer's heirs and
successors, fully intending that such Waiver shall not be subject to
revocation, rescission, cancellation, termination, or any other legal or
equitable action to disrupt the quiet enjoyment of the Work by the public
as contemplated by Affirmer's express Statement of Purpose.
3. Public License Fallback. Should any part of the Waiver for any reason
be judged legally invalid or ineffective under applicable law, then the
Waiver shall be preserved to the maximum extent permitted taking into
account Affirmer's express Statement of Purpose. In addition, to the
extent the Waiver is so judged Affirmer hereby grants to each affected
person a royalty-free, non transferable, non sublicensable, non exclusive,
irrevocable and unconditional license to exercise Affirmer's Copyright and
Related Rights in the Work (i) in all territories worldwide, (ii) for the
maximum duration provided by applicable law or treaty (including future
time extensions), (iii) in any current or future medium and for any number
of copies, and (iv) for any purpose whatsoever, including without
limitation commercial, advertising or promotional purposes (the
"License"). The License shall be deemed effective as of the date CC0 was
applied by Affirmer to the Work. Should any part of the License for any
reason be judged legally invalid or ineffective under applicable law, such
partial invalidity or ineffectiveness shall not invalidate the remainder
of the License, and in such case Affirmer hereby affirms that he or she
will not (i) exercise any of his or her remaining Copyright and Related
Rights in the Work or (ii) assert any associated claims and causes of
action with respect to the Work, in either case contrary to Affirmer's
express Statement of Purpose.
4. Limitations and Disclaimers.
a. No trademark or patent rights held by Affirmer are waived, abandoned,
surrendered, licensed or otherwise affected by this document.
b. Affirmer offers the Work as-is and makes no representations or
warranties of any kind concerning the Work, express, implied,
statutory or otherwise, including without limitation warranties of
title, merchantability, fitness for a particular purpose, non
infringement, or the absence of latent or other defects, accuracy, or
the present or absence of errors, whether or not discoverable, all to
the greatest extent permissible under applicable law.
c. Affirmer disclaims responsibility for clearing rights of other persons
that may apply to the Work or any use thereof, including without
limitation any person's Copyright and Related Rights in the Work.
Further, Affirmer disclaims responsibility for obtaining any necessary
consents, permissions or other rights required for any use of the
Work.
d. Affirmer understands and acknowledges that Creative Commons is not a
party to this document and has no duty or obligation with respect to
this CC0 or use of the Work.
+40 -1
View File
@@ -25,10 +25,49 @@ DCC multifunction decoder for H0 locomotives
## Firmware
- Arduino compatible programming (behaves like an UNO)
- DCC decoding by [NMRADCC](https://github.com/mrrwa/NmraDcc) library
- DCC decoding by [NmraDcc](https://github.com/mrrwa/NmraDcc) library
## JMRI integration
| ![basic](JMRI_decoder_file/01_basic.jpg) | ![motor](JMRI_decoder_file/02_motor.jpg) | ![basic_speed](JMRI_decoder_file/03_basic_speed_control.jpg) | ![speed_table](JMRI_decoder_file/04_speed_table.jpg) | ![function_map](JMRI_decoder_file/05_function_map.jpg) | ![advanced](JMRI_decoder_file/06_advanced.jpg) |
| :---: | :---: | :---: | :---: | :---: | :---: |
| Basic | Motor | Basic speed control | Speed table | Function map | Advanced |
## Install guide
1. Get the PCB (e.g. [JLCPCB](https://jlcpcb.com/)) and the components (e.g. [mouser](https://www.mouser.at/), [digikey](https://www.digikey.at/))
2. Solder the components. The SOIC with exposed pad is a bit tricky, it can be soldered from the other side with a big tip and a lot of flux.
3. Install the Arduino bootloader using the pads 5V, GND, SCK, MISO, MOSI, RST and an Arduino. [Arduino as ISP](https://www.arduino.cc/en/Tutorial/BuiltInExamples/ArduinoISP)
4. Uncomment the line `#define RESET_FACTORY_DEFAULTS` to fill the EEPROM with the default CV values
5. Upload the code using the pads 5V, GND, RX, TX, DTR and a USB TTL UART cable [like this](https://www.mouser.at/ProductDetail/FTDI/TTL-232R-5V-WE/?qs=OMDV80DKjRpCUAS6UR9QpQ%3D%3D)
6. Re-comment the line `#define RESET_FACTORY_DEFAULTS` to avoid resetting to factory defaults every time.
7. Upload the code again.
8. Add the decoder XML file to JMRI. In DecoderPro select "File-> Import Decoder File..." and browse to the decoder [XML](JMRI_decoder_file/Public_Domain_GTI_green.xml). It will take some time, then adds the decoder definition to the database.
9. Connect the T1 and T2 pads to the programming track of your DCC system.
10. Add new locomotive with the "New Loco" button and then "Read type from decoder". It should detect the correct type:
![add](JMRI_decoder_file/add.jpg)
11. If everything is fine, you can install the decoder into your locomotive!
### Pinout
| Pad | Function |
| :-- | :-- |
| M1 | Motor 1 |
| M2 | Motor 2 |
| T1 | Track 1 |
| T2 | Track 2 |
| V+ | Positive common for function outputs (keep-alive capacitor positive) |
| F0f | F0 function output forward (open drain) |
| F0r | F0 function output reverse (open drain) |
| 1-8 | AUX function output n (open drain) |
| 5V | internal microcontroller +5V supply |
| GND | ground (keep alive capacitor negative) |
| SCK | ISP programming clock (connect to ISP SCK) |
| MISO | ISP programming read (connect to ISP MISO) |
| MOSI | ISP programming write (connect to ISP MOSI) |
| RST | ISP programming reset (connect to ISP reset output)
| RX | serial programming receive (connect to TTL UART TX) |
| TX | serial programming transmit (connect to TTL UART RX) |
| DTR | serial programming reset through a 100 nF capacitor (connect to TTL UART DTR) |
## Todo list
- [ ] CV15, CV16 decoder locking
- [ ] CV65 kick start