Forum: Mikrocontroller und Digitale Elektronik TWI ATxmega register


von Patrick S. (patricksch)


Lesenswert?

Hallo
Ich benutze einen ATxmega32C4 mit dem SHT20.
Mit dem Treiber von Atmel für TWI_Master (AVR1308) hat man aber nicht 
die Möglichkeit ein bestimmtes Register auszulesen.
Hier folgende Funktion aus dem Treiber:

bool TWI_MasterRead(TWI_Master_t *twi,
                    uint8_t address,
                    uint8_t bytesToRead)

Da der SHT20 aber nun ein Register für Temperatur und ein Register für 
die Feuchte hat, weiss ich nicht wie ich diese einzeln auslesen kann.
Kann mir hier wer weiterhelfen?
Vielen Dank.

von Gerhard G. (g_g)


Lesenswert?

Hallo,


void lesen_rtc(TWI_Master_t *twi )
{

// Uhrzeiz aus RTC

TWI_MasterWriteRead(&twiMaster,SLAVE_ADDRESS,0,0,3);
while (twiMaster.status != TWIM_STATUS_READY) {/*Wait*/}

rtc_buf.sekunde = twi->readData[0x00];
rtc_buf.minute  = twi->readData[0x01];
rtc_buf.stunde  = twi->readData[0x02];

}

Du liest aus dem I2C_Device Register 0 in das Array[0] 3 Byte.

Man kann aber auch nur ein Byte lesen.

Das Beschreiben des I2C-Device funktioniert genauso.

Gruß G.G

von Patrick S. (patricksch)


Lesenswert?

Und welcher Wert (in deinem Beispiel, h,m,s) in welche Stelle des Arrays 
geschrieben wird, steht im Datenblatt des Sensors?

von Karl H. (kbuchegg)


Lesenswert?

Patrick Schmelzer schrieb:
> Und welcher Wert (in deinem Beispiel, h,m,s) in welche Stelle des Arrays
> geschrieben wird, steht im Datenblatt des Sensors?

Hast du schon mal reingesehen?

Du kriegst bei einem Read im Non-Hold Mode genau 3 Bytes.
Ds MSB, das LSB und eine Checksumme.

Welcher 16 Bit Wert da in Form von 2 Bytes übertragen wird, hängt davon 
ab, welches Kommando du vorher zum SHC geschickt hast. Schickst du ein 
Kommando 'Trigger T Measurement' kriegst du die Temperatur bei der 
nachfolgenden Abfrage. Schickst du ein Kommando 'Trigger RH Measurement' 
kriegst du bei der nachfolgenden Abfrage die relative Luftfeuchte.

Dtanblatt
http://www.sensirion.com/fileadmin/user_upload/customers/sensirion/Dokumente/Humidity/Sensirion_Humidity_SHT20_Datasheet_V3.pdf

Ab Seite 7, Abschnitt "5.3 Sending a Command" studieren. Inbesondere die 
Tabelle 6 und Diagramme 15 und 16 sind wichtig. Wobei mir scheint, dass 
der Non-Hold Master Mode die einfachere Variante sein dürfte. Ich weiss 
allerdings nicht aus dem Kopf, ob der XMega ein Clock-Stretching am I2C 
unterstützt. Wenn nicht, ist der Non-Hold Mode definitiv einfacher: Du 
schiebst das Kommando rüber und startest dann Read Abfragen. Die gehen 
solange schief, solange der SHC misst. Ist er fertig, dann geht der Read 
gut und du kriegst deinen Messwert.

: Bearbeitet durch User
von Patrick S. (patricksch)


Lesenswert?

Vielen Dank!

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.