Die Ansteuerung ist eigentlich echt simpel, wenn man KEIN SPI verwendet,
sondern das "per Hand" macht:
Zunächst einmal muss man einen "beliebigen" Takt an den CLK Pin anlegen
(beliebig in sofern, dass man damit die DATA OUTPUT RATE bestimmt - s.
Datenblatt auf Seite 8).
Danach kann man mit dem Oszilloskop auf der DOUT-Leitung zwei Peaks
erkennen (ein langer und ein kurzer). Diese Peaks muss man abwarten,
bevor man die Daten dann über Toggles an SCLK am Pin DOUT "heraustakten"
kann. Das muss man 24 mal machen (da 24 Bit).
Meine Realisierung dazu sieht so aus:
1 | // Init Timer - initialization of the 16-Bit Timer
|
2 | void init_timer(void)
|
3 | {
|
4 | TCCR1A = (1<<COM1A0); // Toggle on OC1A
|
5 | TCCR1B = (1<<CS10)|(1<<WGM12);
|
6 |
|
7 | OCR1A = 128;
|
8 | }
|
9 |
|
10 | int main (void)
|
11 | {
|
12 | // local variables
|
13 | uint32_t single_value = 0;
|
14 | uint8_t n,m;
|
15 | uint8_t m_value[3] = {0,0,0};
|
16 | char buffer[12];
|
17 |
|
18 | // initialization
|
19 | init_main();
|
20 | init_timer();
|
21 | lcd_init();
|
22 |
|
23 | sei();
|
24 |
|
25 | // main program
|
26 | while(1)
|
27 | {
|
28 | while(!(PINB & (1<<4))){};
|
29 | _delay_us(500); // wait until the two peaks passed
|
30 |
|
31 | m_value[0] = 0;
|
32 | m_value[1] = 0;
|
33 | m_value[2] = 0;
|
34 | for (m = 0; m<3; m++) {
|
35 | for (n = 0; n<8; n++) {
|
36 | PORTB |= (1<<5); // set
|
37 | _delay_us(3);
|
38 | PORTB &= ~(1<<5); // reset
|
39 | m_value[m] |= (((PINB & (1<<4))>>4)<<(7-n));
|
40 | _delay_us(2);
|
41 | }
|
42 | }
|
43 | single_value = ((uint32_t)m_value[0]<<16) + ((uint32_t)m_value[1]<<8) + m_value[2];
|
44 | ultoa(single_value, buffer, 10);
|
45 | usart_write("SPI = %s\r", buffer);
|
46 |
|
47 | _delay_ms(500);
|
48 | }
|
49 | }
|
Es geht mit Sicherheit noch einfacher (besonders die Shift-Operationen
lassen sich noch vereinfachen - das sehe ich schon beim Posten, aber:
"never change a running system" :-D)
Ich finde den Chip jetzt - seit er funktioniert - eigentlich ganz nett,
da er sehr kompakt (8 SOIC) ist, eine hohe Auflösung bietet und über nur
drei Leitungen + Versorgungsspannung betrieben werden kann.