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
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?
Test verkehrt herum in "Warten bis der 18B20 die Datenleitung freigibt".
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...)
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]
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é
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
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.
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.
Also....jetzt habe ich das timing mal verändert, aber es hat kein Effekt...... leider...... André
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?
so....ich habe den Widerstand kleiner gewählt , aber dadurch dass ich keine Paratisäre Spannung verwende, hat es keine Auswirkung. Andre
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?
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.
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.)
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 ???
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"
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.