mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik DS1624 Problem


Autor: Thomas K. (teakay)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Pete K. (pete77)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas K. (teakay)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Pete K. (pete77)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.