mikrocontroller.net

Forum: Compiler & IDEs DS2438 auslesen


Autor: Patrick (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich möchte einen Battery Monitor auslesen. Dieser arbeitet wie 
Temperatursensoren von Dallas mit dem 1-wire Interface. Das Programm hab 
ich nach der Vorlage des AppNote von Atmel selber geschrieben. Nun 
möchte ich die Spannung, Temperatur und den Strom auslesen, doch das 
will nicht funktionieren. Ich mache als erstes einen Skip Rom (0xCC) und 
schicke danach meine Anforderung. Wenn ich nun das Scratchpad auslesen 
will, schickt er mir als erstes das Configurationbyte, dessen Wert auch 
stimmt. alle weiteren Bytes sind dann '0' bis auf das letzte, das 
Threshold byte, das überträgt auch wieder einen Wert. Daraus schließe 
ich mal, dass meine Software funktioniert.
Um eine Temperatur auszulesen gehe ich folgendermaßen vor:

Hier ersteinmal die Temperatur messen:
reset;
skip rom (0xCC);
Convert T (0x44);
reset;

Un dann vom scratchpad auslesen:
reset;
skip rom (0xCC);
Read Scratchpad (0xBE);
Page 0 (0x00);
Read Byte 0 ();
Read Byte 1 ();
Read Byte 2 ();
.
.
.
Read Byte 7 ();
reset;

Byte 0 und Byte 8 enthalten Daten, die restlichen nicht. Hat es was 
damit zu tun, dass Byte 0 und 7 non volatile sind?

Habe ich hier irgendwo einen Denkfehler oder sonstigen Fehler? Also das 
Timing und somit die Übertragung müsste ja eigentlich 
stimmen...(sourcecode im Anhang).

Hoffe ihr könnt mir helfen.

Gruß
Patrick

Autor: Patrick (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier das Datenblatt zum DS2438

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auf den ersten Blick sieht alles gut aus - allerdings ist dein Timing 
immer hart an der Grenze des erlaubten, z.B.

unsigned char read_bit (void)
  pin_low();
  _delay_us(6);
  pull_up();
  _delay_us(9);

Hier würde ich 2µs und 10µs warten, um noch sicher innerhalb des 
Sampling-Window von 15µs zu sein. Frequenz des Controllers ist richtig 
eingestellt?
Daran scheint dein Problem aber nicht zu liegen.

Ist denn das "Temperature Busy Flag" auch wirklich nicht mehr gesetzt 
wenn du die Daten ausliest?
Benutzt du nur den internen Pullup? Der könnte etwas schwach sein für 
die Datenleitung.
Hat der DS eine eigene Spannungsversorgung oder läuft er im parasitic 
mode?

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.