Problem mit DS1820 an ATMega8

OP #533646
Lesenswert?

Hallo,

habe ein Problem mit dem Temperatursensor. Und zwar rufe ich 
nacheinander folgende Funktionen auf:

reset_pulse
skip_rom
convert_t
reset_pulse
skip_rom
read_scratchpad
reset_pulse


Dabei stelle ich fest, das er darin hängenbleibt. Hab erstmal einzeln 
getestet, reset_pulse, skip_rom, und read scratchpad verursachen keine 
Dauerschleife und laufen normal durch, woraus ich schließe dass sie auch 
richtig sind. Hab den Quellcode hier aus dem Forum:

reset_pulse:
  sbi ddrd, 0        ;pd0 als ausgang
  cbi portd, 0
  rcall wait500us        ;mcu hält bus für mindestens 480us low
  cbi ddrd, 0        ;lässt den bus los, geht in rx-mode
  rcall wait70us        ;wartet 70 us

  wait_presence_pulse:
  sbic pind, 0
  rjmp wait_presence_pulse    ;wartet auf presence pulse

  wait_presence_pulse_end:
  sbis pind, 0
  rjmp wait_presence_pulse_end     ;wartet bis presence pulse fertig

  rcall wait410us        ;wartet 412 us


ret
skip_rom:          ;gibt den befehl "Skip Rom" an den
  ldi temp1, 0xCC        ; sensor aus
  mov befehl, temp1
  rcall write_command
ret

Bei convert_t wird nun allerdings eine Dauerschleife erzeugt, wodurch 
das ganze Programm natürlich hängenbleibt.

convert_t:          ;gibt den befehl "Convert T" an den
  ldi temp1, 0x44        ; sensor aus
  mov befehl, temp1
  rcall write_command

  cbi portd, 0
  sbi ddrd, 0        ;bus low für 6us
  rcall wait6us
  cbi ddrd, 0        ;bus loslassen
  rcall wait9us        ;nach 9us samplen
  convert_t_1:
  sbis pind, 0        ;wartet bis conversion zu ende ist
  rjmp convert_t_1
ret

Im Datenblatt steht jetzt noch was davon, dass ich bei parasite power 
noch für die Zeit t_conv was machen soll.

Habe das Teil als Parasite Power angeschlossen. Worauf muss ich da beim 
Programmieren achten wen ich parasite power, bzw. external supply hab ?

Kann mir konkret einer bei dieser Funktion sagen was an der Funktion 
falsch ist, oder warum es bei parasite power evtl. nicht läuft ?

Danke,
ChristianR
Gast #538034
Lesenswert?

meinst du diesen Code: Beitrag "Mehrere DS1820/DS18B20 auslesen"
den du immer gefunden hast? der geht doch bestimmt.

"parasite -powered" heißt - wie der Name sagt, dass der Sensor seine 
Versorgung aus der Datenleitung "zieht". Das Datenblatt sagt dazu, dass 
du den Sensor NICHT während der Messung pollen darfst!, du musst diese x 
_m_s -ja richtig ms, also eine halbe Ewigkeit ;) abwarten musst, bis der 
sensor fertig ist und in der Zeit darf nichts auf dem Bus passieren.
OP #539683
Lesenswert?

SO jetzt klappst, den Quellcode hatte ich hier nicht gefunden. Aber da 
sehe ich wie es gemacht wird, nämlich sehr viel einfacher. Ich sende 
einfach den Convert Befehl, ziehe dann die Spannung für den DS1820 hoch 
(parasitepower) und warte einfach 500ms und nicht wie vorher dass ich 
solange warte bis ich eine "Antwort" vom DS1820 bekomme.

Danke,
CHristianR

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren