Przeglądaj źródła

Merge branch 'master' of git.gottschlag.net:bernd/smart-home

Bernd Gottschlag 5 lat temu
rodzic
commit
b3b216871a

+ 1
- 0
display/firmware/src/main.rs Wyświetl plik

@@ -2,6 +2,7 @@
2 2
 #![no_std]
3 3
 
4 4
 mod board;
5
+mod pins;
5 6
 mod assets {
6 7
     include!(concat!(env!("OUT_DIR"), "/assets.rs"));
7 8
 }

+ 154
- 0
display/firmware/src/pins.rs Wyświetl plik

@@ -0,0 +1,154 @@
1
+use mkl25z4::{GPIOA, GPIOB, GPIOC, GPIOD, GPIOE, SIM, SPI0, SPI1};
2
+use mkl25z4_hal::gpio::{self, gpioa, gpiob, gpioc, gpiod, gpioe, GpioExt};
3
+use mkl25z4_hal::spi::{self, Phase, Polarity, Spi};
4
+
5
+pub struct Pins {
6
+    /// 5V supply for the LED (active high).
7
+    pub enable_5v: gpioa::PA1<gpio::Output<gpio::PushPull>>,
8
+    /// Red display frontlight LEDs (active high).
9
+    pub red: gpioe::PE29<gpio::Output<gpio::PushPull>>,
10
+    /// Green display frontlight LEDs (active high).
11
+    pub green: gpioe::PE30<gpio::Output<gpio::PushPull>>,
12
+    /// Blue display frontlight LEDs (active high).
13
+    pub blue: gpioe::PE31<gpio::Output<gpio::PushPull>>,
14
+
15
+    /// Top switch (active low).
16
+    pub top_switch: gpioc::PC1<gpio::Input<gpio::PullUp>>,
17
+    /// Left switches (top to bottom, active low).
18
+    pub left_switches: (
19
+        gpiod::PD1<gpio::Input<gpio::PullUp>>,
20
+        gpiod::PD2<gpio::Input<gpio::PullUp>>,
21
+        gpiod::PD3<gpio::Input<gpio::PullUp>>,
22
+        gpiod::PD4<gpio::Input<gpio::PullUp>>,
23
+    ),
24
+    /// Right switches (top to bottom, active low).
25
+    pub right_switches: (
26
+        gpioa::PA13<gpio::Input<gpio::PullUp>>,
27
+        gpioa::PA12<gpio::Input<gpio::PullUp>>,
28
+        gpioa::PA5<gpio::Input<gpio::PullUp>>,
29
+        gpioa::PA4<gpio::Input<gpio::PullUp>>,
30
+    ),
31
+
32
+    /// Ambient light sensor enable (active high).
33
+    pub als_en: gpioe::PE20<gpio::Output<gpio::PushPull>>,
34
+    // TODO: ADC for the ambient light sensor.
35
+    /// Ambient light sensor.
36
+    pub als: gpioe::PE21<gpio::Input<gpio::Floating>>,
37
+
38
+    // TODO: PWM for the buzzer.
39
+    /// Buzzer (active high).
40
+    pub buzzer: gpioc::PC3<gpio::Output<gpio::PushPull>>,
41
+
42
+    /// NRF IRQ line (active low).
43
+    pub nrf_irq: gpiob::PB0<gpio::Input<gpio::PullUp>>,
44
+    /// NRF chip select (active low).
45
+    pub nrf_cs: gpiob::PB1<gpio::Output<gpio::PushPull>>,
46
+    /// NRF chip enable.
47
+    pub nrf_ce: gpiob::PB2<gpio::Output<gpio::PushPull>>,
48
+    /// NRF supply voltage enable (active low).
49
+    pub nrf_pwr: gpiob::PB3<gpio::Output<gpio::PushPull>>,
50
+    /// SPI for the NRF module.
51
+    pub nrf_spi: Spi<
52
+        SPI1,
53
+        gpiob::PB16<gpio::Alternate2>,
54
+        gpiob::PB17<gpio::Alternate2>,
55
+        gpiod::PD5<gpio::Alternate2>,
56
+    >,
57
+
58
+    /// BME280 chip select (active low).
59
+    pub bme_cs: gpioc::PC2<gpio::Output<gpio::PushPull>>,
60
+
61
+    /// Display busy (active low).
62
+    pub display_busy: gpioc::PC4<gpio::Input<gpio::PullUp>>,
63
+    /// Display chip select (active low).
64
+    pub display_cs: gpioc::PC8<gpio::Output<gpio::PushPull>>,
65
+    /// Display data/command.
66
+    pub display_dc: gpioc::PC9<gpio::Output<gpio::PushPull>>,
67
+    /// Display reset (active low).
68
+    pub display_rst: gpioc::PC10<gpio::Output<gpio::PushPull>>,
69
+    /// Display supply voltage enable (active low).
70
+    pub display_pwr: gpioc::PC11<gpio::Output<gpio::PushPull>>,
71
+
72
+    /// SPI for both display and BME280.
73
+    pub display_bme_spi: Spi<
74
+        SPI0,
75
+        gpioc::PC7<gpio::Alternate5>,
76
+        gpioc::PC6<gpio::Alternate5>,
77
+        gpioc::PC5<gpio::Alternate2>,
78
+    >,
79
+}
80
+
81
+impl Pins {
82
+    pub fn configure(
83
+        sim: &mut SIM,
84
+        gpioa: GPIOA,
85
+        gpiob: GPIOB,
86
+        gpioc: GPIOC,
87
+        gpiod: GPIOD,
88
+        gpioe: GPIOE,
89
+        spi0: SPI0,
90
+        spi1: SPI1,
91
+    ) -> Pins {
92
+        let mut gpioa = gpioa.split(sim);
93
+        let mut gpiob = gpiob.split(sim);
94
+        let mut gpioc = gpioc.split(sim);
95
+        let mut gpiod = gpiod.split(sim);
96
+        let mut gpioe = gpioe.split(sim);
97
+
98
+        // SPI0 for the display/BME module.
99
+        let mosi = gpioc.pc7.into_alternate(&mut gpioc.pddr);
100
+        let miso = gpioc.pc6.into_alternate(&mut gpioc.pddr);
101
+        let sck = gpioc.pc5.into_alternate(&mut gpioc.pddr);
102
+        let mode = spi::Mode {
103
+            polarity: Polarity::IdleLow,
104
+            phase: Phase::CaptureOnFirstTransition,
105
+        };
106
+        let spi0 = Spi::spi0(spi0, mosi, miso, sck, mode, sim);
107
+
108
+        // SPI1 for the NRF module.
109
+        let mosi = gpiob.pb16.into_alternate(&mut gpiob.pddr);
110
+        let miso = gpiob.pb17.into_alternate(&mut gpiob.pddr);
111
+        let sck = gpiod.pd5.into_alternate(&mut gpiod.pddr);
112
+        let mode = spi::Mode {
113
+            polarity: Polarity::IdleLow,
114
+            phase: Phase::CaptureOnFirstTransition,
115
+        };
116
+        let spi1 = Spi::spi1(spi1, mosi, miso, sck, mode, sim);
117
+
118
+        Pins {
119
+            enable_5v: gpioa.pa1.into_push_pull_output(&mut gpioa.pddr),
120
+            red: gpioe.pe29.into_push_pull_output(&mut gpioe.pddr),
121
+            green: gpioe.pe30.into_push_pull_output(&mut gpioe.pddr),
122
+            blue: gpioe.pe31.into_push_pull_output(&mut gpioe.pddr),
123
+            top_switch: gpioc.pc1.into_pull_up_input(&mut gpioc.pddr),
124
+            left_switches: (
125
+                gpiod.pd1.into_pull_up_input(&mut gpiod.pddr),
126
+                gpiod.pd2.into_pull_up_input(&mut gpiod.pddr),
127
+                gpiod.pd3.into_pull_up_input(&mut gpiod.pddr),
128
+                gpiod.pd4.into_pull_up_input(&mut gpiod.pddr),
129
+            ),
130
+            right_switches: (
131
+                gpioa.pa13.into_pull_up_input(&mut gpioa.pddr),
132
+                gpioa.pa12.into_pull_up_input(&mut gpioa.pddr),
133
+                gpioa.pa5.into_pull_up_input(&mut gpioa.pddr),
134
+                gpioa.pa4.into_pull_up_input(&mut gpioa.pddr),
135
+            ),
136
+            als_en: gpioe.pe20.into_push_pull_output(&mut gpioe.pddr),
137
+            als: gpioe.pe21.into_floating_input(&mut gpioe.pddr),
138
+            buzzer: gpioc.pc3.into_push_pull_output(&mut gpioc.pddr),
139
+            nrf_irq: gpiob.pb0.into_pull_up_input(&mut gpiob.pddr),
140
+            nrf_cs: gpiob.pb1.into_push_pull_output(&mut gpiob.pddr),
141
+            nrf_ce: gpiob.pb2.into_push_pull_output(&mut gpiob.pddr),
142
+            nrf_pwr: gpiob.pb3.into_push_pull_output(&mut gpiob.pddr),
143
+            nrf_spi: spi1,
144
+            bme_cs: gpioc.pc2.into_push_pull_output(&mut gpioc.pddr),
145
+            display_busy: gpioc.pc4.into_pull_up_input(&mut gpioc.pddr),
146
+            display_cs: gpioc.pc8.into_push_pull_output(&mut gpioc.pddr),
147
+            display_dc: gpioc.pc9.into_push_pull_output(&mut gpioc.pddr),
148
+            display_rst: gpioc.pc10.into_push_pull_output(&mut gpioc.pddr),
149
+            display_pwr: gpioc.pc11.into_push_pull_output(&mut gpioc.pddr),
150
+
151
+            display_bme_spi: spi0,
152
+        }
153
+    }
154
+}

+ 24
- 0
display/hardware/display-cache.lib Wyświetl plik

@@ -129,6 +129,30 @@ X ~ 2 0 -150 110 U 50 50 1 1 P
129 129
 ENDDRAW
130 130
 ENDDEF
131 131
 #
132
+# Device_Crystal_GND3
133
+#
134
+DEF Device_Crystal_GND3 Y 0 40 Y N 1 F N
135
+F0 "Y" 0 225 50 H V C CNN
136
+F1 "Device_Crystal_GND3" 0 150 50 H V C CNN
137
+F2 "" 0 0 50 H I C CNN
138
+F3 "" 0 0 50 H I C CNN
139
+$FPLIST
140
+ Crystal*
141
+$ENDFPLIST
142
+DRAW
143
+S -45 100 45 -100 0 1 12 N
144
+P 2 0 1 0 -100 0 -75 0 N
145
+P 2 0 1 20 -75 -50 -75 50 N
146
+P 2 0 1 0 0 -150 0 -140 N
147
+P 2 0 1 0 75 0 100 0 N
148
+P 2 0 1 20 75 50 75 -50 N
149
+P 4 0 1 0 -100 -90 -100 -140 100 -140 100 -90 N
150
+X 1 1 -150 0 50 R 50 50 1 1 P
151
+X 2 2 150 0 50 L 50 50 1 1 P
152
+X 3 3 0 -200 50 U 50 50 1 1 P
153
+ENDDRAW
154
+ENDDEF
155
+#
132 156
 # Device_D_Zener_Small
133 157
 #
134 158
 DEF Device_D_Zener_Small D 0 10 N N 1 F N

+ 2735
- 2100
display/hardware/display.kicad_pcb
Plik diff jest za duży
Wyświetl plik


+ 39
- 3
display/hardware/display.sch Wyświetl plik

@@ -274,7 +274,7 @@ U 1 1 5EC3255F
274 274
 P 1250 4200
275 275
 F 0 "J1" H 1300 4617 50  0000 C CNN
276 276
 F 1 "SWD" H 1300 4526 50  0000 C CNN
277
-F 2 "Connector_PinSocket_1.27mm:PinSocket_2x05_P1.27mm_Vertical" H 1250 4200 50  0001 C CNN
277
+F 2 "Connector_PinHeader_1.27mm:PinHeader_2x05_P1.27mm_Vertical" H 1250 4200 50  0001 C CNN
278 278
 F 3 "~" H 1250 4200 50  0001 C CNN
279 279
 F 4 "1175-1627-ND" H 1250 4200 50  0001 C CNN "Digikey PN"
280 280
 F 5 "https://www.digikey.de/product-detail/de/cnc-tech/3220-10-0100-00/1175-1627-ND/3883661" H 1250 4200 50  0001 C CNN "Digikey Link"
@@ -334,8 +334,6 @@ TODO: Quartz?
334 334
 Wire Wire Line
335 335
 	950  4200 950  4300
336 336
 NoConn ~ 4500 2400
337
-NoConn ~ 4500 3400
338
-NoConn ~ 4500 3500
339 337
 Wire Wire Line
340 338
 	1600 1200 2050 1200
341 339
 Wire Wire Line
@@ -977,4 +975,42 @@ Wire Wire Line
977 975
 	7400 3000 7400 2900
978 976
 Wire Wire Line
979 977
 	8050 3000 7400 3000
978
+$Comp
979
+L Device:Crystal_GND3 Y1
980
+U 1 1 5E996AE4
981
+P 3800 3500
982
+F 0 "Y1" H 3800 3768 50  0000 C CNN
983
+F 1 "32768Hz" H 3800 3677 50  0000 C CNN
984
+F 2 "Crystal:Crystal_SMD_MicroCrystal_MS3V-T1R" H 3800 3500 50  0001 C CNN
985
+F 3 "~" H 3800 3500 50  0001 C CNN
986
+F 4 "2195-MS3V-T1R-32.768KHZ-7PF-20PPM-TA-QC-AUCT-ND" H 3800 3500 50  0001 C CNN "Digikey PN"
987
+F 5 "https://www.digikey.de/product-detail/de/micro-crystal-ag/MS3V-T1R-32-768KHZ-7PF-20PPM-TA-QC-AU/2195-MS3V-T1R-32-768KHZ-7PF-20PPM-TA-QC-AUCT-ND/10500146" H 3800 3500 50  0001 C CNN "Digikey Link"
988
+	1    3800 3500
989
+	1    0    0    -1  
990
+$EndComp
991
+$Comp
992
+L power:GND #PWR0130
993
+U 1 1 5E997E3B
994
+P 3800 3800
995
+F 0 "#PWR0130" H 3800 3550 50  0001 C CNN
996
+F 1 "GND" H 3805 3627 50  0000 C CNN
997
+F 2 "" H 3800 3800 50  0001 C CNN
998
+F 3 "" H 3800 3800 50  0001 C CNN
999
+	1    3800 3800
1000
+	1    0    0    -1  
1001
+$EndComp
1002
+Wire Wire Line
1003
+	4500 3500 3950 3500
1004
+Wire Wire Line
1005
+	3650 3500 3550 3500
1006
+Wire Wire Line
1007
+	3550 3500 3550 3150
1008
+Wire Wire Line
1009
+	3550 3150 4050 3150
1010
+Wire Wire Line
1011
+	4050 3150 4050 3400
1012
+Wire Wire Line
1013
+	4050 3400 4500 3400
1014
+Wire Wire Line
1015
+	3800 3700 3800 3800
980 1016
 $EndSCHEMATC

Ładowanie…
Anuluj
Zapisz