Mein Projekt einer Zeitraffer-Kamera mit einem Bild am Tag schreitet
endlich wieder voran. Der STM32F103 wartet immer wieder mit neuen
Überraschungen auf. Die heutige Lösung, die zum Auslesen eines Bildes
geführt hat: Meine verwendeten Pins PB3 und PB4 sind standardmäßig schon
als JTAG in Verwendung. Nachdem AFIO das Clock-Signal bekommen hat, kann
man das Pin-Remapping dafür abstellen und schon die Pins als Inputs
nutzen.
Anbei der Code, der jetzt Daten liefert - wenn auch noch nicht ganz die,
die ich erwartet hätte. Das I2C-Problem, dass ich in i2c_send() mittels
UART-Ausgabe verzögern muss, hat noch Bestand. Die Register in der
Header-Datei sind gar nicht nötig, aber falls man die Kamera mal
umstellen mag, nützlich. Die Kamera funktioniert auch mit
minimalistischem Setup (XCLK mit Clock-Signal versorgen, gegebenenfalls
noch Prescaler via I2C setzen, und dann Bild auslesen).
Als nächstes kommt jetzt ein SD-Kartenleser dran, damit ich die Daten
wegspeichern und dann mal überprüfen kann, was ich da zu sehen bekomme.
Anschließend die RTC und Power-Save-Modes.
Da auch andere mit diesem Kameramodul arbeiten und es nur Code für die
merkwürdigsten Plattformen gibt, wollte ich hier mal eine Alternative
anbieten - ohne Interrupts, nur mit Polling.
Ausgabe:
1 | RAM chip 0 is OK.
|
2 | RAM chip 1 is OK.
|
3 | RAM chip 2 is OK.
|
4 | RAM chip 3 is OK.
|
5 | RAM chip 4 is OK.
|
6 | Starting communication with OV7670.
|
7 | i2c_send: [66].
|
8 | i2c_send: [66].
|
9 | i2c_send: [17].
|
10 | i2c_send: [67].
|
11 | Reading COM11 from I2C target: [176].
|
12 | Reset all registers of the OV7670.
|
13 | i2c_send: [66].
|
14 | i2c_send: [18].
|
15 | i2c_send: [128].
|
16 | Setting OV7670 defaults - long list!
|
17 | i2c_send: [66].
|
18 | i2c_send: [17].
|
19 | i2c_send: [67].
|
20 | Reading COM11 from I2C target: [128].
|
21 | i2c_send: [66].
|
22 | i2c_send: [17].
|
23 | i2c_send: [159].
|
24 | Writing COM11 prescaler to I2C target.
|
25 | i2c_send: [66].
|
26 | i2c_send: [107].
|
27 | i2c_send: [67].
|
28 | i2c_send: [66].
|
29 | i2c_send: [107].
|
30 | i2c_send: [10].
|
31 | Writing DBLV disable PLL to I2C target.
|
32 | i2c_send: [66].
|
33 | i2c_send: [17].
|
34 | i2c_send: [67].
|
35 | Reading COM11 again from I2C target: [159] -> Prescaler 32, frequency 250 kHz.
|
36 | Select first RAM chip.
|
37 | Bank: 1 at byte 131071.
|
38 | Bank: 2 at byte 262142.
|
39 | Bank: 3 at byte 393213.
|
40 | Bank: 4 at byte 524284.
|
41 | Writing image succeeded! Wrote 612715 bytes, used 4 RAM chips.
|
42 | Image dimension: 640 x 478 pixel. First 10 bytes captured:
|
43 | [101]: 116 [102]: 192 [103]: 110 [104]: 209 [105]: 126 [106]: 181 [107]: 119 [108]: 187 [109]: 114 [110]: 205
|