Forum: Mikrocontroller und Digitale Elektronik MSP430G2553, I2C read falsche Reihenfolge bei der Ausgabe


von Christian L. (christian111)


Angehängte Dateien:

Lesenswert?

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

von Harald K. (kirnbichler)


Lesenswert?

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.

von Oliver S. (oliverso)


Lesenswert?

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
von Chris K. (kathe)


Lesenswert?

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
von Oliver S. (oliverso)


Lesenswert?

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
Noch kein Account? Hier anmelden.