Initial set of files.

This commit is contained in:
Zapta
2021-05-31 19:19:23 -07:00
parent 911e6b3f8f
commit 788d62690a
148 changed files with 1483632 additions and 0 deletions

View File

Binary file not shown.

BIN
docs/pico-datasheet.pdf Normal file
View File

Binary file not shown.

BIN
docs/pico-product-brief.pdf Normal file
View File

Binary file not shown.

BIN
docs/pinout.pdf Normal file
View File

Binary file not shown.

View File

Binary file not shown.

BIN
docs/rp2040-datasheet.pdf Normal file
View File

Binary file not shown.

BIN
docs/schematic.pdf Normal file
View File

Binary file not shown.

BIN
kicad/JLCPCB/gerbers.zip Normal file
View File

Binary file not shown.

View File

@@ -0,0 +1,11 @@
Designator,Val,Package,Mid X,Mid Y,Rotation,Layer
C1,100nf,SMD 0805,87.16,46.468,0,top
C2,100nf,SMD 0805,52.226,46.849,0,top
C4,10u,EIA-3216-18,43.415,46.5655,90,top
FPC1,"FPC connector 40pins, 0.5mm, TOP contacts",FH12-40S-0.5SH_1x40-1MP_P0.50mm_Horizontal_flipped,50.3,28.9,90,top
FPC2,"FPC connector, 6 pins, 0.5mm, BOTTOM contacts",FH12-6S-0.5SH_1x06-1MP_P0.50mm_Horizontal,72.68,35.93,90,top
Q1,SI2301,SOT-23,43.669,15.81,90,top
R4,8.2 Ohm,SMD 0805,54.718,12.605,90,top
R5,8.2 Ohm,SMD 0805,51.543,12.593,90,top
R6,8.2 Ohm,SMD 0805,48.44,12.602,90,top
R7,3.3K,SMD 0805,43.645,11.303,0,top
1 Designator Val Package Mid X Mid Y Rotation Layer
2 C1 100nf SMD 0805 87.16 46.468 0 top
3 C2 100nf SMD 0805 52.226 46.849 0 top
4 C4 10u EIA-3216-18 43.415 46.5655 90 top
5 FPC1 FPC connector 40pins, 0.5mm, TOP contacts FH12-40S-0.5SH_1x40-1MP_P0.50mm_Horizontal_flipped 50.3 28.9 90 top
6 FPC2 FPC connector, 6 pins, 0.5mm, BOTTOM contacts FH12-6S-0.5SH_1x06-1MP_P0.50mm_Horizontal 72.68 35.93 90 top
7 Q1 SI2301 SOT-23 43.669 15.81 90 top
8 R4 8.2 Ohm SMD 0805 54.718 12.605 90 top
9 R5 8.2 Ohm SMD 0805 51.543 12.593 90 top
10 R6 8.2 Ohm SMD 0805 48.44 12.602 90 top
11 R7 3.3K SMD 0805 43.645 11.303 0 top

View File

@@ -0,0 +1,8 @@
Comment,Designator,Footprint,LCSC Part Number
100nf,"C1,C2",SMD 0805,C49678
10u,C4,EIA-3216-18,C7171
"FPC connector 40pins, 0.5mm, TOP contacts",FPC1,FH12-40S-0.5SH_1x40-1MP_P0.50mm_Horizontal_flipped,C11097
"FPC connector, 6 pins, 0.5mm, BOTTOM contacts",FPC2,FH12-6S-0.5SH_1x06-1MP_P0.50mm_Horizontal,C262262
SI2301,Q1,SOT-23,C10487
8.2 Ohm,"R4,R5,R6",SMD 0805,C25330
3.3K,R7,SMD 0805,C26010
1 Comment Designator Footprint LCSC Part Number
2 100nf C1,C2 SMD 0805 C49678
3 10u C4 EIA-3216-18 C7171
4 FPC connector 40pins, 0.5mm, TOP contacts FPC1 FH12-40S-0.5SH_1x40-1MP_P0.50mm_Horizontal_flipped C11097
5 FPC connector, 6 pins, 0.5mm, BOTTOM contacts FPC2 FH12-6S-0.5SH_1x06-1MP_P0.50mm_Horizontal C262262
6 SI2301 Q1 SOT-23 C10487
7 8.2 Ohm R4,R5,R6 SMD 0805 C25330
8 3.3K R7 SMD 0805 C26010

69
kicad/TODO.txt Normal file
View File

@@ -0,0 +1,69 @@
* Delete junk kicad and model files.
----- Done
* Verify drill size of Molex pins
* Add a way to configure current range. E.g. via resistor.
* Increase horizontal clerance for the four screws. (extend the PCB).
* Reduce diameter of vias in ground pads of the pico
* Update instruction silk messages on the PCB (e.g. tape thickness)
* Verify sufficient clearance at the sides of the TFT, for buttons and LEDs.
* Make the LED footprint compatible with 0603 and 0805 LEDs.
* Clearer mark for pin 1 of the current sensors. E.g. a dot.
* Change the order of FPC 6 pins, to match the flat cable
* Add F-Silk marks with the stepper connector pin lables (A1, A2, ...)
* Move the Molex connector to be at 50 mill relative pitch
* Finalize BOM.
* Finalize the choice of connectors
* Smaller holes for the MOLEX connectors?
* MOSFET footprint too small?
* Smaller holes for the ground pads of the Pico?
* Move the BOOTSEL pad closer to the Pico's switch.
* Remove SWD pads from the PCB
* Diode footprint too small ?
* Lower profile switches
* Move the Molex connectors slightly out?
* Move LED 1,2 test points to the front of the board.
* Add duplicate leds on the front of the board.
* Review through holes
* Add a silkscreen text below the Pico to place Kapton tape here.
* Is the pullup resistor of the BOOT switch required?
* Add mechanical dimensions.
* Add duplicate BOOT, RESET button on the front side (?)
* Add silkscreen marking for TFT position.
* Change the Pico pin silkscreen labels to reflect the function of the pin in the analyzer design.

83399
kicad/fp-info-cache Normal file
View File

File diff suppressed because it is too large Load Diff

3
kicad/fp-lib-table Normal file
View File

@@ -0,0 +1,3 @@
(fp_lib_table
(lib (name stepper_motor_analyzer)(type KiCad)(uri ${KIPRJMOD}/stepper_motor_analyzer.pretty)(options "")(descr ""))
)

View File

File diff suppressed because it is too large Load Diff

13456
kicad/models/FPC 6-PIN SMD.stp Normal file
View File

File diff suppressed because it is too large Load Diff

View File

File diff suppressed because it is too large Load Diff

12991
kicad/models/KMR211GLFS.step Normal file
View File

File diff suppressed because it is too large Load Diff

12603
kicad/models/KMR211GLFS.stp Normal file
View File

File diff suppressed because it is too large Load Diff

BIN
kicad/models/Peça2.SLDPRT Normal file
View File

Binary file not shown.

516765
kicad/models/Pico.wrl Normal file
View File

File diff suppressed because it is too large Load Diff

View File

File diff suppressed because it is too large Load Diff

View File

File diff suppressed because it is too large Load Diff

View File

File diff suppressed because one or more lines are too long

View File

File diff suppressed because it is too large Load Diff

View File

File diff suppressed because it is too large Load Diff

72696
kicad/models/pico.step Normal file
View File

File diff suppressed because it is too large Load Diff

238
kicad/models/unit_cube.step Normal file
View File

@@ -0,0 +1,238 @@
ISO-10303-21;
HEADER;
/* Generated by software containing ST-Developer
* from STEP Tools, Inc. (www.steptools.com)
*/
/* OPTION: using custom renumber hook */
FILE_DESCRIPTION(
/* description */ ('STEP AP214'),
/* implementation_level */ '2;1');
FILE_NAME(
/* name */ '60a03a028e9f040c3fb02603',
/* time_stamp */ '2021-05-15T21:15:46+00:00',
/* author */ (''),
/* organization */ (''),
/* preprocessor_version */ 'ST-DEVELOPER v18.1',
/* originating_system */ ' ',
/* authorisation */ ' ');
FILE_SCHEMA (('AUTOMOTIVE_DESIGN {1 0 10303 214 3 1 1}'));
ENDSEC;
DATA;
#10=PROPERTY_DEFINITION_REPRESENTATION(#14,#12);
#11=PROPERTY_DEFINITION_REPRESENTATION(#15,#13);
#12=REPRESENTATION('',(#16),#185);
#13=REPRESENTATION('',(#17),#185);
#14=PROPERTY_DEFINITION('pmi validation property','',#190);
#15=PROPERTY_DEFINITION('pmi validation property','',#190);
#16=VALUE_REPRESENTATION_ITEM('number of annotations',COUNT_MEASURE(0.));
#17=VALUE_REPRESENTATION_ITEM('number of views',COUNT_MEASURE(0.));
#18=SHAPE_REPRESENTATION_RELATIONSHIP('','',#123,#19);
#19=ADVANCED_BREP_SHAPE_REPRESENTATION('',(#121),#185);
#20=ORIENTED_EDGE('',*,*,#44,.F.);
#21=ORIENTED_EDGE('',*,*,#45,.F.);
#22=ORIENTED_EDGE('',*,*,#46,.T.);
#23=ORIENTED_EDGE('',*,*,#47,.T.);
#24=ORIENTED_EDGE('',*,*,#48,.T.);
#25=ORIENTED_EDGE('',*,*,#49,.F.);
#26=ORIENTED_EDGE('',*,*,#50,.F.);
#27=ORIENTED_EDGE('',*,*,#45,.T.);
#28=ORIENTED_EDGE('',*,*,#51,.T.);
#29=ORIENTED_EDGE('',*,*,#52,.F.);
#30=ORIENTED_EDGE('',*,*,#53,.F.);
#31=ORIENTED_EDGE('',*,*,#49,.T.);
#32=ORIENTED_EDGE('',*,*,#54,.F.);
#33=ORIENTED_EDGE('',*,*,#47,.F.);
#34=ORIENTED_EDGE('',*,*,#55,.T.);
#35=ORIENTED_EDGE('',*,*,#52,.T.);
#36=ORIENTED_EDGE('',*,*,#46,.F.);
#37=ORIENTED_EDGE('',*,*,#50,.T.);
#38=ORIENTED_EDGE('',*,*,#53,.T.);
#39=ORIENTED_EDGE('',*,*,#55,.F.);
#40=ORIENTED_EDGE('',*,*,#44,.T.);
#41=ORIENTED_EDGE('',*,*,#54,.T.);
#42=ORIENTED_EDGE('',*,*,#51,.F.);
#43=ORIENTED_EDGE('',*,*,#48,.F.);
#44=EDGE_CURVE('',#56,#57,#64,.T.);
#45=EDGE_CURVE('',#58,#56,#65,.T.);
#46=EDGE_CURVE('',#58,#59,#66,.T.);
#47=EDGE_CURVE('',#59,#57,#67,.T.);
#48=EDGE_CURVE('',#56,#60,#68,.T.);
#49=EDGE_CURVE('',#61,#60,#69,.T.);
#50=EDGE_CURVE('',#58,#61,#70,.T.);
#51=EDGE_CURVE('',#60,#62,#71,.T.);
#52=EDGE_CURVE('',#63,#62,#72,.T.);
#53=EDGE_CURVE('',#61,#63,#73,.T.);
#54=EDGE_CURVE('',#57,#62,#74,.T.);
#55=EDGE_CURVE('',#59,#63,#75,.T.);
#56=VERTEX_POINT('',#160);
#57=VERTEX_POINT('',#161);
#58=VERTEX_POINT('',#163);
#59=VERTEX_POINT('',#165);
#60=VERTEX_POINT('',#169);
#61=VERTEX_POINT('',#171);
#62=VERTEX_POINT('',#175);
#63=VERTEX_POINT('',#177);
#64=LINE('',#159,#76);
#65=LINE('',#162,#77);
#66=LINE('',#164,#78);
#67=LINE('',#166,#79);
#68=LINE('',#168,#80);
#69=LINE('',#170,#81);
#70=LINE('',#172,#82);
#71=LINE('',#174,#83);
#72=LINE('',#176,#84);
#73=LINE('',#178,#85);
#74=LINE('',#180,#86);
#75=LINE('',#181,#87);
#76=VECTOR('',#135,1.);
#77=VECTOR('',#136,1.);
#78=VECTOR('',#137,1.);
#79=VECTOR('',#138,1.);
#80=VECTOR('',#141,1.);
#81=VECTOR('',#142,1.);
#82=VECTOR('',#143,1.);
#83=VECTOR('',#146,1.);
#84=VECTOR('',#147,1.);
#85=VECTOR('',#148,1.);
#86=VECTOR('',#151,1.);
#87=VECTOR('',#152,1.);
#88=EDGE_LOOP('',(#20,#21,#22,#23));
#89=EDGE_LOOP('',(#24,#25,#26,#27));
#90=EDGE_LOOP('',(#28,#29,#30,#31));
#91=EDGE_LOOP('',(#32,#33,#34,#35));
#92=EDGE_LOOP('',(#36,#37,#38,#39));
#93=EDGE_LOOP('',(#40,#41,#42,#43));
#94=FACE_BOUND('',#88,.T.);
#95=FACE_BOUND('',#89,.T.);
#96=FACE_BOUND('',#90,.T.);
#97=FACE_BOUND('',#91,.T.);
#98=FACE_BOUND('',#92,.T.);
#99=FACE_BOUND('',#93,.T.);
#100=PLANE('',#125);
#101=PLANE('',#126);
#102=PLANE('',#127);
#103=PLANE('',#128);
#104=PLANE('',#129);
#105=PLANE('',#130);
#106=ADVANCED_FACE('',(#94),#100,.T.);
#107=ADVANCED_FACE('',(#95),#101,.F.);
#108=ADVANCED_FACE('',(#96),#102,.F.);
#109=ADVANCED_FACE('',(#97),#103,.T.);
#110=ADVANCED_FACE('',(#98),#104,.T.);
#111=ADVANCED_FACE('',(#99),#105,.F.);
#112=CLOSED_SHELL('',(#106,#107,#108,#109,#110,#111));
#113=STYLED_ITEM('',(#114),#121);
#114=PRESENTATION_STYLE_ASSIGNMENT((#115));
#115=SURFACE_STYLE_USAGE(.BOTH.,#116);
#116=SURFACE_SIDE_STYLE('',(#117));
#117=SURFACE_STYLE_FILL_AREA(#118);
#118=FILL_AREA_STYLE('',(#119));
#119=FILL_AREA_STYLE_COLOUR('',#120);
#120=COLOUR_RGB('',0.6,0.6,0.6);
#121=MANIFOLD_SOLID_BREP('Part 1',#112);
#122=SHAPE_DEFINITION_REPRESENTATION(#190,#123);
#123=SHAPE_REPRESENTATION('Part 1',(#124),#185);
#124=AXIS2_PLACEMENT_3D('',#157,#131,#132);
#125=AXIS2_PLACEMENT_3D('',#158,#133,#134);
#126=AXIS2_PLACEMENT_3D('',#167,#139,#140);
#127=AXIS2_PLACEMENT_3D('',#173,#144,#145);
#128=AXIS2_PLACEMENT_3D('',#179,#149,#150);
#129=AXIS2_PLACEMENT_3D('',#182,#153,#154);
#130=AXIS2_PLACEMENT_3D('',#183,#155,#156);
#131=DIRECTION('',(0.,0.,1.));
#132=DIRECTION('',(1.,0.,0.));
#133=DIRECTION('',(2.16840434497101E-16,-1.,0.));
#134=DIRECTION('',(1.,2.16840434497101E-16,0.));
#135=DIRECTION('',(-1.,-2.16840434497101E-16,0.));
#136=DIRECTION('',(0.,0.,-1.));
#137=DIRECTION('',(-1.,-2.16840434497101E-16,0.));
#138=DIRECTION('',(0.,0.,-1.));
#139=DIRECTION('',(-1.,0.,0.));
#140=DIRECTION('',(0.,0.,1.));
#141=DIRECTION('',(0.,1.,0.));
#142=DIRECTION('',(0.,0.,-1.));
#143=DIRECTION('',(0.,1.,0.));
#144=DIRECTION('',(2.16840434497101E-16,-1.,0.));
#145=DIRECTION('',(1.,2.16840434497101E-16,0.));
#146=DIRECTION('',(-1.,-2.16840434497101E-16,0.));
#147=DIRECTION('',(0.,0.,-1.));
#148=DIRECTION('',(-1.,-2.16840434497101E-16,0.));
#149=DIRECTION('',(-1.,0.,0.));
#150=DIRECTION('',(0.,0.,1.));
#151=DIRECTION('',(0.,1.,0.));
#152=DIRECTION('',(0.,1.,0.));
#153=DIRECTION('',(0.,0.,1.));
#154=DIRECTION('',(1.,0.,0.));
#155=DIRECTION('',(0.,0.,1.));
#156=DIRECTION('',(1.,0.,0.));
#157=CARTESIAN_POINT('',(0.,0.,0.));
#158=CARTESIAN_POINT('',(0.,-0.0005,0.001));
#159=CARTESIAN_POINT('',(0.,-0.0005,0.));
#160=CARTESIAN_POINT('',(0.0005,-0.0005,0.));
#161=CARTESIAN_POINT('',(-0.0005,-0.0005,0.));
#162=CARTESIAN_POINT('',(0.0005,-0.0005,0.001));
#163=CARTESIAN_POINT('',(0.0005,-0.0005,0.001));
#164=CARTESIAN_POINT('',(0.,-0.0005,0.001));
#165=CARTESIAN_POINT('',(-0.0005,-0.0005,0.001));
#166=CARTESIAN_POINT('',(-0.0005,-0.0005,0.001));
#167=CARTESIAN_POINT('',(0.0005,1.0842021724855E-19,0.001));
#168=CARTESIAN_POINT('',(0.0005,1.0842021724855E-19,0.));
#169=CARTESIAN_POINT('',(0.0005,0.0005,0.));
#170=CARTESIAN_POINT('',(0.0005,0.0005,0.001));
#171=CARTESIAN_POINT('',(0.0005,0.0005,0.001));
#172=CARTESIAN_POINT('',(0.0005,1.0842021724855E-19,0.001));
#173=CARTESIAN_POINT('',(0.,0.0005,0.001));
#174=CARTESIAN_POINT('',(0.,0.0005,0.));
#175=CARTESIAN_POINT('',(-0.0005,0.0005,0.));
#176=CARTESIAN_POINT('',(-0.0005,0.0005,0.001));
#177=CARTESIAN_POINT('',(-0.0005,0.0005,0.001));
#178=CARTESIAN_POINT('',(0.,0.0005,0.001));
#179=CARTESIAN_POINT('',(-0.0005,-1.0842021724855E-19,0.001));
#180=CARTESIAN_POINT('',(-0.0005,-1.0842021724855E-19,0.));
#181=CARTESIAN_POINT('',(-0.0005,-1.0842021724855E-19,0.001));
#182=CARTESIAN_POINT('',(0.,0.,0.001));
#183=CARTESIAN_POINT('',(0.,0.,0.));
#184=MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(#113),
#185);
#185=(
GEOMETRIC_REPRESENTATION_CONTEXT(3)
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#186))
GLOBAL_UNIT_ASSIGNED_CONTEXT((#189,#188,#187))
REPRESENTATION_CONTEXT('Part 1','TOP_LEVEL_ASSEMBLY_PART')
);
#186=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(5.E-6),#189,
'DISTANCE_ACCURACY_VALUE','Maximum Tolerance applied to model');
#187=(
NAMED_UNIT(*)
SI_UNIT($,.STERADIAN.)
SOLID_ANGLE_UNIT()
);
#188=(
NAMED_UNIT(*)
PLANE_ANGLE_UNIT()
SI_UNIT($,.RADIAN.)
);
#189=(
LENGTH_UNIT()
NAMED_UNIT(*)
SI_UNIT($,.METRE.)
);
#190=PRODUCT_DEFINITION_SHAPE('','',#191);
#191=PRODUCT_DEFINITION('','',#193,#192);
#192=PRODUCT_DEFINITION_CONTEXT('',#199,'design');
#193=PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE('','',#195,
.NOT_KNOWN.);
#194=PRODUCT_RELATED_PRODUCT_CATEGORY('','',(#195));
#195=PRODUCT('Part 1','Part 1','Part 1',(#197));
#196=PRODUCT_CATEGORY('','');
#197=PRODUCT_CONTEXT('',#199,'mechanical');
#198=APPLICATION_PROTOCOL_DEFINITION('international standard',
'automotive_design',2010,#199);
#199=APPLICATION_CONTEXT(
'core data for automotive mechanical design processes');
ENDSEC;
END-ISO-10303-21;

View File

@@ -0,0 +1,551 @@
EESchema-LIBRARY Version 2.4
#encoding utf-8
#
# Connector_Conn_01x06_Female
#
DEF Connector_Conn_01x06_Female J 0 40 Y N 1 F N
F0 "J" 0 300 50 H V C CNN
F1 "Connector_Conn_01x06_Female" 0 -400 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
A 0 -300 20 901 -901 1 1 6 N 0 -280 0 -320
A 0 -200 20 901 -901 1 1 6 N 0 -180 0 -220
A 0 -100 20 901 -901 1 1 6 N 0 -80 0 -120
A 0 0 20 901 -901 1 1 6 N 0 20 0 -20
A 0 100 20 901 -901 1 1 6 N 0 120 0 80
A 0 200 20 901 -901 1 1 6 N 0 220 0 180
P 2 1 1 6 -50 -300 -20 -300 N
P 2 1 1 6 -50 -200 -20 -200 N
P 2 1 1 6 -50 -100 -20 -100 N
P 2 1 1 6 -50 0 -20 0 N
P 2 1 1 6 -50 100 -20 100 N
P 2 1 1 6 -50 200 -20 200 N
X Pin_1 1 -200 200 150 R 50 50 1 1 P
X Pin_2 2 -200 100 150 R 50 50 1 1 P
X Pin_3 3 -200 0 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 -200 150 R 50 50 1 1 P
X Pin_6 6 -200 -300 150 R 50 50 1 1 P
ENDDRAW
ENDDEF
#
# Connector_Generic_Conn_01x01
#
DEF Connector_Generic_Conn_01x01 J 0 40 Y N 1 F N
F0 "J" 0 100 50 H V C CNN
F1 "Connector_Generic_Conn_01x01" 0 -100 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 5 0 -5 1 1 6 N
S -50 50 50 -50 1 1 10 f
X Pin_1 1 -200 0 150 R 50 50 1 1 P
ENDDRAW
ENDDEF
#
# Device_C
#
DEF Device_C C 0 10 N Y 1 F N
F0 "C" 25 100 50 H V L CNN
F1 "Device_C" 25 -100 50 H V L CNN
F2 "" 38 -150 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
C_*
$ENDFPLIST
DRAW
P 2 0 1 20 -80 -30 80 -30 N
P 2 0 1 20 -80 30 80 30 N
X ~ 1 0 150 110 D 50 50 1 1 P
X ~ 2 0 -150 110 U 50 50 1 1 P
ENDDRAW
ENDDEF
#
# Device_CP1
#
DEF Device_CP1 C 0 10 N N 1 F N
F0 "C" 25 100 50 H V L CNN
F1 "Device_CP1" 25 -100 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
A 0 -150 128 1287 513 0 1 20 N -80 -50 80 -50
P 2 0 1 20 -80 30 80 30 N
P 2 0 1 0 -70 90 -30 90 N
P 2 0 1 0 -50 70 -50 110 N
X ~ 1 0 150 110 D 50 50 1 1 P
X ~ 2 0 -150 130 U 50 50 1 1 P
ENDDRAW
ENDDEF
#
# Device_D_Schottky
#
DEF Device_D_Schottky D 0 40 N N 1 F N
F0 "D" 0 100 50 H V C CNN
F1 "Device_D_Schottky" 0 -100 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
TO-???*
*_Diode_*
*SingleDiode*
D_*
$ENDFPLIST
DRAW
P 2 0 1 0 50 0 -50 0 N
P 4 0 1 10 50 50 50 -50 -50 0 50 50 N
P 6 0 1 10 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N
X K 1 -150 0 100 R 50 50 1 1 P
X A 2 150 0 100 L 50 50 1 1 P
ENDDRAW
ENDDEF
#
# Device_R_US
#
DEF Device_R_US R 0 0 N Y 1 F N
F0 "R" 100 0 50 V V C CNN
F1 "Device_R_US" -100 0 50 V V C CNN
F2 "" 40 -10 50 V I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
R_*
$ENDFPLIST
DRAW
P 2 0 1 0 0 -90 0 -100 N
P 2 0 1 0 0 90 0 100 N
P 5 0 1 0 0 -30 40 -45 0 -60 -40 -75 0 -90 N
P 5 0 1 0 0 30 40 15 0 0 -40 -15 0 -30 N
P 5 0 1 0 0 90 40 75 0 60 -40 45 0 30 N
X ~ 1 0 150 50 D 50 50 1 1 P
X ~ 2 0 -150 50 U 50 50 1 1 P
ENDDRAW
ENDDEF
#
# Graphic_Logo_Open_Hardware_Small
#
DEF Graphic_Logo_Open_Hardware_Small #LOGO 0 40 Y Y 1 F N
F0 "#LOGO" 0 275 50 H I C CNN
F1 "Graphic_Logo_Open_Hardware_Small" 0 -225 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
P 277 0 1 0 132 -171 130 -170 125 -167 118 -162 109 -156 100 -150 93 -146 88 -142 86 -141 85 -142 81 -144 75 -147 71 -149 66 -151 63 -151 63 -151 61 -147 58 -139 53 -130 49 -119 44 -107 38 -95 34 -83 29 -72 26 -64 24 -58 23 -55 23 -55 26 -52 31 -49 41 -40 51 -27 57 -13 60 3 58 18 52 32 42 45 30 54 16 60 0 62 -15 61 -29 55 -42 45 -48 39 -55 26 -60 12 -60 9 -59 -7 -55 -21 -47 -34 -36 -45 -34 -46 -29 -50 -25 -53 -23 -55 -42 -102 -45 -110 -51 -123 -55 -134 -59 -143 -62 -149 -63 -151 -63 -151 -65 -151 -68 -150 -75 -147 -79 -145 -84 -142 -87 -141 -89 -142 -93 -145 -100 -150 -109 -156 -117 -161 -124 -166 -130 -170 -132 -171 -133 -171 -135 -170 -139 -166 -146 -160 -155 -151 -156 -150 -164 -142 -170 -136 -174 -131 -175 -129 -175 -129 -174 -127 -170 -121 -166 -114 -160 -105 -144 -82 -153 -61 -155 -54 -159 -46 -161 -41 -162 -38 -165 -37 -170 -36 -179 -34 -189 -32 -199 -31 -207 -29 -214 -28 -217 -27 -217 -27 -218 -25 -218 -22 -218 -17 -219 -9 -219 3 -219 5 -218 16 -218 25 -218 30 -218 33 -218 33 -215 33 -209 35 -200 36 -190 38 -189 39 -179 41 -170 42 -164 44 -161 45 -161 45 -159 49 -156 56 -152 64 -149 72 -146 79 -144 85 -143 87 -143 87 -145 90 -148 95 -153 102 -160 111 -160 112 -166 121 -171 128 -174 133 -175 136 -175 136 -173 138 -169 143 -162 150 -155 158 -152 160 -144 169 -138 174 -134 177 -132 178 -132 178 -130 176 -124 172 -117 167 -108 161 -107 161 -98 155 -91 150 -86 146 -84 145 -83 145 -80 146 -73 148 -66 151 -58 155 -50 158 -45 160 -42 162 -42 162 -41 165 -40 171 -38 180 -36 191 -35 193 -33 203 -32 212 -31 218 -30 220 -28 221 -23 221 -16 221 -6 221 3 221 13 221 21 221 27 220 29 220 29 220 30 217 32 210 33 201 36 190 36 188 38 178 40 169 41 163 42 161 42 161 47 159 54 156 62 152 82 144 107 161 109 163 118 169 125 174 130 177 133 178 133 178 135 176 140 171 147 165 154 157 160 151 167 144 171 140 174 137 174 135 174 134 173 131 169 126 164 118 158 110 153 102 148 94 144 88 143 85 143 84 145 79 148 72 152 63 160 44 173 41 181 40 192 38 202 36 218 33 219 -26 216 -27 214 -27 208 -29 199 -30 189 -32 181 -34 172 -36 166 -37 163 -37 162 -38 160 -42 157 -49 154 -57 150 -65 147 -73 145 -79 144 -82 145 -84 149 -89 153 -97 159 -105 165 -114 170 -121 173 -126 175 -129 174 -131 171 -135 164 -141 155 -151 153 -152 145 -160 139 -166 134 -170 132 -171 F
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
#
# Transistor_FET_Si2371EDS
#
DEF Transistor_FET_Si2371EDS Q 0 20 Y N 1 F N
F0 "Q" 200 75 50 H V L CNN
F1 "Transistor_FET_Si2371EDS" 200 0 50 H V L CNN
F2 "Package_TO_SOT_SMD:SOT-23" 200 -75 50 H I L CIN
F3 "" 0 0 50 H I L CNN
ALIAS VP0610T BSS84 NTR2101P BSS83P Si2319CDS IRLML6401 IRLML6402 DMG2301L AO3401A IRLML9301 IRLML5203 Si2371EDS TSM2301ACX FDN340P
$FPLIST
SOT?23*
$ENDFPLIST
DRAW
C 65 0 110 0 1 10 N
C 100 -70 10 0 1 0 F
C 100 70 10 0 1 0 F
P 2 0 1 0 10 0 -100 0 N
P 2 0 1 10 10 75 10 -75 N
P 2 0 1 10 30 -50 30 -90 N
P 2 0 1 10 30 20 30 -20 N
P 2 0 1 10 30 90 30 50 N
P 2 0 1 0 100 100 100 70 N
P 3 0 1 0 100 -100 100 0 30 0 N
P 4 0 1 0 30 70 130 70 130 -70 30 -70 N
P 4 0 1 0 90 0 50 15 50 -15 90 0 F
P 4 0 1 0 110 -20 115 -15 145 -15 150 -10 N
P 4 0 1 0 130 -15 115 10 145 10 130 -15 N
X G 1 -200 0 100 R 50 50 1 1 I
X S 2 100 -200 100 U 50 50 1 1 P
X D 3 100 200 100 D 50 50 1 1 P
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
#
# stepper_motor_analyzer_+3V3
#
DEF stepper_motor_analyzer_+3V3 #PWR 0 0 Y Y 1 F P
F0 "#PWR" 250 0 50 H I C CNN
F1 "stepper_motor_analyzer_+3V3" 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 -30 50 30 50 N
P 2 0 1 0 0 0 0 50 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
#
# stepper_motor_analyzer_ACS70331_soic8
#
DEF stepper_motor_analyzer_ACS70331_soic8 U 0 20 Y Y 1 F N
F0 "U" 400 250 50 H V L CNN
F1 "stepper_motor_analyzer_ACS70331_soic8" 150 350 50 H V L CNN
F2 "Sensor_Current:Allegro_QFN-12-10-1EP_3x3mm_P0.5mm" 400 -50 50 H I L CIN
F3 "" 0 0 50 H I C CNN
$FPLIST
Allegro*QFN*EP*3x3mm*P0.5mm*
$ENDFPLIST
DRAW
S -500 300 300 -300 0 1 10 f
P 2 0 1 0 -300 300 -300 -300 N
X + 1 -600 200 100 R 50 50 1 1 P
X + 2 -600 100 100 R 50 50 1 1 P
X - 3 -600 -100 100 R 50 50 1 1 P
X - 4 -600 -200 100 R 50 50 1 1 P
X GND 5 -50 -400 100 U 50 50 1 1 W
X NC 6 400 -100 100 L 50 50 1 1 N
X VIOUT 7 400 100 100 L 50 50 1 1 O
X VCC 8 -50 400 100 D 50 50 1 1 W
ENDDRAW
ENDDEF
#
# stepper_motor_analyzer_Connector_Conn_01x04_Male
#
DEF stepper_motor_analyzer_Connector_Conn_01x04_Male J 0 40 Y N 1 F N
F0 "J" 0 200 50 H V C CNN
F1 "stepper_motor_analyzer_Connector_Conn_01x04_Male" 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 34 -195 0 -205 1 1 6 F
S 34 -95 0 -105 1 1 6 F
S 34 5 0 -5 1 1 6 F
S 34 105 0 95 1 1 6 F
P 2 1 1 6 50 -200 34 -200 N
P 2 1 1 6 50 -100 34 -100 N
P 2 1 1 6 50 0 34 0 N
P 2 1 1 6 50 100 34 100 N
X Pin_1 1 200 100 150 L 50 50 1 1 P
X Pin_2 2 200 0 150 L 50 50 1 1 P
X Pin_3 3 200 -100 150 L 50 50 1 1 P
X Pin_4 4 200 -200 150 L 50 50 1 1 P
ENDDRAW
ENDDEF
#
# stepper_motor_analyzer_Connector_Conn_01x40_Female
#
DEF stepper_motor_analyzer_Connector_Conn_01x40_Female J 0 40 Y N 1 F N
F0 "J" 0 2000 50 H V C CNN
F1 "stepper_motor_analyzer_Connector_Conn_01x40_Female" 0 -2100 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
A 0 -2000 20 901 -901 1 1 6 N 0 -1980 0 -2020
A 0 -1900 20 901 -901 1 1 6 N 0 -1880 0 -1920
A 0 -1800 20 901 -901 1 1 6 N 0 -1780 0 -1820
A 0 -1700 20 901 -901 1 1 6 N 0 -1680 0 -1720
A 0 -1600 20 901 -901 1 1 6 N 0 -1580 0 -1620
A 0 -1500 20 901 -901 1 1 6 N 0 -1480 0 -1520
A 0 -1400 20 901 -901 1 1 6 N 0 -1380 0 -1420
A 0 -1300 20 901 -901 1 1 6 N 0 -1280 0 -1320
A 0 -1200 20 901 -901 1 1 6 N 0 -1180 0 -1220
A 0 -1100 20 901 -901 1 1 6 N 0 -1080 0 -1120
A 0 -1000 20 901 -901 1 1 6 N 0 -980 0 -1020
A 0 -900 20 901 -901 1 1 6 N 0 -880 0 -920
A 0 -800 20 901 -901 1 1 6 N 0 -780 0 -820
A 0 -700 20 901 -901 1 1 6 N 0 -680 0 -720
A 0 -600 20 901 -901 1 1 6 N 0 -580 0 -620
A 0 -500 20 901 -901 1 1 6 N 0 -480 0 -520
A 0 -400 20 901 -901 1 1 6 N 0 -380 0 -420
A 0 -300 20 901 -901 1 1 6 N 0 -280 0 -320
A 0 -200 20 901 -901 1 1 6 N 0 -180 0 -220
A 0 -100 20 901 -901 1 1 6 N 0 -80 0 -120
A 0 0 20 901 -901 1 1 6 N 0 20 0 -20
A 0 100 20 901 -901 1 1 6 N 0 120 0 80
A 0 200 20 901 -901 1 1 6 N 0 220 0 180
A 0 300 20 901 -901 1 1 6 N 0 320 0 280
A 0 400 20 901 -901 1 1 6 N 0 420 0 380
A 0 500 20 901 -901 1 1 6 N 0 520 0 480
A 0 600 20 901 -901 1 1 6 N 0 620 0 580
A 0 700 20 901 -901 1 1 6 N 0 720 0 680
A 0 800 20 901 -901 1 1 6 N 0 820 0 780
A 0 900 20 901 -901 1 1 6 N 0 920 0 880
A 0 1000 20 901 -901 1 1 6 N 0 1020 0 980
A 0 1100 20 901 -901 1 1 6 N 0 1120 0 1080
A 0 1200 20 901 -901 1 1 6 N 0 1220 0 1180
A 0 1300 20 901 -901 1 1 6 N 0 1320 0 1280
A 0 1400 20 901 -901 1 1 6 N 0 1420 0 1380
A 0 1500 20 901 -901 1 1 6 N 0 1520 0 1480
A 0 1600 20 901 -901 1 1 6 N 0 1620 0 1580
A 0 1700 20 901 -901 1 1 6 N 0 1720 0 1680
A 0 1800 20 901 -901 1 1 6 N 0 1820 0 1780
A 0 1900 20 901 -901 1 1 6 N 0 1920 0 1880
P 2 1 1 6 -50 -2000 -20 -2000 N
P 2 1 1 6 -50 -1900 -20 -1900 N
P 2 1 1 6 -50 -1800 -20 -1800 N
P 2 1 1 6 -50 -1700 -20 -1700 N
P 2 1 1 6 -50 -1600 -20 -1600 N
P 2 1 1 6 -50 -1500 -20 -1500 N
P 2 1 1 6 -50 -1400 -20 -1400 N
P 2 1 1 6 -50 -1300 -20 -1300 N
P 2 1 1 6 -50 -1200 -20 -1200 N
P 2 1 1 6 -50 -1100 -20 -1100 N
P 2 1 1 6 -50 -1000 -20 -1000 N
P 2 1 1 6 -50 -900 -20 -900 N
P 2 1 1 6 -50 -800 -20 -800 N
P 2 1 1 6 -50 -700 -20 -700 N
P 2 1 1 6 -50 -600 -20 -600 N
P 2 1 1 6 -50 -500 -20 -500 N
P 2 1 1 6 -50 -400 -20 -400 N
P 2 1 1 6 -50 -300 -20 -300 N
P 2 1 1 6 -50 -200 -20 -200 N
P 2 1 1 6 -50 -100 -20 -100 N
P 2 1 1 6 -50 0 -20 0 N
P 2 1 1 6 -50 100 -20 100 N
P 2 1 1 6 -50 200 -20 200 N
P 2 1 1 6 -50 300 -20 300 N
P 2 1 1 6 -50 400 -20 400 N
P 2 1 1 6 -50 500 -20 500 N
P 2 1 1 6 -50 600 -20 600 N
P 2 1 1 6 -50 700 -20 700 N
P 2 1 1 6 -50 800 -20 800 N
P 2 1 1 6 -50 900 -20 900 N
P 2 1 1 6 -50 1000 -20 1000 N
P 2 1 1 6 -50 1100 -20 1100 N
P 2 1 1 6 -50 1200 -20 1200 N
P 2 1 1 6 -50 1300 -20 1300 N
P 2 1 1 6 -50 1400 -20 1400 N
P 2 1 1 6 -50 1500 -20 1500 N
P 2 1 1 6 -50 1600 -20 1600 N
P 2 1 1 6 -50 1700 -20 1700 N
P 2 1 1 6 -50 1800 -20 1800 N
P 2 1 1 6 -50 1900 -20 1900 N
X Pin_1 1 -200 1900 150 R 50 50 1 1 P
X Pin_10 10 -200 1000 150 R 50 50 1 1 P
X Pin_11 11 -200 900 150 R 50 50 1 1 P
X Pin_12 12 -200 800 150 R 50 50 1 1 P
X Pin_13 13 -200 700 150 R 50 50 1 1 P
X Pin_14 14 -200 600 150 R 50 50 1 1 P
X Pin_15 15 -200 500 150 R 50 50 1 1 P
X Pin_16 16 -200 400 150 R 50 50 1 1 P
X Pin_17 17 -200 300 150 R 50 50 1 1 P
X Pin_18 18 -200 200 150 R 50 50 1 1 P
X Pin_19 19 -200 100 150 R 50 50 1 1 P
X Pin_2 2 -200 1800 150 R 50 50 1 1 P
X Pin_20 20 -200 0 150 R 50 50 1 1 P
X Pin_21 21 -200 -100 150 R 50 50 1 1 P
X Pin_22 22 -200 -200 150 R 50 50 1 1 P
X Pin_23 23 -200 -300 150 R 50 50 1 1 P
X Pin_24 24 -200 -400 150 R 50 50 1 1 P
X Pin_25 25 -200 -500 150 R 50 50 1 1 P
X Pin_26 26 -200 -600 150 R 50 50 1 1 P
X Pin_27 27 -200 -700 150 R 50 50 1 1 P
X Pin_28 28 -200 -800 150 R 50 50 1 1 P
X Pin_29 29 -200 -900 150 R 50 50 1 1 P
X Pin_3 3 -200 1700 150 R 50 50 1 1 P
X Pin_30 30 -200 -1000 150 R 50 50 1 1 P
X Pin_31 31 -200 -1100 150 R 50 50 1 1 P
X Pin_32 32 -200 -1200 150 R 50 50 1 1 P
X Pin_33 33 -200 -1300 150 R 50 50 1 1 P
X Pin_34 34 -200 -1400 150 R 50 50 1 1 P
X Pin_35 35 -200 -1500 150 R 50 50 1 1 P
X Pin_36 36 -200 -1600 150 R 50 50 1 1 P
X Pin_37 37 -200 -1700 150 R 50 50 1 1 P
X Pin_38 38 -200 -1800 150 R 50 50 1 1 P
X Pin_39 39 -200 -1900 150 R 50 50 1 1 P
X Pin_4 4 -200 1600 150 R 50 50 1 1 P
X Pin_40 40 -200 -2000 150 R 50 50 1 1 P
X Pin_5 5 -200 1500 150 R 50 50 1 1 P
X Pin_6 6 -200 1400 150 R 50 50 1 1 P
X Pin_7 7 -200 1300 150 R 50 50 1 1 P
X Pin_8 8 -200 1200 150 R 50 50 1 1 P
X Pin_9 9 -200 1100 150 R 50 50 1 1 P
ENDDRAW
ENDDEF
#
# stepper_motor_analyzer_LED
#
DEF stepper_motor_analyzer_LED D 0 40 N N 1 F N
F0 "D" 0 100 50 H V C CNN
F1 "stepper_motor_analyzer_LED" 0 -100 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
LED*
LED_SMD:*
LED_THT:*
$ENDFPLIST
DRAW
P 2 0 1 8 -50 -50 -50 50 N
P 2 0 1 0 -50 0 50 0 N
P 4 0 1 8 50 -50 50 50 -50 0 50 -50 N
P 5 0 1 0 -120 -30 -180 -90 -150 -90 -180 -90 -180 -60 N
P 5 0 1 0 -70 -30 -130 -90 -100 -90 -130 -90 -130 -60 N
X K 1 -150 0 100 R 50 50 1 1 P
X A 2 150 0 100 L 50 50 1 1 P
ENDDRAW
ENDDEF
#
# stepper_motor_analyzer_Motor
#
DEF stepper_motor_analyzer_Motor M 0 0 Y N 1 F N
F0 "M" 50 400 50 H I L CNN
F1 "stepper_motor_analyzer_Motor" -100 350 50 H I L TNN
F2 "" 10 90 50 H I C CNN
F3 "" 10 90 50 H I C CNN
$FPLIST
PinHeader*P2.54mm*Vertical*
TerminalBlock*
Motor*
$ENDFPLIST
DRAW
A -75 -75 25 1 1799 0 1 0 N -50 -75 -100 -75
A -25 -75 25 1 1799 0 1 0 N 0 -75 -50 -75
A 25 -75 25 1 1799 0 1 0 N 50 -75 0 -75
A 75 -75 25 1 1799 0 1 0 N 100 -75 50 -75
A 175 25 25 901 -901 0 1 0 N 175 50 175 0
A 175 75 25 901 -901 0 1 0 N 175 100 175 50
A 175 125 25 901 -901 0 1 0 N 175 150 175 100
A 175 175 25 901 -901 0 1 0 N 175 200 175 150
C 0 100 128 0 1 10 N
P 2 0 0 0 200 0 200 -100 N
P 5 0 0 0 -50 30 -50 180 0 80 50 180 50 30 N
P 2 0 1 0 -100 -100 -100 -75 N
P 2 0 1 0 100 -100 100 -250 N
P 2 0 1 0 100 -100 100 -75 N
P 2 0 1 0 200 -100 200 -250 N
P 2 0 1 0 200 0 175 0 N
P 2 0 1 0 200 200 175 200 N
P 3 0 1 0 300 -250 300 200 200 200 N
P 4 0 1 0 0 -250 0 -150 -100 -150 -100 -100 N
ENDDRAW
ENDDEF
#
# stepper_motor_analyzer_Pico
#
DEF stepper_motor_analyzer_Pico U 0 40 Y Y 1 F N
F0 "U" -550 1100 50 H V C CNN
F1 "stepper_motor_analyzer_Pico" 0 750 50 H V C CNN
F2 "RPi_Pico:RPi_Pico_SMD_TH" 0 0 50 V I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 0 850 50 0 0 0 "Raspberry Pi" Normal 0 C C
S -600 1050 600 -1050 0 1 0 f
X GP0 1 -700 950 100 R 50 50 1 1 O
X GP7 10 -700 50 100 R 50 50 1 1 O
X GP8 11 -700 -50 100 R 50 50 1 1 O
X GP9 12 -700 -150 100 R 50 50 1 1 O
X GND 13 -700 -250 100 R 50 50 1 1 W
X GP10 14 -700 -350 100 R 50 50 1 1 O
X GP11 15 -700 -450 100 R 50 50 1 1 O
X GP12 16 -700 -550 100 R 50 50 1 1 O
X GP13 17 -700 -650 100 R 50 50 1 1 O
X GND 18 -700 -750 100 R 50 50 1 1 W
X GP14 19 -700 -850 100 R 50 50 1 1 O
X GP1 2 -700 850 100 R 50 50 1 1 O
X GP15 20 -700 -950 100 R 50 50 1 1 O
X GP16 21 700 -950 100 L 50 50 1 1 O
X GP17 22 700 -850 100 L 50 50 1 1 O
X GND 23 700 -750 100 L 50 50 1 1 W
X GP18 24 700 -650 100 L 50 50 1 1 O
X GP19 25 700 -550 100 L 50 50 1 1 O
X GP20 26 700 -450 100 L 50 50 1 1 O
X GP21 27 700 -350 100 L 50 50 1 1 O
X GND 28 700 -250 100 L 50 50 1 1 W
X GP22 29 700 -150 100 L 50 50 1 1 O
X GND 3 -700 750 100 R 50 50 1 1 W
X RUN 30 700 -50 100 L 50 50 1 1 I
X ADC0 31 700 50 100 L 50 50 1 1 I
X ADC1 32 700 150 100 L 50 50 1 1 I
X AGND 33 700 250 100 L 50 50 1 1 W
X GP28 34 700 350 100 L 50 50 1 1 O
X ADC_VREF 35 700 450 100 L 50 50 1 1 U
X 3V3 36 700 550 100 L 50 50 1 1 w
X 3V3_EN 37 700 650 100 L 50 50 1 1 I
X GND 38 700 750 100 L 50 50 1 1 w
X VSYS 39 700 850 100 L 50 50 1 1 U
X GP2 4 -700 650 100 R 50 50 1 1 O
X VBUS 40 700 950 100 L 50 50 1 1 U
X GP3 5 -700 550 100 R 50 50 1 1 O
X SDA 6 -700 450 100 R 50 50 1 1 B
X SCL 7 -700 350 100 R 50 50 1 1 O
X GND 8 -700 250 100 R 50 50 1 1 W
X GP6 9 -700 150 100 R 50 50 1 1 O
ENDDRAW
ENDDEF
#
# stepper_motor_analyzer_TestPoint
#
DEF stepper_motor_analyzer_TestPoint TP 0 30 N N 1 F N
F0 "TP" 0 270 50 H V C CNN
F1 "stepper_motor_analyzer_TestPoint" 0 200 50 H V C CNN
F2 "" 200 0 50 H I C CNN
F3 "" 200 0 50 H I C CNN
$FPLIST
Pin*
Test*
$ENDFPLIST
DRAW
C 0 130 30 0 1 0 N
X 1 1 0 0 100 U 50 50 1 1 P
ENDDRAW
ENDDEF
#
# stepper_motor_analyzer_switch
#
DEF stepper_motor_analyzer_switch SW 0 40 N N 1 F N
F0 "SW" 50 100 50 H V L CNN
F1 "stepper_motor_analyzer_switch" 0 -60 50 H V C CNN
F2 "" 0 200 50 H I C CNN
F3 "" 0 200 50 H I C CNN
DRAW
C -80 0 20 0 1 0 N
C 80 0 20 0 1 0 N
P 2 0 1 0 0 50 0 120 N
P 2 0 1 0 100 50 -100 50 N
X 1 1 -200 0 100 R 50 50 0 1 P
X 2 2 200 0 100 L 50 50 0 1 P
ENDDRAW
ENDDEF
#
#End Library

View File

@@ -0,0 +1,3 @@
EESchema-DOCLIB Version 2.0
#
#End Doc Library

View File

@@ -0,0 +1,57 @@
EESchema-LIBRARY Version 2.4
#encoding utf-8
#
# Pico-stepper_motor_analyzer
#
DEF Pico-stepper_motor_analyzer U 0 40 Y Y 1 F N
F0 "U" -550 1100 50 H V C CNN
F1 "Pico-stepper_motor_analyzer" 0 750 50 H V C CNN
F2 "RPi_Pico:RPi_Pico_SMD_TH" 0 0 50 V I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 0 850 50 0 0 0 "Raspberry Pi" Normal 0 C C
S -600 1050 600 -1050 0 1 0 f
X GPIO0 1 -700 950 100 R 50 50 1 1 O
X GPIO7 10 -700 50 100 R 50 50 1 1 O
X GPIO8 11 -700 -50 100 R 50 50 1 1 O
X GPIO9 12 -700 -150 100 R 50 50 1 1 O
X GND 13 -700 -250 100 R 50 50 1 1 W
X GPIO10 14 -700 -350 100 R 50 50 1 1 O
X GPIO11 15 -700 -450 100 R 50 50 1 1 O
X GPIO12 16 -700 -550 100 R 50 50 1 1 O
X GPIO13 17 -700 -650 100 R 50 50 1 1 O
X GND 18 -700 -750 100 R 50 50 1 1 W
X GPIO14 19 -700 -850 100 R 50 50 1 1 O
X GPIO1 2 -700 850 100 R 50 50 1 1 O
X GPIO15 20 -700 -950 100 R 50 50 1 1 O
X GPIO16 21 700 -950 100 L 50 50 1 1 O
X GPIO17 22 700 -850 100 L 50 50 1 1 O
X GND 23 700 -750 100 L 50 50 1 1 W
X GPIO18 24 700 -650 100 L 50 50 1 1 O
X GPIO19 25 700 -550 100 L 50 50 1 1 O
X GPIO20 26 700 -450 100 L 50 50 1 1 O
X GPIO21 27 700 -350 100 L 50 50 1 1 O
X GND 28 700 -250 100 L 50 50 1 1 W
X GPIO22 29 700 -150 100 L 50 50 1 1 O
X GND 3 -700 750 100 R 50 50 1 1 W
X RUN 30 700 -50 100 L 50 50 1 1 I
X ADC0 31 700 50 100 L 50 50 1 1 I
X ADC1 32 700 150 100 L 50 50 1 1 I
X AGND 33 700 250 100 L 50 50 1 1 W
X GPIO28 34 700 350 100 L 50 50 1 1 O
X ADC_VREF 35 700 450 100 L 50 50 1 1 U
X 3V3 36 700 550 100 L 50 50 1 1 w
X 3V3_EN 37 700 650 100 L 50 50 1 1 I
X GND 38 700 750 100 L 50 50 1 1 w
X VSYS 39 700 850 100 L 50 50 1 1 U
X GPIO2 4 -700 650 100 R 50 50 1 1 O
X VBUS 40 700 950 100 L 50 50 1 1 U
X GPIO3 5 -700 550 100 R 50 50 1 1 O
X SDA 6 -700 450 100 R 50 50 1 1 B
X SCL 7 -700 350 100 R 50 50 1 1 O
X GND 8 -700 250 100 R 50 50 1 1 W
X GPIO6 9 -700 150 100 R 50 50 1 1 O
ENDDRAW
ENDDEF
#
#End Library

View File

File diff suppressed because it is too large Load Diff

View File

File diff suppressed because it is too large Load Diff

BIN
kicad/stepper_analyzer.pdf Normal file
View File

Binary file not shown.

BIN
kicad/stepper_analyzer.png Normal file
View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 KiB

260
kicad/stepper_analyzer.pro Normal file
View File

@@ -0,0 +1,260 @@
update=5/21/2021 9:59:05 PM
version=1
last_client=kicad
[general]
version=1
RootSch=
BoardNm=
[cvpcb]
version=1
NetIExt=net
[eeschema]
version=1
LibDir=
[eeschema/libraries]
[schematic_editor]
version=1
PageLayoutDescrFile=
PlotDirectoryName=
SubpartIdSeparator=0
SubpartFirstId=65
NetFmtName=Pcbnew
SpiceAjustPassiveValues=0
LabSize=50
ERC_TestSimilarLabels=1
[pcbnew]
version=1
PageLayoutDescrFile=
LastNetListRead=
CopperLayerCount=2
BoardThickness=1.6
AllowMicroVias=0
AllowBlindVias=0
RequireCourtyardDefinitions=0
ProhibitOverlappingCourtyards=1
MinTrackWidth=0.2032
MinViaDiameter=0.4064
MinViaDrill=0.3048
MinMicroViaDiameter=0.2032
MinMicroViaDrill=0.1016
MinHoleToHole=0.254
TrackWidth1=0.2032
TrackWidth2=0.2032
TrackWidth3=0.2286
TrackWidth4=0.3048
TrackWidth5=0.4064
TrackWidth6=0.508
TrackWidth7=0.6096
TrackWidth8=0.762
TrackWidth9=1.016
TrackWidth10=1.27
TrackWidth11=1.524
ViaDiameter1=0.7874
ViaDrill1=0.4064
ViaDiameter2=1.27
ViaDrill2=0.762
dPairWidth1=0.2032
dPairGap1=0.254
dPairViaGap1=0.25
SilkLineWidth=0.12
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.05
CourtyardLineWidth=0.05
OthersLineWidth=0.15
OthersTextSizeV=1
OthersTextSizeH=1
OthersTextSizeThickness=0.15
OthersTextItalic=0
OthersTextUpright=1
SolderMaskClearance=0
SolderMaskMinWidth=0
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=0
[pcbnew/Layer.In2.Cu]
Name=In2.Cu
Type=0
Enabled=0
[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.127
TrackWidth=0.2032
ViaDiameter=0.7874
ViaDrill=0.4064
uViaDiameter=0.3048
uViaDrill=0.1016
dPairWidth=0.2032
dPairGap=0.254
dPairViaGap=0.25

1311
kicad/stepper_analyzer.sch Normal file
View File

File diff suppressed because it is too large Load Diff

View File

File diff suppressed because it is too large Load Diff

535484
kicad/stepper_analyzer.step Normal file
View File

File diff suppressed because it is too large Load Diff

View File

Binary file not shown.

View File

@@ -0,0 +1,3 @@
EESchema-DOCLIB Version 2.0
#
#End Doc Library

View File

@@ -0,0 +1,3 @@
EESchema-DOCLIB Version 2.0
#
#End Doc Library

View File

@@ -0,0 +1,467 @@
EESchema-LIBRARY Version 2.4
#encoding utf-8
#
# +3V3
#
DEF +3V3 #PWR 0 0 Y Y 1 F P
F0 "#PWR" 250 0 50 H I C CNN
F1 "+3V3" 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 -30 50 30 50 N
P 2 0 1 0 0 0 0 50 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
#
# ACS70331
#
DEF ACS70331 U 0 20 Y Y 1 F N
F0 "U" 400 250 50 H V L CNN
F1 "ACS70331" 150 350 50 H V L CNN
F2 "Sensor_Current:Allegro_QFN-12-10-1EP_3x3mm_P0.5mm" 400 -50 50 H I L CIN
F3 "" 0 0 50 H I C CNN
$FPLIST
Allegro*QFN*EP*3x3mm*P0.5mm*
$ENDFPLIST
DRAW
S -500 300 300 -300 0 1 10 f
P 2 0 1 0 -300 300 -300 -300 N
X + 1 -600 150 100 R 50 50 1 1 P
X VCC 10 -50 400 100 D 50 50 1 1 W
X - 2 -600 -150 100 R 50 50 1 1 P
X GND 3 -200 -400 100 U 50 50 1 1 W
X NC 4 -100 -400 100 U 50 50 1 1 P
X NC 5 400 -100 100 L 50 50 1 1 N
X NC 6 0 -400 100 U 50 50 1 1 P
X NC 7 100 -400 100 U 50 50 1 1 P
X VIOUT 8 400 100 100 L 50 50 1 1 O
X NC 9 200 -400 100 U 50 50 1 1 P
ENDDRAW
ENDDEF
#
# ACS70331_soic8
#
DEF ACS70331_soic8 U 0 20 Y Y 1 F N
F0 "U" 400 250 50 H V L CNN
F1 "ACS70331_soic8" 150 350 50 H V L CNN
F2 "Sensor_Current:Allegro_QFN-12-10-1EP_3x3mm_P0.5mm" 400 -50 50 H I L CIN
F3 "" 0 0 50 H I C CNN
$FPLIST
Allegro*QFN*EP*3x3mm*P0.5mm*
$ENDFPLIST
DRAW
S -500 300 300 -300 0 1 10 f
P 2 0 1 0 -300 300 -300 -300 N
X + 1 -600 200 100 R 50 50 1 1 P
X + 2 -600 100 100 R 50 50 1 1 P
X - 3 -600 -100 100 R 50 50 1 1 P
X - 4 -600 -200 100 R 50 50 1 1 P
X GND 5 -50 -400 100 U 50 50 1 1 W
X NC 6 400 -100 100 L 50 50 1 1 N
X VIOUT 7 400 100 100 L 50 50 1 1 O
X VCC 8 -50 400 100 D 50 50 1 1 W
ENDDRAW
ENDDEF
#
# Connector_Conn_01x04_Male
#
DEF Connector_Conn_01x04_Male J 0 40 Y N 1 F N
F0 "J" 0 200 50 H V C CNN
F1 "Connector_Conn_01x04_Male" 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 34 -195 0 -205 1 1 6 F
S 34 -95 0 -105 1 1 6 F
S 34 5 0 -5 1 1 6 F
S 34 105 0 95 1 1 6 F
P 2 1 1 6 50 -200 34 -200 N
P 2 1 1 6 50 -100 34 -100 N
P 2 1 1 6 50 0 34 0 N
P 2 1 1 6 50 100 34 100 N
X Pin_1 1 200 100 150 L 50 50 1 1 P
X Pin_2 2 200 0 150 L 50 50 1 1 P
X Pin_3 3 200 -100 150 L 50 50 1 1 P
X Pin_4 4 200 -200 150 L 50 50 1 1 P
ENDDRAW
ENDDEF
#
# Connector_Conn_01x40_Female
#
DEF Connector_Conn_01x40_Female J 0 40 Y N 1 F N
F0 "J" 0 2000 50 H V C CNN
F1 "Connector_Conn_01x40_Female" 0 -2100 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
A 0 -2000 20 901 -901 1 1 6 N 0 -1980 0 -2020
A 0 -1900 20 901 -901 1 1 6 N 0 -1880 0 -1920
A 0 -1800 20 901 -901 1 1 6 N 0 -1780 0 -1820
A 0 -1700 20 901 -901 1 1 6 N 0 -1680 0 -1720
A 0 -1600 20 901 -901 1 1 6 N 0 -1580 0 -1620
A 0 -1500 20 901 -901 1 1 6 N 0 -1480 0 -1520
A 0 -1400 20 901 -901 1 1 6 N 0 -1380 0 -1420
A 0 -1300 20 901 -901 1 1 6 N 0 -1280 0 -1320
A 0 -1200 20 901 -901 1 1 6 N 0 -1180 0 -1220
A 0 -1100 20 901 -901 1 1 6 N 0 -1080 0 -1120
A 0 -1000 20 901 -901 1 1 6 N 0 -980 0 -1020
A 0 -900 20 901 -901 1 1 6 N 0 -880 0 -920
A 0 -800 20 901 -901 1 1 6 N 0 -780 0 -820
A 0 -700 20 901 -901 1 1 6 N 0 -680 0 -720
A 0 -600 20 901 -901 1 1 6 N 0 -580 0 -620
A 0 -500 20 901 -901 1 1 6 N 0 -480 0 -520
A 0 -400 20 901 -901 1 1 6 N 0 -380 0 -420
A 0 -300 20 901 -901 1 1 6 N 0 -280 0 -320
A 0 -200 20 901 -901 1 1 6 N 0 -180 0 -220
A 0 -100 20 901 -901 1 1 6 N 0 -80 0 -120
A 0 0 20 901 -901 1 1 6 N 0 20 0 -20
A 0 100 20 901 -901 1 1 6 N 0 120 0 80
A 0 200 20 901 -901 1 1 6 N 0 220 0 180
A 0 300 20 901 -901 1 1 6 N 0 320 0 280
A 0 400 20 901 -901 1 1 6 N 0 420 0 380
A 0 500 20 901 -901 1 1 6 N 0 520 0 480
A 0 600 20 901 -901 1 1 6 N 0 620 0 580
A 0 700 20 901 -901 1 1 6 N 0 720 0 680
A 0 800 20 901 -901 1 1 6 N 0 820 0 780
A 0 900 20 901 -901 1 1 6 N 0 920 0 880
A 0 1000 20 901 -901 1 1 6 N 0 1020 0 980
A 0 1100 20 901 -901 1 1 6 N 0 1120 0 1080
A 0 1200 20 901 -901 1 1 6 N 0 1220 0 1180
A 0 1300 20 901 -901 1 1 6 N 0 1320 0 1280
A 0 1400 20 901 -901 1 1 6 N 0 1420 0 1380
A 0 1500 20 901 -901 1 1 6 N 0 1520 0 1480
A 0 1600 20 901 -901 1 1 6 N 0 1620 0 1580
A 0 1700 20 901 -901 1 1 6 N 0 1720 0 1680
A 0 1800 20 901 -901 1 1 6 N 0 1820 0 1780
A 0 1900 20 901 -901 1 1 6 N 0 1920 0 1880
P 2 1 1 6 -50 -2000 -20 -2000 N
P 2 1 1 6 -50 -1900 -20 -1900 N
P 2 1 1 6 -50 -1800 -20 -1800 N
P 2 1 1 6 -50 -1700 -20 -1700 N
P 2 1 1 6 -50 -1600 -20 -1600 N
P 2 1 1 6 -50 -1500 -20 -1500 N
P 2 1 1 6 -50 -1400 -20 -1400 N
P 2 1 1 6 -50 -1300 -20 -1300 N
P 2 1 1 6 -50 -1200 -20 -1200 N
P 2 1 1 6 -50 -1100 -20 -1100 N
P 2 1 1 6 -50 -1000 -20 -1000 N
P 2 1 1 6 -50 -900 -20 -900 N
P 2 1 1 6 -50 -800 -20 -800 N
P 2 1 1 6 -50 -700 -20 -700 N
P 2 1 1 6 -50 -600 -20 -600 N
P 2 1 1 6 -50 -500 -20 -500 N
P 2 1 1 6 -50 -400 -20 -400 N
P 2 1 1 6 -50 -300 -20 -300 N
P 2 1 1 6 -50 -200 -20 -200 N
P 2 1 1 6 -50 -100 -20 -100 N
P 2 1 1 6 -50 0 -20 0 N
P 2 1 1 6 -50 100 -20 100 N
P 2 1 1 6 -50 200 -20 200 N
P 2 1 1 6 -50 300 -20 300 N
P 2 1 1 6 -50 400 -20 400 N
P 2 1 1 6 -50 500 -20 500 N
P 2 1 1 6 -50 600 -20 600 N
P 2 1 1 6 -50 700 -20 700 N
P 2 1 1 6 -50 800 -20 800 N
P 2 1 1 6 -50 900 -20 900 N
P 2 1 1 6 -50 1000 -20 1000 N
P 2 1 1 6 -50 1100 -20 1100 N
P 2 1 1 6 -50 1200 -20 1200 N
P 2 1 1 6 -50 1300 -20 1300 N
P 2 1 1 6 -50 1400 -20 1400 N
P 2 1 1 6 -50 1500 -20 1500 N
P 2 1 1 6 -50 1600 -20 1600 N
P 2 1 1 6 -50 1700 -20 1700 N
P 2 1 1 6 -50 1800 -20 1800 N
P 2 1 1 6 -50 1900 -20 1900 N
X Pin_1 1 -200 1900 150 R 50 50 1 1 P
X Pin_10 10 -200 1000 150 R 50 50 1 1 P
X Pin_11 11 -200 900 150 R 50 50 1 1 P
X Pin_12 12 -200 800 150 R 50 50 1 1 P
X Pin_13 13 -200 700 150 R 50 50 1 1 P
X Pin_14 14 -200 600 150 R 50 50 1 1 P
X Pin_15 15 -200 500 150 R 50 50 1 1 P
X Pin_16 16 -200 400 150 R 50 50 1 1 P
X Pin_17 17 -200 300 150 R 50 50 1 1 P
X Pin_18 18 -200 200 150 R 50 50 1 1 P
X Pin_19 19 -200 100 150 R 50 50 1 1 P
X Pin_2 2 -200 1800 150 R 50 50 1 1 P
X Pin_20 20 -200 0 150 R 50 50 1 1 P
X Pin_21 21 -200 -100 150 R 50 50 1 1 P
X Pin_22 22 -200 -200 150 R 50 50 1 1 P
X Pin_23 23 -200 -300 150 R 50 50 1 1 P
X Pin_24 24 -200 -400 150 R 50 50 1 1 P
X Pin_25 25 -200 -500 150 R 50 50 1 1 P
X Pin_26 26 -200 -600 150 R 50 50 1 1 P
X Pin_27 27 -200 -700 150 R 50 50 1 1 P
X Pin_28 28 -200 -800 150 R 50 50 1 1 P
X Pin_29 29 -200 -900 150 R 50 50 1 1 P
X Pin_3 3 -200 1700 150 R 50 50 1 1 P
X Pin_30 30 -200 -1000 150 R 50 50 1 1 P
X Pin_31 31 -200 -1100 150 R 50 50 1 1 P
X Pin_32 32 -200 -1200 150 R 50 50 1 1 P
X Pin_33 33 -200 -1300 150 R 50 50 1 1 P
X Pin_34 34 -200 -1400 150 R 50 50 1 1 P
X Pin_35 35 -200 -1500 150 R 50 50 1 1 P
X Pin_36 36 -200 -1600 150 R 50 50 1 1 P
X Pin_37 37 -200 -1700 150 R 50 50 1 1 P
X Pin_38 38 -200 -1800 150 R 50 50 1 1 P
X Pin_39 39 -200 -1900 150 R 50 50 1 1 P
X Pin_4 4 -200 1600 150 R 50 50 1 1 P
X Pin_40 40 -200 -2000 150 R 50 50 1 1 P
X Pin_5 5 -200 1500 150 R 50 50 1 1 P
X Pin_6 6 -200 1400 150 R 50 50 1 1 P
X Pin_7 7 -200 1300 150 R 50 50 1 1 P
X Pin_8 8 -200 1200 150 R 50 50 1 1 P
X Pin_9 9 -200 1100 150 R 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_R_Small_US
#
DEF Device_R_Small_US R 0 10 N N 1 F N
F0 "R" 30 20 50 H V L CNN
F1 "Device_R_Small_US" 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
P 5 1 1 0 0 0 40 -15 0 -30 -40 -45 0 -60 N
P 5 1 1 0 0 60 40 45 0 30 -40 15 0 0 N
X ~ 1 0 100 40 D 50 50 1 1 P
X ~ 2 0 -100 40 U 50 50 1 1 P
ENDDRAW
ENDDEF
#
# LED
#
DEF LED D 0 40 N N 1 F N
F0 "D" 0 100 50 H V C CNN
F1 "LED" 0 -100 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
LED*
LED_SMD:*
LED_THT:*
$ENDFPLIST
DRAW
P 2 0 1 8 -50 -50 -50 50 N
P 2 0 1 0 -50 0 50 0 N
P 4 0 1 8 50 -50 50 50 -50 0 50 -50 N
P 5 0 1 0 -120 -30 -180 -90 -150 -90 -180 -90 -180 -60 N
P 5 0 1 0 -70 -30 -130 -90 -100 -90 -130 -90 -130 -60 N
X K 1 -150 0 100 R 50 50 1 1 P
X A 2 150 0 100 L 50 50 1 1 P
ENDDRAW
ENDDEF
#
# Motor
#
DEF Motor M 0 0 Y N 1 F N
F0 "M" 50 400 50 H I L CNN
F1 "Motor" -100 350 50 H I L TNN
F2 "" 10 90 50 H I C CNN
F3 "" 10 90 50 H I C CNN
$FPLIST
PinHeader*P2.54mm*Vertical*
TerminalBlock*
Motor*
$ENDFPLIST
DRAW
A -75 -75 25 1 1799 0 1 0 N -50 -75 -100 -75
A -25 -75 25 1 1799 0 1 0 N 0 -75 -50 -75
A 25 -75 25 1 1799 0 1 0 N 50 -75 0 -75
A 75 -75 25 1 1799 0 1 0 N 100 -75 50 -75
A 175 25 25 901 -901 0 1 0 N 175 50 175 0
A 175 75 25 901 -901 0 1 0 N 175 100 175 50
A 175 125 25 901 -901 0 1 0 N 175 150 175 100
A 175 175 25 901 -901 0 1 0 N 175 200 175 150
C 0 100 128 0 1 10 N
P 2 0 0 0 200 0 200 -100 N
P 5 0 0 0 -50 30 -50 180 0 80 50 180 50 30 N
P 2 0 1 0 -100 -100 -100 -75 N
P 2 0 1 0 100 -100 100 -250 N
P 2 0 1 0 100 -100 100 -75 N
P 2 0 1 0 200 -100 200 -250 N
P 2 0 1 0 200 0 175 0 N
P 2 0 1 0 200 200 175 200 N
P 3 0 1 0 300 -250 300 200 200 200 N
P 4 0 1 0 0 -250 0 -150 -100 -150 -100 -100 N
ENDDRAW
ENDDEF
#
# Pico
#
DEF Pico U 0 40 Y Y 1 F N
F0 "U" -550 1100 50 H V C CNN
F1 "Pico" 0 750 50 H V C CNN
F2 "RPi_Pico:RPi_Pico_SMD_TH" 0 0 50 V I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 0 850 50 0 0 0 "Raspberry Pi" Normal 0 C C
S -600 1050 600 -1050 0 1 0 f
X GP0 1 -700 950 100 R 50 50 1 1 O
X GP7 10 -700 50 100 R 50 50 1 1 O
X GP8 11 -700 -50 100 R 50 50 1 1 O
X GP9 12 -700 -150 100 R 50 50 1 1 O
X GND 13 -700 -250 100 R 50 50 1 1 W
X GP10 14 -700 -350 100 R 50 50 1 1 O
X GP11 15 -700 -450 100 R 50 50 1 1 O
X GP12 16 -700 -550 100 R 50 50 1 1 O
X GP13 17 -700 -650 100 R 50 50 1 1 O
X GND 18 -700 -750 100 R 50 50 1 1 W
X GP14 19 -700 -850 100 R 50 50 1 1 O
X GP1 2 -700 850 100 R 50 50 1 1 O
X GP15 20 -700 -950 100 R 50 50 1 1 O
X GP16 21 700 -950 100 L 50 50 1 1 O
X GP17 22 700 -850 100 L 50 50 1 1 O
X GND 23 700 -750 100 L 50 50 1 1 W
X GP18 24 700 -650 100 L 50 50 1 1 O
X GP19 25 700 -550 100 L 50 50 1 1 O
X GP20 26 700 -450 100 L 50 50 1 1 O
X GP21 27 700 -350 100 L 50 50 1 1 O
X GND 28 700 -250 100 L 50 50 1 1 W
X GP22 29 700 -150 100 L 50 50 1 1 O
X GND 3 -700 750 100 R 50 50 1 1 W
X RUN 30 700 -50 100 L 50 50 1 1 I
X ADC0 31 700 50 100 L 50 50 1 1 I
X ADC1 32 700 150 100 L 50 50 1 1 I
X AGND 33 700 250 100 L 50 50 1 1 W
X GP28 34 700 350 100 L 50 50 1 1 O
X ADC_VREF 35 700 450 100 L 50 50 1 1 U
X 3V3 36 700 550 100 L 50 50 1 1 w
X 3V3_EN 37 700 650 100 L 50 50 1 1 I
X GND 38 700 750 100 L 50 50 1 1 w
X VSYS 39 700 850 100 L 50 50 1 1 U
X GP2 4 -700 650 100 R 50 50 1 1 O
X VBUS 40 700 950 100 L 50 50 1 1 U
X GP3 5 -700 550 100 R 50 50 1 1 O
X SDA 6 -700 450 100 R 50 50 1 1 B
X SCL 7 -700 350 100 R 50 50 1 1 O
X GND 8 -700 250 100 R 50 50 1 1 W
X GP6 9 -700 150 100 R 50 50 1 1 O
ENDDRAW
ENDDEF
#
# TestPoint
#
DEF TestPoint TP 0 30 N N 1 F N
F0 "TP" 0 270 50 H V C CNN
F1 "TestPoint" 0 200 50 H V C CNN
F2 "" 200 0 50 H I C CNN
F3 "" 200 0 50 H I C CNN
$FPLIST
Pin*
Test*
$ENDFPLIST
DRAW
C 0 130 30 0 1 0 N
X 1 1 0 0 100 U 50 50 1 1 P
ENDDRAW
ENDDEF
#
# local_3V3D
#
DEF local_3V3D #PWR 0 0 Y Y 1 F P
F0 "#PWR" 0 -150 50 H I C CNN
F1 "local_3V3D" 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 -30 50 30 50 N
P 2 0 1 0 0 0 0 50 N
P 2 0 1 0 0 100 30 50 N
X +3V3D 1 0 0 0 U 50 50 1 1 W N
ENDDRAW
ENDDEF
#
# local_ACS70331
#
DEF local_ACS70331 U 0 20 Y Y 1 F N
F0 "U" 400 250 50 H V L CNN
F1 "local_ACS70331" 150 350 50 H V L CNN
F2 "Sensor_Current:Allegro_QFN-12-10-1EP_3x3mm_P0.5mm" 400 -50 50 H I L CIN
F3 "" 0 0 50 H I C CNN
$FPLIST
Allegro*QFN*EP*3x3mm*P0.5mm*
$ENDFPLIST
DRAW
S -500 300 300 -300 0 1 10 f
P 2 0 1 0 -300 300 -300 -300 N
X + 1 -600 150 100 R 50 50 1 1 P
X VCC 10 -50 400 100 D 50 50 1 1 W
X - 2 -600 -150 100 R 50 50 1 1 P
X GND 3 -200 -400 100 U 50 50 1 1 W
X NC 4 -100 -400 100 U 50 50 1 1 P
X NC 5 400 -100 100 L 50 50 1 1 N
X NC 6 0 -400 100 U 50 50 1 1 P
X NC 7 100 -400 100 U 50 50 1 1 P
X VIOUT 8 400 100 100 L 50 50 1 1 O
X NC 9 200 -400 100 U 50 50 1 1 P
ENDDRAW
ENDDEF
#
# local_GND
#
DEF local_GND #PWR 0 0 Y Y 1 F P
F0 "#PWR" 0 -250 50 H I C CNN
F1 "local_GND" 0 -125 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
S -50 -60 50 -80 0 1 10 F
P 2 0 1 0 0 0 0 -60 N
X GNDD 1 0 0 0 D 50 50 1 1 W N
ENDDRAW
ENDDEF
#
# switch
#
DEF switch SW 0 40 N N 1 F N
F0 "SW" 50 100 50 H V L CNN
F1 "switch" 0 -60 50 H V C CNN
F2 "" 0 200 50 H I C CNN
F3 "" 0 200 50 H I C CNN
DRAW
C -80 0 20 0 1 0 N
C 80 0 20 0 1 0 N
P 2 0 1 0 0 50 0 120 N
P 2 0 1 0 100 50 -100 50 N
X 1 1 -200 0 100 R 50 50 0 1 P
X 2 2 200 0 100 L 50 50 0 1 P
ENDDRAW
ENDDEF
#
#End Library

View File

@@ -0,0 +1,52 @@
(module Allegro_QFN-12-10-1EP_3x3mm_P0.5mm (layer F.Cu) (tedit 5DB900DB)
(descr "Allegro Microsystems 12-Lead (10-Lead Populated) Quad Flat Pack, 3x3mm Body, 0.5mm Pitch (http://www.allegromicro.com/~/media/Files/Datasheets/ACS711-Datasheet.ashx)")
(tags "Allegro QFN 0.5")
(attr smd)
(fp_text reference REF** (at 0 -2.8) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value Allegro_QFN-12-10-1EP_3x3mm_P0.5mm (at 0 2.8) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -2.11 -2.13) (end -2.11 2.13) (layer F.CrtYd) (width 0.05))
(fp_line (start 2.11 -2.13) (end -2.11 -2.13) (layer F.CrtYd) (width 0.05))
(fp_line (start 2.11 2.13) (end 2.11 -2.13) (layer F.CrtYd) (width 0.05))
(fp_line (start -2.11 2.13) (end 2.11 2.13) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.42 -0.5) (end -0.42 -1.5) (layer F.Fab) (width 0.1))
(fp_line (start -1.42 1.5) (end -1.42 -0.5) (layer F.Fab) (width 0.1))
(fp_line (start 1.58 1.5) (end -1.42 1.5) (layer F.Fab) (width 0.1))
(fp_line (start 1.58 -1.5) (end 1.58 1.5) (layer F.Fab) (width 0.1))
(fp_line (start -0.42 -1.5) (end 1.58 -1.5) (layer F.Fab) (width 0.1))
(fp_line (start 1.7 -1.62) (end 1.7 -1.25) (layer F.SilkS) (width 0.12))
(fp_line (start 1.7 1.25) (end 1.7 1.62) (layer F.SilkS) (width 0.12))
(fp_line (start -1.54 1.25) (end -1.54 1.62) (layer F.SilkS) (width 0.12))
(fp_line (start -1.54 -1.62) (end -1.54 -1.25) (layer F.SilkS) (width 0.12))
(fp_line (start -1.54 -1.62) (end -0.25 -1.62) (layer F.SilkS) (width 0.12))
(fp_line (start -1.54 1.62) (end -0.25 1.62) (layer F.SilkS) (width 0.12))
(fp_line (start 1.7 -1.62) (end 1.2 -1.62) (layer F.SilkS) (width 0.12))
(fp_line (start 1.7 1.62) (end 1.2 1.62) (layer F.SilkS) (width 0.12))
(fp_line (start -1.54 -1.25) (end -1.8 -1.25) (layer F.SilkS) (width 0.12))
(fp_circle (center -2.667 -1.524) (end -2.447 -1.524) (layer F.SilkS) (width 0.4))
(fp_text user %R (at 0 0) (layer F.Fab)
(effects (font (size 0.7 0.7) (thickness 0.1)))
)
(pad 10 smd roundrect (at 0.23 -1.85) (size 0.3 1.65) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25))
(pad 9 smd roundrect (at 0.73 -1.85) (size 0.3 1.65) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25))
(pad 3 smd roundrect (at 0.23 1.85) (size 0.3 1.65) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25))
(pad 4 smd roundrect (at 0.73 1.85) (size 0.3 1.65) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25))
(pad 5 smd roundrect (at 1.83 0.75) (size 1.65 0.3) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25))
(pad 6 smd roundrect (at 1.83 0.25) (size 1.65 0.3) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25))
(pad 7 smd roundrect (at 1.83 -0.25) (size 1.65 0.3) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25))
(pad 8 smd roundrect (at 1.83 -0.75) (size 1.65 0.3) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25))
(pad 1 smd rect (at -1.72 -0.5) (size 1.87 0.8) (layers F.Cu F.Paste F.Mask Eco1.User))
(pad 1 smd rect (at -0.685 -0.4) (size 0.2 0.6) (layers F.Cu F.Paste F.Mask))
(pad 1 smd rect (at -0.785 -0.7 45) (size 0.2828 0.2828) (layers F.Cu F.Paste F.Mask))
(pad 2 smd rect (at -1.72 0.5) (size 1.87 0.8) (layers F.Cu F.Paste F.Mask))
(pad 2 smd rect (at -0.685 0.4) (size 0.2 0.6) (layers F.Cu F.Paste F.Mask))
(pad 2 smd rect (at -0.785 0.7 45) (size 0.2828 0.2828) (layers F.Cu F.Paste F.Mask))
(model ${KISYS3DMOD}/Sensor_Current.3dshapes/Allegro_QFN-12-10-1EP_3x3mm_P0.5mm.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)

View File

@@ -0,0 +1,31 @@
(module C_0805_2012Metric_Pad1.15x1.40mm_HandSolder (layer F.Cu) (tedit 5B36C52B)
(descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator")
(tags "capacitor handsolder")
(attr smd)
(fp_text reference REF** (at 0 -1.65) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value C_0805_2012Metric_Pad1.15x1.40mm_HandSolder (at 0 1.65) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start 1.85 0.95) (end -1.85 0.95) (layer F.CrtYd) (width 0.05))
(fp_line (start 1.85 -0.95) (end 1.85 0.95) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.85 -0.95) (end 1.85 -0.95) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.85 0.95) (end -1.85 -0.95) (layer F.CrtYd) (width 0.05))
(fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer F.SilkS) (width 0.12))
(fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer F.SilkS) (width 0.12))
(fp_line (start 1 0.6) (end -1 0.6) (layer F.Fab) (width 0.1))
(fp_line (start 1 -0.6) (end 1 0.6) (layer F.Fab) (width 0.1))
(fp_line (start -1 -0.6) (end 1 -0.6) (layer F.Fab) (width 0.1))
(fp_line (start -1 0.6) (end -1 -0.6) (layer F.Fab) (width 0.1))
(fp_text user %R (at 0 0) (layer F.Fab)
(effects (font (size 0.5 0.5) (thickness 0.08)))
)
(pad 1 smd roundrect (at -1.025 0) (size 1.15 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.217391))
(pad 2 smd roundrect (at 1.025 0) (size 1.15 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.217391))
(model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)

View File

@@ -0,0 +1,26 @@
(module C_0805_2012Metric_Pad1.15x1.40mm_HandSolder_no_3d (layer F.Cu) (tedit 60B3138C)
(descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator")
(tags "capacitor handsolder")
(attr smd)
(fp_text reference REF** (at 0 -1.65) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value C_0805_2012Metric_Pad1.15x1.40mm_HandSolder_no_3d (at 0 1.65) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -1 0.6) (end -1 -0.6) (layer F.Fab) (width 0.1))
(fp_line (start -1 -0.6) (end 1 -0.6) (layer F.Fab) (width 0.1))
(fp_line (start 1 -0.6) (end 1 0.6) (layer F.Fab) (width 0.1))
(fp_line (start 1 0.6) (end -1 0.6) (layer F.Fab) (width 0.1))
(fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer F.SilkS) (width 0.12))
(fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer F.SilkS) (width 0.12))
(fp_line (start -1.85 0.95) (end -1.85 -0.95) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.85 -0.95) (end 1.85 -0.95) (layer F.CrtYd) (width 0.05))
(fp_line (start 1.85 -0.95) (end 1.85 0.95) (layer F.CrtYd) (width 0.05))
(fp_line (start 1.85 0.95) (end -1.85 0.95) (layer F.CrtYd) (width 0.05))
(fp_text user %R (at 0 0) (layer F.Fab)
(effects (font (size 0.5 0.5) (thickness 0.08)))
)
(pad 1 smd roundrect (at -1.025 0) (size 1.15 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.217391))
(pad 2 smd roundrect (at 1.025 0) (size 1.15 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.217391))
)

View File

@@ -0,0 +1,38 @@
(module D_SMA (layer F.Cu) (tedit 586432E5)
(descr "Diode SMA (DO-214AC)")
(tags "Diode SMA (DO-214AC)")
(attr smd)
(fp_text reference REF** (at 0 -2.5) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value D_SMA (at 0 2.6) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -3.4 -1.65) (end 2 -1.65) (layer F.SilkS) (width 0.12))
(fp_line (start -3.4 1.65) (end 2 1.65) (layer F.SilkS) (width 0.12))
(fp_line (start -0.64944 0.00102) (end 0.50118 -0.79908) (layer F.Fab) (width 0.1))
(fp_line (start -0.64944 0.00102) (end 0.50118 0.75032) (layer F.Fab) (width 0.1))
(fp_line (start 0.50118 0.75032) (end 0.50118 -0.79908) (layer F.Fab) (width 0.1))
(fp_line (start -0.64944 -0.79908) (end -0.64944 0.80112) (layer F.Fab) (width 0.1))
(fp_line (start 0.50118 0.00102) (end 1.4994 0.00102) (layer F.Fab) (width 0.1))
(fp_line (start -0.64944 0.00102) (end -1.55114 0.00102) (layer F.Fab) (width 0.1))
(fp_line (start -3.5 1.75) (end -3.5 -1.75) (layer F.CrtYd) (width 0.05))
(fp_line (start 3.5 1.75) (end -3.5 1.75) (layer F.CrtYd) (width 0.05))
(fp_line (start 3.5 -1.75) (end 3.5 1.75) (layer F.CrtYd) (width 0.05))
(fp_line (start -3.5 -1.75) (end 3.5 -1.75) (layer F.CrtYd) (width 0.05))
(fp_line (start 2.3 -1.5) (end -2.3 -1.5) (layer F.Fab) (width 0.1))
(fp_line (start 2.3 -1.5) (end 2.3 1.5) (layer F.Fab) (width 0.1))
(fp_line (start -2.3 1.5) (end -2.3 -1.5) (layer F.Fab) (width 0.1))
(fp_line (start 2.3 1.5) (end -2.3 1.5) (layer F.Fab) (width 0.1))
(fp_line (start -3.4 -1.65) (end -3.4 1.65) (layer F.SilkS) (width 0.12))
(fp_text user %R (at 0 -2.5) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(pad 1 smd rect (at -2 0) (size 2.5 1.8) (layers F.Cu F.Paste F.Mask))
(pad 2 smd rect (at 2 0) (size 2.5 1.8) (layers F.Cu F.Paste F.Mask))
(model ${KISYS3DMOD}/Diode_SMD.3dshapes/D_SMA.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)

View File

@@ -0,0 +1,34 @@
(module D_SOD-123_no_3d (layer F.Cu) (tedit 60B31398)
(descr SOD-123)
(tags SOD-123)
(attr smd)
(fp_text reference REF** (at 0 -2) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value D_SOD-123_no_3d (at 0 2.1) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -2.25 -1) (end -2.25 1) (layer F.SilkS) (width 0.12))
(fp_line (start 0.25 0) (end 0.75 0) (layer F.Fab) (width 0.1))
(fp_line (start 0.25 0.4) (end -0.35 0) (layer F.Fab) (width 0.1))
(fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.Fab) (width 0.1))
(fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.Fab) (width 0.1))
(fp_line (start -0.35 0) (end -0.35 0.55) (layer F.Fab) (width 0.1))
(fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.Fab) (width 0.1))
(fp_line (start -0.75 0) (end -0.35 0) (layer F.Fab) (width 0.1))
(fp_line (start -1.4 0.9) (end -1.4 -0.9) (layer F.Fab) (width 0.1))
(fp_line (start 1.4 0.9) (end -1.4 0.9) (layer F.Fab) (width 0.1))
(fp_line (start 1.4 -0.9) (end 1.4 0.9) (layer F.Fab) (width 0.1))
(fp_line (start -1.4 -0.9) (end 1.4 -0.9) (layer F.Fab) (width 0.1))
(fp_line (start -2.35 -1.15) (end 2.35 -1.15) (layer F.CrtYd) (width 0.05))
(fp_line (start 2.35 -1.15) (end 2.35 1.15) (layer F.CrtYd) (width 0.05))
(fp_line (start 2.35 1.15) (end -2.35 1.15) (layer F.CrtYd) (width 0.05))
(fp_line (start -2.35 -1.15) (end -2.35 1.15) (layer F.CrtYd) (width 0.05))
(fp_line (start -2.25 1) (end 1.65 1) (layer F.SilkS) (width 0.12))
(fp_line (start -2.25 -1) (end 1.65 -1) (layer F.SilkS) (width 0.12))
(fp_text user %R (at 0 -2) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(pad 1 smd rect (at -1.65 0) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask))
(pad 2 smd rect (at 1.65 0) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask))
)

View File

@@ -0,0 +1,38 @@
(module D_SOD-323_HandSoldering (layer F.Cu) (tedit 609F639D)
(descr SOD-323)
(tags SOD-323)
(attr smd)
(fp_text reference REF** (at 0 -1.85) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value D_SOD-323_HandSoldering (at 0.1 1.9) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -1.9 -0.85) (end -1.9 0.85) (layer F.SilkS) (width 0.12))
(fp_line (start 0.2 0) (end 0.45 0) (layer F.SilkS) (width 0.1))
(fp_line (start 0.2 0.35) (end -0.3 0) (layer F.SilkS) (width 0.1))
(fp_line (start 0.2 -0.35) (end 0.2 0.35) (layer F.SilkS) (width 0.1))
(fp_line (start -0.3 0) (end 0.2 -0.35) (layer F.SilkS) (width 0.1))
(fp_line (start -0.3 0) (end -0.5 0) (layer F.SilkS) (width 0.1))
(fp_line (start -0.3 -0.35) (end -0.3 0.35) (layer F.SilkS) (width 0.1))
(fp_line (start -0.9 0.7) (end -0.9 -0.7) (layer F.Fab) (width 0.1))
(fp_line (start 0.9 0.7) (end -0.9 0.7) (layer F.Fab) (width 0.1))
(fp_line (start 0.9 -0.7) (end 0.9 0.7) (layer F.Fab) (width 0.1))
(fp_line (start -0.9 -0.7) (end 0.9 -0.7) (layer F.Fab) (width 0.1))
(fp_line (start -2 -0.95) (end 2 -0.95) (layer F.CrtYd) (width 0.05))
(fp_line (start 2 -0.95) (end 2 0.95) (layer F.CrtYd) (width 0.05))
(fp_line (start -2 0.95) (end 2 0.95) (layer F.CrtYd) (width 0.05))
(fp_line (start -2 -0.95) (end -2 0.95) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.9 0.85) (end 1.25 0.85) (layer F.SilkS) (width 0.12))
(fp_line (start -1.9 -0.85) (end 1.25 -0.85) (layer F.SilkS) (width 0.12))
(fp_text user %R (at 0 -1.85) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(pad 1 smd rect (at -1.25 0) (size 1 1) (layers F.Cu F.Paste F.Mask))
(pad 2 smd rect (at 1.25 0) (size 1 1) (layers F.Cu F.Paste F.Mask))
(model ${KISYS3DMOD}/Diode_SMD.3dshapes/D_SOD-323.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)

View File

@@ -0,0 +1,86 @@
(module Hirose_FH12-40S-0.5SH_1x40-1MP_P0.50mm_Horizontal_flipped (layer F.Cu) (tedit 60A9D366)
(descr "Hirose FH12, FFC/FPC connector, FH12-40S-0.5SH, 40 Pins per row (https://www.hirose.com/product/en/products/FH12/FH12-24S-0.5SH(55)/), generated with kicad-footprint-generator")
(tags "connector Hirose FH12 horizontal")
(attr smd)
(fp_text reference FPC1 (at 0 -3.7) (layer B.Fab)
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
)
(fp_text value FPC_40P_0.5mm (at 0 5.6) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start 13.05 -3) (end -13.05 -3) (layer F.CrtYd) (width 0.05))
(fp_line (start 13.05 4.9) (end 13.05 -3) (layer F.CrtYd) (width 0.05))
(fp_line (start -13.05 4.9) (end 13.05 4.9) (layer F.CrtYd) (width 0.05))
(fp_line (start -13.05 -3) (end -13.05 4.9) (layer F.CrtYd) (width 0.05))
(fp_line (start 11.65 4.5) (end 11.65 2.76) (layer F.SilkS) (width 0.12))
(fp_line (start -11.65 4.5) (end 11.65 4.5) (layer F.SilkS) (width 0.12))
(fp_line (start -11.65 2.76) (end -11.65 4.5) (layer F.SilkS) (width 0.12))
(fp_line (start 11.65 -1.3) (end 11.65 0.04) (layer F.SilkS) (width 0.12))
(fp_line (start 10.16 -1.3) (end 11.65 -1.3) (layer F.SilkS) (width 0.12))
(fp_line (start -11.65 -1.3) (end -11.65 0.04) (layer F.SilkS) (width 0.12))
(fp_line (start -10.16 -1.3) (end -11.65 -1.3) (layer F.SilkS) (width 0.12))
(fp_line (start 11.45 4.4) (end 0 4.4) (layer F.Fab) (width 0.1))
(fp_line (start 11.45 3.7) (end 11.45 4.4) (layer F.Fab) (width 0.1))
(fp_line (start 10.95 3.7) (end 11.45 3.7) (layer F.Fab) (width 0.1))
(fp_line (start 10.95 3.4) (end 10.95 3.7) (layer F.Fab) (width 0.1))
(fp_line (start 11.55 3.4) (end 10.95 3.4) (layer F.Fab) (width 0.1))
(fp_line (start 11.55 -1.2) (end 11.55 3.4) (layer F.Fab) (width 0.1))
(fp_line (start 0 -1.2) (end 11.55 -1.2) (layer F.Fab) (width 0.1))
(fp_line (start -11.45 4.4) (end 0 4.4) (layer F.Fab) (width 0.1))
(fp_line (start -11.45 3.7) (end -11.45 4.4) (layer F.Fab) (width 0.1))
(fp_line (start -10.95 3.7) (end -11.45 3.7) (layer F.Fab) (width 0.1))
(fp_line (start -10.95 3.4) (end -10.95 3.7) (layer F.Fab) (width 0.1))
(fp_line (start -11.55 3.4) (end -10.95 3.4) (layer F.Fab) (width 0.1))
(fp_line (start -11.55 -1.2) (end -11.55 3.4) (layer F.Fab) (width 0.1))
(fp_line (start 0 -1.2) (end -11.55 -1.2) (layer F.Fab) (width 0.1))
(fp_text user %R (at 0 3.7) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(pad 1 smd rect (at 9.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 2 smd rect (at 9.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 3 smd rect (at 8.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 4 smd rect (at 8.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 5 smd rect (at 7.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 6 smd rect (at 7.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 7 smd rect (at 6.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 8 smd rect (at 6.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 9 smd rect (at 5.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 10 smd rect (at 5.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 11 smd rect (at 4.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 12 smd rect (at 4.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 13 smd rect (at 3.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 14 smd rect (at 3.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 15 smd rect (at 2.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 16 smd rect (at 2.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 17 smd rect (at 1.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 18 smd rect (at 1.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 19 smd rect (at 0.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 20 smd rect (at 0.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 21 smd rect (at -0.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 22 smd rect (at -0.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 23 smd rect (at -1.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 24 smd rect (at -1.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 25 smd rect (at -2.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 26 smd rect (at -2.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 27 smd rect (at -3.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 28 smd rect (at -3.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 29 smd rect (at -4.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 30 smd rect (at -4.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 31 smd rect (at -5.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 32 smd rect (at -5.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 33 smd rect (at -6.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 34 smd rect (at -6.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 35 smd rect (at -7.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 36 smd rect (at -7.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 37 smd rect (at -8.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 38 smd rect (at -8.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 39 smd rect (at -9.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 40 smd rect (at -9.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad MP smd rect (at -11.65 1.4) (size 1.8 2.2) (layers F.Cu F.Paste F.Mask))
(pad MP smd rect (at 11.65 1.4) (size 1.8 2.2) (layers F.Cu F.Paste F.Mask))
(model ${KIPRJMOD}/models/molex_fpc_40_05_5051104091.step
(offset (xyz 0 0.5 0))
(scale (xyz 1 1 1))
(rotate (xyz -90 0 0))
)
)

View File

@@ -0,0 +1,55 @@
(module Hirose_FH12-6S-0.5SH_1x06-1MP_P0.50mm_Horizontal (layer F.Cu) (tedit 60ADD83F)
(descr "Hirose FH12, FFC/FPC connector, FH12-6S-0.5SH, 6 Pins per row (https://www.hirose.com/product/en/products/FH12/FH12-24S-0.5SH(55)/), generated with kicad-footprint-generator")
(tags "connector Hirose FH12 horizontal")
(attr smd)
(fp_text reference REF** (at 0 -3.7) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value Hirose_FH12-6S-0.5SH_1x06-1MP_P0.50mm_Horizontal (at 0 5.6) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start 4.55 -3) (end -4.55 -3) (layer F.CrtYd) (width 0.05))
(fp_line (start 4.55 4.9) (end 4.55 -3) (layer F.CrtYd) (width 0.05))
(fp_line (start -4.55 4.9) (end 4.55 4.9) (layer F.CrtYd) (width 0.05))
(fp_line (start -4.55 -3) (end -4.55 4.9) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.25 -0.492893) (end -0.75 -1.2) (layer F.Fab) (width 0.1))
(fp_line (start -1.75 -1.2) (end -1.25 -0.492893) (layer F.Fab) (width 0.1))
(fp_line (start -1.66 -1.3) (end -1.66 -2.5) (layer F.SilkS) (width 0.12))
(fp_line (start 3.15 4.5) (end 3.15 2.76) (layer F.SilkS) (width 0.12))
(fp_line (start -3.15 4.5) (end 3.15 4.5) (layer F.SilkS) (width 0.12))
(fp_line (start -3.15 2.76) (end -3.15 4.5) (layer F.SilkS) (width 0.12))
(fp_line (start 3.15 -1.3) (end 3.15 0.04) (layer F.SilkS) (width 0.12))
(fp_line (start 1.66 -1.3) (end 3.15 -1.3) (layer F.SilkS) (width 0.12))
(fp_line (start -3.15 -1.3) (end -3.15 0.04) (layer F.SilkS) (width 0.12))
(fp_line (start -1.66 -1.3) (end -3.15 -1.3) (layer F.SilkS) (width 0.12))
(fp_line (start 2.95 4.4) (end 0 4.4) (layer F.Fab) (width 0.1))
(fp_line (start 2.95 3.7) (end 2.95 4.4) (layer F.Fab) (width 0.1))
(fp_line (start 2.45 3.7) (end 2.95 3.7) (layer F.Fab) (width 0.1))
(fp_line (start 2.45 3.4) (end 2.45 3.7) (layer F.Fab) (width 0.1))
(fp_line (start 3.05 3.4) (end 2.45 3.4) (layer F.Fab) (width 0.1))
(fp_line (start 3.05 -1.2) (end 3.05 3.4) (layer F.Fab) (width 0.1))
(fp_line (start 0 -1.2) (end 3.05 -1.2) (layer F.Fab) (width 0.1))
(fp_line (start -2.95 4.4) (end 0 4.4) (layer F.Fab) (width 0.1))
(fp_line (start -2.95 3.7) (end -2.95 4.4) (layer F.Fab) (width 0.1))
(fp_line (start -2.45 3.7) (end -2.95 3.7) (layer F.Fab) (width 0.1))
(fp_line (start -2.45 3.4) (end -2.45 3.7) (layer F.Fab) (width 0.1))
(fp_line (start -3.05 3.4) (end -2.45 3.4) (layer F.Fab) (width 0.1))
(fp_line (start -3.05 -1.2) (end -3.05 3.4) (layer F.Fab) (width 0.1))
(fp_line (start 0 -1.2) (end -3.05 -1.2) (layer F.Fab) (width 0.1))
(fp_text user %R (at 0 3.7) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(pad MP smd rect (at 3.15 1.4) (size 1.8 2.2) (layers F.Cu F.Paste F.Mask))
(pad MP smd rect (at -3.15 1.4) (size 1.8 2.2) (layers F.Cu F.Paste F.Mask))
(pad 1 smd rect (at -1.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 2 smd rect (at -0.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 3 smd rect (at -0.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 4 smd rect (at 0.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 5 smd rect (at 0.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 6 smd rect (at 1.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(model ${KIPRJMOD}/models/molex_fpc_6_05_527450633.step
(offset (xyz 0 0.6 0))
(scale (xyz 1 1 1))
(rotate (xyz -90 0 0))
)
)

View File

@@ -0,0 +1,54 @@
(module Hirose_FH12-6S-0.5SH_1x06-1MP_P0.50mm_Horizontal_flippped (layer F.Cu) (tedit 60A9D71D)
(descr "Hirose FH12, FFC/FPC connector, FH12-6S-0.5SH, 6 Pins per row (https://www.hirose.com/product/en/products/FH12/FH12-24S-0.5SH(55)/), generated with kicad-footprint-generator")
(tags "connector Hirose FH12 horizontal")
(attr smd)
(fp_text reference REF** (at 0 -3.7) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value Hirose_FH12-6S-0.5SH_1x06-1MP_P0.50mm_Horizontal_flippped (at 0 5.6) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start 4.55 -3) (end -4.55 -3) (layer F.CrtYd) (width 0.05))
(fp_line (start 4.55 4.9) (end 4.55 -3) (layer F.CrtYd) (width 0.05))
(fp_line (start -4.55 4.9) (end 4.55 4.9) (layer F.CrtYd) (width 0.05))
(fp_line (start -4.55 -3) (end -4.55 4.9) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.25 -0.492893) (end -0.75 -1.2) (layer F.Fab) (width 0.1))
(fp_line (start -1.75 -1.2) (end -1.25 -0.492893) (layer F.Fab) (width 0.1))
(fp_line (start 3.15 4.5) (end 3.15 2.76) (layer F.SilkS) (width 0.12))
(fp_line (start -3.15 4.5) (end 3.15 4.5) (layer F.SilkS) (width 0.12))
(fp_line (start -3.15 2.76) (end -3.15 4.5) (layer F.SilkS) (width 0.12))
(fp_line (start 3.15 -1.3) (end 3.15 0.04) (layer F.SilkS) (width 0.12))
(fp_line (start 1.66 -1.3) (end 3.15 -1.3) (layer F.SilkS) (width 0.12))
(fp_line (start -3.15 -1.3) (end -3.15 0.04) (layer F.SilkS) (width 0.12))
(fp_line (start -1.66 -1.3) (end -3.15 -1.3) (layer F.SilkS) (width 0.12))
(fp_line (start 2.95 4.4) (end 0 4.4) (layer F.Fab) (width 0.1))
(fp_line (start 2.95 3.7) (end 2.95 4.4) (layer F.Fab) (width 0.1))
(fp_line (start 2.45 3.7) (end 2.95 3.7) (layer F.Fab) (width 0.1))
(fp_line (start 2.45 3.4) (end 2.45 3.7) (layer F.Fab) (width 0.1))
(fp_line (start 3.05 3.4) (end 2.45 3.4) (layer F.Fab) (width 0.1))
(fp_line (start 3.05 -1.2) (end 3.05 3.4) (layer F.Fab) (width 0.1))
(fp_line (start 0 -1.2) (end 3.05 -1.2) (layer F.Fab) (width 0.1))
(fp_line (start -2.95 4.4) (end 0 4.4) (layer F.Fab) (width 0.1))
(fp_line (start -2.95 3.7) (end -2.95 4.4) (layer F.Fab) (width 0.1))
(fp_line (start -2.45 3.7) (end -2.95 3.7) (layer F.Fab) (width 0.1))
(fp_line (start -2.45 3.4) (end -2.45 3.7) (layer F.Fab) (width 0.1))
(fp_line (start -3.05 3.4) (end -2.45 3.4) (layer F.Fab) (width 0.1))
(fp_line (start -3.05 -1.2) (end -3.05 3.4) (layer F.Fab) (width 0.1))
(fp_line (start 0 -1.2) (end -3.05 -1.2) (layer F.Fab) (width 0.1))
(fp_text user %R (at 0 3.7) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(pad MP smd rect (at 3.15 1.4) (size 1.8 2.2) (layers F.Cu F.Paste F.Mask))
(pad MP smd rect (at -3.15 1.4) (size 1.8 2.2) (layers F.Cu F.Paste F.Mask))
(pad 6 smd rect (at -1.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 5 smd rect (at -0.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 4 smd rect (at -0.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 3 smd rect (at 0.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 2 smd rect (at 0.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 1 smd rect (at 1.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(model ${KIPRJMOD}/models/molex_fpc_6_05_527450633.step
(offset (xyz 0 0.8 0))
(scale (xyz 1 1 1))
(rotate (xyz -90 0 0))
)
)

View File

@@ -0,0 +1,55 @@
(module JUSHUO-AFC01-S06FCC-00_6p_05mm (layer F.Cu) (tedit 60B460CA)
(descr "Hirose FH12, FFC/FPC connector, FH12-6S-0.5SH, 6 Pins per row (https://www.hirose.com/product/en/products/FH12/FH12-24S-0.5SH(55)/), generated with kicad-footprint-generator")
(tags "connector Hirose FH12 horizontal")
(attr smd)
(fp_text reference REF** (at 0 -3.7) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value JUSHUO-AFC01-S06FCC-00_6p_05mm (at 0 5.6) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start 4.55 -3) (end -4.55 -3) (layer F.CrtYd) (width 0.05))
(fp_line (start 4.55 4.9) (end 4.55 -3) (layer F.CrtYd) (width 0.05))
(fp_line (start -4.55 4.9) (end 4.55 4.9) (layer F.CrtYd) (width 0.05))
(fp_line (start -4.55 -3) (end -4.55 4.9) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.25 -0.492893) (end -0.75 -1.2) (layer F.Fab) (width 0.1))
(fp_line (start -1.75 -1.2) (end -1.25 -0.492893) (layer F.Fab) (width 0.1))
(fp_line (start -1.66 -1.3) (end -1.66 -2.5) (layer F.SilkS) (width 0.12))
(fp_line (start 3.15 4.5) (end 3.15 2.76) (layer F.SilkS) (width 0.12))
(fp_line (start -3.15 4.5) (end 3.15 4.5) (layer F.SilkS) (width 0.12))
(fp_line (start -3.15 2.76) (end -3.15 4.5) (layer F.SilkS) (width 0.12))
(fp_line (start 3.15 -1.3) (end 3.15 0.04) (layer F.SilkS) (width 0.12))
(fp_line (start 1.66 -1.3) (end 3.15 -1.3) (layer F.SilkS) (width 0.12))
(fp_line (start -3.15 -1.3) (end -3.15 0.04) (layer F.SilkS) (width 0.12))
(fp_line (start -1.66 -1.3) (end -3.15 -1.3) (layer F.SilkS) (width 0.12))
(fp_line (start 2.95 4.4) (end 0 4.4) (layer F.Fab) (width 0.1))
(fp_line (start 2.95 3.7) (end 2.95 4.4) (layer F.Fab) (width 0.1))
(fp_line (start 2.45 3.7) (end 2.95 3.7) (layer F.Fab) (width 0.1))
(fp_line (start 2.45 3.4) (end 2.45 3.7) (layer F.Fab) (width 0.1))
(fp_line (start 3.05 3.4) (end 2.45 3.4) (layer F.Fab) (width 0.1))
(fp_line (start 3.05 -1.2) (end 3.05 3.4) (layer F.Fab) (width 0.1))
(fp_line (start 0 -1.2) (end 3.05 -1.2) (layer F.Fab) (width 0.1))
(fp_line (start -2.95 4.4) (end 0 4.4) (layer F.Fab) (width 0.1))
(fp_line (start -2.95 3.7) (end -2.95 4.4) (layer F.Fab) (width 0.1))
(fp_line (start -2.45 3.7) (end -2.95 3.7) (layer F.Fab) (width 0.1))
(fp_line (start -2.45 3.4) (end -2.45 3.7) (layer F.Fab) (width 0.1))
(fp_line (start -3.05 3.4) (end -2.45 3.4) (layer F.Fab) (width 0.1))
(fp_line (start -3.05 -1.2) (end -3.05 3.4) (layer F.Fab) (width 0.1))
(fp_line (start 0 -1.2) (end -3.05 -1.2) (layer F.Fab) (width 0.1))
(fp_text user %R (at 0 3.7) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(pad MP smd rect (at 3.15 0.65) (size 1.8 2.2) (layers F.Cu F.Paste F.Mask))
(pad MP smd rect (at -3.15 0.65) (size 1.8 2.2) (layers F.Cu F.Paste F.Mask))
(pad 1 smd rect (at -1.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 2 smd rect (at -0.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 3 smd rect (at -0.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 4 smd rect (at 0.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 5 smd rect (at 0.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 6 smd rect (at 1.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(model ${KIPRJMOD}/models/molex_fpc_6_05_527450633.step
(offset (xyz 0 0.6 0))
(scale (xyz 1 1 1))
(rotate (xyz -90 0 0))
)
)

View File

@@ -0,0 +1,86 @@
(module JUSHUO-AFC07-S40ECC-00_40P_05mm_flipped (layer F.Cu) (tedit 60B45BC0)
(descr "Hirose FH12, FFC/FPC connector, FH12-40S-0.5SH, 40 Pins per row (https://www.hirose.com/product/en/products/FH12/FH12-24S-0.5SH(55)/), generated with kicad-footprint-generator")
(tags "connector Hirose FH12 horizontal")
(attr smd)
(fp_text reference FPC1 (at 0 -3.7) (layer B.Fab)
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
)
(fp_text value FPC_40P_0.5mm (at 0 5.6) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start 13.05 -3) (end -13.05 -3) (layer F.CrtYd) (width 0.05))
(fp_line (start 13.05 4.9) (end 13.05 -3) (layer F.CrtYd) (width 0.05))
(fp_line (start -13.05 4.9) (end 13.05 4.9) (layer F.CrtYd) (width 0.05))
(fp_line (start -13.05 -3) (end -13.05 4.9) (layer F.CrtYd) (width 0.05))
(fp_line (start 11.65 4.5) (end 11.65 2.76) (layer F.SilkS) (width 0.12))
(fp_line (start -11.65 4.5) (end 11.65 4.5) (layer F.SilkS) (width 0.12))
(fp_line (start -11.65 2.76) (end -11.65 4.5) (layer F.SilkS) (width 0.12))
(fp_line (start 11.65 -1.3) (end 11.65 0.04) (layer F.SilkS) (width 0.12))
(fp_line (start 10.16 -1.3) (end 11.65 -1.3) (layer F.SilkS) (width 0.12))
(fp_line (start -11.65 -1.3) (end -11.65 0.04) (layer F.SilkS) (width 0.12))
(fp_line (start -10.16 -1.3) (end -11.65 -1.3) (layer F.SilkS) (width 0.12))
(fp_line (start 11.45 4.4) (end 0 4.4) (layer F.Fab) (width 0.1))
(fp_line (start 11.45 3.7) (end 11.45 4.4) (layer F.Fab) (width 0.1))
(fp_line (start 10.95 3.7) (end 11.45 3.7) (layer F.Fab) (width 0.1))
(fp_line (start 10.95 3.4) (end 10.95 3.7) (layer F.Fab) (width 0.1))
(fp_line (start 11.55 3.4) (end 10.95 3.4) (layer F.Fab) (width 0.1))
(fp_line (start 11.55 -1.2) (end 11.55 3.4) (layer F.Fab) (width 0.1))
(fp_line (start 0 -1.2) (end 11.55 -1.2) (layer F.Fab) (width 0.1))
(fp_line (start -11.45 4.4) (end 0 4.4) (layer F.Fab) (width 0.1))
(fp_line (start -11.45 3.7) (end -11.45 4.4) (layer F.Fab) (width 0.1))
(fp_line (start -10.95 3.7) (end -11.45 3.7) (layer F.Fab) (width 0.1))
(fp_line (start -10.95 3.4) (end -10.95 3.7) (layer F.Fab) (width 0.1))
(fp_line (start -11.55 3.4) (end -10.95 3.4) (layer F.Fab) (width 0.1))
(fp_line (start -11.55 -1.2) (end -11.55 3.4) (layer F.Fab) (width 0.1))
(fp_line (start 0 -1.2) (end -11.55 -1.2) (layer F.Fab) (width 0.1))
(fp_text user %R (at 0 3.7) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(pad 1 smd rect (at 9.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 2 smd rect (at 9.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 3 smd rect (at 8.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 4 smd rect (at 8.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 5 smd rect (at 7.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 6 smd rect (at 7.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 7 smd rect (at 6.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 8 smd rect (at 6.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 9 smd rect (at 5.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 10 smd rect (at 5.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 11 smd rect (at 4.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 12 smd rect (at 4.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 13 smd rect (at 3.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 14 smd rect (at 3.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 15 smd rect (at 2.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 16 smd rect (at 2.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 17 smd rect (at 1.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 18 smd rect (at 1.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 19 smd rect (at 0.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 20 smd rect (at 0.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 21 smd rect (at -0.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 22 smd rect (at -0.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 23 smd rect (at -1.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 24 smd rect (at -1.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 25 smd rect (at -2.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 26 smd rect (at -2.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 27 smd rect (at -3.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 28 smd rect (at -3.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 29 smd rect (at -4.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 30 smd rect (at -4.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 31 smd rect (at -5.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 32 smd rect (at -5.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 33 smd rect (at -6.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 34 smd rect (at -6.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 35 smd rect (at -7.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 36 smd rect (at -7.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 37 smd rect (at -8.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 38 smd rect (at -8.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 39 smd rect (at -9.25 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad 40 smd rect (at -9.75 -1.85) (size 0.3 1.3) (layers F.Cu F.Paste F.Mask))
(pad MP smd rect (at -11.4 0.5) (size 2 3) (layers F.Cu F.Paste F.Mask))
(pad MP smd rect (at 11.4 0.5) (size 2 3) (layers F.Cu F.Paste F.Mask))
(model ${KIPRJMOD}/models/molex_fpc_40_05_5051104091.step
(offset (xyz 0 0.5 0))
(scale (xyz 1 1 1))
(rotate (xyz -90 0 0))
)
)

View File

@@ -0,0 +1,33 @@
(module LED_0805_2012Metric_Pad1.15x1.40mm_HandSolder (layer F.Cu) (tedit 5F68FEF1)
(descr "LED SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator")
(tags "LED handsolder")
(attr smd)
(fp_text reference REF** (at 0 -1.65) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value LED_0805_2012Metric_Pad1.15x1.40mm_HandSolder (at 0 1.65) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start 1.85 0.95) (end -1.85 0.95) (layer F.CrtYd) (width 0.05))
(fp_line (start 1.85 -0.95) (end 1.85 0.95) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.85 -0.95) (end 1.85 -0.95) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.85 0.95) (end -1.85 -0.95) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.86 0.96) (end 1 0.96) (layer F.SilkS) (width 0.12))
(fp_line (start -1.86 -0.96) (end -1.86 0.96) (layer F.SilkS) (width 0.12))
(fp_line (start 1 -0.96) (end -1.86 -0.96) (layer F.SilkS) (width 0.12))
(fp_line (start 1 0.6) (end 1 -0.6) (layer F.Fab) (width 0.1))
(fp_line (start -1 0.6) (end 1 0.6) (layer F.Fab) (width 0.1))
(fp_line (start -1 -0.3) (end -1 0.6) (layer F.Fab) (width 0.1))
(fp_line (start -0.7 -0.6) (end -1 -0.3) (layer F.Fab) (width 0.1))
(fp_line (start 1 -0.6) (end -0.7 -0.6) (layer F.Fab) (width 0.1))
(fp_text user %R (at 0 0) (layer F.Fab)
(effects (font (size 0.5 0.5) (thickness 0.08)))
)
(pad 1 smd roundrect (at -1.025 0) (size 1.15 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.217391))
(pad 2 smd roundrect (at 1.025 0) (size 1.15 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.217391))
(model ${KISYS3DMOD}/LED_SMD.3dshapes/LED_0805_2012Metric.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)

View File

@@ -0,0 +1,36 @@
(module LED_0805_2012Metric_Pad1.15x1.40mm_HandSolder_double_side (layer F.Cu) (tedit 60A87930)
(descr "LED SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator")
(tags "LED handsolder")
(attr smd)
(fp_text reference REF** (at 0 -1.65) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value LED_0805_2012Metric_Pad1.15x1.40mm_HandSolder_double_side (at 0 1.65) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start 1.85 0.95) (end -1.85 0.95) (layer F.CrtYd) (width 0.05))
(fp_line (start 1.85 -0.95) (end 1.85 0.95) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.85 -0.95) (end 1.85 -0.95) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.85 0.95) (end -1.85 -0.95) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.86 0.96) (end 1 0.96) (layer F.SilkS) (width 0.12))
(fp_line (start -1.86 -0.96) (end -1.86 0.96) (layer F.SilkS) (width 0.12))
(fp_line (start 1 -0.96) (end -1.86 -0.96) (layer F.SilkS) (width 0.12))
(fp_line (start 1 0.6) (end 1 -0.6) (layer F.Fab) (width 0.1))
(fp_line (start -1 0.6) (end 1 0.6) (layer F.Fab) (width 0.1))
(fp_line (start -1 -0.3) (end -1 0.6) (layer F.Fab) (width 0.1))
(fp_line (start -0.7 -0.6) (end -1 -0.3) (layer F.Fab) (width 0.1))
(fp_line (start 1 -0.6) (end -0.7 -0.6) (layer F.Fab) (width 0.1))
(fp_text user %R (at 0 0) (layer F.Fab)
(effects (font (size 0.5 0.5) (thickness 0.08)))
)
(fp_line (start 1 -0.96) (end -1.86 -0.96) (layer B.SilkS) (width 0.12))
(fp_line (start -1.86 -0.96) (end -1.86 0.96) (layer B.SilkS) (width 0.12))
(fp_line (start -1.86 0.96) (end 1 0.96) (layer B.SilkS) (width 0.12))
(pad 1 thru_hole roundrect (at -1.025 0) (size 1.4 1.4) (drill 0.4064) (layers *.Cu *.Mask) (roundrect_rratio 0.217))
(pad 2 thru_hole roundrect (at 1.025 0) (size 1.4 1.4) (drill 0.4064) (layers *.Cu *.Mask) (roundrect_rratio 0.217))
(model ${KISYS3DMOD}/LED_SMD.3dshapes/LED_0805_2012Metric.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)

View File

@@ -0,0 +1,31 @@
(module LED_0805_2012Metric_Pad1.15x1.40mm_HandSolder_double_side_no_3d (layer F.Cu) (tedit 60B3112F)
(descr "LED SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator")
(tags "LED handsolder")
(attr smd)
(fp_text reference REF** (at 0 -1.65) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value LED_0805_2012Metric_Pad1.15x1.40mm_HandSolder_double_side_no_3d (at 0 1.65) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -1.86 0.96) (end 1 0.96) (layer B.SilkS) (width 0.12))
(fp_line (start -1.86 -0.96) (end -1.86 0.96) (layer B.SilkS) (width 0.12))
(fp_line (start 1 -0.96) (end -1.86 -0.96) (layer B.SilkS) (width 0.12))
(fp_line (start 1 -0.6) (end -0.7 -0.6) (layer F.Fab) (width 0.1))
(fp_line (start -0.7 -0.6) (end -1 -0.3) (layer F.Fab) (width 0.1))
(fp_line (start -1 -0.3) (end -1 0.6) (layer F.Fab) (width 0.1))
(fp_line (start -1 0.6) (end 1 0.6) (layer F.Fab) (width 0.1))
(fp_line (start 1 0.6) (end 1 -0.6) (layer F.Fab) (width 0.1))
(fp_line (start 1 -0.96) (end -1.86 -0.96) (layer F.SilkS) (width 0.12))
(fp_line (start -1.86 -0.96) (end -1.86 0.96) (layer F.SilkS) (width 0.12))
(fp_line (start -1.86 0.96) (end 1 0.96) (layer F.SilkS) (width 0.12))
(fp_line (start -1.85 0.95) (end -1.85 -0.95) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.85 -0.95) (end 1.85 -0.95) (layer F.CrtYd) (width 0.05))
(fp_line (start 1.85 -0.95) (end 1.85 0.95) (layer F.CrtYd) (width 0.05))
(fp_line (start 1.85 0.95) (end -1.85 0.95) (layer F.CrtYd) (width 0.05))
(fp_text user %R (at 0 0) (layer F.Fab)
(effects (font (size 0.5 0.5) (thickness 0.08)))
)
(pad 1 thru_hole roundrect (at -1.025 0) (size 1.4 1.4) (drill 0.4064) (layers *.Cu *.Mask) (roundrect_rratio 0.217))
(pad 2 thru_hole roundrect (at 1.025 0) (size 1.4 1.4) (drill 0.4064) (layers *.Cu *.Mask) (roundrect_rratio 0.217))
)

View File

@@ -0,0 +1,15 @@
(module MountingHole (layer F.Cu) (tedit 600A6A73)
(descr "Mounting Hole 2.7mm, M2.5, ISO7380")
(tags "mounting hole 2.7mm m2.5 iso7380")
(attr virtual)
(fp_text reference REF** (at 0 -3.25) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value MountingHole (at 0 3.25) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text user %R (at 0.3 0) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(pad 1 thru_hole circle (at 0 0) (size 3.5 3.5) (drill 2.6) (layers *.Cu *.Mask))
)

View File

@@ -0,0 +1,297 @@
(module Pico (layer F.Cu) (tedit 609CBCC2)
(descr "Through hole straight pin header, 2x20, 2.54mm pitch, double rows")
(tags "Through hole pin header THT 2x20 2.54mm double row")
(fp_text reference REF** (at 0 0) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value Pico (at 0 2.159) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start 1.1 25.5) (end 1.5 25.5) (layer F.SilkS) (width 0.12))
(fp_line (start -1.5 25.5) (end -1.1 25.5) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 25.5) (end 3.7 25.5) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 15.1) (end 10.5 15.5) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 7.4) (end 10.5 7.8) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 -18) (end 10.5 -17.6) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 -25.5) (end 10.5 -25.2) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 -2.7) (end 10.5 -2.3) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 12.5) (end 10.5 12.9) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 -7.8) (end 10.5 -7.4) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 -12.9) (end 10.5 -12.5) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 -0.2) (end 10.5 0.2) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 4.9) (end 10.5 5.3) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 20.1) (end 10.5 20.5) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 22.7) (end 10.5 23.1) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 17.6) (end 10.5 18) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 -15.4) (end 10.5 -15) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 -23.1) (end 10.5 -22.7) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 -20.5) (end 10.5 -20.1) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 10) (end 10.5 10.4) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 2.3) (end 10.5 2.7) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 -5.3) (end 10.5 -4.9) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 -10.4) (end 10.5 -10) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 22.7) (end -10.5 23.1) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 20.1) (end -10.5 20.5) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 17.6) (end -10.5 18) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 15.1) (end -10.5 15.5) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 12.5) (end -10.5 12.9) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 10) (end -10.5 10.4) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 7.4) (end -10.5 7.8) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 4.9) (end -10.5 5.3) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 2.3) (end -10.5 2.7) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 -0.2) (end -10.5 0.2) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 -2.7) (end -10.5 -2.3) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 -5.3) (end -10.5 -4.9) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 -7.8) (end -10.5 -7.4) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 -10.4) (end -10.5 -10) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 -12.9) (end -10.5 -12.5) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 -15.4) (end -10.5 -15) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 -18) (end -10.5 -17.6) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 -20.5) (end -10.5 -20.1) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 -23.1) (end -10.5 -22.7) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 -25.5) (end -10.5 -25.2) (layer F.SilkS) (width 0.12))
(fp_line (start -7.493 -22.833) (end -7.493 -25.5) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 -22.833) (end -7.493 -22.833) (layer F.SilkS) (width 0.12))
(fp_line (start -3.7 25.5) (end -10.5 25.5) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 -25.5) (end 10.5 -25.5) (layer F.SilkS) (width 0.12))
(fp_line (start -11 26) (end -11 -26) (layer F.CrtYd) (width 0.12))
(fp_line (start 11 26) (end -11 26) (layer F.CrtYd) (width 0.12))
(fp_line (start 11 -26) (end 11 26) (layer F.CrtYd) (width 0.12))
(fp_line (start -11 -26) (end 11 -26) (layer F.CrtYd) (width 0.12))
(fp_line (start -10.5 -24.2) (end -9.2 -25.5) (layer F.Fab) (width 0.12))
(fp_line (start -10.5 25.5) (end -10.5 -25.5) (layer F.Fab) (width 0.12))
(fp_line (start 10.5 25.5) (end -10.5 25.5) (layer F.Fab) (width 0.12))
(fp_line (start 10.5 -25.5) (end 10.5 25.5) (layer F.Fab) (width 0.12))
(fp_line (start -10.5 -25.5) (end 10.5 -25.5) (layer F.Fab) (width 0.12))
(fp_poly (pts (xy -1.5 -16.5) (xy -3.5 -16.5) (xy -3.5 -18.5) (xy -1.5 -18.5)) (layer Dwgs.User) (width 0.1))
(fp_poly (pts (xy -1.5 -14) (xy -3.5 -14) (xy -3.5 -16) (xy -1.5 -16)) (layer Dwgs.User) (width 0.1))
(fp_poly (pts (xy -1.5 -11.5) (xy -3.5 -11.5) (xy -3.5 -13.5) (xy -1.5 -13.5)) (layer Dwgs.User) (width 0.1))
(fp_poly (pts (xy 3.7 -20.2) (xy -3.7 -20.2) (xy -3.7 -24.9) (xy 3.7 -24.9)) (layer Dwgs.User) (width 0.1))
(fp_text user %R (at 0 0 180) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text user GP1 (at -12.9 -21.6 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP2 (at -12.9 -16.51 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP0 (at -12.8 -24.13 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP3 (at -12.8 -13.97 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP4 (at -12.8 -11.43 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP5 (at -12.8 -8.89 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP6 (at -12.8 -3.81 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP7 (at -12.7 -1.3 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP8 (at -12.8 1.27 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP9 (at -12.8 3.81 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP10 (at -13.054 8.89 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP11 (at -13.2 11.43 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP12 (at -13.2 13.97 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP13 (at -13.054 16.51 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP14 (at -13.1 21.59 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP15 (at -13.054 24.13 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP16 (at 13.054 24.13 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP17 (at 13.054 21.59 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP18 (at 13.054 16.51 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP19 (at 13.054 13.97 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP20 (at 13.054 11.43 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP21 (at 13.054 8.9 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP22 (at 13.054 3.81 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user RUN (at 13 1.27 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP26 (at 13.054 -1.27 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP27 (at 13.054 -3.8 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP28 (at 13.054 -9.144 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user ADC_VREF (at 14 -12.5 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user 3V3 (at 12.9 -13.9 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user 3V3_EN (at 13.7 -17.2 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user VSYS (at 13.2 -21.59 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user VBUS (at 13.3 -24.2 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GND (at -12.8 -19.05 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GND (at -12.8 -6.35 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GND (at -12.8 6.35 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GND (at -12.8 19.05 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GND (at 12.8 19.05 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GND (at 12.8 6.35 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GND (at 12.8 -19.05 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user AGND (at 13.054 -6.35 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user SWCLK (at -5.7 26.2) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user SWDIO (at 5.6 26.2) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user "Copper Keepouts shown on Dwgs layer" (at 0.1 -30.2) (layer Cmts.User)
(effects (font (size 1 1) (thickness 0.15)))
)
(pad 1 thru_hole oval (at -8.89 -24.13) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 2 thru_hole oval (at -8.89 -21.59) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 3 thru_hole rect (at -8.89 -19.05) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 4 thru_hole oval (at -8.89 -16.51) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 5 thru_hole oval (at -8.89 -13.97) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 6 thru_hole oval (at -8.89 -11.43) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 7 thru_hole oval (at -8.89 -8.89) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 8 thru_hole rect (at -8.89 -6.35) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 9 thru_hole oval (at -8.89 -3.81) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 10 thru_hole oval (at -8.89 -1.27) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 11 thru_hole oval (at -8.89 1.27) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 12 thru_hole oval (at -8.89 3.81) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 13 thru_hole rect (at -8.89 6.35) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 14 thru_hole oval (at -8.89 8.89) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 15 thru_hole oval (at -8.89 11.43) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 16 thru_hole oval (at -8.89 13.97) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 17 thru_hole oval (at -8.89 16.51) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 18 thru_hole rect (at -8.89 19.05) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 19 thru_hole oval (at -8.89 21.59) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 20 thru_hole oval (at -8.89 24.13) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 21 thru_hole oval (at 8.89 24.13) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 22 thru_hole oval (at 8.89 21.59) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 23 thru_hole rect (at 8.89 19.05) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 24 thru_hole oval (at 8.89 16.51) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 25 thru_hole oval (at 8.89 13.97) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 26 thru_hole oval (at 8.89 11.43) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 27 thru_hole oval (at 8.89 8.89) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 28 thru_hole rect (at 8.89 6.35) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 29 thru_hole oval (at 8.89 3.81) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 30 thru_hole oval (at 8.89 1.27) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 31 thru_hole oval (at 8.89 -1.27) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 32 thru_hole oval (at 8.89 -3.81) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 33 thru_hole rect (at 8.89 -6.35) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 34 thru_hole oval (at 8.89 -8.89) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 35 thru_hole oval (at 8.89 -11.43) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 36 thru_hole oval (at 8.89 -13.97) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 37 thru_hole oval (at 8.89 -16.51) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 38 thru_hole rect (at 8.89 -19.05) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 39 thru_hole oval (at 8.89 -21.59) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 40 thru_hole oval (at 8.89 -24.13) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 1 smd rect (at -8.89 -24.13) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 2 smd rect (at -8.89 -21.59) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 3 smd rect (at -8.89 -19.05) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 4 smd rect (at -8.89 -16.51) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 5 smd rect (at -8.89 -13.97) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 6 smd rect (at -8.89 -11.43) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 7 smd rect (at -8.89 -8.89) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 8 smd rect (at -8.89 -6.35) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 9 smd rect (at -8.89 -3.81) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 10 smd rect (at -8.89 -1.27) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 11 smd rect (at -8.89 1.27) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 12 smd rect (at -8.89 3.81) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 13 smd rect (at -8.89 6.35) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 14 smd rect (at -8.89 8.89) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 15 smd rect (at -8.89 11.43) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 16 smd rect (at -8.89 13.97) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 17 smd rect (at -8.89 16.51) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 18 smd rect (at -8.89 19.05) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 19 smd rect (at -8.89 21.59) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 20 smd rect (at -8.89 24.13) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 40 smd rect (at 8.89 -24.13) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 39 smd rect (at 8.89 -21.59) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 38 smd rect (at 8.89 -19.05) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 37 smd rect (at 8.89 -16.51) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 36 smd rect (at 8.89 -13.97) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 35 smd rect (at 8.89 -11.43) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 34 smd rect (at 8.89 -8.89) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 33 smd rect (at 8.89 -6.35) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 32 smd rect (at 8.89 -3.81) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 31 smd rect (at 8.89 -1.27) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 30 smd rect (at 8.89 1.27) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 29 smd rect (at 8.89 3.81) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 28 smd rect (at 8.89 6.35) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 27 smd rect (at 8.89 8.89) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 26 smd rect (at 8.89 11.43) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 25 smd rect (at 8.89 13.97) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 24 smd rect (at 8.89 16.51) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 23 smd rect (at 8.89 19.05) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 22 smd rect (at 8.89 21.59) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 21 smd rect (at 8.89 24.13) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad "" np_thru_hole oval (at -2.725 -24) (size 1.8 1.8) (drill 1.8) (layers *.Cu *.Mask))
(pad "" np_thru_hole oval (at 2.725 -24) (size 1.8 1.8) (drill 1.8) (layers *.Cu *.Mask))
(pad "" np_thru_hole oval (at -2.425 -20.97) (size 1.5 1.5) (drill 1.5) (layers *.Cu *.Mask))
(pad "" np_thru_hole oval (at 2.425 -20.97) (size 1.5 1.5) (drill 1.5) (layers *.Cu *.Mask))
(pad 41 smd rect (at -2.54 23.9 90) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 41 thru_hole oval (at -2.54 23.9) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 42 smd rect (at 0 23.9 90) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 42 thru_hole rect (at 0 23.9) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(pad 43 smd rect (at 2.54 23.9 90) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 43 thru_hole oval (at 2.54 23.9) (size 1.7 1.7) (drill 1.02) (layers *.Cu *.Mask))
(model ${KIPRJMOD}/models/Pico.wrl
(offset (xyz -10.5 -25.5 0))
(scale (xyz 10 10 10))
(rotate (xyz 0 0 0))
)
)

View File

@@ -0,0 +1,263 @@
(module Pico_smd (layer F.Cu) (tedit 609F615A)
(descr "Through hole straight pin header, 2x20, 2.54mm pitch, double rows")
(tags "Through hole pin header THT 2x20 2.54mm double row")
(fp_text reference REF** (at 0 0) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value Pico_smd (at 0 2.159) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start 1.1 25.5) (end 1.5 25.5) (layer F.SilkS) (width 0.12))
(fp_line (start -1.5 25.5) (end -1.1 25.5) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 25.5) (end 3.7 25.5) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 15.1) (end 10.5 15.5) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 7.4) (end 10.5 7.8) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 -18) (end 10.5 -17.6) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 -25.5) (end 10.5 -25.2) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 -2.7) (end 10.5 -2.3) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 12.5) (end 10.5 12.9) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 -7.8) (end 10.5 -7.4) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 -12.9) (end 10.5 -12.5) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 -0.2) (end 10.5 0.2) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 4.9) (end 10.5 5.3) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 20.1) (end 10.5 20.5) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 22.7) (end 10.5 23.1) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 17.6) (end 10.5 18) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 -15.4) (end 10.5 -15) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 -23.1) (end 10.5 -22.7) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 -20.5) (end 10.5 -20.1) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 10) (end 10.5 10.4) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 2.3) (end 10.5 2.7) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 -5.3) (end 10.5 -4.9) (layer F.SilkS) (width 0.12))
(fp_line (start 10.5 -10.4) (end 10.5 -10) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 22.7) (end -10.5 23.1) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 20.1) (end -10.5 20.5) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 17.6) (end -10.5 18) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 15.1) (end -10.5 15.5) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 12.5) (end -10.5 12.9) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 10) (end -10.5 10.4) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 7.4) (end -10.5 7.8) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 4.9) (end -10.5 5.3) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 2.3) (end -10.5 2.7) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 -0.2) (end -10.5 0.2) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 -2.7) (end -10.5 -2.3) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 -5.3) (end -10.5 -4.9) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 -7.8) (end -10.5 -7.4) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 -10.4) (end -10.5 -10) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 -12.9) (end -10.5 -12.5) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 -15.4) (end -10.5 -15) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 -18) (end -10.5 -17.6) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 -20.5) (end -10.5 -20.1) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 -23.1) (end -10.5 -22.7) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 -25.5) (end -10.5 -25.2) (layer F.SilkS) (width 0.12))
(fp_line (start -7.493 -22.833) (end -7.493 -25.5) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 -22.833) (end -7.493 -22.833) (layer F.SilkS) (width 0.12))
(fp_line (start -3.7 25.5) (end -10.5 25.5) (layer F.SilkS) (width 0.12))
(fp_line (start -10.5 -25.5) (end 10.5 -25.5) (layer F.SilkS) (width 0.12))
(fp_line (start -11 26) (end -11 -26) (layer F.CrtYd) (width 0.12))
(fp_line (start 11 26) (end -11 26) (layer F.CrtYd) (width 0.12))
(fp_line (start 11 -26) (end 11 26) (layer F.CrtYd) (width 0.12))
(fp_line (start -11 -26) (end 11 -26) (layer F.CrtYd) (width 0.12))
(fp_line (start -10.5 -24.2) (end -9.2 -25.5) (layer F.Fab) (width 0.12))
(fp_line (start -10.5 25.5) (end -10.5 -25.5) (layer F.Fab) (width 0.12))
(fp_line (start 10.5 25.5) (end -10.5 25.5) (layer F.Fab) (width 0.12))
(fp_line (start 10.5 -25.5) (end 10.5 25.5) (layer F.Fab) (width 0.12))
(fp_line (start -10.5 -25.5) (end 10.5 -25.5) (layer F.Fab) (width 0.12))
(fp_poly (pts (xy -1.5 -16.5) (xy -3.5 -16.5) (xy -3.5 -18.5) (xy -1.5 -18.5)) (layer Dwgs.User) (width 0.1))
(fp_poly (pts (xy -1.5 -14) (xy -3.5 -14) (xy -3.5 -16) (xy -1.5 -16)) (layer Dwgs.User) (width 0.1))
(fp_poly (pts (xy -1.5 -11.5) (xy -3.5 -11.5) (xy -3.5 -13.5) (xy -1.5 -13.5)) (layer Dwgs.User) (width 0.1))
(fp_poly (pts (xy 3.7 -20.2) (xy -3.7 -20.2) (xy -3.7 -24.9) (xy 3.7 -24.9)) (layer Dwgs.User) (width 0.1))
(fp_text user %R (at 0 0 180) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text user GP1 (at -12.9 -21.6 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP2 (at -12.9 -16.51 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP0 (at -12.8 -24.13 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP3 (at -12.8 -13.97 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP4 (at -12.8 -11.43 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP5 (at -12.8 -8.89 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP6 (at -12.8 -3.81 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP7 (at -12.7 -1.3 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP8 (at -12.8 1.27 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP9 (at -12.8 3.81 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP10 (at -13.054 8.89 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP11 (at -13.2 11.43 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP12 (at -13.2 13.97 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP13 (at -13.054 16.51 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP14 (at -13.1 21.59 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP15 (at -13.054 24.13 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP16 (at 13.054 24.13 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP17 (at 13.054 21.59 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP18 (at 13.054 16.51 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP19 (at 13.054 13.97 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP20 (at 13.054 11.43 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP21 (at 13.054 8.9 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP22 (at 13.054 3.81 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user RUN (at 13 1.27 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP26 (at 13.054 -1.27 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP27 (at 13.054 -3.8 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GP28 (at 13.054 -9.144 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user ADC_VREF (at 14 -12.5 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user 3V3 (at 12.9 -13.9 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user 3V3_EN (at 13.7 -17.2 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user VSYS (at 13.2 -21.59 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user VBUS (at 13.3 -24.2 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GND (at -12.8 -19.05 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GND (at -12.8 -6.35 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GND (at -12.8 6.35 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GND (at -12.8 19.05 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GND (at 12.8 19.05 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GND (at 12.8 6.35 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user GND (at 12.8 -19.05 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user AGND (at 13.054 -6.35 45) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user SWCLK (at -5.7 26.2) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user SWDIO (at 5.6 26.2) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text user "Copper Keepouts shown on Dwgs layer" (at 0.1 -30.2) (layer Cmts.User)
(effects (font (size 1 1) (thickness 0.15)))
)
(pad 3 thru_hole rect (at -8.89 -19.05) (size 1.7 1.7) (drill 1.02) (layers *.Cu F.Mask))
(pad 8 thru_hole rect (at -8.89 -6.35) (size 1.7 1.7) (drill 1.02) (layers *.Cu F.Mask))
(pad 13 thru_hole rect (at -8.89 6.35) (size 1.7 1.7) (drill 1.02) (layers *.Cu F.Mask))
(pad 18 thru_hole rect (at -8.89 19.05) (size 1.7 1.7) (drill 1.02) (layers *.Cu F.Mask))
(pad 23 thru_hole rect (at 8.89 19.05) (size 1.7 1.7) (drill 1.02) (layers *.Cu F.Mask))
(pad 28 thru_hole rect (at 8.89 6.35) (size 1.7 1.7) (drill 1.02) (layers *.Cu F.Mask))
(pad 33 thru_hole rect (at 8.89 -6.35) (size 1.7 1.7) (drill 1.02) (layers *.Cu F.Mask))
(pad 38 thru_hole rect (at 8.89 -19.05) (size 1.7 1.7) (drill 1.02) (layers *.Cu F.Mask))
(pad 1 smd rect (at -8.89 -24.13) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 2 smd rect (at -8.89 -21.59) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 3 smd rect (at -8.89 -19.05) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 4 smd rect (at -8.89 -16.51) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 5 smd rect (at -8.89 -13.97) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 6 smd rect (at -8.89 -11.43) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 7 smd rect (at -8.89 -8.89) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 8 smd rect (at -8.89 -6.35) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 9 smd rect (at -8.89 -3.81) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 10 smd rect (at -8.89 -1.27) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 11 smd rect (at -8.89 1.27) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 12 smd rect (at -8.89 3.81) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 13 smd rect (at -8.89 6.35) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 14 smd rect (at -8.89 8.89) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 15 smd rect (at -8.89 11.43) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 16 smd rect (at -8.89 13.97) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 17 smd rect (at -8.89 16.51) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 18 smd rect (at -8.89 19.05) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 19 smd rect (at -8.89 21.59) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 20 smd rect (at -8.89 24.13) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 40 smd rect (at 8.89 -24.13) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 39 smd rect (at 8.89 -21.59) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 38 smd rect (at 8.89 -19.05) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 37 smd rect (at 8.89 -16.51) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 36 smd rect (at 8.89 -13.97) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 35 smd rect (at 8.89 -11.43) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 34 smd rect (at 8.89 -8.89) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 33 smd rect (at 8.89 -6.35) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 32 smd rect (at 8.89 -3.81) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 31 smd rect (at 8.89 -1.27) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 30 smd rect (at 8.89 1.27) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 29 smd rect (at 8.89 3.81) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 28 smd rect (at 8.89 6.35) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 27 smd rect (at 8.89 8.89) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 26 smd rect (at 8.89 11.43) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 25 smd rect (at 8.89 13.97) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 24 smd rect (at 8.89 16.51) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 23 smd rect (at 8.89 19.05) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 22 smd rect (at 8.89 21.59) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 21 smd rect (at 8.89 24.13) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad "" np_thru_hole oval (at -2.725 -24) (size 1.8 1.8) (drill 1.8) (layers *.Cu *.Mask))
(pad "" np_thru_hole oval (at 2.725 -24) (size 1.8 1.8) (drill 1.8) (layers *.Cu *.Mask))
(pad "" np_thru_hole oval (at -2.425 -20.97) (size 1.5 1.5) (drill 1.5) (layers *.Cu *.Mask))
(pad "" np_thru_hole oval (at 2.425 -20.97) (size 1.5 1.5) (drill 1.5) (layers *.Cu *.Mask))
(pad 41 smd rect (at -2.54 23.9 90) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 42 smd rect (at 0 23.9 90) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 42 thru_hole rect (at 0 23.9) (size 1.7 1.7) (drill 1.02) (layers *.Cu F.Mask))
(pad 43 smd rect (at 2.54 23.9 90) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(model ${KIPRJMOD}/models/Pico.wrl
(offset (xyz -10.5 -25.5 0))
(scale (xyz 10 10 10))
(rotate (xyz 0 0 0))
)
)

View File

@@ -0,0 +1,220 @@
(module Pico_smd_dedicated (layer F.Cu) (tedit 60B26676)
(descr "Through hole straight pin header, 2x20, 2.54mm pitch, double rows")
(tags "Through hole pin header THT 2x20 2.54mm double row")
(fp_text reference REF** (at -12.45 28.05) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value Pico_smd_dedicated (at 0 2.159) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_poly (pts (xy 4 27) (xy -4 27) (xy -4 22) (xy 4 22)) (layer Dwgs.User) (width 0.1))
(fp_line (start 7.55 25.55) (end 7.55 -25.5) (layer F.SilkS) (width 0.12))
(fp_line (start -7.6 25.55) (end 7.55 25.55) (layer F.SilkS) (width 0.12))
(fp_line (start -7.6 -25.5) (end -7.6 25.55) (layer F.SilkS) (width 0.12))
(fp_poly (pts (xy 3.7 -20.2) (xy -3.7 -20.2) (xy -3.7 -24.9) (xy 3.7 -24.9)) (layer Dwgs.User) (width 0.1))
(fp_poly (pts (xy -1.5 -11.5) (xy -3.5 -11.5) (xy -3.5 -13.5) (xy -1.5 -13.5)) (layer Dwgs.User) (width 0.1))
(fp_poly (pts (xy -1.5 -14) (xy -3.5 -14) (xy -3.5 -16) (xy -1.5 -16)) (layer Dwgs.User) (width 0.1))
(fp_poly (pts (xy -1.5 -16.5) (xy -3.5 -16.5) (xy -3.5 -18.5) (xy -1.5 -18.5)) (layer Dwgs.User) (width 0.1))
(fp_line (start -10.5 -25.5) (end 10.5 -25.5) (layer F.Fab) (width 0.12))
(fp_line (start 10.5 -25.5) (end 10.5 25.5) (layer F.Fab) (width 0.12))
(fp_line (start 10.5 25.5) (end -10.5 25.5) (layer F.Fab) (width 0.12))
(fp_line (start -10.5 25.5) (end -10.5 -25.5) (layer F.Fab) (width 0.12))
(fp_line (start -10.5 -24.2) (end -9.2 -25.5) (layer F.Fab) (width 0.12))
(fp_line (start -11 -26) (end 11 -26) (layer F.CrtYd) (width 0.12))
(fp_line (start 11 -26) (end 11 26) (layer F.CrtYd) (width 0.12))
(fp_line (start 11 26) (end -11 26) (layer F.CrtYd) (width 0.12))
(fp_line (start -11 26) (end -11 -26) (layer F.CrtYd) (width 0.12))
(fp_line (start -10.5 -25.5) (end 10.5 -25.5) (layer F.SilkS) (width 0.12))
(fp_text user %R (at 0 0 180) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text user ~TFT_WR (at -12 -21.59) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify right))
)
(fp_text user TFT_RST (at -12 -16.51) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify right))
)
(fp_text user TFT_DC (at -12 -24.13) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify right))
)
(fp_text user D1 (at -12 -13.97) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify right))
)
(fp_text user SDA (at -12 -11.43) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify right))
)
(fp_text user SCL (at -12 -8.89) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify right))
)
(fp_text user D2 (at -12 -3.81) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify right))
)
(fp_text user D3 (at -12 -1.27) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify right))
)
(fp_text user D4 (at -12 1.27) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify right))
)
(fp_text user D5 (at -12 3.81) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify right))
)
(fp_text user D7 (at -12 8.89) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify right))
)
(fp_text user D8 (at -12 11.43) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify right))
)
(fp_text user D10 (at -12 13.97) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify right))
)
(fp_text user D12 (at -12 16.51) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify right))
)
(fp_text user D14 (at -12 21.59) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify right))
)
(fp_text user ~TFT_BL (at -12 24.13) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify right))
)
(fp_text user LED2 (at 12 24.13) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify left))
)
(fp_text user LED1 (at 12 21.59) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify left))
)
(fp_text user D15 (at 12 16.51) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify left))
)
(fp_text user D13 (at 12 13.97) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify left))
)
(fp_text user D11 (at 12 11.43) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify left))
)
(fp_text user D9 (at 12 8.89) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify left))
)
(fp_text user D6 (at 12 3.81) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify left))
)
(fp_text user ~RESET (at 12 1.27) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify left))
)
(fp_text user CHA (at 12 -1.27) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify left))
)
(fp_text user CHB (at 12 -3.81) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify left))
)
(fp_text user D0 (at 12 -8.89) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify left))
)
(fp_text user ADC_VREF (at 12 -11.43) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify left))
)
(fp_text user 3V3 (at 12 -13.9) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify left))
)
(fp_text user 3V3_EN (at 12 -16.51) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify left))
)
(fp_text user VSYS (at 12 -21.59) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify left))
)
(fp_text user VBUS (at 12 -24.2) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify left))
)
(fp_text user G (at -12 -19.05) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify right))
)
(fp_text user G (at -12 -6.35) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify right))
)
(fp_text user G (at -12 6.35) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify right))
)
(fp_text user G (at -12 19.05) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify right))
)
(fp_text user G (at 12 19.05) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify left))
)
(fp_text user G (at 12 6.35) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify left))
)
(fp_text user G (at 12 -19.05) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify left))
)
(fp_text user AGND (at 12 -6.35) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify left))
)
(fp_text user SWCLK (at -2 27.7) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify right))
)
(fp_text user SWDIO (at 2 27.7) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify left))
)
(fp_text user "Copper Keepouts shown on Dwgs layer" (at 0.1 -30.2) (layer Cmts.User)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text user GND (at 0.05 27.7) (layer F.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(pad 3 thru_hole rect (at -8.89 -19.05) (size 1.7 1.7) (drill 0.762) (layers *.Cu F.Mask))
(pad 8 thru_hole rect (at -8.89 -6.35) (size 1.7 1.7) (drill 0.762) (layers *.Cu F.Mask))
(pad 13 thru_hole rect (at -8.89 6.35) (size 1.7 1.7) (drill 0.762) (layers *.Cu F.Mask))
(pad 18 thru_hole rect (at -8.89 19.05) (size 1.7 1.7) (drill 0.762) (layers *.Cu F.Mask))
(pad 23 thru_hole rect (at 8.89 19.05) (size 1.7 1.7) (drill 0.762) (layers *.Cu F.Mask))
(pad 28 thru_hole rect (at 8.89 6.35) (size 1.7 1.7) (drill 0.762) (layers *.Cu F.Mask))
(pad 33 thru_hole rect (at 8.89 -6.35) (size 1.7 1.7) (drill 0.762) (layers *.Cu F.Mask))
(pad 38 thru_hole rect (at 8.89 -19.05) (size 1.7 1.7) (drill 0.762) (layers *.Cu F.Mask))
(pad 1 smd rect (at -8.89 -24.13) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 2 smd rect (at -8.89 -21.59) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 3 smd rect (at -8.89 -19.05) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 4 smd rect (at -8.89 -16.51) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 5 smd rect (at -8.89 -13.97) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 6 smd rect (at -8.89 -11.43) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 7 smd rect (at -8.89 -8.89) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 8 smd rect (at -8.89 -6.35) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 9 smd rect (at -8.89 -3.81) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 10 smd rect (at -8.89 -1.27) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 11 smd rect (at -8.89 1.27) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 12 smd rect (at -8.89 3.81) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 13 smd rect (at -8.89 6.35) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 14 smd rect (at -8.89 8.89) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 15 smd rect (at -8.89 11.43) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 16 smd rect (at -8.89 13.97) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 17 smd rect (at -8.89 16.51) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 18 smd rect (at -8.89 19.05) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 19 smd rect (at -8.89 21.59) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 20 smd rect (at -8.89 24.13) (size 3.5 1.7) (drill (offset -0.9 0)) (layers F.Cu F.Mask))
(pad 40 smd rect (at 8.89 -24.13) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 39 smd rect (at 8.89 -21.59) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 38 smd rect (at 8.89 -19.05) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 37 smd rect (at 8.89 -16.51) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 36 smd rect (at 8.89 -13.97) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 35 smd rect (at 8.89 -11.43) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 34 smd rect (at 8.89 -8.89) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 33 smd rect (at 8.89 -6.35) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 32 smd rect (at 8.89 -3.81) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 31 smd rect (at 8.89 -1.27) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 30 smd rect (at 8.89 1.27) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 29 smd rect (at 8.89 3.81) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 28 smd rect (at 8.89 6.35) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 27 smd rect (at 8.89 8.89) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 26 smd rect (at 8.89 11.43) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 25 smd rect (at 8.89 13.97) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 24 smd rect (at 8.89 16.51) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 23 smd rect (at 8.89 19.05) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 22 smd rect (at 8.89 21.59) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad 21 smd rect (at 8.89 24.13) (size 3.5 1.7) (drill (offset 0.9 0)) (layers F.Cu F.Mask))
(pad "" np_thru_hole oval (at -2.725 -24) (size 1.8 1.8) (drill 1.8) (layers *.Cu *.Mask))
(pad "" np_thru_hole oval (at 2.725 -24) (size 1.8 1.8) (drill 1.8) (layers *.Cu *.Mask))
(pad "" np_thru_hole oval (at -2.425 -20.97) (size 1.5 1.5) (drill 1.5) (layers *.Cu *.Mask))
(pad "" np_thru_hole oval (at 2.425 -20.97) (size 1.5 1.5) (drill 1.5) (layers *.Cu *.Mask))
(model ${KIPRJMOD}/models/pico.step
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz -90 0 0))
)
)

View File

@@ -0,0 +1,31 @@
(module R_0805_2012Metric_Pad1.15x1.40mm_HandSolder (layer F.Cu) (tedit 5B36C52B)
(descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator")
(tags "resistor handsolder")
(attr smd)
(fp_text reference REF** (at 0 -1.65) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value R_0805_2012Metric_Pad1.15x1.40mm_HandSolder (at 0 1.65) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start 1.85 0.95) (end -1.85 0.95) (layer F.CrtYd) (width 0.05))
(fp_line (start 1.85 -0.95) (end 1.85 0.95) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.85 -0.95) (end 1.85 -0.95) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.85 0.95) (end -1.85 -0.95) (layer F.CrtYd) (width 0.05))
(fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer F.SilkS) (width 0.12))
(fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer F.SilkS) (width 0.12))
(fp_line (start 1 0.6) (end -1 0.6) (layer F.Fab) (width 0.1))
(fp_line (start 1 -0.6) (end 1 0.6) (layer F.Fab) (width 0.1))
(fp_line (start -1 -0.6) (end 1 -0.6) (layer F.Fab) (width 0.1))
(fp_line (start -1 0.6) (end -1 -0.6) (layer F.Fab) (width 0.1))
(fp_text user %R (at 0 0) (layer F.Fab)
(effects (font (size 0.5 0.5) (thickness 0.08)))
)
(pad 1 smd roundrect (at -1.025 0) (size 1.15 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.217391))
(pad 2 smd roundrect (at 1.025 0) (size 1.15 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.217391))
(model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)

View File

@@ -0,0 +1,26 @@
(module R_0805_2012Metric_Pad1.15x1.40mm_HandSolder_no_3d (layer F.Cu) (tedit 60B3129F)
(descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator")
(tags "resistor handsolder")
(attr smd)
(fp_text reference REF** (at 0 -1.65) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value R_0805_2012Metric_Pad1.15x1.40mm_HandSolder_no_3d (at 0 1.65) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start 1.85 0.95) (end -1.85 0.95) (layer F.CrtYd) (width 0.05))
(fp_line (start 1.85 -0.95) (end 1.85 0.95) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.85 -0.95) (end 1.85 -0.95) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.85 0.95) (end -1.85 -0.95) (layer F.CrtYd) (width 0.05))
(fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer F.SilkS) (width 0.12))
(fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer F.SilkS) (width 0.12))
(fp_line (start 1 0.6) (end -1 0.6) (layer F.Fab) (width 0.1))
(fp_line (start 1 -0.6) (end 1 0.6) (layer F.Fab) (width 0.1))
(fp_line (start -1 -0.6) (end 1 -0.6) (layer F.Fab) (width 0.1))
(fp_line (start -1 0.6) (end -1 -0.6) (layer F.Fab) (width 0.1))
(fp_text user %R (at 0 0) (layer F.Fab)
(effects (font (size 0.5 0.5) (thickness 0.08)))
)
(pad 1 smd roundrect (at -1.025 0) (size 1.15 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.217391))
(pad 2 smd roundrect (at 1.025 0) (size 1.15 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.217391))
)

View File

@@ -0,0 +1,41 @@
(module SOIC-8_3.9x4.9mm_P1.27mm (layer F.Cu) (tedit 60AE6DAD)
(descr "SOIC, 8 Pin (JEDEC MS-012AA, https://www.analog.com/media/en/package-pcb-resources/package/pkg_pdf/soic_narrow-r/r_8.pdf), generated with kicad-footprint-generator ipc_gullwing_generator.py")
(tags "SOIC SO")
(attr smd)
(fp_text reference REF** (at 0 -3.4) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value SOIC-8_3.9x4.9mm_P1.27mm (at 0 3.4) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start 0 2.56) (end 1.95 2.56) (layer F.SilkS) (width 0.12))
(fp_line (start 0 2.56) (end -1.95 2.56) (layer F.SilkS) (width 0.12))
(fp_line (start 0 -2.56) (end 1.95 -2.56) (layer F.SilkS) (width 0.12))
(fp_line (start 0 -2.56) (end -1.95 -2.56) (layer F.SilkS) (width 0.12))
(fp_line (start -0.975 -2.45) (end 1.95 -2.45) (layer F.Fab) (width 0.1))
(fp_line (start 1.95 -2.45) (end 1.95 2.45) (layer F.Fab) (width 0.1))
(fp_line (start 1.95 2.45) (end -1.95 2.45) (layer F.Fab) (width 0.1))
(fp_line (start -1.95 2.45) (end -1.95 -1.475) (layer F.Fab) (width 0.1))
(fp_line (start -1.95 -1.475) (end -0.975 -2.45) (layer F.Fab) (width 0.1))
(fp_line (start -3.7 -2.7) (end -3.7 2.7) (layer F.CrtYd) (width 0.05))
(fp_line (start -3.7 2.7) (end 3.7 2.7) (layer F.CrtYd) (width 0.05))
(fp_line (start 3.7 2.7) (end 3.7 -2.7) (layer F.CrtYd) (width 0.05))
(fp_line (start 3.7 -2.7) (end -3.7 -2.7) (layer F.CrtYd) (width 0.05))
(fp_text user %R (at 0 0) (layer F.Fab)
(effects (font (size 0.98 0.98) (thickness 0.15)))
)
(fp_circle (center -2.8 -3) (end -2.517157 -3) (layer F.SilkS) (width 0.35))
(pad 1 smd roundrect (at -2.475 -1.905) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25))
(pad 2 smd roundrect (at -2.475 -0.635) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25))
(pad 3 smd roundrect (at -2.475 0.635) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25))
(pad 4 smd roundrect (at -2.475 1.905) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25))
(pad 5 smd roundrect (at 2.475 1.905) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25))
(pad 6 smd roundrect (at 2.475 0.635) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25))
(pad 7 smd roundrect (at 2.475 -0.635) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25))
(pad 8 smd roundrect (at 2.475 -1.905) (size 1.95 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25))
(model ${KISYS3DMOD}/Package_SO.3dshapes/SOIC-8_3.9x4.9mm_P1.27mm.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)

View File

@@ -0,0 +1,35 @@
(module SOT-23_hand_soldering (layer F.Cu) (tedit 60A8A025)
(descr "SOT-23, Standard")
(tags SOT-23)
(attr smd)
(fp_text reference REF** (at 0 -2.5) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value SOT-23_hand_soldering (at 0 2.5) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start 0.76 1.58) (end -0.7 1.58) (layer F.SilkS) (width 0.12))
(fp_line (start 0.76 -1.58) (end -1.4 -1.58) (layer F.SilkS) (width 0.12))
(fp_line (start -1.7 1.75) (end -1.7 -1.75) (layer F.CrtYd) (width 0.05))
(fp_line (start 1.7 1.75) (end -1.7 1.75) (layer F.CrtYd) (width 0.05))
(fp_line (start 1.7 -1.75) (end 1.7 1.75) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.7 -1.75) (end 1.7 -1.75) (layer F.CrtYd) (width 0.05))
(fp_line (start 0.76 -1.58) (end 0.76 -0.65) (layer F.SilkS) (width 0.12))
(fp_line (start 0.76 1.58) (end 0.76 0.65) (layer F.SilkS) (width 0.12))
(fp_line (start -0.7 1.52) (end 0.7 1.52) (layer F.Fab) (width 0.1))
(fp_line (start 0.7 -1.52) (end 0.7 1.52) (layer F.Fab) (width 0.1))
(fp_line (start -0.7 -0.95) (end -0.15 -1.52) (layer F.Fab) (width 0.1))
(fp_line (start -0.15 -1.52) (end 0.7 -1.52) (layer F.Fab) (width 0.1))
(fp_line (start -0.7 -0.95) (end -0.7 1.5) (layer F.Fab) (width 0.1))
(fp_text user %R (at 0 0 90) (layer F.Fab)
(effects (font (size 0.5 0.5) (thickness 0.075)))
)
(pad 1 smd rect (at -1.3 -0.95) (size 1.7 0.8) (layers F.Cu F.Paste F.Mask))
(pad 2 smd rect (at -1.3 0.95) (size 1.7 0.8) (layers F.Cu F.Paste F.Mask))
(pad 3 smd rect (at 1.3 0) (size 1.7 0.8) (layers F.Cu F.Paste F.Mask))
(model ${KISYS3DMOD}/Package_TO_SOT_SMD.3dshapes/SOT-23.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)

View File

@@ -0,0 +1,36 @@
(module SW_Push_1P1T_NO_CK_KMR2 (layer F.Cu) (tedit 5A02FC95)
(descr "CK components KMR2 tactile switch http://www.ckswitches.com/media/1479/kmr2.pdf")
(tags "tactile switch kmr2")
(attr smd)
(fp_text reference REF** (at 0 -2.45) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value SW_Push_1P1T_NO_CK_KMR2 (at 0 2.55) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -2.2 0.05) (end -2.2 -0.05) (layer F.SilkS) (width 0.12))
(fp_line (start 2.2 -1.55) (end -2.2 -1.55) (layer F.SilkS) (width 0.12))
(fp_line (start -2.2 1.55) (end 2.2 1.55) (layer F.SilkS) (width 0.12))
(fp_circle (center 0 0) (end 0 0.8) (layer F.Fab) (width 0.1))
(fp_line (start -2.8 1.8) (end -2.8 -1.8) (layer F.CrtYd) (width 0.05))
(fp_line (start 2.8 1.8) (end -2.8 1.8) (layer F.CrtYd) (width 0.05))
(fp_line (start 2.8 -1.8) (end 2.8 1.8) (layer F.CrtYd) (width 0.05))
(fp_line (start -2.8 -1.8) (end 2.8 -1.8) (layer F.CrtYd) (width 0.05))
(fp_line (start 2.2 0.05) (end 2.2 -0.05) (layer F.SilkS) (width 0.12))
(fp_line (start -2.1 1.4) (end -2.1 -1.4) (layer F.Fab) (width 0.1))
(fp_line (start 2.1 1.4) (end -2.1 1.4) (layer F.Fab) (width 0.1))
(fp_line (start 2.1 -1.4) (end 2.1 1.4) (layer F.Fab) (width 0.1))
(fp_line (start -2.1 -1.4) (end 2.1 -1.4) (layer F.Fab) (width 0.1))
(fp_text user %R (at 0 -2.45) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(pad 1 smd rect (at -2.05 -0.8) (size 0.9 1) (layers F.Cu F.Paste F.Mask))
(pad 2 smd rect (at -2.05 0.8) (size 0.9 1) (layers F.Cu F.Paste F.Mask))
(pad 1 smd rect (at 2.05 -0.8) (size 0.9 1) (layers F.Cu F.Paste F.Mask))
(pad 2 smd rect (at 2.05 0.8) (size 0.9 1) (layers F.Cu F.Paste F.Mask))
(model ${KISYS3DMOD}/Button_Switch_SMD.3dshapes/SW_Push_1P1T_NO_CK_KMR2.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)

View File

@@ -0,0 +1,36 @@
(module SW_Push_1P1T_NO_CK_KMR2_double_size (layer F.Cu) (tedit 60A9DFF7)
(descr "CK components KMR2 tactile switch http://www.ckswitches.com/media/1479/kmr2.pdf")
(tags "tactile switch kmr2")
(attr smd)
(fp_text reference REF** (at 0 -2.45) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value SW_Push_1P1T_NO_CK_KMR2_double_size (at 0 2.55) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -2.2 0.05) (end -2.2 -0.05) (layer F.SilkS) (width 0.12))
(fp_line (start 2.2 -1.55) (end -2.2 -1.55) (layer F.SilkS) (width 0.12))
(fp_line (start -2.2 1.55) (end 2.2 1.55) (layer F.SilkS) (width 0.12))
(fp_circle (center 0 0) (end 0 0.8) (layer F.Fab) (width 0.1))
(fp_line (start -2.8 1.8) (end -2.8 -1.8) (layer F.CrtYd) (width 0.05))
(fp_line (start 2.8 1.8) (end -2.8 1.8) (layer F.CrtYd) (width 0.05))
(fp_line (start 2.8 -1.8) (end 2.8 1.8) (layer F.CrtYd) (width 0.05))
(fp_line (start -2.8 -1.8) (end 2.8 -1.8) (layer F.CrtYd) (width 0.05))
(fp_line (start 2.2 0.05) (end 2.2 -0.05) (layer F.SilkS) (width 0.12))
(fp_line (start -2.1 1.4) (end -2.1 -1.4) (layer F.Fab) (width 0.1))
(fp_line (start 2.1 1.4) (end -2.1 1.4) (layer F.Fab) (width 0.1))
(fp_line (start 2.1 -1.4) (end 2.1 1.4) (layer F.Fab) (width 0.1))
(fp_line (start -2.1 -1.4) (end 2.1 -1.4) (layer F.Fab) (width 0.1))
(fp_text user %R (at 0 -2.45) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(pad 1 thru_hole roundrect (at -2.05 -0.8) (size 1.6 1) (drill 0.4064) (layers *.Cu *.Mask) (roundrect_rratio 0.187))
(pad 2 thru_hole roundrect (at -2.05 0.8) (size 1.6 1) (drill 0.4064) (layers *.Cu *.Mask) (roundrect_rratio 0.187))
(pad 1 thru_hole roundrect (at 2.05 -0.8) (size 1.6 1) (drill 0.4064) (layers *.Cu *.Mask) (roundrect_rratio 0.187))
(pad 2 thru_hole roundrect (at 2.05 0.8) (size 1.6 1) (drill 0.4064) (layers *.Cu *.Mask) (roundrect_rratio 0.187))
(model ${KIPRJMOD}/models/KMR211GLFS.step
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz -90 0 0))
)
)

View File

@@ -0,0 +1,31 @@
(module SW_Push_1P1T_NO_CK_KMR2_double_size_no_3d (layer F.Cu) (tedit 60B310A5)
(descr "CK components KMR2 tactile switch http://www.ckswitches.com/media/1479/kmr2.pdf")
(tags "tactile switch kmr2")
(attr smd)
(fp_text reference REF** (at 0 -2.45) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value SW_Push_1P1T_NO_CK_KMR2_double_size_no_3d (at 0 2.55) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -2.1 -1.4) (end 2.1 -1.4) (layer F.Fab) (width 0.1))
(fp_line (start 2.1 -1.4) (end 2.1 1.4) (layer F.Fab) (width 0.1))
(fp_line (start 2.1 1.4) (end -2.1 1.4) (layer F.Fab) (width 0.1))
(fp_line (start -2.1 1.4) (end -2.1 -1.4) (layer F.Fab) (width 0.1))
(fp_line (start 2.2 0.05) (end 2.2 -0.05) (layer F.SilkS) (width 0.12))
(fp_line (start -2.8 -1.8) (end 2.8 -1.8) (layer F.CrtYd) (width 0.05))
(fp_line (start 2.8 -1.8) (end 2.8 1.8) (layer F.CrtYd) (width 0.05))
(fp_line (start 2.8 1.8) (end -2.8 1.8) (layer F.CrtYd) (width 0.05))
(fp_line (start -2.8 1.8) (end -2.8 -1.8) (layer F.CrtYd) (width 0.05))
(fp_circle (center 0 0) (end 0 0.8) (layer F.Fab) (width 0.1))
(fp_line (start -2.2 1.55) (end 2.2 1.55) (layer F.SilkS) (width 0.12))
(fp_line (start 2.2 -1.55) (end -2.2 -1.55) (layer F.SilkS) (width 0.12))
(fp_line (start -2.2 0.05) (end -2.2 -0.05) (layer F.SilkS) (width 0.12))
(fp_text user %R (at 0 -2.45) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(pad 1 thru_hole roundrect (at -2.05 -0.8) (size 1.6 1) (drill 0.4064) (layers *.Cu *.Mask) (roundrect_rratio 0.187))
(pad 2 thru_hole roundrect (at -2.05 0.8) (size 1.6 1) (drill 0.4064) (layers *.Cu *.Mask) (roundrect_rratio 0.187))
(pad 1 thru_hole roundrect (at 2.05 -0.8) (size 1.6 1) (drill 0.4064) (layers *.Cu *.Mask) (roundrect_rratio 0.187))
(pad 2 thru_hole roundrect (at 2.05 0.8) (size 1.6 1) (drill 0.4064) (layers *.Cu *.Mask) (roundrect_rratio 0.187))
)

View File

@@ -0,0 +1,41 @@
(module SW_SPST_CK_RS282G05A3 (layer F.Cu) (tedit 60A6DA4C)
(descr https://www.mouser.com/ds/2/60/RS-282G05A-SM_RT-1159762.pdf)
(tags "SPST button tactile switch")
(attr smd)
(fp_text reference REF** (at 0 -2.6) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value SW_SPST_CK_RS282G05A3 (at 0 3) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start 3 -1.8) (end 3 1.8) (layer F.Fab) (width 0.1))
(fp_line (start -3 -1.8) (end -3 1.8) (layer F.Fab) (width 0.1))
(fp_line (start -3 -1.8) (end 3 -1.8) (layer F.Fab) (width 0.1))
(fp_line (start -3 1.8) (end 3 1.8) (layer F.Fab) (width 0.1))
(fp_line (start -1.5 -0.8) (end -1.5 0.8) (layer F.Fab) (width 0.1))
(fp_line (start 1.5 -0.8) (end 1.5 0.8) (layer F.Fab) (width 0.1))
(fp_line (start -1.5 -0.8) (end 1.5 -0.8) (layer F.Fab) (width 0.1))
(fp_line (start -1.5 0.8) (end 1.5 0.8) (layer F.Fab) (width 0.1))
(fp_line (start -3.06 1.85) (end -3.06 -1.85) (layer F.SilkS) (width 0.12))
(fp_line (start 3.06 1.85) (end -3.06 1.85) (layer F.SilkS) (width 0.12))
(fp_line (start 3.06 -1.85) (end 3.06 1.85) (layer F.SilkS) (width 0.12))
(fp_line (start -3.06 -1.85) (end 3.06 -1.85) (layer F.SilkS) (width 0.12))
(fp_line (start -1.75 1) (end -1.75 -1) (layer F.Fab) (width 0.1))
(fp_line (start 1.75 1) (end -1.75 1) (layer F.Fab) (width 0.1))
(fp_line (start 1.75 -1) (end 1.75 1) (layer F.Fab) (width 0.1))
(fp_line (start -1.75 -1) (end 1.75 -1) (layer F.Fab) (width 0.1))
(fp_line (start -4.9 -2.05) (end 4.9 -2.05) (layer F.CrtYd) (width 0.05))
(fp_line (start 4.9 -2.05) (end 4.9 2.05) (layer F.CrtYd) (width 0.05))
(fp_line (start 4.9 2.05) (end -4.9 2.05) (layer F.CrtYd) (width 0.05))
(fp_line (start -4.9 2.05) (end -4.9 -2.05) (layer F.CrtYd) (width 0.05))
(fp_text user %R (at 0 -2.6) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(pad 2 thru_hole rect (at 4.1 0) (size 1.9 1.9) (drill 0.762) (layers *.Cu *.Mask F.Paste))
(pad 1 thru_hole rect (at -4.1 0) (size 1.9 1.9) (drill 0.762) (layers *.Cu *.Mask F.Paste))
(model ${KISYS3DMOD}/Button_Switch_SMD.3dshapes/SW_SPST_CK_RS282G05A3.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)

View File

@@ -0,0 +1,21 @@
(module SolderWire-0.1sqmm_1x01_D0.4mm_OD1mm (layer F.Cu) (tedit 60A1F2C4)
(descr "Soldered wire connection, for a single 0.1 mm² wire, basic insulation, conductor diameter 0.4mm, outer diameter 1mm, size source Multi-Contact FLEXI-E 0.1 (https://ec.staubli.com/AcroFiles/Catalogues/TM_Cab-Main-11014119_(en)_hi.pdf), bend radius 3 times outer diameter, generated with kicad-footprint-generator")
(tags "connector wire 0.1sqmm")
(attr virtual)
(fp_text reference REF** (at -1.25 0) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)) (justify right))
)
(fp_text value SolderWire-0.1sqmm_1x01_D0.4mm_OD1mm (at 0 2) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_circle (center 0 0) (end 0.5 0) (layer F.Fab) (width 0.1))
(fp_text user %R (at 0 0) (layer F.Fab)
(effects (font (size 0.25 0.25) (thickness 0.04)))
)
(pad 1 smd roundrect (at 0 0) (size 1.5 1.2) (layers F.Cu F.Mask) (roundrect_rratio 0.156))
(model ${KISYS3DMOD}/Connector_Wire.3dshapes/SolderWire-0.1sqmm_1x01_D0.4mm_OD1mm.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)

View File

@@ -0,0 +1,31 @@
(module connector_4pins_horizontal (layer F.Cu) (tedit 60A91CAD)
(descr "Through hole straight pin header, 1x04, 2.54mm pitch, single row")
(tags "Through hole pin header THT 1x04 2.54mm single row")
(fp_text reference REF** (at 0 -2.33) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value connector_4pins_horizontal (at 0.4191 11.19632) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -1.33 8.95) (end 1.33 8.95) (layer F.SilkS) (width 0.12))
(fp_line (start -1.33 1.27) (end -1.33 8.95) (layer F.SilkS) (width 0.12))
(fp_line (start 1.33 1.27) (end 1.33 8.95) (layer F.SilkS) (width 0.12))
(fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12))
(fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12))
(fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12))
(fp_line (start -1.33 -1.33) (end -11 -1.33) (layer F.SilkS) (width 0.12))
(fp_line (start -11 -1.27) (end -11 8.89) (layer F.SilkS) (width 0.12))
(fp_line (start -11 8.95) (end -1.33 8.95) (layer F.SilkS) (width 0.12))
(fp_text user %R (at 2.99974 3.22326 90) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(pad 1 thru_hole rect (at 0 0) (size 1.7 1.7) (drill 0.889) (layers *.Cu F.Mask))
(pad 2 thru_hole oval (at 0 2.54) (size 1.7 1.7) (drill 0.889) (layers *.Cu F.Mask))
(pad 3 thru_hole oval (at 0 5.08) (size 1.7 1.7) (drill 0.889) (layers *.Cu F.Mask))
(pad 4 thru_hole oval (at 0 7.62) (size 1.7 1.7) (drill 0.889) (layers *.Cu F.Mask))
(model ${KIPRJMOD}/models/kf2510_4p_right_angle.step
(offset (xyz 0.2 -3.8 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 90 0))
)
)

View File

@@ -0,0 +1,11 @@
(module null_footprint (layer F.Cu) (tedit 600A8C74)
(descr "SMT capacitor, aluminium electrolytic, 3x5.3, Cornell Dubilier Electronics ")
(tags "Capacitor Electrolytic")
(attr smd)
(fp_text reference REF** (at 0 -2.7) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value null_footprint (at 0 2.7) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
)

View File

@@ -0,0 +1,14 @@
(module testpoint_double_side (layer F.Cu) (tedit 60A680F7)
(descr "Through hole straight pin header, 1x01, 2.54mm pitch, single row")
(tags "Through hole pin header THT 1x01 2.54mm single row")
(fp_text reference REF** (at 0 -2.33) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value testpoint (at 0 2.33) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text user %R (at 0 0 90) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(pad 1 thru_hole roundrect (at 0 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) (roundrect_rratio 0.25))
)

View File

@@ -0,0 +1,14 @@
(module testpoint_one_side (layer F.Cu) (tedit 60A67FA7)
(descr "Through hole straight pin header, 1x01, 2.54mm pitch, single row")
(tags "Through hole pin header THT 1x01 2.54mm single row")
(fp_text reference REF** (at 0 -2.33) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value testpoint (at 0 2.33) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text user %R (at 0 0 90) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(pad 1 thru_hole roundrect (at 0 0) (size 1.7 1.7) (drill 1) (layers *.Cu F.Mask) (roundrect_rratio 0.25))
)

3
kicad/sym-lib-table Normal file
View File

@@ -0,0 +1,3 @@
(sym_lib_table
(lib (name stepper_motor_analyzer)(type Legacy)(uri ${KIPRJMOD}/stepper_motor_analyzer.lib)(options "")(descr ""))
)

5
platformio/.gitignore vendored Normal file
View File

@@ -0,0 +1,5 @@
.pio
.vscode/.browse.c_cpp.db*
.vscode/c_cpp_properties.json
.vscode/launch.json
.vscode/ipch

7
platformio/.vscode/extensions.json vendored Normal file
View File

@@ -0,0 +1,7 @@
{
// See http://go.microsoft.com/fwlink/?LinkId=827846
// for the documentation about the extensions.json format
"recommendations": [
"platformio.platformio-ide"
]
}

34
platformio/TODO.txt Normal file
View File

@@ -0,0 +1,34 @@
* Switch to LVGL 8, when released.
* In the oscilloscope and phase charts, make the major division lines thicker. (Requires LVGL 8).
============= DONE
* In the home page, call the coils A, B, not 1, 2.
* Consider to set WR_HL in the first gpio color table. //Didn't work. Insufficient hold time.
* Increase tft driver render loop inline to 20 pixels (currently 8)
* Increase chart horizontal resolution (and update rate). Display resoluion is 400 pixels.
* Consider to double the update rate of the steps and retraction charts to have
a more smooth graph animation.
* COnvert the java table generator to python
* When reentering the steps or retraction charts, clear them.
* Double the resolution of the capture buffer.
* Can we reduce the delays in the screen dump code?
* Consider to slightly increase the LVGL heap, just in case, since we have sufficient RAM. // currently 32k, seems ok.

View File

@@ -0,0 +1,5 @@
/* SELECT BOARD */
#include "boards/pico.h"

42
platformio/platformio.ini Normal file
View File

@@ -0,0 +1,42 @@
; PlatformIO Project Configuration File
;
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
; monitor_port = COM8
; monitor_port = COM3
; USB Serial notes:
; 1. Use 'zadig' app to set 'Board CDC' device (id: 2E8A, 000A),
; to driver USB Serial (CDC)
; 2. Update the monitor_port COM port below to the actual number
; the Pico is assinged to on your system.
[env:raspberry-pi-pico]
platform = wizio-pico
board = raspberry-pi-pico
framework = baremetal
upload_protocol = picoprobe
debug_tool = picoprobe
monitor_port = COM3
; This enables int64 printf.
board_build.nano = disable
build_flags =
-O3
-Wno-missing-field-initializers
-D LV_CONF_INCLUDE_SIMPLE
-I src
-I "$PROJECT_CORE_DIR/packages/framework-wizio-pico/SDK111/hardware"
-I "$PROJECT_CORE_DIR/packages/framework-wizio-pico/SDK/pico"
-D PICO_STDIO_USB
lib_deps =
lvgl/lvgl@7.9.1
lib_ignore = freertos, wiring
;monitor_speed = 115200

View File

@@ -0,0 +1,171 @@
// Implementation of the acquisition module. It uses the ADC/DMA
// interrupts to process the ADC sampling.
// TODO: convert const naming style to kCammelCase.
#include "adc_dma.h"
#include "hardware/adc.h"
#include "hardware/dma.h"
#include "hardware/gpio.h"
#include "hardware/irq.h"
#include "hardware/pio.h"
#include "io.h"
// Analyzer provides this callback.
namespace analyzer {
void isr_handle_one_sample(const uint16_t raw_v1, const uint16_t raw_v2);
}
namespace adc_dma {
void disable_irq() {
irq_set_mask_enabled(1 << DMA_IRQ_0 | 1 << DMA_IRQ_1, false);
}
void enable_irq() {
irq_set_mask_enabled(1 << DMA_IRQ_0 | 1 << DMA_IRQ_1, true);
}
//------------------------------------------
// void isr_handle_one_sample(const uint16_t raw_v1, const uint16_t raw_v2) ;
#define ADC_CHANNEL_1 0
#define ADC_CHANNEL_2 1
// Assumed to have a sizeof() of exactly 4 bytes.
struct SamplePair {
uint16_t v1;
uint16_t v2;
};
#define BUFFER_SIZE 512
#define BUFFER_DMA_CCOUNT BUFFER_SIZE * 2
#define BUFFER_SIZE_BYTES BUFFER_SIZE * 4
// Number of bytes for 512x4 bytes address.
#define CAPTURE_RING_BITS 11
// Aligned for the DMA ring address warp.
static SamplePair capture_buf1[BUFFER_SIZE]
__attribute__((aligned(BUFFER_SIZE_BYTES)));
static SamplePair capture_buf2[BUFFER_SIZE]
__attribute__((aligned(BUFFER_SIZE_BYTES)));
static uint dma_chan1;
static uint dma_chan2;
static int irq_counter1 = 0;
static int irq_counter2 = 0;
// Called when capture_buf1 is full.
static void dma_handler1() {
LED1_ON;
irq_counter1++;
// Clear the interrupt request.
dma_hw->ints0 = 1u << dma_chan1;
for (int i = 0; i < BUFFER_SIZE; i++) {
analyzer::isr_handle_one_sample(capture_buf1[i].v1, capture_buf1[i].v2);
}
LED1_OFF;
}
// Called when capture_buf2 is full.
static void dma_handler2() {
LED1_ON;
irq_counter2++;
// Clear the interrupt request.
dma_hw->ints0 = 1u << dma_chan2;
for (int i = 0; i < BUFFER_SIZE; i++) {
analyzer::isr_handle_one_sample(capture_buf2[i].v1, capture_buf2[i].v2);
}
LED1_OFF;
}
void setup() {
// -------ADC init
// Make sure GPIO is high impedance, no pullups, etc.
adc_gpio_init(26 + ADC_CHANNEL_1);
adc_gpio_init(26 + ADC_CHANNEL_2);
adc_init();
// This determines the first channel that will be scanned in
// each round robin cycle.
adc_select_input(ADC_CHANNEL_1);
// Alternating ADC sampling.
adc_set_round_robin(1 << ADC_CHANNEL_1 | 1 << ADC_CHANNEL_2);
adc_fifo_setup(true, // Write each completed conversion to the sample FIFO
true, // Enable DMA data request (DREQ)
1, // DREQ (and IRQ) asserted when at least 1 sample present
true, // Collect also the error bit.
false // Do not reduce samples to 8 bits.
);
// Determines the ADC sampling rate as a divisor of the basic
// 48Mhz clock. Set to have 100k sps on each of the two ADC
// channels.
adc_set_clkdiv(240 - 1); // Total rate 200k sps.
// adc_set_clkdiv(240 - 1); // Total rate 200k sps.
// --------------- DMA
dma_chan1 = dma_claim_unused_channel(true);
dma_chan2 = dma_claim_unused_channel(true);
// Chan 1
{
dma_channel_config dma_config1 = dma_channel_get_default_config(dma_chan1);
channel_config_set_transfer_data_size(&dma_config1, DMA_SIZE_16);
channel_config_set_read_increment(&dma_config1, false); // ADC fifo
channel_config_set_write_increment(&dma_config1, true); // RAM buffer.
// channel_config_set_write_increment(&dma_config1, true);
// Wrap to begining of buffer. Assuming buffer is well alligned.
channel_config_set_ring(&dma_config1, true, CAPTURE_RING_BITS);
// Paced by ADC genered requests.
channel_config_set_dreq(&dma_config1, DREQ_ADC);
// When done, start the other channel.
channel_config_set_chain_to(&dma_config1, dma_chan2);
// Using interrupt channel 0
dma_channel_set_irq0_enabled(dma_chan1, true);
// Set IRQ handler.
irq_set_exclusive_handler(DMA_IRQ_0, dma_handler1);
// irq_set_enabled(DMA_IRQ_0, true);
dma_channel_configure(dma_chan1, &dma_config1,
capture_buf1, // dst
&adc_hw->fifo, // src
BUFFER_DMA_CCOUNT, // transfer count
true // start immediately
);
}
// Chan 2
{
dma_channel_config dma_config2 = dma_channel_get_default_config(dma_chan2);
channel_config_set_transfer_data_size(&dma_config2, DMA_SIZE_16);
channel_config_set_read_increment(&dma_config2, false);
channel_config_set_write_increment(&dma_config2, true);
channel_config_set_ring(&dma_config2, true, CAPTURE_RING_BITS);
channel_config_set_dreq(&dma_config2, DREQ_ADC);
// When done, start the other channel.
channel_config_set_chain_to(&dma_config2, dma_chan1);
dma_channel_set_irq1_enabled(dma_chan2, true);
irq_set_exclusive_handler(DMA_IRQ_1, dma_handler2);
// irq_set_enabled(DMA_IRQ_1, true);
dma_channel_configure(dma_chan2, &dma_config2,
capture_buf2, // dst
&adc_hw->fifo, // src
BUFFER_DMA_CCOUNT, // transfer count
false // Do not start immediately
);
}
enable_irq();
// Start the ADC free run sampling.
adc_run(true);
}
} // namespace adc_dma

View File

@@ -0,0 +1,12 @@
#pragma once
namespace adc_dma {
void disable_irq();
void enable_irq();
void setup();
} // namespace adc_dma

View File

@@ -0,0 +1,539 @@
// Implementation of the acquisition module. It uses the ADC/DMA
// interrupts to process the ADC sampling.
// TODO: convert const naming style to kCammelCase.
#include "analyzer.h"
#include <inttypes.h>
#include <math.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <cmath>
#include "adc_dma.h"
#include "filters.h"
#include "hardware/pio.h"
#include "io.h"
#include "pico/stdlib.h"
namespace analyzer {
// Updated by sample_state(). This is the frozen copy of the
// state the UI can use.
static State sampled_state;
// 12 bit -> 4096 counts. 3.3V full scale.
// 0.4V per AMP (for +/- 2.5A sensor).
constexpr float kCountsPerAmp = 0.4 * 4096 / 3.3;
// We use this value to do multiplications instead of divisions.
constexpr float kAmpsPerCount = 1 / kCountsPerAmp;
constexpr float kMilliampsPerCount = 1000 / kCountsPerAmp;
// Energized/non-energized histeresis limits in ADC
// counts.
//
// TODO: specify here what the limits are as a percentage
// of full current scale.
//
constexpr uint16_t kNonEnergizedThresholdCounts = 50;
constexpr uint16_t kEnergizedThresholdCounts = 150;
// Allowed range for adc zero current offset setting.
// This range is wider than needed and actual offsets
// are expected to be around 1900.
constexpr int kMinOffset = 0;
constexpr int kMaxOffset = 4095; // 12 bits max
enum CaptureState {
// Filling half of the capture buffer.
CAPTURE_HALF_FILL,
// Keep filling in a circular way until a trigger event
// or wait for trigger timeout.
CAPTURE_PRE_TRIGGER,
// Keep capture points as long as the capture buffer is not full.
CAPTURE_POST_TRIGER,
// Not capturing. ISR is guaranteed not to update or access the
// capture buffer.
CAPTURE_IDLE,
};
// This data is accessed from interrupt and thus should
// be access from main() with IRQ disabled.
struct IsrData {
// The state visible to users.
State state;
// Current settings.
Settings settings;
// Signal capturing.
// Time out for waiting for trigger in divided ADC ticks.
uint32_t capture_pre_trigger_items_left = 0;
// Factor to divide ADC ticks. Only every n'th sample is captured.
uint16_t capture_divider = 1;
// Up counter for capturing only every n'th samples.
uint16_t capture_divider_counter = 0;
// Capturing state.
CaptureState capture_state = CAPTURE_IDLE;
// The capture buffer itself. Updated by ISR when state != CAPTURE_IDLE
// and accessible by the UI (ready only) when state = CAPTURE_IDLE.
CaptureBuffer capture_buffer;
};
static IsrData isr_data;
extern bool is_capture_ready() {
CaptureState capture_state;
//__disable_irq();
adc_dma::disable_irq();
{ capture_state = isr_data.capture_state; }
//__enable_irq();
adc_dma::enable_irq();
return capture_state == CAPTURE_IDLE;
}
extern void start_capture(uint16_t divider) {
// Force a reasonable range.
if (divider < 1) {
divider = 1;
} else if (divider > 1000) {
divider = 1000;
}
// Since capture may be active, data can co-access by ISR.
//__disable_irq();
adc_dma::disable_irq();
{
isr_data.capture_buffer.items.clear();
isr_data.capture_buffer.trigger_found = false;
// This is an arbitrary number of divided samples that we allow
// to wait for a trigger event.
isr_data.capture_pre_trigger_items_left = 500;
isr_data.capture_divider = divider;
isr_data.capture_divider_counter = 0;
isr_data.capture_state = CAPTURE_HALF_FILL;
}
adc_dma::enable_irq();
//__enable_irq();
}
// Users are expected to read this buffer only when capturing
// is not active.
const CaptureBuffer* capture_buffer() { return &isr_data.capture_buffer; }
const State* sample_state() {
adc_dma::disable_irq();
sampled_state = isr_data.state;
adc_dma::enable_irq();
return &sampled_state;
}
void reset_state() {
adc_dma::disable_irq();
{
isr_data.state.tick_count = 0;
isr_data.state.ticks_with_errors = 0;
isr_data.state.non_energized_count = 0;
isr_data.state.full_steps = 0;
isr_data.state.max_full_steps = 0;
isr_data.state.max_retraction_steps = 0;
isr_data.state.quadrature_errors = 0;
memset(isr_data.state.buckets, 0, sizeof(isr_data.state.buckets));
}
adc_dma::enable_irq();
}
int adc_value_to_milliamps(int adc_value) {
return (int)(adc_value * kMilliampsPerCount);
}
float adc_value_to_amps(int adc_value) {
return ((float)adc_value) * kAmpsPerCount;
}
void calibrate_zeros() {
adc_dma::disable_irq();
{
isr_data.settings.offset1 += isr_data.state.v1;
isr_data.settings.offset2 += isr_data.state.v2;
}
adc_dma::enable_irq();
}
void set_direction(bool reverse_direction) {
adc_dma::disable_irq();
{ isr_data.settings.reverse_direction = reverse_direction; }
adc_dma::enable_irq();
}
void get_settings(Settings* settings) {
adc_dma::disable_irq();
{ *settings = isr_data.settings; }
adc_dma::enable_irq();
}
void dump_sampled_state() {
for (int i = 0; i < kNumHistogramBuckets; i++) {
// Int64 printing is broken. For now using int32.
printf("%llu ", sampled_state.buckets[i].total_ticks_in_steps);
}
printf("\n");
for (int i = 0; i < kNumHistogramBuckets; i++) {
const uint32_t avg_peak_current =
sampled_state.buckets[i].total_steps
? (sampled_state.buckets[i].total_step_peak_currents /
sampled_state.buckets[i].total_steps)
: 0;
printf("%lu ", avg_peak_current);
}
printf("\n");
// Remember last tick count and report only diff.
static uint32_t last_tick_count = 0;
printf(
"[%6lu][er:%lu, %lu] [%5d, %5d] [en:%d %lu] s:%d/%d steps:%d "
"max_steps:%d\n",
sampled_state.tick_count - last_tick_count,
sampled_state.quadrature_errors, sampled_state.ticks_with_errors,
sampled_state.v1, sampled_state.v2, sampled_state.is_energized,
sampled_state.non_energized_count, sampled_state.quadrant,
sampled_state.last_step_direction, sampled_state.full_steps,
sampled_state.max_full_steps);
last_tick_count = sampled_state.tick_count;
}
// Assumes that capture data is ready.
void dump_capture(const CaptureBuffer& buffer) {
for (int i = 0; i < buffer.items.size(); i++) {
const analyzer::CaptureItem* item = buffer.items.get(i);
printf(" %hd %hd\n", item->v1, item->v2);
printf("%hd %hd\n", item->v2, item->v2);
}
}
// Maybe add step's information to the histogram.
// Called from isr on step transition.
inline void isr_add_step_to_histogram(int quadrant, Direction entry_direction,
Direction exit_direction,
uint32_t ticks_in_step,
uint32_t max_current_in_step) {
// Ignoring this step if not entering and exiting this step in same forward or
// backward direction.
if (entry_direction != exit_direction ||
entry_direction == UNKNOWN_DIRECTION) {
return;
}
uint32_t steps_per_sec =
TicksPerSecond / ticks_in_step; // speed in steps per second
if (steps_per_sec < 10) {
return; // ignore very slow steps as they dominate the time.
}
uint32_t bucket_index = steps_per_sec / kBucketStepsPerSecond;
if (bucket_index >= kNumHistogramBuckets) {
bucket_index = kNumHistogramBuckets - 1;
}
HistogramBucket& bucket = isr_data.state.buckets[bucket_index];
bucket.total_ticks_in_steps += ticks_in_step;
bucket.total_step_peak_currents += max_current_in_step;
bucket.total_steps++;
}
// A helper for the isr function.
static inline void isr_update_full_steps_counter(int increment) {
State& isr_state = isr_data.state; // alias
// Update step counter based on direction setting.
if (isr_data.settings.reverse_direction) {
isr_state.full_steps -= increment;
} else {
isr_state.full_steps += increment;
}
// Track retraction.
if (isr_state.full_steps > isr_state.max_full_steps) {
isr_state.max_full_steps = isr_state.full_steps;
}
const int retraction_steps = isr_state.max_full_steps - isr_state.full_steps;
if (retraction_steps > isr_state.max_retraction_steps) {
isr_state.max_retraction_steps = retraction_steps;
}
}
// NOTE: these four filters slow the interrupt handling. Consider
// to eliminate if free CPU time is insufficient.
//
// We use these filters to reduce internal and external noise.
static filters::Adc12BitsLowPassFilter<700> signal1_filter;
static filters::Adc12BitsLowPassFilter<400> signal2_filter;
// This function performs the bulk of the IRQ processing. It accepts
// one pair of ADC1, ADC2 readings, analyzes it, and updates the
// state.
void isr_handle_one_sample(const uint16_t raw_v1, const uint16_t raw_v2) {
isr_data.state.tick_count++;
// ignore ADC readings that have the error flag set (bit 15);
if (raw_v1 & 0x8000 || raw_v2 & 0x8000) {
isr_data.state.ticks_with_errors++;
return;
}
// Fast filtering for signal analysis.
const int16_t v1 =
(uint16_t)signal1_filter.update(raw_v1) - isr_data.settings.offset1;
const int16_t v2 =
(uint16_t)signal2_filter.update(raw_v2) - isr_data.settings.offset2;
// Slower filtering for display purposes.
isr_data.state.v1 = v1;
// (uint16_t)display1_filter.update(raw_v1) - isr_data.settings.offset1;
isr_data.state.v2 = v2;
// (uint16_t)display2_filter.update(raw_v2) - isr_data.settings.offset2;
// Handle signal capturing.
// Release: 220ns, Debug: 1100ns. (TODO: update timing for current code)
if (isr_data.capture_state != CAPTURE_IDLE &&
++isr_data.capture_divider_counter >= isr_data.capture_divider) {
isr_data.capture_divider_counter = 0;
// Insert sample to circular buffer. If the buffer is full it drops
// the oldest item.
CaptureItem* capture_item = isr_data.capture_buffer.items.insert();
capture_item->v1 = v1;
capture_item->v2 = v2;
switch (isr_data.capture_state) {
// In this sate we blindly fill half of the buffer.
case CAPTURE_HALF_FILL:
if (isr_data.capture_buffer.items.size() >= kCaptureBufferSize / 2) {
isr_data.capture_state = CAPTURE_PRE_TRIGGER;
}
break;
// In this state we look for a trigger event or a pre trigger timeout.
case CAPTURE_PRE_TRIGGER: {
// Pre trigger timeout?
if (isr_data.capture_pre_trigger_items_left == 0) {
// NOTE: if the buffer is full here we could terminate
// the capture but we go through the normal motions for simplicity.
isr_data.capture_state = CAPTURE_POST_TRIGER;
isr_data.capture_buffer.trigger_found = false;
break;
}
isr_data.capture_pre_trigger_items_left--;
// Trigger event?
const int16_t old_v1 =
isr_data.capture_buffer.items.get_reversed(5)->v1;
// Trigger criteria, up crossing of the zero line.
if (old_v1 < -10 && v1 >= 0) {
// Keep only the last n/2 points. This way the trigger will
// always be in the middle of the buffer.
isr_data.capture_buffer.items.keep_at_most(kCaptureBufferSize / 2);
isr_data.capture_buffer.trigger_found = true;
isr_data.capture_state = CAPTURE_POST_TRIGER;
}
} break;
// In this state we blindly fill the rest of the buffer.
case CAPTURE_POST_TRIGER:
if (isr_data.capture_buffer.items.is_full()) {
isr_data.capture_state = CAPTURE_IDLE;
}
break;
// This one is non reachable but makes the compiler happy.
case CAPTURE_IDLE:
break;
}
}
// Determine if motor is energized. Use hysteresis for noise rejection.
// Release: 200ns. Debug: 600ns.
const bool old_is_energized = isr_data.state.is_energized;
const uint16_t total_current = abs(v1) + abs(v2);
// Using histeresis.
const uint16_t energized_threshold = old_is_energized
? kNonEnergizedThresholdCounts
: kEnergizedThresholdCounts;
const bool new_is_energized = total_current > energized_threshold;
isr_data.state.is_energized = new_is_energized;
// Handle the non energized case. No need to go through quadrant decoding.
// Pass through case: Release: 110ns. Debug: 250ns.
if (!new_is_energized) {
if (old_is_energized) {
// Becoming non energized.
isr_data.state.last_step_direction = UNKNOWN_DIRECTION;
isr_data.state.ticks_in_step = 0;
isr_data.state.non_energized_count++;
} else {
// Staying non energized
}
return;
}
// Here when energized. Decode quadrant.
// We now go through a decision tree to collect the new quadrant, sector
// and max coil current. Optimized for speed. See quadrants_plot.png
// for the individual cases.
uint8_t new_quadrant; // set below to [0, 3]
uint32_t max_current; // max coil current
if (v2 >= 0) {
if (v1 >= 0) {
// Quadrant 0: v1 > 0, V2 > 0.
new_quadrant = 0;
if (v1 > v2) {
// Sector 0: v1 > 0, V2 > 0. |v1| > |v2|
max_current = v1;
} else {
// Sector 1: v1 > 0, V2 > 0. |v1| < |v2|
max_current = v2;
}
} else {
// Quadrant 1: v1 < 0, V2 > 0
new_quadrant = 1;
if (-v1 < v2) {
// Sector 2: v1 < 0, V2 > 0. |v1| < |v2|
max_current = v2;
} else {
// Sector 3: v1 < 0, V2 > 0. |v1| > |v2|
max_current = -v1;
}
}
} else {
if (v1 < 0) {
// Quadrant 2: v1 < 0, V2 < 0
new_quadrant = 2;
if (-v1 > -v2) {
// Sector 4: v1 < 0, V2 < 0. |v1| > |v2|
max_current = -v1;
} else {
// Sector 5: v1 < 0, V2 < 0. |v1| < |v2|
max_current = -v2;
}
} else {
// Quadrant 3 v1 > 0, V2 < 0.
new_quadrant = 3;
if (v1 < -v2) {
// Sector 6: v1 > 1, V2 < 0. |v1| < |v2|
max_current = -v2;
} else {
// Sector 7: v1 > 0, V2 < 0. |v1| > |v2|
max_current = v1;
}
}
}
const int8_t old_quadrant = isr_data.state.quadrant; // old quadrant [0, 3]
isr_data.state.quadrant = new_quadrant;
// Track quadrant transitions and update steps.
if (!old_is_energized) {
// Case 1: motor just became energized. Direction is still not known.
isr_data.state.last_step_direction = UNKNOWN_DIRECTION;
isr_data.state.ticks_in_step = 1;
isr_data.state.max_current_in_step = max_current;
} else if (new_quadrant == old_quadrant) {
// Case 2: staying in same quadrant
isr_data.state.ticks_in_step++;
if (max_current > isr_data.state.max_current_in_step) {
isr_data.state.max_current_in_step = max_current;
}
} else if (new_quadrant == ((old_quadrant + 1) & 0x03)) {
// Case 3: Moved to next quadrant.
isr_update_full_steps_counter(+1);
isr_add_step_to_histogram(old_quadrant, isr_data.state.last_step_direction,
FORWARD, isr_data.state.ticks_in_step,
isr_data.state.max_current_in_step);
isr_data.state.last_step_direction = FORWARD;
isr_data.state.ticks_in_step = 1;
isr_data.state.max_current_in_step = max_current;
} else if (new_quadrant == ((old_quadrant - 1) & 0x03)) {
// Case 4: Moved to previous quadrant.
isr_update_full_steps_counter(-1);
isr_add_step_to_histogram(old_quadrant, isr_data.state.last_step_direction,
BACKWARD, isr_data.state.ticks_in_step,
isr_data.state.max_current_in_step);
isr_data.state.last_step_direction = BACKWARD;
isr_data.state.ticks_in_step = 1;
isr_data.state.max_current_in_step = max_current;
} else {
// Case 5: Invalid quadrant transition.
// TODO: count and report errors.
isr_data.state.quadrature_errors++;
isr_data.state.last_step_direction = UNKNOWN_DIRECTION;
isr_data.state.ticks_in_step = 1;
isr_data.state.max_current_in_step = max_current;
}
}
// Force a valid settings offset value.
static int clip_offset(int requested_offset) {
return MAX(kMinOffset, MIN(kMaxOffset, requested_offset));
}
// Call once on program initialization.
void setup(const Settings& settings) {
isr_data.settings = settings;
isr_data.settings.offset1 = clip_offset(isr_data.settings.offset1);
isr_data.settings.offset2 = clip_offset(isr_data.settings.offset2);
}
// This involves floating point operations and thus slow. Do not
// call from the interrupt routine.
double state_steps(const State& state) {
// If not energized, we can't compute fractional steps.
if (!state.is_energized) {
return state.full_steps;
}
// Compute fractional stept. We use the abs() to avoid
// the discontinuity near -180 degrees. It provides better safety with
// the non determinism of floating point values.
// Range is in [0, PI];
const double abs_radians = abs(atan2(state.v2, state.v1));
// Rel radians in [-PI/4, PI/4].
double rel_radians = 0;
switch (state.quadrant) {
case 0:
rel_radians = abs_radians - (M_PI / 4);
break;
case 1:
rel_radians = abs_radians - (3 * M_PI / 4);
break;
case 2:
rel_radians = (3 * M_PI / 4) - abs_radians;
break;
case 3:
rel_radians = (M_PI / 4) - abs_radians;
break;
}
// Fraction is in the range [-0.5, 0.5]
const double fraction = rel_radians * (2 / M_PI);
// NOTE: this is a little bit hacky since we don't know the direction
// flag setting at the time this sample was captured but should
// be good enough for now.
//
// TODO: record last direction flag value in the state.
const double result = isr_data.settings.reverse_direction
? state.full_steps - fraction
: state.full_steps + fraction;
return result;
}
} // namespace analyzer

View File

@@ -0,0 +1,209 @@
// API of the data acquisition and step decoder modole. This
// is the core of the analysis software and it is executed
// in an interrupt routine so handle with care.
#pragma once
#include <string.h>
#include "misc/circular_buffer.h"
namespace analyzer {
// This is set in the Settings page.
struct Settings {
// Offsets to substract from the ADC readings to have zero reading
// when the current is zero.
// Typically around ~1900 which represents ~1.5V from the current
// sensors.
int16_t offset1;
int16_t offset2;
// If true, reverse interpretation of forward/backward movement.
bool reverse_direction;
};
// Number of pairs of ADC readings to capture for the signal
// capture page. The capture logic try to sync a ch1 up crossing
// the horizontal axis at the middle of the buffer for better
// visual stability.
//
// NOTE: 400 is the width in pixels of the active plot area of the
// osciloscope screen.
constexpr int kCaptureBufferSize = 400;
// A single captured item. These are the signed values
// in adc counts of the two curent sensing channels.
struct CaptureItem {
int16_t v1;
int16_t v2;
};
// A circular array with captured signals. Using a circular array
// allow to capture data before the trigger point.
typedef CircularBuffer<CaptureItem, kCaptureBufferSize> CaptureItems;
struct CaptureBuffer {
CaptureItems items;
// True if capture was synced with a trigger event where
// v1 crossed up the y=0 axis. The triggered event, if available
// is always at a fixed index at the middle of the returned
// captured range.
bool trigger_found;
};
// Step direction classification. The analyzer classifies
// each step with these gats. Unknown happens when direction
// is reversed at the middle of the step.
enum Direction { UNKNOWN_DIRECTION, FORWARD, BACKWARD };
// Sampling rate is 100K sampling-pairs/sec. Should match ADC
// settings.
constexpr int kUsecsPerTick = 10;
constexpr int TicksPerSecond = 1000000 / kUsecsPerTick;
// Max range when using ACS70331EESATR-2P5B3 (+/- 2.5A).
// Double this if using the +/-5A current sensor variant.
constexpr int kMaxMilliamps = 2500;
// Number of histogram buckets, each bucket represents
// a band of step speeds.
constexpr int kNumHistogramBuckets = 20;
// Each histogram bucket represents a speed range of 100
// steps/sec, starting from zero. Overflow speeds are
// aggregated in the last bucket.
const int kBucketStepsPerSecond = 100;
// A single histogram bucket
struct HistogramBucket {
// Total adc samples in steps in this bucket. This is a proxy
// for time spent in this speed range.
uint64_t total_ticks_in_steps;
// Total max step current in ADC counts. Used
// to compute the average max coil curent by speed range.
uint64_t total_step_peak_currents;
// Total steps. This is a proxy for the distance (in either direction)
// done in this speed range.
uint32_t total_steps;
};
// Analyzer data, other than the capture buffer, this is the only
// data that the interrupt routine updates.
struct State {
public:
State()
: tick_count(0),
ticks_with_errors(0),
v1(0),
v2(0),
is_energized(false),
non_energized_count(0),
quadrant(0),
full_steps(0),
max_full_steps(0),
max_retraction_steps(0),
quadrature_errors(0),
last_step_direction(UNKNOWN_DIRECTION),
max_current_in_step(0),
ticks_in_step(0) {
memset(buckets, 0, sizeof(buckets));
}
// Number of ADC pair samples since last data reset. This is
// also a proxy for the time passed.
uint32_t tick_count;
// Ticks that have the ADC error flag set.
uint32_t ticks_with_errors;
// Signed current values in ADC count units. When the stepper
// is energized, these values together with the quadrant value
// below can be used to compute the fractional step value.
int16_t v1;
int16_t v2;
// True if the coils are energized. Determined by the sum
// of the absolute values of a pair of current readings.
bool is_energized;
// Number of times coils were de-energized.
uint32_t non_energized_count;
// The last quadrant in the range [0, 3]. Each quadrant
// represents a full step. See quadrants_plot.png for details.
int8_t quadrant;
// Total (forward - backward) full steps. This is a proxy
// for the overall distance.
int full_steps;
// Max value of full_steps so far. Momentary retraction value
// can computed as max(0, max_full_steps - full_steps).
int max_full_steps;
// Max value of (max_full_steps - full_steps). As of Jan 2021,
// this value is computed but not used.
int max_retraction_steps;
// Total invalid quadrant transitions. Typically indicate
// distorted stepper coils current patterns.
uint32_t quadrature_errors;
// Direction of last step. Used to track step speed.
Direction last_step_direction;
// Max current detected in the current step. We use a single non signed
// value for both channels. in ADC count units.
uint32_t max_current_in_step;
// Time in current state, in 100Khz ADC sample time unit. This is
// a proxy for the time in current step.
uint32_t ticks_in_step;
// Histogram, each bucket represents a range of steps/sec speeds.
HistogramBucket buckets[kNumHistogramBuckets];
};
// Helpers for dumping aquisition sate. For debugging.
extern void dump_sampled_state();
extern void dump_capture(const CaptureBuffer& capture_buffer);
// Called once during program initialization.
extern void setup(const Settings& settings);
// Is the capture buffer full with data?
extern bool is_capture_ready();
// Call after is_capture_ready() is true, to get a pointer
// to internal buffer that contains the capture buffer.
extern const CaptureBuffer* capture_buffer();
// Start signal capturing. Data is ready when
// is_capture_ready() is true. If divider > 1,
// only one every n ADC samples is captured.
extern void start_capture(uint16_t divider);
// Sample the current state to an internal buffer and return
// a const ptr to it. Values are stable until next time
// this method is called.
extern const State* sample_state();
// Clears state data. This resets counters, min/max values,
// histograms, etc.
extern void reset_state();
// Return the steps value of the given state.
extern double state_steps(const State& state);
// Convert adc value to milliamps.
extern int adc_value_to_milliamps(int adc_value);
// Convert adc value to amps.
extern float adc_value_to_amps(int adc_value);
// Call this when the coil current is known to be zero to
// calibrate the internal offset1 and offset2.
extern void calibrate_zeros();
// Set direction. This updates the current settings.
// Controlled by the user in the Settings screen.
extern void set_direction(bool reverse_direction);
// Return a copy of the internal settings. Used after
// calibrate_zeros() to save the current settings in the
// EEPROM.
extern void get_settings(Settings* settings);
// @@@ Temp
extern void dump_dma_state();
} // namespace analyzer

View File

@@ -0,0 +1,32 @@
// First order ADC 12 bit signal filter.
#pragma once
namespace filters {
// K is in the range (0, 1024). The higher the value of K, the more the filter
// smooths the signal. We use fixed point integers for efficiency since
// this filter is used by the acquisition interrut routine.
template <uint32_t k>
class Adc12BitsLowPassFilter {
public:
Adc12BitsLowPassFilter() : scaled_12bit_value_(0 << 10) {}
// Accepts the new 12 bit sample and update and return the new
// filter values.
inline uint16_t update(uint16_t adc_12_bit_value) {
const uint32_t t1 = ((uint32_t)adc_12_bit_value) << 10;
const uint32_t t2 = (t1 * (1024 - k)) + (scaled_12bit_value_ * k);
scaled_12bit_value_ = t2 >> 10;
return scaled_12bit_value_ >> 10;
}
private:
// The current value with additional 10 bits representing the
// fraction.
uint32_t scaled_12bit_value_; // current value << 10
};
} // namespace filters

View File

@@ -0,0 +1,40 @@
#include "speed_tracker.h"
bool SpeedTracker::track(const analyzer::State* state,
int32_t* steps_per_sec) {
// First time after reset.
if (!has_data_) {
last_ticks_ = state->tick_count;
last_steps_ = state->full_steps;
has_data_ = true;
return false;
}
// This should behave well even when tick_count overflows.
const uint32_t delta_ticks = state->tick_count - last_ticks_;
// Expects a minimal time tick interval for good accuracy.
if (delta_ticks < (analyzer::TicksPerSecond / 25)) {
return false;
}
const int32_t delta_steps = state->full_steps - last_steps_;
// Hopefully this can't overflow. Otherwise need to compute
// using int64.
if (steps_per_sec != nullptr) {
const int32_t result =
(delta_steps * (int32_t)analyzer::TicksPerSecond) / (int32_t)delta_ticks;
*steps_per_sec = result;
}
// Update for next cycle.
last_ticks_ = state->tick_count;
last_steps_ = state->full_steps;
return true;
}

View File

@@ -0,0 +1,27 @@
// A simple class to track time and steps pairs and compute the
// speed.
#pragma once
#include "analyzer.h"
class SpeedTracker {
public:
SpeedTracker() { reset(); }
void reset() {
has_data_ = false;
last_ticks_ = 0;
last_steps_ = 0;
}
// Track a new sample. If a pulse/sec estimation is available
// it returns true and updates *steps_per_sec. 'steps_per_sec'
// is ignored if null.
bool track(const analyzer::State* state, int32_t* steps_per_sec);
private:
bool has_data_;
uint32_t last_ticks_;
int32_t last_steps_;
};

23
platformio/src/config.h Normal file
View File

@@ -0,0 +1,23 @@
#pragma once
#define VERSION_STRING "1.0.0"
namespace config {
// FOR DEBUGGING ONLY. Turn off for official releases.
// For UI debugging. Shows the boundaries of UI objects.
static constexpr bool kDebugBackgrounds = false;
// For developers only. When enabled, clicking on a
// screen's title field pauses the program and sends a screen
// dump over the USB/serial connection.
static constexpr bool kEnableScreenshots = false;
// For developers only. When enabled, clicking on a
// screen's title field generates a Debug event for that
// screen.
static constexpr bool kEnableDebugEvents = false;
} // namespace config

View File

@@ -0,0 +1,295 @@
#include "gpio_tables.h"
// Tables were generated using the gpio_tables_generator.py script.
namespace gpio_tables {
// PIN MAP:
// WR 1
//
// D0 28
// D1 3
// D2 6
// D3 7
// D4 8
// D5 9
// D6 22
// D7 10
// D8 11
// D9 21
// D10 12
// D11 20
// D12 13
// D13 19
// D14 14
// D15 18
const uint32_t gpio_direct_set_table[] = {
0x00000000, 0x10000000, 0x00000008, 0x10000008, // 0x00 - 0x03
0x00000040, 0x10000040, 0x00000048, 0x10000048, // 0x04 - 0x07
0x00000080, 0x10000080, 0x00000088, 0x10000088, // 0x08 - 0x0b
0x000000c0, 0x100000c0, 0x000000c8, 0x100000c8, // 0x0c - 0x0f
0x00000100, 0x10000100, 0x00000108, 0x10000108, // 0x10 - 0x13
0x00000140, 0x10000140, 0x00000148, 0x10000148, // 0x14 - 0x17
0x00000180, 0x10000180, 0x00000188, 0x10000188, // 0x18 - 0x1b
0x000001c0, 0x100001c0, 0x000001c8, 0x100001c8, // 0x1c - 0x1f
0x00000200, 0x10000200, 0x00000208, 0x10000208, // 0x20 - 0x23
0x00000240, 0x10000240, 0x00000248, 0x10000248, // 0x24 - 0x27
0x00000280, 0x10000280, 0x00000288, 0x10000288, // 0x28 - 0x2b
0x000002c0, 0x100002c0, 0x000002c8, 0x100002c8, // 0x2c - 0x2f
0x00000300, 0x10000300, 0x00000308, 0x10000308, // 0x30 - 0x33
0x00000340, 0x10000340, 0x00000348, 0x10000348, // 0x34 - 0x37
0x00000380, 0x10000380, 0x00000388, 0x10000388, // 0x38 - 0x3b
0x000003c0, 0x100003c0, 0x000003c8, 0x100003c8, // 0x3c - 0x3f
0x00400000, 0x10400000, 0x00400008, 0x10400008, // 0x40 - 0x43
0x00400040, 0x10400040, 0x00400048, 0x10400048, // 0x44 - 0x47
0x00400080, 0x10400080, 0x00400088, 0x10400088, // 0x48 - 0x4b
0x004000c0, 0x104000c0, 0x004000c8, 0x104000c8, // 0x4c - 0x4f
0x00400100, 0x10400100, 0x00400108, 0x10400108, // 0x50 - 0x53
0x00400140, 0x10400140, 0x00400148, 0x10400148, // 0x54 - 0x57
0x00400180, 0x10400180, 0x00400188, 0x10400188, // 0x58 - 0x5b
0x004001c0, 0x104001c0, 0x004001c8, 0x104001c8, // 0x5c - 0x5f
0x00400200, 0x10400200, 0x00400208, 0x10400208, // 0x60 - 0x63
0x00400240, 0x10400240, 0x00400248, 0x10400248, // 0x64 - 0x67
0x00400280, 0x10400280, 0x00400288, 0x10400288, // 0x68 - 0x6b
0x004002c0, 0x104002c0, 0x004002c8, 0x104002c8, // 0x6c - 0x6f
0x00400300, 0x10400300, 0x00400308, 0x10400308, // 0x70 - 0x73
0x00400340, 0x10400340, 0x00400348, 0x10400348, // 0x74 - 0x77
0x00400380, 0x10400380, 0x00400388, 0x10400388, // 0x78 - 0x7b
0x004003c0, 0x104003c0, 0x004003c8, 0x104003c8, // 0x7c - 0x7f
0x00000400, 0x10000400, 0x00000408, 0x10000408, // 0x80 - 0x83
0x00000440, 0x10000440, 0x00000448, 0x10000448, // 0x84 - 0x87
0x00000480, 0x10000480, 0x00000488, 0x10000488, // 0x88 - 0x8b
0x000004c0, 0x100004c0, 0x000004c8, 0x100004c8, // 0x8c - 0x8f
0x00000500, 0x10000500, 0x00000508, 0x10000508, // 0x90 - 0x93
0x00000540, 0x10000540, 0x00000548, 0x10000548, // 0x94 - 0x97
0x00000580, 0x10000580, 0x00000588, 0x10000588, // 0x98 - 0x9b
0x000005c0, 0x100005c0, 0x000005c8, 0x100005c8, // 0x9c - 0x9f
0x00000600, 0x10000600, 0x00000608, 0x10000608, // 0xa0 - 0xa3
0x00000640, 0x10000640, 0x00000648, 0x10000648, // 0xa4 - 0xa7
0x00000680, 0x10000680, 0x00000688, 0x10000688, // 0xa8 - 0xab
0x000006c0, 0x100006c0, 0x000006c8, 0x100006c8, // 0xac - 0xaf
0x00000700, 0x10000700, 0x00000708, 0x10000708, // 0xb0 - 0xb3
0x00000740, 0x10000740, 0x00000748, 0x10000748, // 0xb4 - 0xb7
0x00000780, 0x10000780, 0x00000788, 0x10000788, // 0xb8 - 0xbb
0x000007c0, 0x100007c0, 0x000007c8, 0x100007c8, // 0xbc - 0xbf
0x00400400, 0x10400400, 0x00400408, 0x10400408, // 0xc0 - 0xc3
0x00400440, 0x10400440, 0x00400448, 0x10400448, // 0xc4 - 0xc7
0x00400480, 0x10400480, 0x00400488, 0x10400488, // 0xc8 - 0xcb
0x004004c0, 0x104004c0, 0x004004c8, 0x104004c8, // 0xcc - 0xcf
0x00400500, 0x10400500, 0x00400508, 0x10400508, // 0xd0 - 0xd3
0x00400540, 0x10400540, 0x00400548, 0x10400548, // 0xd4 - 0xd7
0x00400580, 0x10400580, 0x00400588, 0x10400588, // 0xd8 - 0xdb
0x004005c0, 0x104005c0, 0x004005c8, 0x104005c8, // 0xdc - 0xdf
0x00400600, 0x10400600, 0x00400608, 0x10400608, // 0xe0 - 0xe3
0x00400640, 0x10400640, 0x00400648, 0x10400648, // 0xe4 - 0xe7
0x00400680, 0x10400680, 0x00400688, 0x10400688, // 0xe8 - 0xeb
0x004006c0, 0x104006c0, 0x004006c8, 0x104006c8, // 0xec - 0xef
0x00400700, 0x10400700, 0x00400708, 0x10400708, // 0xf0 - 0xf3
0x00400740, 0x10400740, 0x00400748, 0x10400748, // 0xf4 - 0xf7
0x00400780, 0x10400780, 0x00400788, 0x10400788, // 0xf8 - 0xfb
0x004007c0, 0x104007c0, 0x004007c8, 0x104007c8, // 0xfc - 0xff
};
const uint32_t gpio_direct_clr_table[] = {
0x107c7fca, 0x007c7fca, 0x107c7fc2, 0x007c7fc2, // 0x00 - 0x03
0x107c7f8a, 0x007c7f8a, 0x107c7f82, 0x007c7f82, // 0x04 - 0x07
0x107c7f4a, 0x007c7f4a, 0x107c7f42, 0x007c7f42, // 0x08 - 0x0b
0x107c7f0a, 0x007c7f0a, 0x107c7f02, 0x007c7f02, // 0x0c - 0x0f
0x107c7eca, 0x007c7eca, 0x107c7ec2, 0x007c7ec2, // 0x10 - 0x13
0x107c7e8a, 0x007c7e8a, 0x107c7e82, 0x007c7e82, // 0x14 - 0x17
0x107c7e4a, 0x007c7e4a, 0x107c7e42, 0x007c7e42, // 0x18 - 0x1b
0x107c7e0a, 0x007c7e0a, 0x107c7e02, 0x007c7e02, // 0x1c - 0x1f
0x107c7dca, 0x007c7dca, 0x107c7dc2, 0x007c7dc2, // 0x20 - 0x23
0x107c7d8a, 0x007c7d8a, 0x107c7d82, 0x007c7d82, // 0x24 - 0x27
0x107c7d4a, 0x007c7d4a, 0x107c7d42, 0x007c7d42, // 0x28 - 0x2b
0x107c7d0a, 0x007c7d0a, 0x107c7d02, 0x007c7d02, // 0x2c - 0x2f
0x107c7cca, 0x007c7cca, 0x107c7cc2, 0x007c7cc2, // 0x30 - 0x33
0x107c7c8a, 0x007c7c8a, 0x107c7c82, 0x007c7c82, // 0x34 - 0x37
0x107c7c4a, 0x007c7c4a, 0x107c7c42, 0x007c7c42, // 0x38 - 0x3b
0x107c7c0a, 0x007c7c0a, 0x107c7c02, 0x007c7c02, // 0x3c - 0x3f
0x103c7fca, 0x003c7fca, 0x103c7fc2, 0x003c7fc2, // 0x40 - 0x43
0x103c7f8a, 0x003c7f8a, 0x103c7f82, 0x003c7f82, // 0x44 - 0x47
0x103c7f4a, 0x003c7f4a, 0x103c7f42, 0x003c7f42, // 0x48 - 0x4b
0x103c7f0a, 0x003c7f0a, 0x103c7f02, 0x003c7f02, // 0x4c - 0x4f
0x103c7eca, 0x003c7eca, 0x103c7ec2, 0x003c7ec2, // 0x50 - 0x53
0x103c7e8a, 0x003c7e8a, 0x103c7e82, 0x003c7e82, // 0x54 - 0x57
0x103c7e4a, 0x003c7e4a, 0x103c7e42, 0x003c7e42, // 0x58 - 0x5b
0x103c7e0a, 0x003c7e0a, 0x103c7e02, 0x003c7e02, // 0x5c - 0x5f
0x103c7dca, 0x003c7dca, 0x103c7dc2, 0x003c7dc2, // 0x60 - 0x63
0x103c7d8a, 0x003c7d8a, 0x103c7d82, 0x003c7d82, // 0x64 - 0x67
0x103c7d4a, 0x003c7d4a, 0x103c7d42, 0x003c7d42, // 0x68 - 0x6b
0x103c7d0a, 0x003c7d0a, 0x103c7d02, 0x003c7d02, // 0x6c - 0x6f
0x103c7cca, 0x003c7cca, 0x103c7cc2, 0x003c7cc2, // 0x70 - 0x73
0x103c7c8a, 0x003c7c8a, 0x103c7c82, 0x003c7c82, // 0x74 - 0x77
0x103c7c4a, 0x003c7c4a, 0x103c7c42, 0x003c7c42, // 0x78 - 0x7b
0x103c7c0a, 0x003c7c0a, 0x103c7c02, 0x003c7c02, // 0x7c - 0x7f
0x107c7bca, 0x007c7bca, 0x107c7bc2, 0x007c7bc2, // 0x80 - 0x83
0x107c7b8a, 0x007c7b8a, 0x107c7b82, 0x007c7b82, // 0x84 - 0x87
0x107c7b4a, 0x007c7b4a, 0x107c7b42, 0x007c7b42, // 0x88 - 0x8b
0x107c7b0a, 0x007c7b0a, 0x107c7b02, 0x007c7b02, // 0x8c - 0x8f
0x107c7aca, 0x007c7aca, 0x107c7ac2, 0x007c7ac2, // 0x90 - 0x93
0x107c7a8a, 0x007c7a8a, 0x107c7a82, 0x007c7a82, // 0x94 - 0x97
0x107c7a4a, 0x007c7a4a, 0x107c7a42, 0x007c7a42, // 0x98 - 0x9b
0x107c7a0a, 0x007c7a0a, 0x107c7a02, 0x007c7a02, // 0x9c - 0x9f
0x107c79ca, 0x007c79ca, 0x107c79c2, 0x007c79c2, // 0xa0 - 0xa3
0x107c798a, 0x007c798a, 0x107c7982, 0x007c7982, // 0xa4 - 0xa7
0x107c794a, 0x007c794a, 0x107c7942, 0x007c7942, // 0xa8 - 0xab
0x107c790a, 0x007c790a, 0x107c7902, 0x007c7902, // 0xac - 0xaf
0x107c78ca, 0x007c78ca, 0x107c78c2, 0x007c78c2, // 0xb0 - 0xb3
0x107c788a, 0x007c788a, 0x107c7882, 0x007c7882, // 0xb4 - 0xb7
0x107c784a, 0x007c784a, 0x107c7842, 0x007c7842, // 0xb8 - 0xbb
0x107c780a, 0x007c780a, 0x107c7802, 0x007c7802, // 0xbc - 0xbf
0x103c7bca, 0x003c7bca, 0x103c7bc2, 0x003c7bc2, // 0xc0 - 0xc3
0x103c7b8a, 0x003c7b8a, 0x103c7b82, 0x003c7b82, // 0xc4 - 0xc7
0x103c7b4a, 0x003c7b4a, 0x103c7b42, 0x003c7b42, // 0xc8 - 0xcb
0x103c7b0a, 0x003c7b0a, 0x103c7b02, 0x003c7b02, // 0xcc - 0xcf
0x103c7aca, 0x003c7aca, 0x103c7ac2, 0x003c7ac2, // 0xd0 - 0xd3
0x103c7a8a, 0x003c7a8a, 0x103c7a82, 0x003c7a82, // 0xd4 - 0xd7
0x103c7a4a, 0x003c7a4a, 0x103c7a42, 0x003c7a42, // 0xd8 - 0xdb
0x103c7a0a, 0x003c7a0a, 0x103c7a02, 0x003c7a02, // 0xdc - 0xdf
0x103c79ca, 0x003c79ca, 0x103c79c2, 0x003c79c2, // 0xe0 - 0xe3
0x103c798a, 0x003c798a, 0x103c7982, 0x003c7982, // 0xe4 - 0xe7
0x103c794a, 0x003c794a, 0x103c7942, 0x003c7942, // 0xe8 - 0xeb
0x103c790a, 0x003c790a, 0x103c7902, 0x003c7902, // 0xec - 0xef
0x103c78ca, 0x003c78ca, 0x103c78c2, 0x003c78c2, // 0xf0 - 0xf3
0x103c788a, 0x003c788a, 0x103c7882, 0x003c7882, // 0xf4 - 0xf7
0x103c784a, 0x003c784a, 0x103c7842, 0x003c7842, // 0xf8 - 0xfb
0x103c780a, 0x003c780a, 0x103c7802, 0x003c7802, // 0xfc - 0xff
};
const uint32_t gpio_color_set_table[] = {
0x00000000, 0x00000088, 0x10000140, 0x100001c8, // 0x00 - 0x03
0x00000a00, 0x00000a88, 0x10000b40, 0x10000bc8, // 0x04 - 0x07
0x00600000, 0x00600088, 0x10600140, 0x106001c8, // 0x08 - 0x0b
0x00600a00, 0x00600a88, 0x10600b40, 0x10600bc8, // 0x0c - 0x0f
0x00001400, 0x00001488, 0x10001540, 0x100015c8, // 0x10 - 0x13
0x00001e00, 0x00001e88, 0x10001f40, 0x10001fc8, // 0x14 - 0x17
0x00601400, 0x00601488, 0x10601540, 0x106015c8, // 0x18 - 0x1b
0x00601e00, 0x00601e88, 0x10601f40, 0x10601fc8, // 0x1c - 0x1f
0x00080000, 0x00080088, 0x10080140, 0x100801c8, // 0x20 - 0x23
0x00080a00, 0x00080a88, 0x10080b40, 0x10080bc8, // 0x24 - 0x27
0x00680000, 0x00680088, 0x10680140, 0x106801c8, // 0x28 - 0x2b
0x00680a00, 0x00680a88, 0x10680b40, 0x10680bc8, // 0x2c - 0x2f
0x00081400, 0x00081488, 0x10081540, 0x100815c8, // 0x30 - 0x33
0x00081e00, 0x00081e88, 0x10081f40, 0x10081fc8, // 0x34 - 0x37
0x00681400, 0x00681488, 0x10681540, 0x106815c8, // 0x38 - 0x3b
0x00681e00, 0x00681e88, 0x10681f40, 0x10681fc8, // 0x3c - 0x3f
0x00104000, 0x00104088, 0x10104140, 0x101041c8, // 0x40 - 0x43
0x00104a00, 0x00104a88, 0x10104b40, 0x10104bc8, // 0x44 - 0x47
0x00704000, 0x00704088, 0x10704140, 0x107041c8, // 0x48 - 0x4b
0x00704a00, 0x00704a88, 0x10704b40, 0x10704bc8, // 0x4c - 0x4f
0x00105400, 0x00105488, 0x10105540, 0x101055c8, // 0x50 - 0x53
0x00105e00, 0x00105e88, 0x10105f40, 0x10105fc8, // 0x54 - 0x57
0x00705400, 0x00705488, 0x10705540, 0x107055c8, // 0x58 - 0x5b
0x00705e00, 0x00705e88, 0x10705f40, 0x10705fc8, // 0x5c - 0x5f
0x00184000, 0x00184088, 0x10184140, 0x101841c8, // 0x60 - 0x63
0x00184a00, 0x00184a88, 0x10184b40, 0x10184bc8, // 0x64 - 0x67
0x00784000, 0x00784088, 0x10784140, 0x107841c8, // 0x68 - 0x6b
0x00784a00, 0x00784a88, 0x10784b40, 0x10784bc8, // 0x6c - 0x6f
0x00185400, 0x00185488, 0x10185540, 0x101855c8, // 0x70 - 0x73
0x00185e00, 0x00185e88, 0x10185f40, 0x10185fc8, // 0x74 - 0x77
0x00785400, 0x00785488, 0x10785540, 0x107855c8, // 0x78 - 0x7b
0x00785e00, 0x00785e88, 0x10785f40, 0x10785fc8, // 0x7c - 0x7f
0x00042000, 0x00042088, 0x10042140, 0x100421c8, // 0x80 - 0x83
0x00042a00, 0x00042a88, 0x10042b40, 0x10042bc8, // 0x84 - 0x87
0x00642000, 0x00642088, 0x10642140, 0x106421c8, // 0x88 - 0x8b
0x00642a00, 0x00642a88, 0x10642b40, 0x10642bc8, // 0x8c - 0x8f
0x00043400, 0x00043488, 0x10043540, 0x100435c8, // 0x90 - 0x93
0x00043e00, 0x00043e88, 0x10043f40, 0x10043fc8, // 0x94 - 0x97
0x00643400, 0x00643488, 0x10643540, 0x106435c8, // 0x98 - 0x9b
0x00643e00, 0x00643e88, 0x10643f40, 0x10643fc8, // 0x9c - 0x9f
0x000c2000, 0x000c2088, 0x100c2140, 0x100c21c8, // 0xa0 - 0xa3
0x000c2a00, 0x000c2a88, 0x100c2b40, 0x100c2bc8, // 0xa4 - 0xa7
0x006c2000, 0x006c2088, 0x106c2140, 0x106c21c8, // 0xa8 - 0xab
0x006c2a00, 0x006c2a88, 0x106c2b40, 0x106c2bc8, // 0xac - 0xaf
0x000c3400, 0x000c3488, 0x100c3540, 0x100c35c8, // 0xb0 - 0xb3
0x000c3e00, 0x000c3e88, 0x100c3f40, 0x100c3fc8, // 0xb4 - 0xb7
0x006c3400, 0x006c3488, 0x106c3540, 0x106c35c8, // 0xb8 - 0xbb
0x006c3e00, 0x006c3e88, 0x106c3f40, 0x106c3fc8, // 0xbc - 0xbf
0x00146000, 0x00146088, 0x10146140, 0x101461c8, // 0xc0 - 0xc3
0x00146a00, 0x00146a88, 0x10146b40, 0x10146bc8, // 0xc4 - 0xc7
0x00746000, 0x00746088, 0x10746140, 0x107461c8, // 0xc8 - 0xcb
0x00746a00, 0x00746a88, 0x10746b40, 0x10746bc8, // 0xcc - 0xcf
0x00147400, 0x00147488, 0x10147540, 0x101475c8, // 0xd0 - 0xd3
0x00147e00, 0x00147e88, 0x10147f40, 0x10147fc8, // 0xd4 - 0xd7
0x00747400, 0x00747488, 0x10747540, 0x107475c8, // 0xd8 - 0xdb
0x00747e00, 0x00747e88, 0x10747f40, 0x10747fc8, // 0xdc - 0xdf
0x001c6000, 0x001c6088, 0x101c6140, 0x101c61c8, // 0xe0 - 0xe3
0x001c6a00, 0x001c6a88, 0x101c6b40, 0x101c6bc8, // 0xe4 - 0xe7
0x007c6000, 0x007c6088, 0x107c6140, 0x107c61c8, // 0xe8 - 0xeb
0x007c6a00, 0x007c6a88, 0x107c6b40, 0x107c6bc8, // 0xec - 0xef
0x001c7400, 0x001c7488, 0x101c7540, 0x101c75c8, // 0xf0 - 0xf3
0x001c7e00, 0x001c7e88, 0x101c7f40, 0x101c7fc8, // 0xf4 - 0xf7
0x007c7400, 0x007c7488, 0x107c7540, 0x107c75c8, // 0xf8 - 0xfb
0x007c7e00, 0x007c7e88, 0x107c7f40, 0x107c7fc8, // 0xfc - 0xff
};
const uint32_t gpio_color_clr_table[] = {
0x107c7fca, 0x107c7f42, 0x007c7e8a, 0x007c7e02, // 0x00 - 0x03
0x107c75ca, 0x107c7542, 0x007c748a, 0x007c7402, // 0x04 - 0x07
0x101c7fca, 0x101c7f42, 0x001c7e8a, 0x001c7e02, // 0x08 - 0x0b
0x101c75ca, 0x101c7542, 0x001c748a, 0x001c7402, // 0x0c - 0x0f
0x107c6bca, 0x107c6b42, 0x007c6a8a, 0x007c6a02, // 0x10 - 0x13
0x107c61ca, 0x107c6142, 0x007c608a, 0x007c6002, // 0x14 - 0x17
0x101c6bca, 0x101c6b42, 0x001c6a8a, 0x001c6a02, // 0x18 - 0x1b
0x101c61ca, 0x101c6142, 0x001c608a, 0x001c6002, // 0x1c - 0x1f
0x10747fca, 0x10747f42, 0x00747e8a, 0x00747e02, // 0x20 - 0x23
0x107475ca, 0x10747542, 0x0074748a, 0x00747402, // 0x24 - 0x27
0x10147fca, 0x10147f42, 0x00147e8a, 0x00147e02, // 0x28 - 0x2b
0x101475ca, 0x10147542, 0x0014748a, 0x00147402, // 0x2c - 0x2f
0x10746bca, 0x10746b42, 0x00746a8a, 0x00746a02, // 0x30 - 0x33
0x107461ca, 0x10746142, 0x0074608a, 0x00746002, // 0x34 - 0x37
0x10146bca, 0x10146b42, 0x00146a8a, 0x00146a02, // 0x38 - 0x3b
0x101461ca, 0x10146142, 0x0014608a, 0x00146002, // 0x3c - 0x3f
0x106c3fca, 0x106c3f42, 0x006c3e8a, 0x006c3e02, // 0x40 - 0x43
0x106c35ca, 0x106c3542, 0x006c348a, 0x006c3402, // 0x44 - 0x47
0x100c3fca, 0x100c3f42, 0x000c3e8a, 0x000c3e02, // 0x48 - 0x4b
0x100c35ca, 0x100c3542, 0x000c348a, 0x000c3402, // 0x4c - 0x4f
0x106c2bca, 0x106c2b42, 0x006c2a8a, 0x006c2a02, // 0x50 - 0x53
0x106c21ca, 0x106c2142, 0x006c208a, 0x006c2002, // 0x54 - 0x57
0x100c2bca, 0x100c2b42, 0x000c2a8a, 0x000c2a02, // 0x58 - 0x5b
0x100c21ca, 0x100c2142, 0x000c208a, 0x000c2002, // 0x5c - 0x5f
0x10643fca, 0x10643f42, 0x00643e8a, 0x00643e02, // 0x60 - 0x63
0x106435ca, 0x10643542, 0x0064348a, 0x00643402, // 0x64 - 0x67
0x10043fca, 0x10043f42, 0x00043e8a, 0x00043e02, // 0x68 - 0x6b
0x100435ca, 0x10043542, 0x0004348a, 0x00043402, // 0x6c - 0x6f
0x10642bca, 0x10642b42, 0x00642a8a, 0x00642a02, // 0x70 - 0x73
0x106421ca, 0x10642142, 0x0064208a, 0x00642002, // 0x74 - 0x77
0x10042bca, 0x10042b42, 0x00042a8a, 0x00042a02, // 0x78 - 0x7b
0x100421ca, 0x10042142, 0x0004208a, 0x00042002, // 0x7c - 0x7f
0x10785fca, 0x10785f42, 0x00785e8a, 0x00785e02, // 0x80 - 0x83
0x107855ca, 0x10785542, 0x0078548a, 0x00785402, // 0x84 - 0x87
0x10185fca, 0x10185f42, 0x00185e8a, 0x00185e02, // 0x88 - 0x8b
0x101855ca, 0x10185542, 0x0018548a, 0x00185402, // 0x8c - 0x8f
0x10784bca, 0x10784b42, 0x00784a8a, 0x00784a02, // 0x90 - 0x93
0x107841ca, 0x10784142, 0x0078408a, 0x00784002, // 0x94 - 0x97
0x10184bca, 0x10184b42, 0x00184a8a, 0x00184a02, // 0x98 - 0x9b
0x101841ca, 0x10184142, 0x0018408a, 0x00184002, // 0x9c - 0x9f
0x10705fca, 0x10705f42, 0x00705e8a, 0x00705e02, // 0xa0 - 0xa3
0x107055ca, 0x10705542, 0x0070548a, 0x00705402, // 0xa4 - 0xa7
0x10105fca, 0x10105f42, 0x00105e8a, 0x00105e02, // 0xa8 - 0xab
0x101055ca, 0x10105542, 0x0010548a, 0x00105402, // 0xac - 0xaf
0x10704bca, 0x10704b42, 0x00704a8a, 0x00704a02, // 0xb0 - 0xb3
0x107041ca, 0x10704142, 0x0070408a, 0x00704002, // 0xb4 - 0xb7
0x10104bca, 0x10104b42, 0x00104a8a, 0x00104a02, // 0xb8 - 0xbb
0x101041ca, 0x10104142, 0x0010408a, 0x00104002, // 0xbc - 0xbf
0x10681fca, 0x10681f42, 0x00681e8a, 0x00681e02, // 0xc0 - 0xc3
0x106815ca, 0x10681542, 0x0068148a, 0x00681402, // 0xc4 - 0xc7
0x10081fca, 0x10081f42, 0x00081e8a, 0x00081e02, // 0xc8 - 0xcb
0x100815ca, 0x10081542, 0x0008148a, 0x00081402, // 0xcc - 0xcf
0x10680bca, 0x10680b42, 0x00680a8a, 0x00680a02, // 0xd0 - 0xd3
0x106801ca, 0x10680142, 0x0068008a, 0x00680002, // 0xd4 - 0xd7
0x10080bca, 0x10080b42, 0x00080a8a, 0x00080a02, // 0xd8 - 0xdb
0x100801ca, 0x10080142, 0x0008008a, 0x00080002, // 0xdc - 0xdf
0x10601fca, 0x10601f42, 0x00601e8a, 0x00601e02, // 0xe0 - 0xe3
0x106015ca, 0x10601542, 0x0060148a, 0x00601402, // 0xe4 - 0xe7
0x10001fca, 0x10001f42, 0x00001e8a, 0x00001e02, // 0xe8 - 0xeb
0x100015ca, 0x10001542, 0x0000148a, 0x00001402, // 0xec - 0xef
0x10600bca, 0x10600b42, 0x00600a8a, 0x00600a02, // 0xf0 - 0xf3
0x106001ca, 0x10600142, 0x0060008a, 0x00600002, // 0xf4 - 0xf7
0x10000bca, 0x10000b42, 0x00000a8a, 0x00000a02, // 0xf8 - 0xfb
0x100001ca, 0x10000142, 0x0000008a, 0x00000002, // 0xfc - 0xff
};
} // namespace gpio_tables

View File

@@ -0,0 +1,12 @@
#pragma once
#include <stdint.h>
namespace gpio_tables {
extern const uint32_t gpio_direct_set_table[];
extern const uint32_t gpio_direct_clr_table[];
extern const uint32_t gpio_color_set_table[];
extern const uint32_t gpio_color_clr_table[];
} // namespace gpio_tables

View File

@@ -0,0 +1,202 @@
// See display porting here:
// https://docs.lvgl.io/v7/en/html/porting/display.html
#include "lvgl_adapter.h"
#include <stdio.h>
#include "io.h"
#include "lvgl.h"
#include "pico/stdlib.h"
#include "tft_driver.h"
#include "touch_driver.h"
#if LV_COLOR_DEPTH != 8
#error "Expecting LVGL color depth of 8"
#endif
namespace lvgl_adapter {
#define MY_DISP_HOR_RES (480)
// A static variable to store the buffers.
static lv_disp_buf_t disp_buf;
// LVGL renders up to this number of pixels at a time.
//static constexpr uint32_t kBufferSize = MY_DISP_HOR_RES * 40;
static constexpr uint32_t kBufferSize = MY_DISP_HOR_RES * 320;
// Static buffer(s). Since we don't use DMA, we use only a
// single buffer and define the second one as NULL.
static lv_color_t buf_1[kBufferSize];
// For developer's usage. Eatables screen capture for
// documentation. Do not release with this flag set.
static bool screen_capture_enabled = false;
// A handler to print lvgl log messages.
// Log level is configured in lv_conf.h.
static void my_log_cb(lv_log_level_t level, const char* file, uint32_t line,
const char* fn_name, const char* dsc) {
// Send the logs via serial port.
// TODO: change to switch().
if (level == LV_LOG_LEVEL_ERROR)
printf("ERROR: ");
else if (level == LV_LOG_LEVEL_WARN)
printf("WARNING: ");
else if (level == LV_LOG_LEVEL_INFO)
printf("INFO: ");
else if (level == LV_LOG_LEVEL_TRACE)
printf("TRACE: ");
// TODO: Merge to a single printf (?). Unless if it causes problems with the
// USB output.
printf("File: ");
printf("%s", file);
printf("#");
printf("%lu", line);
printf(": ");
printf("%s", fn_name);
printf(": ");
printf("%s", dsc);
printf("\n");
}
// NOTE: Capture the dumpped text using an external terminal emularot.
// Platformio's own terminal drops line seperators in some cases.
//
// Used during debugging to dump the screen. Enabled by
// ui::kEnableScreenshots.
static void capture_buffer(const lv_area_t* area, lv_color_t* bfr) {
const int32_t w_pixels = area->x2 - area->x1 + 1;
const int32_t h_pixels = area->y2 - area->y1 + 1;
// x,y are relative to the area.
for (int y = 0; y < h_pixels; y++) {
printf("#%d,%d,%ld", area->x1, area->y1 + y, w_pixels);
uint16_t pending_pixels_count = 0;
uint8_t pending_pixel_color = 0;
for (int x = 0; x < w_pixels; x++) {
uint8_t pixel_color = bfr[(uint32_t)y * w_pixels + x].full;
// Case 0: no pending.
if (pending_pixels_count == 0) {
pending_pixels_count = 1;
pending_pixel_color = pixel_color;
continue;
}
// Case 1: pending exists, append to pending.
if (pending_pixel_color == pixel_color) {
pending_pixels_count++;
continue;
}
// Case 2: pending exist, flushing pending.
printf(",%hu:%hx", pending_pixels_count, pending_pixel_color);
pending_pixel_color = pixel_color;
pending_pixels_count = 1;
}
// Flush end of line.
if (pending_pixels_count > 0) {
printf(",%hu:%hx", pending_pixels_count, pending_pixel_color);
}
printf("\n");
// This prevents loss of data.
//sleep_ms(25);
}
}
// Called by LV_GL to flush a buffer to the display. Per our LVGL config,
// color is uint16_t RGB565.
static void my_flush_cb(lv_disp_drv_t* disp_drv, const lv_area_t* area,
lv_color_t* color_p) {
LED2_ON;
if (screen_capture_enabled) {
capture_buffer(area, color_p);
}
// Per our lv config settings, LVGL uses 8 bits colors.
const lv_color8_t* lv_color8 = static_cast<lv_color8_t*>(color_p);
tft_driver::render_buffer(area->x1, area->y1, area->x2, area->y2,
(uint8_t*)lv_color8);
// IMPORTANT!!! Inform the graphics library that flushing was done.
lv_disp_flush_ready(disp_drv);
LED2_OFF;
}
void static init_display_driver() {
// Initialize `disp_buf` with the buffer. We pass NULL for
// the second (optional) buffer since we don't use DMA.
lv_disp_buf_init(&disp_buf, buf_1, NULL, kBufferSize);
lv_disp_drv_t disp_drv;
lv_disp_drv_init(&disp_drv);
// Sets an initialized buffer.
disp_drv.buffer = &disp_buf;
// Sets a flush callback to draw to the display.
disp_drv.flush_cb = my_flush_cb;
// Register the driver and save the created display objects.
lv_disp_drv_register(&disp_drv);
}
// This is how LVGL reads the touch screen's status.
bool my_touch_read_cb(lv_indev_drv_t* drv, lv_indev_data_t* data) {
uint16_t x, y;
bool is_pressed;
touch_driver::touch_read(&x, &y, &is_pressed);
data->point.x = x;
data->point.y = y;
data->state = is_pressed ? LV_INDEV_STATE_PR : LV_INDEV_STATE_REL;
// No buffering now so no more data read.
return false;
}
void static init_touch_driver() {
lv_indev_drv_t indev_drv;
lv_indev_drv_init(&indev_drv);
indev_drv.type = LV_INDEV_TYPE_POINTER;
indev_drv.read_cb = my_touch_read_cb;
// Register the driver in LVGL and save the created input device object.
// TODO: verify result is not null (error)
lv_indev_drv_register(&indev_drv);
}
// Called once from main on program start.
void setup() {
lv_init();
// lv_log_print_g_cb_t
lv_log_register_print_cb(my_log_cb);
init_display_driver();
init_touch_driver();
}
void dump_stats() {
lv_mem_monitor_t lv_info;
lv_mem_monitor(&lv_info);
printf("total_size=%lu, free_cnt=%lu, free_size=%lu, free_bigest_size=%lu\n",
lv_info.total_size, lv_info.free_cnt, lv_info.free_size,
lv_info.free_biggest_size);
printf("used_cnt=%lu, max_used=%lu, used_pct=%hu, frag_pct=%hu\n",
lv_info.used_cnt, lv_info.max_used, lv_info.used_pct,
lv_info.frag_pct);
}
// For developer's usage. Dump the current screen.
void start_screen_capture() {
screen_capture_enabled = true;
printf("###BEGIN screen capture\n");
}
void stop_screen_capture() {
screen_capture_enabled = false;
printf("###END screen capture\n");
}
} // namespace lvgl_adapter

View File

@@ -0,0 +1,14 @@
#pragma once
namespace lvgl_adapter {
extern void setup();
// For developement.
extern void dump_stats();
extern void start_screen_capture();
extern void stop_screen_capture();
} // namespace lvgl_adapter

View File

@@ -0,0 +1,229 @@
#include "tft_driver.h"
#include "gpio_tables.h"
#include "hardware/gpio.h"
#include "io.h"
#include "pico/stdlib.h"
// // Assuming landscape mode per memory access command 0x36.
#define WIDTH 480
#define HEIGHT 320
#define ILI9488_SLPOUT 0x11
#define ILI9488_DISPON 0x29
#define ILI9488_CASET 0x2A
#define ILI9488_PASET 0x2B
#define ILI9488_RAMWR 0x2C
#define ILI9488_RAMRD 0x2E
namespace tft_driver {
// Send a byte to the TFT. Since the interface to the TFT is
// 16 bits parallel, it writes a 16 bits value where the upper
// 8 bits are all zero.
//
// Note that actual pixels are written by separate code in this file
// which sends them as 16 bits color values.
static inline void write_byte(uint8_t c) {
sio_hw->gpio_set = gpio_tables::gpio_direct_set_table[c];
// NOTE: The gpio_direct_clr_table is configured to also do the
// equivalent of TFT_WR_LOW.
sio_hw->gpio_clr = gpio_tables::gpio_direct_clr_table[c];
// __asm volatile ("nop\n");
// __asm volatile ("nop\n");
TFT_WR_HIGH;
}
void write_command_byte(uint8_t c) {
TFT_DC_LOW; // Indicates a command
write_byte(c);
}
void write_data_byte(uint8_t c) {
TFT_DC_HIGH; // Indicates data
write_byte(c);
}
void begin() {
// NOTE: To avoid flicker, TFT_BL is set to an inactive state earlier,
// when initializing the pins and is enabled later after rendering the
// first screen.
TFT_WR_HIGH;
TFT_RST_HIGH;
sleep_ms(5);
TFT_RST_LOW;
sleep_ms(20);
TFT_RST_HIGH;
sleep_ms(150);
write_command_byte(0xE0);
write_data_byte(0x00);
write_data_byte(0x03);
write_data_byte(0x09);
write_data_byte(0x08);
write_data_byte(0x16);
write_data_byte(0x0A);
write_data_byte(0x3F);
write_data_byte(0x78);
write_data_byte(0x4C);
write_data_byte(0x09);
write_data_byte(0x0A);
write_data_byte(0x08);
write_data_byte(0x16);
write_data_byte(0x1A);
write_data_byte(0x0F);
write_command_byte(0XE1);
write_data_byte(0x00);
write_data_byte(0x16);
write_data_byte(0x19);
write_data_byte(0x03);
write_data_byte(0x0F);
write_data_byte(0x05);
write_data_byte(0x32);
write_data_byte(0x45);
write_data_byte(0x46);
write_data_byte(0x04);
write_data_byte(0x0E);
write_data_byte(0x0D);
write_data_byte(0x35);
write_data_byte(0x37);
write_data_byte(0x0F);
write_command_byte(0XC0); // Power Control 1
write_data_byte(0x17); // Vreg1out
write_data_byte(0x15); // Verg2out
write_command_byte(0xC1); // Power Control 2
write_data_byte(0x41); // VGH,VGL
write_command_byte(0xC5); // Power Control 3
write_data_byte(0x00);
write_data_byte(0x12); // Vcom
write_data_byte(0x80);
write_command_byte(0x36); // Memory Access
write_data_byte(0xe8); // landscape mode. Swapping and mirroring x, y.
// NOTE: For 16bit parallel transfer, IM jumpers need to be set
// as 010.
write_command_byte(0x3A); // Interface Pixel Format
write_data_byte(0x55); // 16 bit
write_command_byte(0XB0); // Interface Mode Control
write_data_byte(0x80); // SDO NOT USE
write_command_byte(0xB1); // Frame rate
write_data_byte(0xA0); // 60Hz
write_command_byte(0xB4); // Display Inversion Control
write_data_byte(0x02); // 2-dot
write_command_byte(0XB6); // Display Function Control RGB/MCU Interface Control
write_data_byte(0x02); // MCU
write_data_byte(0x02); // Source,Gate scan direction
write_command_byte(0XE9); // Set Image Function
write_data_byte(0x00); // Disable 24 bit data
write_command_byte(0xF7); // Adjust Control
write_data_byte(0xA9);
write_data_byte(0x51);
write_data_byte(0x2C);
write_data_byte(0x82); // D7 stream, loose
write_command_byte(ILI9488_SLPOUT); // Exit Sleep
sleep_ms(120);
write_command_byte(ILI9488_DISPON); // Display on
}
// This is followed by a stream of pixels to render in this
// rectangle.
void setAddrWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1) {
write_command_byte(ILI9488_CASET); // Column addr set
write_data_byte(x0 >> 8);
write_data_byte(x0 & 0xFF); // XSTART
write_data_byte(x1 >> 8);
write_data_byte(x1 & 0xFF); // XEND
write_command_byte(ILI9488_PASET); // Row addr set
write_data_byte(y0 >> 8);
write_data_byte(y0 & 0xff); // YSTART
write_data_byte(y1 >> 8);
write_data_byte(y1 & 0xff); // YEND
// Should follow by data bytes.
write_command_byte(ILI9488_RAMWR); // write to RAM
// Next send the pixels data.
TFT_DC_HIGH;
}
// NOTE: The gpio_color_clr_table is configured to also do the
// equivalent of TFT_WR_LOW. This macro was optimized for pixel
// transfer speed while still maintaining data setup and hold
// time relative to the positive transition of the WR signal.
#define SEND_PIXEL(i) \
color = p[i]; \
TFT_WR_HIGH; \
sio_hw->gpio_set = gpio_tables::gpio_color_set_table[color]; \
sio_hw->gpio_clr = gpio_tables::gpio_color_clr_table[color];
void render_buffer(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2,
const uint8_t* color8_p) {
setAddrWindow(x1, y1, x2, y2);
const int32_t w_pixels = x2 - x1 + 1;
const int32_t h_pixels = y2 - y1 + 1;
const uint32_t pixels_count = w_pixels * h_pixels;
const uint8_t* p = color8_p;
const uint8_t* const p_limit = p + pixels_count;
const uint8_t* const p_limit_minus_20 = p_limit - 20;
// Fast loop with 8 pixels per iteration.
uint8_t color = 0;
while (p < p_limit_minus_20) {
SEND_PIXEL(0);
SEND_PIXEL(1);
SEND_PIXEL(2);
SEND_PIXEL(3);
SEND_PIXEL(4);
SEND_PIXEL(5);
SEND_PIXEL(6);
SEND_PIXEL(7);
SEND_PIXEL(8);
SEND_PIXEL(9);
SEND_PIXEL(10);
SEND_PIXEL(11);
SEND_PIXEL(12);
SEND_PIXEL(13);
SEND_PIXEL(14);
SEND_PIXEL(15);
SEND_PIXEL(16);
SEND_PIXEL(17);
SEND_PIXEL(18);
SEND_PIXEL(19);
p += 20;
}
// Remaining pixels.
while (p < p_limit) {
SEND_PIXEL(0);
p++;
}
// Make sure last pixel has sufficient hold time.
// __asm volatile("nop\n");
// __asm volatile("nop\n");
TFT_WR_HIGH;
}
} // namespace tft_driver

View File

@@ -0,0 +1,13 @@
#pragma once
#include <stdint.h>
namespace tft_driver {
extern void begin();
extern void render_buffer(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2,
const uint8_t* color8_p);
} // namespace tft_driver

View File

@@ -0,0 +1,269 @@
// // Based on ESP32 port
// //
// https://github.com/lvgl/lv_port_esp32/blob/ace36bf14af1ca96faa56ea9dedc3cba6fb2415a/components/lvgl_esp32_drivers/lvgl_touch/ft6x36.c
#include "touch_driver.h"
#include <stdio.h>
#include "hardware/gpio.h"
#include "hardware/i2c.h"
#include "pico/stdlib.h"
#define FT6236_I2C_SLAVE_ADDR 0x38
// Dimensions of the touch panel
#define MAX_X ((uint16_t)480)
#define MAX_Y ((uint16_t)320)
/* Max detectable simultaneous touch points */
#define FT6X36_MAX_TOUCH_PNTS 2
/* Register of the current mode */
#define FT6X36_DEV_MODE_REG 0x00
/* Possible modes as of FT6X36_DEV_MODE_REG */
#define FT6X36_DEV_MODE_WORKING 0x00
#define FT6X36_DEV_MODE_FACTORY 0x04
#define FT6X36_DEV_MODE_MASK 0x70
#define FT6X36_DEV_MODE_SHIFT 4
/* Gesture ID register */
#define FT6X36_GEST_ID_REG 0x01
/* Possible values returned by FT6X36_GEST_ID_REG */
#define FT6X36_GEST_ID_NO_GESTURE 0x00
#define FT6X36_GEST_ID_MOVE_UP 0x10
#define FT6X36_GEST_ID_MOVE_RIGHT 0x14
#define FT6X36_GEST_ID_MOVE_DOWN 0x18
#define FT6X36_GEST_ID_MOVE_LEFT 0x1C
#define FT6X36_GEST_ID_ZOOM_IN 0x48
#define FT6X36_GEST_ID_ZOOM_OUT 0x49
/* Status register: stores number of active touch points (0, 1, 2) */
#define FT6X36_TD_STAT_REG 0x02
#define FT6X36_TD_STAT_MASK 0x0F
#define FT6X36_TD_STAT_SHIFT 0x00
/* Touch events */
#define FT6X36_TOUCH_EVT_FLAG_PRESS_DOWN 0x00
#define FT6X36_TOUCH_EVT_FLAG_LIFT_UP 0x01
#define FT6X36_TOUCH_EVT_FLAG_CONTACT 0x02
#define FT6X36_TOUCH_EVT_FLAG_NO_EVENT 0x03
#define FT6X36_TOUCH_EVT_FLAG_SHIFT 6
#define FT6X36_TOUCH_EVT_FLAG_MASK (3 << FT6X36_TOUCH_EVT_FLAG_SHIFT)
#define FT6X36_MSB_MASK 0x0F
#define FT6X36_MSB_SHIFT 0
#define FT6X36_LSB_MASK 0xFF
#define FT6X36_LSB_SHIFT 0
#define FT6X36_P1_XH_REG 0x03
#define FT6X36_P1_XL_REG 0x04
#define FT6X36_P1_YH_REG 0x05
#define FT6X36_P1_YL_REG 0x06
#define FT6X36_P1_WEIGHT_REG \
0x07 /* Register reporting touch pressure - read only */
#define FT6X36_TOUCH_WEIGHT_MASK 0xFF
#define FT6X36_TOUCH_WEIGHT_SHIFT 0
#define FT6X36_P1_MISC_REG 0x08 /* Touch area register */
#define FT6X36_TOUCH_AREA_MASK \
(0x04 << 4) /* Values related to FT6X36_Pn_MISC_REG */
#define FT6X36_TOUCH_AREA_SHIFT 0x04
#define FT6X36_P2_XH_REG 0x09
#define FT6X36_P2_XL_REG 0x0A
#define FT6X36_P2_YH_REG 0x0B
#define FT6X36_P2_YL_REG 0x0C
#define FT6X36_P2_WEIGHT_REG 0x0D
#define FT6X36_P2_MISC_REG 0x0E
/* Threshold for touch detection */
#define FT6X36_TH_GROUP_REG 0x80
#define FT6X36_THRESHOLD_MASK \
0xFF /* Values FT6X36_TH_GROUP_REG : threshold related */
#define FT6X36_THRESHOLD_SHIFT 0
#define FT6X36_TH_DIFF_REG 0x85 /* Filter function coefficients */
#define FT6X36_CTRL_REG 0x86 /* Control register */
#define FT6X36_CTRL_KEEP_ACTIVE_MODE \
0x00 /* Will keep the Active mode when there is no touching */
#define FT6X36_CTRL_KEEP_AUTO_SWITCH_MONITOR_MODE \
0x01 /* Switching from Active mode to Monitor mode automatically when there \
is no touching */
#define FT6X36_TIME_ENTER_MONITOR_REG \
0x87 /* The time period of switching from Active mode to Monitor mode when \
there is no touching */
#define FT6X36_PERIOD_ACTIVE_REG 0x88 /* Report rate in Active mode */
#define FT6X36_PERIOD_MONITOR_REG 0x89 /* Report rate in Monitor mode */
#define FT6X36_RADIAN_VALUE_REG \
0x91 /* The value of the minimum allowed angle while Rotating gesture mode \
*/
#define FT6X36_OFFSET_LEFT_RIGHT_REG \
0x92 /* Maximum offset while Moving Left and Moving Right gesture */
#define FT6X36_OFFSET_UP_DOWN_REG \
0x93 /* Maximum offset while Moving Up and Moving Down gesture */
#define FT6X36_DISTANCE_LEFT_RIGHT_REG \
0x94 /* Minimum distance while Moving Left and Moving Right gesture */
#define FT6X36_DISTANCE_UP_DOWN_REG \
0x95 /* Minimum distance while Moving Up and Moving Down gesture */
#define FT6X36_LIB_VER_H_REG 0xA1 /* High 8-bit of LIB Version info */
#define FT6X36_LIB_VER_L_REG 0xA2 /* Low 8-bit of LIB Version info */
#define FT6X36_CHIPSELECT_REG 0xA3 /* 0x36 for ft6236; 0x06 for ft6206 */
#define FT6X36_POWER_MODE_REG 0xA5
#define FT6X36_FIRMWARE_ID_REG 0xA6
#define FT6X36_RELEASECODE_REG 0xAF
#define FT6X36_PANEL_ID_REG 0xA8
#define FT6X36_OPMODE_REG 0xBC
// // Assuming landscape mode per memory access command 0x36.
namespace touch_driver {
bool ft6x06_i2c_read_8bit_register_until(uint8_t register_addr, uint8_t* data_buf, absolute_time_t deadline) {
// uint8_t val = 0x3B;
// TODO: Add timeout using i2c_read_blocking_until
// i2c_write_blocking(i2c_default, addr, &val, 1, true); // true to keep
// master control of bus
const int byte_written = i2c_write_blocking_until(
i2c_default, FT6236_I2C_SLAVE_ADDR, &register_addr, 1, true, deadline);
if (byte_written != 1) {
return false;
}
const int bytes_read =
i2c_read_blocking_until(i2c_default, FT6236_I2C_SLAVE_ADDR, data_buf, 1, false, deadline);
return bytes_read == 1;
}
void test() {
absolute_time_t deadline = make_timeout_time_ms(100);
printf("\n");
// Serial.println();
uint8_t data_buf = 0;
bool ok = ft6x06_i2c_read_8bit_register_until(FT6X36_PANEL_ID_REG, &data_buf, deadline);
printf("FT6X36_PANEL_ID_REG: status=%d, value=%02hhx\n", (int)ok, data_buf);
ok = ft6x06_i2c_read_8bit_register_until(FT6X36_CHIPSELECT_REG, &data_buf, deadline);
printf("FT6X36_CHIPSELECT_REG: status=%d, value=%02hhx\n", (int)ok, data_buf);
ok = ft6x06_i2c_read_8bit_register_until(FT6X36_DEV_MODE_REG, &data_buf, deadline);
printf("FT6X36_DEV_MODE_REG: status=%d, value=%02hhx\n", (int)ok, data_buf);
ok = ft6x06_i2c_read_8bit_register_until(FT6X36_FIRMWARE_ID_REG, &data_buf, deadline);
printf("FT6X36_FIRMWARE_ID_REG: status=%d, value=%02hhx\n", (int)ok, data_buf);
ok = ft6x06_i2c_read_8bit_register_until(FT6X36_RELEASECODE_REG, &data_buf, deadline);
printf("FT6X36_RELEASECODE_REG: status=%d, value=%02hhx\n", (int)ok, data_buf);
}
// TODO: return last x, y in case of an error, as the ESP32 port does.
void touch_read(uint16_t* x, uint16_t* y, bool* is_pressed) {
const absolute_time_t deadline = make_timeout_time_ms(5);
// uint8_t data_xy[4]; // 2 bytes X | 2 bytes Y
static int16_t last_x = 0;
static int16_t last_y = 0;
// Set default for cases of an early exit.
*x = last_x;
*y = last_y;
*is_pressed = false;
uint8_t touch_pnt_cnt; // Number of detected touch points
// ft6x06_i2c_read8(current_dev_addr, FT6X36_TD_STAT_REG, &touch_pnt_cnt);
ft6x06_i2c_read_8bit_register_until(FT6X36_TD_STAT_REG, &touch_pnt_cnt, deadline);
if (touch_pnt_cnt != 1) { // ignore no touch & multi touch
return;
}
// Continue to read the x,y
uint8_t tx_bfr1[] = {FT6X36_P1_XH_REG};
const int bytes_written1 = i2c_write_blocking_until(
i2c_default, FT6236_I2C_SLAVE_ADDR, tx_bfr1, sizeof(tx_bfr1), true, deadline);
if (bytes_written1 != sizeof(tx_bfr1)) {
return;
}
uint8_t rx_bfr1[2];
const int bytes_read1 = i2c_read_blocking_until(i2c_default, FT6236_I2C_SLAVE_ADDR,
rx_bfr1, sizeof(rx_bfr1), false, deadline);
if (bytes_read1 != sizeof(rx_bfr1)) {
return;
}
uint8_t tx_bfr2[] = {FT6X36_P1_YH_REG};
const int bytes_written2 = i2c_write_blocking_until(
i2c_default, FT6236_I2C_SLAVE_ADDR, tx_bfr2, sizeof(tx_bfr2), true, deadline);
if (bytes_written2 != sizeof(tx_bfr2)) {
return;
}
uint8_t rx_bfr2[2];
const int bytes_read2 = i2c_read_blocking_until(i2c_default, FT6236_I2C_SLAVE_ADDR,
rx_bfr2, sizeof(rx_bfr2), false, deadline);
if (bytes_read2 != sizeof(rx_bfr2)) {
return;
}
// Note that we swap x, y.
last_y =
((rx_bfr1[0] & FT6X36_MSB_MASK) << 8) | (rx_bfr1[1] & FT6X36_LSB_MASK);
last_x =
((rx_bfr2[0] & FT6X36_MSB_MASK) << 8) | (rx_bfr2[1] & FT6X36_LSB_MASK);
// invert x.
last_x = MAX_X - last_x;
*x = last_x;
*y = last_y;
*is_pressed = true;
}
void setup() {
// This example will use I2C0 on the default SDA and SCL pins (4, 5 on a Pico)
i2c_init(i2c0, 100 * 1000);
gpio_set_function(PICO_DEFAULT_I2C_SDA_PIN, GPIO_FUNC_I2C);
gpio_set_function(PICO_DEFAULT_I2C_SCL_PIN, GPIO_FUNC_I2C);
gpio_pull_up(PICO_DEFAULT_I2C_SDA_PIN);
gpio_pull_up(PICO_DEFAULT_I2C_SCL_PIN);
}
} // namespace touch_driver

View File

@@ -0,0 +1,11 @@
#pragma once
#include <stdint.h>
namespace touch_driver {
extern void setup();
extern void test();
extern void touch_read(uint16_t* x, uint16_t* y, bool* is_pressed);
} // namespace touch_driver

View File

File diff suppressed because it is too large Load Diff

View File

File diff suppressed because it is too large Load Diff

View File

File diff suppressed because it is too large Load Diff

View File

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,277 @@
#include "lvgl.h"
/*******************************************************************************
* Size: 22 px
* Bpp: 4
* Opts:
******************************************************************************/
#ifndef FONT_MONTSERRAT_NUMERIC_20
#define FONT_MONTSERRAT_NUMERIC_20 1
#endif
#if FONT_MONTSERRAT_NUMERIC_20
/*-----------------
* BITMAPS
*----------------*/
/*Store the image of the glyphs*/
static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = {
/* U+2B "+" */
0x0, 0x0, 0x48, 0x20, 0x0, 0x0, 0x0, 0x8,
0xf5, 0x0, 0x0, 0x0, 0x0, 0x8f, 0x50, 0x0,
0x0, 0x0, 0x8, 0xf5, 0x0, 0x0, 0x49, 0x99,
0xcf, 0xb9, 0x99, 0x28, 0xff, 0xff, 0xff, 0xff,
0xf5, 0x13, 0x33, 0x9f, 0x73, 0x33, 0x0, 0x0,
0x8, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x8f, 0x50,
0x0, 0x0, 0x0, 0x8, 0xf5, 0x0, 0x0, 0x0,
0x0, 0x12, 0x0, 0x0, 0x0,
/* U+2C "," */
0x6d, 0x6e, 0xfe, 0x8f, 0xc2, 0xf7, 0x6f, 0x2a,
0xc0, 0x32, 0x0,
/* U+2D "-" */
0xbf, 0xff, 0xff, 0x2a, 0xee, 0xee, 0xe2,
/* U+2E "." */
0x6d, 0x6e, 0xfe, 0xaf, 0x90, 0x10,
/* U+30 "0" */
0x0, 0x0, 0x4, 0x78, 0x61, 0x0, 0x0, 0x0,
0x3, 0xdf, 0xff, 0xff, 0x90, 0x0, 0x0, 0x3f,
0xfd, 0x76, 0x9f, 0xfb, 0x0, 0x0, 0xdf, 0xa0,
0x0, 0x3, 0xff, 0x60, 0x5, 0xfe, 0x0, 0x0,
0x0, 0x6f, 0xd0, 0xa, 0xf8, 0x0, 0x0, 0x0,
0xf, 0xf2, 0xd, 0xf5, 0x0, 0x0, 0x0, 0xc,
0xf6, 0xf, 0xf3, 0x0, 0x0, 0x0, 0xa, 0xf7,
0xf, 0xf2, 0x0, 0x0, 0x0, 0xa, 0xf8, 0xe,
0xf3, 0x0, 0x0, 0x0, 0xb, 0xf7, 0xd, 0xf6,
0x0, 0x0, 0x0, 0xd, 0xf5, 0x8, 0xfa, 0x0,
0x0, 0x0, 0x2f, 0xf1, 0x3, 0xff, 0x30, 0x0,
0x0, 0xaf, 0xb0, 0x0, 0xaf, 0xe3, 0x0, 0x9,
0xff, 0x20, 0x0, 0xc, 0xff, 0xed, 0xff, 0xf5,
0x0, 0x0, 0x0, 0x7e, 0xff, 0xfb, 0x30, 0x0,
0x0, 0x0, 0x0, 0x12, 0x0, 0x0, 0x0,
/* U+31 "1" */
0x36, 0x66, 0x66, 0x9, 0xff, 0xff, 0xf1, 0x48,
0x88, 0xff, 0x10, 0x0, 0x1f, 0xf1, 0x0, 0x1,
0xff, 0x10, 0x0, 0x1f, 0xf1, 0x0, 0x1, 0xff,
0x10, 0x0, 0x1f, 0xf1, 0x0, 0x1, 0xff, 0x10,
0x0, 0x1f, 0xf1, 0x0, 0x1, 0xff, 0x10, 0x0,
0x1f, 0xf1, 0x0, 0x1, 0xff, 0x10, 0x0, 0x1f,
0xf1, 0x0, 0x1, 0xff, 0x10, 0x0, 0x1f, 0xf1,
/* U+32 "2" */
0x0, 0x2, 0x68, 0x87, 0x30, 0x0, 0x0, 0x3c,
0xff, 0xff, 0xff, 0xb1, 0x0, 0x3f, 0xfd, 0x86,
0x7a, 0xff, 0xb0, 0x0, 0xa8, 0x0, 0x0, 0x5,
0xff, 0x30, 0x0, 0x0, 0x0, 0x0, 0xe, 0xf5,
0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0x40, 0x0,
0x0, 0x0, 0x0, 0x3f, 0xf1, 0x0, 0x0, 0x0,
0x0, 0xd, 0xf8, 0x0, 0x0, 0x0, 0x0, 0xc,
0xfc, 0x0, 0x0, 0x0, 0x0, 0xc, 0xfd, 0x10,
0x0, 0x0, 0x0, 0x1c, 0xfc, 0x10, 0x0, 0x0,
0x0, 0x1d, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x1d,
0xfb, 0x0, 0x0, 0x0, 0x0, 0x1d, 0xfb, 0x0,
0x0, 0x0, 0x0, 0xe, 0xff, 0xee, 0xee, 0xee,
0xee, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,
/* U+33 "3" */
0x5, 0x66, 0x66, 0x66, 0x66, 0x62, 0xc, 0xff,
0xff, 0xff, 0xff, 0xf6, 0x6, 0x88, 0x88, 0x88,
0xcf, 0xe2, 0x0, 0x0, 0x0, 0x3, 0xff, 0x40,
0x0, 0x0, 0x0, 0x1e, 0xf7, 0x0, 0x0, 0x0,
0x0, 0xcf, 0x90, 0x0, 0x0, 0x0, 0x9, 0xfc,
0x0, 0x0, 0x0, 0x0, 0x3f, 0xfe, 0xb6, 0x0,
0x0, 0x0, 0x3d, 0xdf, 0xff, 0xc0, 0x0, 0x0,
0x0, 0x0, 0x5f, 0xf8, 0x0, 0x0, 0x0, 0x0,
0x7, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff,
0x2, 0x0, 0x0, 0x0, 0x7, 0xfd, 0x1e, 0xc4,
0x0, 0x0, 0x5f, 0xf7, 0x3e, 0xff, 0xfd, 0xdf,
0xff, 0xc0, 0x1, 0x7c, 0xff, 0xff, 0xd7, 0x0,
0x0, 0x0, 0x1, 0x20, 0x0, 0x0,
/* U+34 "4" */
0x0, 0x0, 0x0, 0x0, 0x56, 0x30, 0x0, 0x0,
0x0, 0x0, 0x0, 0x6f, 0xe1, 0x0, 0x0, 0x0,
0x0, 0x0, 0x3f, 0xf3, 0x0, 0x0, 0x0, 0x0,
0x0, 0x1e, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0,
0xb, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8,
0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff,
0x20, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0x50,
0x0, 0xff, 0x20, 0x0, 0x0, 0xdf, 0x90, 0x0,
0xf, 0xf2, 0x0, 0x0, 0xaf, 0xc0, 0x0, 0x0,
0xff, 0x20, 0x0, 0x6f, 0xfc, 0xaa, 0xaa, 0xaf,
0xfb, 0xaa, 0x9, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xf1, 0x13, 0x33, 0x33, 0x33, 0x3f, 0xf5,
0x33, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x20,
0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf2, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x20, 0x0,
/* U+35 "5" */
0x0, 0x36, 0x66, 0x66, 0x66, 0x60, 0x0, 0xaf,
0xff, 0xff, 0xff, 0xf2, 0x0, 0xbf, 0xa8, 0x88,
0x88, 0x81, 0x0, 0xdf, 0x30, 0x0, 0x0, 0x0,
0x0, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0xff,
0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0x44, 0x31,
0x0, 0x0, 0x3, 0xff, 0xff, 0xff, 0xe8, 0x10,
0x3, 0xaa, 0xaa, 0xbe, 0xff, 0xd1, 0x0, 0x0,
0x0, 0x0, 0x4e, 0xf9, 0x0, 0x0, 0x0, 0x0,
0x6, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff,
0x2, 0x0, 0x0, 0x0, 0x7, 0xfd, 0x1e, 0xc4,
0x0, 0x0, 0x5f, 0xf7, 0x3e, 0xff, 0xfd, 0xdf,
0xff, 0xc0, 0x1, 0x7c, 0xff, 0xff, 0xd7, 0x0,
0x0, 0x0, 0x1, 0x20, 0x0, 0x0,
/* U+36 "6" */
0x0, 0x0, 0x4, 0x78, 0x75, 0x10, 0x0, 0x0,
0x6e, 0xff, 0xff, 0xff, 0x30, 0x0, 0x9f, 0xfb,
0x65, 0x69, 0xc0, 0x0, 0x6f, 0xf4, 0x0, 0x0,
0x0, 0x0, 0xe, 0xf5, 0x0, 0x0, 0x0, 0x0,
0x4, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f,
0xa0, 0x2, 0x44, 0x20, 0x0, 0x9, 0xf8, 0x4d,
0xff, 0xff, 0xc3, 0x0, 0xaf, 0xcf, 0xe9, 0x79,
0xdf, 0xf3, 0xa, 0xff, 0xc1, 0x0, 0x0, 0xaf,
0xd0, 0x8f, 0xf3, 0x0, 0x0, 0x1, 0xff, 0x15,
0xff, 0x10, 0x0, 0x0, 0xf, 0xf2, 0xf, 0xf4,
0x0, 0x0, 0x2, 0xff, 0x0, 0x7f, 0xe2, 0x0,
0x1, 0xcf, 0xa0, 0x0, 0xaf, 0xfc, 0xab, 0xff,
0xd1, 0x0, 0x0, 0x6d, 0xff, 0xfe, 0x80, 0x0,
0x0, 0x0, 0x0, 0x21, 0x0, 0x0, 0x0,
/* U+37 "7" */
0x36, 0x66, 0x66, 0x66, 0x66, 0x66, 0x8, 0xff,
0xff, 0xff, 0xff, 0xff, 0xf1, 0x8f, 0xc8, 0x88,
0x88, 0x8c, 0xfd, 0x8, 0xf9, 0x0, 0x0, 0x0,
0xdf, 0x60, 0x8f, 0x90, 0x0, 0x0, 0x4f, 0xe0,
0x2, 0x42, 0x0, 0x0, 0xb, 0xf8, 0x0, 0x0,
0x0, 0x0, 0x3, 0xff, 0x10, 0x0, 0x0, 0x0,
0x0, 0xaf, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x1f,
0xf3, 0x0, 0x0, 0x0, 0x0, 0x8, 0xfb, 0x0,
0x0, 0x0, 0x0, 0x0, 0xff, 0x40, 0x0, 0x0,
0x0, 0x0, 0x7f, 0xd0, 0x0, 0x0, 0x0, 0x0,
0xe, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x5, 0xfe,
0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0x80, 0x0,
0x0, 0x0, 0x0, 0x4f, 0xf1, 0x0, 0x0, 0x0,
/* U+38 "8" */
0x0, 0x1, 0x68, 0x87, 0x40, 0x0, 0x0, 0x9,
0xff, 0xff, 0xff, 0xd4, 0x0, 0xa, 0xff, 0x84,
0x36, 0xcf, 0xf2, 0x2, 0xff, 0x40, 0x0, 0x0,
0xbf, 0xa0, 0x4f, 0xe0, 0x0, 0x0, 0x6, 0xfc,
0x2, 0xff, 0x10, 0x0, 0x0, 0x8f, 0xb0, 0xc,
0xfc, 0x20, 0x0, 0x6f, 0xf4, 0x0, 0x1b, 0xff,
0xee, 0xff, 0xf5, 0x0, 0x4, 0xdf, 0xfe, 0xdf,
0xff, 0x90, 0x3, 0xff, 0x81, 0x0, 0x4, 0xdf,
0xb0, 0xaf, 0x90, 0x0, 0x0, 0x1, 0xff, 0x2d,
0xf5, 0x0, 0x0, 0x0, 0xd, 0xf5, 0xbf, 0x80,
0x0, 0x0, 0x0, 0xff, 0x36, 0xff, 0x50, 0x0,
0x1, 0xbf, 0xe0, 0xa, 0xff, 0xdb, 0xac, 0xff,
0xf3, 0x0, 0x5, 0xcf, 0xff, 0xfe, 0x91, 0x0,
0x0, 0x0, 0x1, 0x21, 0x0, 0x0, 0x0,
/* U+39 "9" */
0x0, 0x2, 0x78, 0x85, 0x10, 0x0, 0x0, 0x1a,
0xff, 0xff, 0xff, 0x70, 0x0, 0xc, 0xfe, 0x74,
0x48, 0xff, 0x80, 0x5, 0xfe, 0x10, 0x0, 0x2,
0xff, 0x30, 0x9f, 0x90, 0x0, 0x0, 0x9, 0xfa,
0xa, 0xf8, 0x0, 0x0, 0x0, 0x8f, 0xe0, 0x8f,
0xc0, 0x0, 0x0, 0xd, 0xff, 0x12, 0xff, 0x91,
0x0, 0x2b, 0xff, 0xf2, 0x6, 0xff, 0xfe, 0xef,
0xf7, 0xff, 0x20, 0x2, 0x9d, 0xed, 0xa3, 0x1f,
0xf1, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x0,
0x0, 0x0, 0x0, 0x0, 0x8f, 0xa0, 0x0, 0x0,
0x0, 0x0, 0x2f, 0xf4, 0x0, 0x13, 0x0, 0x0,
0x5e, 0xf9, 0x0, 0x8, 0xfe, 0xcc, 0xef, 0xfa,
0x0, 0x0, 0x6d, 0xff, 0xff, 0xb5, 0x0, 0x0,
0x0, 0x0, 0x21, 0x0, 0x0, 0x0, 0x0
};
/*---------------------
* GLYPH DESCRIPTION
*--------------------*/
static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
{.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
{.bitmap_index = 0, .adv_w = 205, .box_w = 11, .box_h = 11, .ofs_x = 1, .ofs_y = 2},
{.bitmap_index = 61, .adv_w = 80, .box_w = 3, .box_h = 7, .ofs_x = 1, .ofs_y = -4},
{.bitmap_index = 72, .adv_w = 135, .box_w = 7, .box_h = 2, .ofs_x = 1, .ofs_y = 5},
{.bitmap_index = 79, .adv_w = 80, .box_w = 3, .box_h = 4, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 85, .adv_w = 232, .box_w = 14, .box_h = 17, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 204, .adv_w = 232, .box_w = 7, .box_h = 16, .ofs_x = 4, .ofs_y = 0},
{.bitmap_index = 260, .adv_w = 232, .box_w = 13, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 364, .adv_w = 232, .box_w = 12, .box_h = 17, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 466, .adv_w = 232, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 586, .adv_w = 232, .box_w = 12, .box_h = 17, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 688, .adv_w = 232, .box_w = 13, .box_h = 17, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 799, .adv_w = 232, .box_w = 13, .box_h = 16, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 903, .adv_w = 232, .box_w = 13, .box_h = 17, .ofs_x = 1, .ofs_y = -1},
{.bitmap_index = 1014, .adv_w = 232, .box_w = 13, .box_h = 17, .ofs_x = 1, .ofs_y = -1}
};
/*---------------------
* CHARACTER MAPPING
*--------------------*/
static const uint8_t glyph_id_ofs_list_0[] = {
0, 1, 2, 3, 0, 4, 5, 6,
7, 8, 9, 10, 11, 12, 13
};
/*Collect the unicode lists and glyph_id offsets*/
static const lv_font_fmt_txt_cmap_t cmaps[] =
{
{
.range_start = 43, .range_length = 15, .glyph_id_start = 1,
.unicode_list = NULL, .glyph_id_ofs_list = glyph_id_ofs_list_0, .list_length = 15, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_FULL
}
};
/*--------------------
* ALL CUSTOM DATA
*--------------------*/
/*Store all the custom data of the font*/
static lv_font_fmt_txt_dsc_t font_dsc = {
.glyph_bitmap = gylph_bitmap,
.glyph_dsc = glyph_dsc,
.cmaps = cmaps,
.kern_dsc = NULL,
.kern_scale = 0,
.cmap_num = 1,
.bpp = 4,
.kern_classes = 0,
.bitmap_format = 0
};
/*-----------------
* PUBLIC FONT
*----------------*/
/*Initialize a public general font descriptor*/
lv_font_t font_montserrat_numeric_20 = {
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
.line_height = 20, /*The maximum line height required by the font*/
.base_line = 4, /*Baseline measured from the bottom of the line*/
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
.subpx = LV_FONT_SUBPX_NONE,
#endif
#if LV_VERSION_CHECK(7, 4, 0)
.underline_position = -2,
.underline_thickness = 1,
#endif
.dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
};
#endif /*#if FONT_MONTSERRAT_NUMERIC_20*/

Some files were not shown because too many files have changed in this diff Show More