瀏覽代碼

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

Bernd Gottschlag 5 年之前
父節點
當前提交
b3b216871a
共有 5 個檔案被更改,包括 2953 行新增2103 行删除
  1. 1
    0
      display/firmware/src/main.rs
  2. 154
    0
      display/firmware/src/pins.rs
  3. 24
    0
      display/hardware/display-cache.lib
  4. 2735
    2100
      display/hardware/display.kicad_pcb
  5. 39
    3
      display/hardware/display.sch

+ 1
- 0
display/firmware/src/main.rs 查看文件

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

+ 154
- 0
display/firmware/src/pins.rs 查看文件

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 查看文件

129
 ENDDRAW
129
 ENDDRAW
130
 ENDDEF
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
 # Device_D_Zener_Small
156
 # Device_D_Zener_Small
133
 #
157
 #
134
 DEF Device_D_Zener_Small D 0 10 N N 1 F N
158
 DEF Device_D_Zener_Small D 0 10 N N 1 F N

+ 2735
- 2100
display/hardware/display.kicad_pcb
文件差異過大導致無法顯示
查看文件


+ 39
- 3
display/hardware/display.sch 查看文件

274
 P 1250 4200
274
 P 1250 4200
275
 F 0 "J1" H 1300 4617 50  0000 C CNN
275
 F 0 "J1" H 1300 4617 50  0000 C CNN
276
 F 1 "SWD" H 1300 4526 50  0000 C CNN
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
 F 3 "~" H 1250 4200 50  0001 C CNN
278
 F 3 "~" H 1250 4200 50  0001 C CNN
279
 F 4 "1175-1627-ND" H 1250 4200 50  0001 C CNN "Digikey PN"
279
 F 4 "1175-1627-ND" H 1250 4200 50  0001 C CNN "Digikey PN"
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"
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
 Wire Wire Line
334
 Wire Wire Line
335
 	950  4200 950  4300
335
 	950  4200 950  4300
336
 NoConn ~ 4500 2400
336
 NoConn ~ 4500 2400
337
-NoConn ~ 4500 3400
338
-NoConn ~ 4500 3500
339
 Wire Wire Line
337
 Wire Wire Line
340
 	1600 1200 2050 1200
338
 	1600 1200 2050 1200
341
 Wire Wire Line
339
 Wire Wire Line
977
 	7400 3000 7400 2900
975
 	7400 3000 7400 2900
978
 Wire Wire Line
976
 Wire Wire Line
979
 	8050 3000 7400 3000
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
 $EndSCHEMATC
1016
 $EndSCHEMATC

Loading…
取消
儲存