Hallo zusammen. zuerst muß ich mal sagen das ich noch nie einen MyC programmiert habe. ergo habe ich keinen ahnung. ich muß mit meinem Atmega 64 einen neigungssensor auslesen, dessen datenwort 11bit lang ist. ich will das ganze in c programmieren. ich habe mir das so überlegt: 1) SPDR mit befehl für auslesen laden und senden. (keine daten vom sensor erwartet) 2) laden des SPDR mit einem dummybyte und senden.empfangen des msb vom 11 bit datenwort (ir darf nicht auslösen) 3) Clk pausieren oder verlangsamen. 4) speichern des SPDR im speicher 5) laden des dummybytes in SPDR 6) senden vom dummybyte und empfangen der letzten 3 daten vom Sensor. nach 3 takten die übertragung beenden. ist das so wie ich mir das vorgestellt habe möglich oder muß ich das anders machen danke für eure hilfe
Hi! Schon fast richtig: Du musst bevor du Daten ins SPDR schreibst den Chip Select Pin deines Neigungssenors auf low ziehen. Auf welchen Pin du diesen am AVR legst ist dir überlassen. Damit sparst du dir dann den 3.) Punkt die Clk anhalten, da dass der AVR automatisch macht, sobald das SPDR Register vollständig geshiftet ist, sprich 8 Bits gesendet (und empfangen) wurden. Nach Punkt 6 einfach den CS Pin wieder auf high und fertig ist das ganze. Ciao Fasti
danke für deine antwort. werde mal ein wenig coden und den code dann mal reinstellen.
habe mir das jetzt so gedacht: int read_x_channel(void) { char x1; int x3, xGes; char x2; PORTB = (0 << PB0); //SS auf low setzen SPDR = 0x10; //Befehl read X-Channel in SPDR while(!(SPSR & (1<<SPIF))); //Warten bis Empfangsende x1 = SPDR; //Wert x1 aus DR wird gespeichert x3 = x1<<3; //x1 wird um 3 verschoben SPDR = 0x0c; //Dummybyte while(!(SPSR & (1<<SPIF))); //s.o. x2 = SPDR; //Wert x2 aus DR wird gespeichert x2 = x2 >> 5; //x2 wird korregiert/ Verschieben um 5 Stellen //aus xyz00000 wird 00000xyz xGes = x3 + x2; //Endwert wird berechnet PORTB = (1 << PB0); //SS auf high setzen return (xGes); //Endwert wird zurück gegeben
was hier noch fehlt is der y-port. es handelt sich um einen neigungssensor von vti.arbeitet wie ein airbagsensor. ca
Hat das Funktioniert ? Ich habe hier einen SCA100 und es sieht mit diesem Programm nach einer Datenkollision am MISO-Kanal aus. Beschaltung dürfte stimmen, MISO auf MOSI und umgekehrt
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.