hallo leute, ich experimentiere gerade mit spi auf einem ATMega16. ich habe aus der codesammlung ein beispiel genommen um von einem master zu einem slave senden zu können. jetzt versuche ich gerade vom slave zum master zu senden, aber ich komm nicht weiter, der slave sendet komische bytes die nicht mit dem zu tun haben das ich eigentlich senden will. im anhang hab ich das beispiel das ich grad verwende. zu debug zwecken sende ich die byte die der master vom slave kriegt dann über den uart zum pc. findet irgendwer einen fehler im code weswegen das nicht funzt? danke im voraus JR1984
1 | void master_transmit (unsigned char data) { |
2 | PORTB &= ~_BV(PB0); //SS am Slave Low --> Beginn der bertragung |
3 | SPDR = data; //Schreiben der Daten |
4 | while (!(SPSR & (1<<SPIF))); |
5 | //PORTA = SPDR;
|
6 | //PORTB |= _BV(PB0); //SS High --> Ende der �bertragung
|
7 | }
|
warum kommentierst du das setzen des SS? nach der warteschleife musst du das SPDR register lesen. da sind die empfangenen daten drin.
die kommentare waren schon im bsp vorher drin. es müsste doch egal sein ob ich nach der warteschleife die daten auslese oder in der SIGNAL (SIG_SPI) routine, habs aber jetzt so ausprobiert geht such nicht. ich will eigentlich 0x63(sollte 'c' sein) empfangen aber ich krieg 0x20 oder 0x21, und das folgt keinem schema.
ich habe jetzt weiter getestet, und bin draufgekommen, dass es jetzt sporadisch funktioniert, aber nur wenn ich den programmer angesteckt habe, der anscheinend irgendwie mit miso und mosi und ss verbunden ist.
kann es sein dass man beim master den pullup für miso setzen muss?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.