Datum:
Hallo! Ich habe ein kleines Problem mit meinem DS1624. Habe ihn soweit verdrahtet und bin mir nicht sicher welche Adresse er nun besitzt. Habe A0 - A2 auf Masse gelegt. Sind dann die Eingänge 0 oder 1. Kann dies leider nirgends aus dem Datenblatt herauslesen. Ich habe nun folgende Adressen schon ausprobiert: 1001 (feste Adresse von Maxim) 000 (für A0 -A2) = 0x90 1001 (" - ") 111 (" - ") = 0x9E Allerdings funktioniert es nicht. Mein I²C-Bus funktioniert aber, da ich mein LCD ea-Dip320 darüber ansprechen kann. Wäre super wenn mir jemand weiterhelfen könnte. Gruß Thomas
Datum:
Die 0x90 sind ok (Masse=Low=0). Du hast ein anderes Problem. Stimmt bei Dir das read-Protokoll (DB Seite 5) ? Also so etwa: Start Write Adress Write protocol (Z.B. AAh für ReadTemp) Restart Read Adress Read Data1 Read Data2 Stop
Datum:
Mein Code schaut wie folgt aus (DS1624.h):
#ifndef _DS1624_H #define _DS1624_H //************************************************************************************* // allgemeine Definitionen //************************************************************************************* #define DS1624 0x90 // Teilnehmeradresse von Temps. DS1624 //************************************************************************************* // //************************************************************************************* float temp; void OneShotMode(void) { i2c_start(DS1624+I2C_WRITE); i2c_write(0x01); i2c_stop(); } void StartConvT(void) { i2c_start(DS1624+I2C_WRITE); i2c_write(0xEE); i2c_stop(); } void ReadTemp(void) { uint8_t temp_msb, temp_lsb; unsigned char dummy; char temp_char[8]; i2c_start(DS1624+I2C_WRITE); i2c_write(0xAA); i2c_rep_start(DS1624+I2C_READ); temp_msb = i2c_readAck(); temp_lsb = i2c_readAck(); dummy = i2c_readNak(); i2c_stop(); } #endif |
Normal ist diese Reihenfolge gleich deiner. Und so war es ja auch im Datenblatt beschrieben. Gruß Thomas
Datum:
Ich würde statt temp_msb = i2c_readAck(); temp_lsb = i2c_readAck(); dummy = i2c_readNak(); i2c_stop(); eher temp_msb = i2c_readAck(); temp_lsb = i2c_readNak(); i2c_stop(); schreiben. Was funktioniert denn nicht ? Wie sieht das Fehlerbild aus ?