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
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
Mein Code schaut wie folgt aus (DS1624.h):
| 1 | #ifndef _DS1624_H
 | 
| 2 |   #define _DS1624_H
 | 
| 3 | |
| 4 | //*************************************************************************************
 | 
| 5 | // allgemeine Definitionen
 | 
| 6 | //*************************************************************************************
 | 
| 7 | #define DS1624  0x90          // Teilnehmeradresse von Temps. DS1624
 | 
| 8 | |
| 9 | //*************************************************************************************
 | 
| 10 | // 
 | 
| 11 | //*************************************************************************************
 | 
| 12 | float temp; | 
| 13 | |
| 14 | void OneShotMode(void) | 
| 15 |  {
 | 
| 16 | i2c_start(DS1624+I2C_WRITE); | 
| 17 | i2c_write(0x01); | 
| 18 | i2c_stop(); | 
| 19 |  }
 | 
| 20 | |
| 21 | void StartConvT(void) | 
| 22 |  {
 | 
| 23 | i2c_start(DS1624+I2C_WRITE); | 
| 24 | i2c_write(0xEE); | 
| 25 | i2c_stop(); | 
| 26 |  }
 | 
| 27 | |
| 28 | void ReadTemp(void) | 
| 29 |  {
 | 
| 30 | uint8_t temp_msb, temp_lsb; | 
| 31 | unsigned char dummy; | 
| 32 | char temp_char[8]; | 
| 33 | i2c_start(DS1624+I2C_WRITE); | 
| 34 | i2c_write(0xAA); | 
| 35 | i2c_rep_start(DS1624+I2C_READ); | 
| 36 | temp_msb = i2c_readAck(); | 
| 37 | temp_lsb = i2c_readAck(); | 
| 38 | dummy = i2c_readNak(); | 
| 39 | i2c_stop(); | 
| 40 |  }
 | 
| 41 | |
| 42 | #endif
 | 
Normal ist diese Reihenfolge gleich deiner. Und so war es ja auch im Datenblatt beschrieben. Gruß Thomas
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 ?
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.
 Thread beobachten
 Thread beobachten Seitenaufteilung abschalten
 Seitenaufteilung abschalten