Hallo, Ich habe ein simples Programm geschrieben, um mit I2C Daten auf einen Sensor oder LCD zu schreiben bzw. lesen. Beim Lesen vom 3Achsen-Sensor ADXL345 habe ich jetzt das Problem, dass er bei der Datenausgabe die Werte verschoben ausgibt.Es sollten für jede Achse 2 Bytes ( 1.Low /2.High) ausgegeben werden, d.h. xL-Achse = axis(0), xH =axis(1), yL = axis(2) usw. bis zH = axis(5) Tatsächlich wird aber xL =axis(1), xH =axis(2)...zH =axis(0) ausgegeben. Bei Spektrum Analyser sind die Daten noch in der richtigen Reihenfolge, irgendwie muß der Fehler beim abspeichern passieren. Technisch lösbar ist das ja,Ich lass die Ausgabe über die serielle Konsole einfach bei 1 anfangen und hänge die 0 dran (wird im Programm so gemacht), ist aber als Lösung unbefriedigend. Vielleicht weiss jemand wo der Fehler ist. lg Christian
1 | I2C_ReadByte(address,0x32,axis,maxindex); //read 6 bytes from address 0x32-0x37 |
Der Kommentar ist falsch. Es werden nur 5 Bytes gelesen, denn "maxindex" hat den Wert 5.
Harald K. schrieb: > Der Kommentar ist falsch. Dein Kommentar ist falsch… @TO Ansonsten verschieben sich nicht so einfach ein paar Bytes im Speicher. Woher weißt du denn, dass die Bytes alle um eins verschoben sind? Auch wenns vermutlich nichts mit dem Problem zu tun hat, solltest du am Ende der Transmission ein NACK vor dem Stop setzen. Oliver
:
Bearbeitet durch User
1 | int maxindex = 5; //maxindex = (maximum of read bytes)-1 |
2 | I2C_ReadByte(address,0x32,axis,maxindex); //read 6 bytes from address 0x32-0x37 |
3 | for(int i = 1;i <= maxindex; i++) |
4 | {
|
5 | UCA0TXBUF = axis[i]; |
6 | } |
7 | |
8 | UCA0TXBUF = axis[0]; |
Mal gekürzt auf das wesentliche. Vielleicht erkennst du jetzt das Problem.
:
Bearbeitet durch User
Chris K. schrieb: > Mal gekürzt auf das wesentliche. Vielleicht erkennst du jetzt das > Problem. Wer? Und welches Problem? Der Code ist so, weil der angeblich nur so die Daten in der richtigen Reihenfolge ausgibt. Gelesen und geschrieben werden die Indices 0-5, was nach Adam Riese nunmal 6 Bytes sind. Oliver
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.