www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik DS1631 Auflösung umschalten


Autor: Carsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe mal wieder Probleme mit meinem DS1631 und hoffe iihr könnt mir 
nochmal helfen.

Die Kommunikation über I2C mit meinem ATMega2561 läuft und ich kann 
beide Temperaturregister auslesen. Dazu habe ich den Code von Peter 
Fleury genommen.

Laut Datenblatt sollen Ro und R1 nach dem Power Up "1" sein, also sollte 
ich eine 12 Bit Auflösung erhalten. Zurzeit habe ich aber nur eine 9 Bit 
Auflösung.

Die Initilaliesrung mach ich wie folgt

void DS1631_init(void)
{
  i2c_init();
  i2c_start(DS1631_ADDRESS + I2C_WRITE);    // 0x90
  i2c_write(0xAC);                          // Access Config
  i2c_write(0x08);                          // nur R0 und R1 setzen
  i2c_stop();
  _delay_ms(200);
}

Und das Auslesen der Temperatur
int16_t DS1631_temperatur(void)
{

  i2c_start(DS1631_ADDRESS + I2C_WRITE);
  i2c_write(0xAA);                          // Read Temp
  i2c_stop();
  i2c_start(DS1631_ADDRESS + I2C_READ);
  temperatur = i2c_readAck();              // MS Byte lesen
  temperatur = temperatur<<8;              // Bit shift 8 nach links
  temperatur |= i2c_readNak();             // LS Byte lesen
  return temperatur;
}

Wo habe ich meinen Gedankenfehler?
Es scheint ehal zu sein ob ich die R0 und R1 setzte oder nicht, ich 
erhalte immer 9 Bit anstatt 12 Bit. Auch ein Neustart des DS1631 von 
Hand vor dem Init hat nicht geholfen.

Gruß
Carsten

Autor: Marco F. (m8_killer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo, ich initialisiere meinen ds1631 wie folgt:
void ds1631_init(void)
{
    // DS1631 Configurieren, continuous conversion
    // 12Bit Auflösung
    i2c_start_wait(DS1631_W);
    i2c_write(0xAC);
    i2c_write(0x0C);
    i2c_stop();
  _delay_ms(10);
    i2c_start_wait(DS1631_W);
    i2c_write(0xA1);
    i2c_write(0x28);
    i2c_write(0x00);
    i2c_stop();
  _delay_ms(10);
    i2c_start_wait(DS1631_W);
    i2c_write(0xA2);
    i2c_write(0x0A);
    i2c_write(0x00);
    i2c_stop();
  _delay_ms(10);
    i2c_start_wait(DS1631_W);
    i2c_write(0x51);
    i2c_stop();
}

0xA1 ist die adresse für Temp High, 0xA2 entsprechend für Temp-Low
jeweils 2 Byte
0xAC ist das Config.-Register; der wert 0x0c stellt R1 und R2 auf 
1(High)
und Continuirliches Messen. 0x51 startet den messvorgang.

bei mir funzt es in einem ATmega32 mit der i2c-lib von Peter Fleury

Autor: Marco F. (m8_killer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich nochmal. schau mal bei maxim vorbei, in der appnote 135 steht eine 
gute beschreibung wie der ds1631 konfiguriert wird. kannste als pdf 
herunterladen.

http://www.maxim-ic.com/app-notes/index.mvp/id/135

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.