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.