Forum: Compiler & IDEs USI TWI ATtiny84a Master Daten aus Sensor auslesen


von David S. (plazeber)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen.Ich benutze einen ATtiny4 der eine USI-Schnittstelle 
besitzt und mit einen Lagesensor BMG160 verbunden ist. Der Tiny soll die 
Sensordaten nur auslesen.Der Tiny ist am PortA(Pin6) mit SDA vom Sensor 
verbunden, sowie am PortA(Pin4) mit der Clockleitung des Sensors.

Das Programm für USI-TWI-Master habe ich im Netz gefunden und sollte 
auch funktionieren.

Nun zu meinem Problem:
Wenn ich in der Main die USI_TWI_Start_Read_Write-Funktion aufrufe, 
welcher die Adresse des Sensors sowie das Register(des Sensors) der X- 
bzw. Y Lage übergeben wird, erhalte ich in den Zwischenspeichervariablen 
X- und Y immer den Wert 15.

i2cMessageBuf[0] = (0x68 << 1) | 1 ;//Adresse vom Sensor + 1 zum Lesen
i2cMessageBuf[1] = 0x07; // X_LSB des Sensors
USI_TWI_Start_Read_Write( i2cMessageBuf, 2 );
x=i2cMessageBuf[1];

Dabei spielt es keine Rollte welches Register ich vom Sensor auslese. 
Der Wert ist immer 15

Ich bin so langsam ratlos :/
Das Programm habe ich mal angehangen.

von Wolfgang H. (Firma: AknF) (wolfgang_horn)


Lesenswert?

Hi, David,

> Das Programm für USI-TWI-Master habe ich im Netz gefunden und sollte
> auch funktionieren.

Im Internet findet sich leider auch sehr viel Schrott. "Internet" als 
Quelle ist kein Indiz für Qualität.
Besser nimm die Vorlagen aus der hiesigen Artikelübersicht, auch aus dem 
Roboterforum.

Ciao
Wolfgang Horn

von Bastler (Gast)


Lesenswert?

Jaja und manchmal steht im Internet auch wie man den Sch... Benutzen 
soll:
TWI_Start_Read_Write()
TWI_Start_Random_Read()
These two functions work the same as the corresponding functions 
described above but with a few exceptions.
They don't return any error values.
Data read is not transferred into the buffer. Doing this will be done 
with the function described next.
When calling TWI_Start_Random_Read, the messageSize should be the number 
of data bytes requested plus one, not two.

Mit RandomRead muß das Register ausgewählt werden, erst dann mit 
ReadWrite lesen. So wie's bisher dasteht, wird nur der interne 
Addresszähler immer höher gedreht (vielleicht kommt ja nach Überlauf 
doch was). Oder das Ding sagt garnix, wenn keine Adresse gesetzt wurde.

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.