Hi!
Thomas Eckmann schrieb:
> Vor allen Dingen muss /SS als Ausgang geschaltet werden.
Gute Idee ;-) Habe die Zeile
1 | DDRD = (1 << PB2); //SS als Ausgang
|
hinzugefügt.
Dass man die Funktion "SPI_MasterInit()" dann auch noch aufrufen muss
hab' ich natürlich auch verplant. Zum Glück studier' ich das nicht, aber
ein Semester C war wohl bisher zu wenig :D
Habe jetzt nochmal folgendes ausprobiert:
Eine Led samt Vorwiderstand gegen GND hängt an PD6. Diese soll am Anfang
der Übertragung eingeschaltet werden und danach wieder ausgeschaltet
werden, damit man sieht, ob der Controller nicht irgendwo hängt.
Dabei sind mir mehrere Dinge aufgefallen:
Sobald ich die Zeile
1 | DDRD = (1 << PB2); //SS als Ausgang
|
auskommentiere, wird die SPI_MasterInit() problemlos durchlaufen.
Wenn nicht, bleibt die LED aus.
Wenn folgende Codezeilen mit drinnen sind, geht die LED an, aber nicht
aus. Der Controller bleibt dort irgendwie hängen?
1 | // warten auf Ende der Uebertragung für dieses Byte
|
2 | while (!(SPSR & (1 << SPIF)));
|
3 |
|
4 | // Strobe an RCK bringt die Daten von den Schieberegistern in die Latches
|
5 | PORTD = (0 << PB2);
|
6 | PORTD = (1 << PB2);
|
Grüße!