Forum: Mikrocontroller und Digitale Elektronik wieder ein DS18B20 Problem


von André M. (killroymenzel)


Angehängte Dateien:

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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.
Welche Spannung(en) hast du an deinem Device?
Hast du ein Oszilloskop?

von (prx) A. K. (prx)


Lesenswert?

Test verkehrt herum in "Warten bis der 18B20 die Datenleitung freigibt".

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

A. K. schrieb:
> Test verkehrt herum
Nein, da steht doch "Warte hier solange die Datenleitung noch low ist."

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

von Steffen (Gast)


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]

von André M. (killroymenzel)


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é

von (prx) A. K. (prx)


Lesenswert?

Lothar Miller schrieb:
> Nein, da steht doch "Warte hier solange die Datenleitung noch low ist."

Ich weiss nicht wo du grad bist, aber in
1
      sbic      DS_Pin,DQ               ;Warten bis der 18B20 die Datenleitung freigibt
2
      rjmp      pc-1
3
      ret
rutsche der Code glatt durch, wenn DQ low ist. Soll aber warten bis es 
high ist, d.h. sbis wäre angesagt.

: Bearbeitet durch User
von Bastler (Gast)


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.

von Steffen (Gast)


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.

von André M. (killroymenzel)


Lesenswert?

Also....jetzt habe ich das timing mal verändert, aber es hat kein 
Effekt...... leider......


André

von (prx) A. K. (prx)


Lesenswert?

André Menzel schrieb:
> Also....jetzt habe ich das timing mal verändert, aber es hat kein
> Effekt...... leider......

Und was genau hast du nun verändert?

von André M. (killroymenzel)


Lesenswert?

so....ich habe den Widerstand kleiner gewählt , aber dadurch dass ich 
keine Paratisäre Spannung verwende, hat es keine Auswirkung.

Andre

von André M. (killroymenzel)


Angehängte Dateien:

Lesenswert?

das Warten - bis zum einlesen des nächsten Bits und das "anklingeln" von 
2µ auf 1µ verkürzt....

A. K. schrieb:
> Und was genau hast du nun verändert?

von (prx) A. K. (prx)


Lesenswert?

Der Reset ist immer noch verkehrt.

von Bastler (Gast)


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.

von André M. (killroymenzel)


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.)

von Tom W. (rittertom)


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 ???

von Mike (Gast)


Lesenswert?

tom west schrieb:
> von hier.
> http://sgprojects.co.in/index.php/projects/8051-pr...

Keine Ahnung, was sich bei dir tut, wenn du auf den Link klickst. Bei 
mir kommt: "404 - Article not found"

von W.A. (Gast)


Lesenswert?

tom west schrieb:
> Ich hoffe ich bin hier richtig.

Wohl kaum. Warum kaperst du einen alten Thread mit einem ganz anderen 
Problem, dass bereits gelöst ist und außerdem auf einem ganz andern 
Prozessor läuft?

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.