Forum: Mikrocontroller und Digitale Elektronik DS1624 Problem


von Thomas K. (teakay)


Lesenswert?

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

von Pete K. (pete77)


Lesenswert?

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

von Thomas K. (teakay)


Lesenswert?

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

von Pete K. (pete77)


Lesenswert?

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
Noch kein Account? Hier anmelden.