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.
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
Und welcher Wert (in deinem Beispiel, h,m,s) in welche Stelle des Arrays geschrieben wird, steht im Datenblatt des Sensors?
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
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.