wieder ein DS18B20 Problem

OP #3436263
Lesenswert?

Hallo Gemeinde,

Ich habe das Problem dass mir der Sensor "nur" einsen bzw. 0xFF 
antwortet.

Ja ich weiss dass das timing von 1Wire nicht trivial ist, aber ich denke 
ich habe dieses mit Assembler und studieren des Datenblatts eigentlich 
im Griff.

Ich habe nur einen Sensor, so dass ich mit SkipRom und Convert die 
Messung einleite und mit SkipRom und ReadScratchpad auslese.

Ich lese auch nur die ersten 2 Byte aus und gebe diese direkt 
(unberechnet) auf ein Display und auf UART aus.
Unberechnet deswegen, weil ich erst Fehler in der Berechnungsroutine 
vermutet habe.

Wahrscheinlich ist es wieder so ein ganz dummer Fehler, aber ich finde 
ihn nicht.

Wenn Ihr mal einen Blick auf meine Routine werfen würdet wäre ich 
dankbar.

Ich verwende ein ATMega128A Testboard mit einem HD44780 Display.

Danke im Vorraus.


Andre
Angehängte Dateien:
Gast #3436399
Lesenswert?

André Menzel schrieb:

> Ja ich weiss dass das timing von 1Wire nicht trivial ist, aber ich denke
> ich habe dieses mit Assembler und studieren des Datenblatts eigentlich
> im Griff.

Guten morgen :-) Das dachte ich auch immer. Erst nach mehmaligen Testen 
habe ich folgende Zeiten genommen:

- nach dem BUS "runterziehen" 1us
- warten bis DS reagiert 14us
- nach dem Einlesen 46us

Dazu kommt dein Reset, da ist einiges komisch:
 - Du wartest zu kurz um die Antwort zu prüfen.
 - Was machst du mit rjmp pc-1?

[avrasm]
One_Wire_Reset:
      sbi       DS_DDR,DQ  ;1-Wire für 470 µS auf Low ziehen
      timer,480
      cbi      DS_DDR,DQ   ;OneWireHigh
      timer,60
      sbic      DS_Pin,DQ  ;Gibt der 18B20 Antwort?
      rcall    Pre_error
      sbic      DS_Pin,DQ  ;Warten bis der 18B20 die  Datenleitung 
freigibt
      rjmp      pc-1
      ret

[avrasm]
OP #3436417
Lesenswert?

Lothar Miller schrieb:
> Welche Spannung(en) hast du an deinem Device?
> Hast du ein Oszilloskop?

Der Sensor ist an 5V angeschlossen - also keine Parasitäre Spannung.
Ja ich habe ein Oszi- aber ich muss erlich sagen, kann ich Datenverkehr 
sehen, aber nicht darstellen. Ist ein HM402-2 (und ehrlich gesagt kenne 
ich mich mit dem Model nicht ganz so gut aus.)

Lothar Miller schrieb:
> Und offenbar gibt es beim Reset noch keine Probleme (wobei man sich das
> am besten mal mit einem Oszi anschaut...)

Stimmt, mit dem Reset scheint es keine Probleme zu geben (so wie ich das 
sehe)

Steffen schrieb:
> Dazu kommt dein Reset, da ist einiges komisch:
>  - Du wartest zu kurz um die Antwort zu prüfen.
>  - Was machst du mit rjmp pc-1?

Steffen schrieb:
> sbic      DS_Pin,DQ  ;Warten bis der 18B20 die  Datenleitung
> freigibt
>       rjmp      pc-1
>       ret

rjmp pc-1 ist doch "fast" selbsterklärend. - springe im program counter 
einen befehl zurück. - und da der befehl sbic nur einen Takt verbraucht 
landet er da.

Steffen schrieb:
> - Du wartest zu kurz um die Antwort zu prüfen.

mit rjmp pc-1 warte ich so lange bis es soweit ist -  wenn das device 
10µs länger brauchen sollte wartet das Programm auch.

Es wird ja nicht "ein" mal geprüft, sondern solange gewartet bis das 
device die Leitung wieder freigiebt.

Was die Zeiten angeht, habe ich mich relativ exakt an das Datenblatt 
gehalten.
aber ich probiere es mal.


Danke für eure Antworten.


André
Gast #3436421
Lesenswert?

Steffen schrieb:
> - Was machst du mit rjmp pc-1?

Damit springt er einen Befehl nach oben zu

> sbic      DS_Pin,DQ  ;Warten bis der 18B20 die  Datenleitung
> freigibt

@ André Menzel
Ich nehme an deine Quelle ist 
http://www.avr-projekte.de/downloads/DS18x20_multi.asm
Zumindest die Kommentare sind gleich.

Hier der Reset Teil:
1
;-----------------------------------------------------------------
2
;1-Wire Reset
3
;-----------------------------------------------------------------
4
;    
5
;          _                          ____         _______________    
6
; RESET     |                        |////|       |////////////|    
7
;           |________________________|////|_______|////////////|    
8
;            <--------480µs----------><-64µs->^--Wait Release-->
9
;                                             ^
10
;                                             ^
11
;                                           Sample
12
;------------------------------------------------------------------
13
One_Wire_Reset:
14
    cbr     flags,1<<presence    
15
    rcall   Wait_ISR_End
16
    One_Wire_Low                ;1-Wire für 470 µS auf Low ziehen
17
    rcall   Delay_480uS
18
    One_Wire_High
19
    rcall   Delay_64uS          ;60µS warten
20
    sbic    DS_Pin,DQ           ;Gibt der 18B20 Antwort?
21
    sbr     flags,1<<presence   ;Wenn ja, presence Flag setzen
22
    sbis    DS_Pin,DQ           ;Warten bis der 18B20 die Datenleitung freigibt
23
    rjmp    pc-1
24
    ret


Hier wird wie weiter oben schon bemerkt, sbis (statt sbic in deinem 
Code) zum pollen benutzt.
Gast #3436424
Lesenswert?

Bastler schrieb:
> Steffen schrieb:
>> - Was machst du mit rjmp pc-1?
>
> Damit springt er einen Befehl nach oben zu
>
>> sbic      DS_Pin,DQ  ;Warten bis der 18B20 die  Datenleitung
>> freigibt
>

oh... mein fehler :-(

Was mir zu dem DS Sensor noch einfällt, ich nutze den als 
"PARASITE-POWERED" und habe statt der 4,7k im Datenblatt nur 2,2k drin. 
Damit läuft der Sensor um einiges besser.
Gast #3436472
Lesenswert?

Jetzt änder doch mal


> sbic    DS_Pin,DQ           ;Warten bis der 18B20 die Datenleitung
> freigibt

in

> sbis    DS_Pin,DQ           ;Warten bis der 18B20 die Datenleitung
> freigibt

.. sonst trommelst du dem DS18B20 schon Bits entgegen, wärend der noch 
die Datemleitung auf GND hält.
OP #3436488
Lesenswert?

Bastler schrieb:
> Jetzt änder doch mal
>
>> sbic    DS_Pin,DQ           ;Warten bis der 18B20 die Datenleitung
>> freigibt
>
> in
>
>> sbis    DS_Pin,DQ           ;Warten bis der 18B20 die Datenleitung
>> freigibt
>
> .. sonst trommelst du dem DS18B20 schon Bits entgegen, wärend der noch
> die Datemleitung auf GND hält.

habe ich...DANKE DANKE....................

Heute Abend schreibe ich die berechnung...........



André

(Ich wusste, das es nur eine Kleinigkeit sein kann)
(Erfahrung ist die Summe der Fehler die man macht.)
#3774112
Lesenswert?

Hallo

Ich hoffe ich bin hier richtig.

habe mir eine Thermometer mit AT89C2051 und DS18B20 nachgebaut.
von hier.
http://sgprojects.co.in/index.php/projects/8051-pr...

Doch leider wertet der AT89C2051 sie Signale vom DS nicht richtig aus.
Es kommen nur wirre Zahlen ( 22,0 23,0 -12,0 33,0 ...)
Am oszi sieht alles sehr sauber aus. Die Spannung für den DS habe ich
direkt vom AT89C2051 abgeriffen ( 10 cm Leitungslänge) und noch mit 47µ
und 1nF direkt am DS gelättet.
Klemme ich den DS ab, ist die Anzeige auf 00,0
Leider bin ich nur eine "Hardware Mensch" somit kann ich zum Progamm
nicht sagen ( aber ich denke es wird Ok sein)

Doch wo ist der Fehler zu suchen ???

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