Hi,
Danke erstmal für die schnellen Antworten.
Ich poste euch einfach mal den wichtigen Teil meines Quelltextes, dann
könnte ihr mir ja vieleicht helfen, was noch abzuändern ist.
1 |
|
2 | unsigned char send_spi(unsigned char byte)
|
3 | {
|
4 | DDRB=0xDF;
|
5 | USIDR=byte;
|
6 | USISR=(1<<USIOIF);
|
7 | do
|
8 | {USICR=(1<<USIWM0)|(1<<USICS1)|(1<<USICLK)|(1<<USITC);}
|
9 | while (!(USISR&(1<<USIOIF)));
|
10 | return USIDR;
|
11 | }
|
Das Problem ist, das der controller das Bit nun immer bei einem toggle
von hi nach low übers Schieberegister rausschiebt (also genau in dem
moment der Flanke von der Clock toggelt auch das Bit) und dann liegt es
an der Datenleitung wärend des hi low Übergangs von der Clockleitung an.
-,__,--,__,--,__,-- CLK
_,-----,_____,----- DO (MOSI)
Und ich brauch es halt genau invertiert.
Was kann ich denn in dem Code ändern, damit dies klapt? Ich hab
überlegt, die Clockleitung mit USITC schon vor der schleife zu toggeln,
aber dan schiebt er mir ja auch gleich da erste bit raus (vielleicht
hilft es ja das toggeln vor dem setzen des USIOIF bits zu tun, oder wird
es dadurch wieder zurückgesetzt?). Auch hab ich schon mal versucht den
Clock-Pin vorher mit PORTB=128 high zu setzten, das das erste toggeln
automatisch von high nach low geht, das klappt aber auch nett so recht.
Leute, was mache ich nur wieder falsch ??? ;-)