Hallo, ich habe im Moment ein Problem mit eienr SPI Kommunikation. Ich hatte einen ATmega644 mit einem IC verschaltet. Habe ich erst alles direkt verlötet, hat auch alles super geklappt. Dann wollte ich die SPI-Schnittstelle via i-Coupler von Analog Devices galvanisch trennen. Dazu habe ich den IC auf einer anderen Platine aufgebaut. Dann ging nichts mehr. Aus Verzweiflung habe ich den IC wieder auf die Platine mit dem Mikrocontroller zusammengeschaltet - jetzt geht immer noch gar nichts. Habe den IC schon ausgetauscht, alle Leitungen 100 mal überprüft. Fakt ist, er bleibt immer an dieser while-Schlife hängen:
1 | {
|
2 | int k; |
3 | unsigned long temp; |
4 | |
5 | // SS low
|
6 | PORTB &= ~(1<<DDB4); |
7 | for (k=0;k<5;k++){;} |
8 | |
9 | //Start transmission
|
10 | SPDR = address; |
11 | //Wait for transmission complete
|
12 | while(!(SPSR & (1<<SPIF))); // HIER BLEIBT ER IMMER STEHEN |
13 | for (k=0;k<50;k++){;} |
14 | |
15 | // Byte empfangen
|
16 | // Dummy senden
|
17 | SPDR = 0x00; |
18 | // Wait for dummy-transmission complete
|
19 | while(!(SPSR & (1<<SPIF))); |
20 | // Byte in temp reinschreiben
|
21 | temp = SPDR; |
22 | for (k=0;k<5;k++){;} |
23 | |
24 | // SS high
|
25 | PORTB |= (1<<DDB4); |
26 | for (k=0;k<100;k++){;} |
27 | return temp; |
28 | }
|