Hallo!
Ichhabe schon einige Beispiele gelesen, wie man eine Kommunikation mit
SPI zu Stande bringt. Ich schaff es dennoch nicht.
Hab dies Beitrag "Probleme bei SPI Kommunikation" und das
Beitrag "Eingangsdaten mit SPI" vor allem gelesen...
Ich benutze den ATmega16 als Master und den ADE7758 als Slave.
Ich habe mal ein Bild aus dem ADE-datasheet mitgeschickt, wie die
Kommunikation ablaufen soll, und 2 Fotos vom Oszi, was ich erhalte.
Hier mein Quelltext:
1 | unsigned char receive(unsigned char address)
|
2 | {
|
3 | //Adresse ins Senderegister, in dem Beispiel Adresse 0x14
|
4 | SPDR = address;
|
5 | //Adresse Senden
|
6 | while(!(SPSR & (1<<SPIF)));
|
7 |
|
8 | _delay_us(4);
|
9 | //Dummydaten ins Senderegister
|
10 | SPDR = 0x00;
|
11 | //Dummydaten Senden
|
12 | while(!(SPSR & (1<<SPIF)));
|
13 |
|
14 | //Wert zurückgeben..laut Beispiel müssten hier meine Daten aus dem IC
|
15 | // drin stehen.......bei Register 0x14 müsste 252 bzw 0xFC bzw 0b11111100
|
16 | // über MISO zurückkommen.
|
17 | return SPDR;
|
18 | }
|
19 |
|
20 | int main(void)
|
21 | {
|
22 | unsigned char value;
|
23 |
|
24 | PORTB &= ~(1<<CE); // SS-Pin direkt mit ADE verbunden und dauerhaft auf
|
25 | // da zur Zeit noch einziger Busteilnehmer
|
26 |
|
27 | while{1}
|
28 | {
|
29 | value = receive(0x14); //Dieses Beispiel sehen wir auf den Fotos
|
30 | _delay_us(1);
|
31 |
|
32 | }
|
Kann mir jemand weiterhelfen? Ich habe den IC ja auch hier empfohlen
bekommen (Herr Lipinsky), als ich mal über Leistungsmessung gepostet
hatte.
Mein Problem ist, dass über MISO nichts zurückkommt :-(
Es wundert mich, weil es fast exakt so aussieht, wie im Datenblatt...
(sorry für die schlechte Oszi-Bild Quali. Hab es mit dem Handy
fotografiert...hab kein USB an dem Teil gefunden)+
Wäre für jede Hilfe sehr DANKBAR!