Forum: Compiler & IDEs DS2438 auslesen


von Patrick (Gast)


Angehängte Dateien:

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

von Patrick (Gast)


Angehängte Dateien:

Lesenswert?

Hier das Datenblatt zum DS2438

von Jan M. (mueschel)


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?

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.