Hallo,
kurz vorweg: die Forensuche habe ich benutzt und eine Vielzahl an Themen
gefunden, die allerdings mein Problem nicht lösen konnten.
Ich versuche seit einiger Zeit verzweifelt, SPI zum Laufen zu bringen,
allerdings bleibt das Ganze beim Senden vom ersten Byte hängen.
Es sollen zwei ATMEGA328P miteinander verbunden werden, der Eine "roh",
der Andere in einem 7-Segment-Anzeige-Breakout-Board (COM-09764 [1]).
Um genauer zu seien, ist dies hier die Zeile, in der das Ganze hängen
bleibt meiner Vermutung nach (erkennbar durch die eingeschaltene
Debug-LED):
1 | while(!(SPSR & (1<<SPIF)));
|
Die Pin-Konfiguration:
1 | PORTB = (1<<PINB3)|(1<<PINB5);
|
2 | SPCR = ((1<<SPE)|(1<<MSTR)|(1<<SPR0)|(0<<CPOL)|(0<<CPHA));
|
Im Datenblatt vom COM-09764 steht, CPOL und CPHA werden als 0 benötigt.
Angeschlossen wurde das ganze wie folgt:
1 | Hauptchip Breakout-Board
|
2 | SCK SCK
|
3 | MISO SI
|
4 | SS CSN
|
5 | VCC VCC
|
6 | GND GND
|
Beim Programmieren werden vom Breakout-Board anscheinend Signale
empfangen, da es sich wild verändert. Das Bauteil scheint also noch zu
funktionieren. Allerdings wird beim Schreiben des ersten Bytes nichts
verändert.
Im Anhang ist der komplette C-Code, größtenteils aus dem ATMEGA328
Datenblatt entnommen.
Verwende SPI zum ersten Mal, also lasst bitte Gnade walten. ;-)
Wäre schön wenn jemandem einfällt, woran es liegen könnte!
[1] http://www.sparkfun.com/products/9764