Forum: Compiler & IDEs 1wire und DS18B20 katastrophe


von 5465 (Gast)


Angehängte Dateien:

Lesenswert?

Ich hab jetzt schon eine Ewigkeit damit verbracht diesen Bus zum laufen 
zu kriegen, aber es wäre eine Wunder wenn auch nur irgendwas mal ohne 
Probleme funktionieren würde.

Ich hab mich jetzt schon durch 3 verschiedene Tutorials gewühlt plus 
jeden code kopiert und ausprobiert. Aber entweder kommt garnichts oder 
irgendwas an. Ja sogar wenn der DS18B20 nicht mal im Breadboard ist 
bekomme ich noch was auf dem LCD angezeigt.

Mit dem angefügten code bekomme ich immer +127,9375 angezeigt, der 
Sourcecode stammt aus einem .pdf was hier im internet herumfliegt.

Kann mal jemand so nett sein und mal nachsehen was daran so verpfuscht 
ist?

danke.

von (prx) A. K. (prx)


Lesenswert?

Was stört dich eigentlich an den Delays der avr-lib?

von (prx) A. K. (prx)


Lesenswert?

Erholzeit zwischen geschriebenen 0-Bits fehlt. Dürfte aber bei 1MHz 
keine Rolle spielen, weil der Code zwischendrin langsam genug ist.

von Alex W. (a20q90)


Lesenswert?

Wichtig für alle 18x20 -Bastler! Jeder der drei Typen benötigt anderen 
Code!

von (prx) A. K. (prx)


Lesenswert?

Alex W. schrieb:

> Wichtig für alle 18x20 -Bastler! Jeder der drei Typen benötigt anderen
> Code!

Für die Umrechnung. Weshalb man damit anfangen sollte, die beiden Bytes 
in Hex auszugeben und zu kontrollieren. Umrechnen kann man später, wenn 
da überhaupt was Sinnvolles kommt. Hier kommen offenkundig nur Einsen, 
was bedeutet, dass der DS nicht reagiert.

von (prx) A. K. (prx)


Lesenswert?

Presence-Bit beim ersten Reset kontrollieren. Wenn da nix kommt, dann 
hat man schon ganz vorneweg was falsch gemacht.

von 5465 (Gast)


Lesenswert?

Hab mal den Code in Proteus simuliert da geht es wunderbar, nur auf mein 
Steckbrett nicht? Angeschlossen ist er richtig laut Datenblatt, als 
Pullup verwende ich ein paar Widerstände zusammengeschalten (4,8kOhm) 
hab keinen 4,7k im Haus. An den 0,1 kOhm wirds ja nicht liegen oder ?

Kann man irgendwie Festellen ob die vielleicht schon beim Transport 
kaputt gegangen sind?

von Banane (Gast)


Lesenswert?

Hast du ein Scope und schon mal am Bus gemessen?

von 5465 (Gast)


Lesenswert?

Ne, leider nicht

von (prx) A. K. (prx)


Lesenswert?

Kontrolliert ob der Controller wirklich mit 1MHz taktet?

Mittlerweile mal das Presence-Bit Kontrolliert? Wenn das nicht kommt, 
dann stimmt die Hardware nicht.

von 5465 (Gast)


Lesenswert?

Presence bit scheint nicht zu kommen mit:
if(therm_reset()!=1){
    lcd_string("ja");
}
gibts keine Antwort.
Der Controller taktet mit 1Mhz intern, soweit man AVR Studio vertrauen 
kann?

von Banane (Gast)


Lesenswert?

Mit einem kleinen Lautsprecher mit ca. 470 Ohm in Reihe gegen Masse am 
1-Wire-bus kannst du auch hören, ob da irgendetwas wackelt, ansonsten: 
mach mal ein SCHARFES aber KLEINES Foto von deinem Aufbau.

von (prx) A. K. (prx)


Lesenswert?

5465 schrieb:

> Der Controller taktet mit 1Mhz intern, soweit man AVR Studio vertrauen
> kann?

Vorsichtshalber kontrollieren: Pin mit LED mit nominell 1 Hz wackeln 
lassen. Auf Basis der gleichen Delay-Routinen.

von Alex W. (a20q90)


Lesenswert?

Steht auf dem Chip wirklich 18B20 und benutzt Du WIRKLICh den Code für 
einen 18B20 und nicht 18S20?

von (prx) A. K. (prx)


Lesenswert?

Das ist vorerst nicht relevant. So lange der presence pulse nicht kommt.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

5465 schrieb:
> Hab mal den Code in Proteus simuliert da geht es wunderbar, nur auf mein
> Steckbrett nicht?

Mal ohne Steckbrett probieren?  Die Dinger sind ja berüchtigt für
ihre exorbitant hohen parasitären Kapazitäten und eignen sich
eigentlich nur für Gleichspannung … das könnte einem Eindrahtbus
schon das Genick brechen.

von (prx) A. K. (prx)


Lesenswert?

Dieser Bus kann auch bei einfachster Ansteuerung zig Meter lang werden. 
Da spielt ein Steckbrett keine wesentliche Rolle.

von 5465 (Gast)


Angehängte Dateien:

Lesenswert?

Hab die Frequenz mal kontrolliert und scheint soweit in Ordnung zu sein.
Die Befehle sind auch die Richtigen, wie aus dem Datenblatt des DS18B20. 
Gekennzeichnet ist er auch als DS18B20 auf der Rückseite.

Hab mal ein Bild von meinem Aufbau angehängt.

von (prx) A. K. (prx)


Lesenswert?

Meinst du nicht, dass er richtig herum besser funktionieren wird?
Allerdings vielleicht nicht mehr dieses Exemplar.

von 5465 (Gast)


Angehängte Dateien:

Lesenswert?

Sehe ich was was du nicht siehst oder wie ?
Pin1 ist doch GND, dreh ich ihn um. Ist doch GND mit Vdd vertauscht ??

von Björn B. (elmo)


Lesenswert?

Auf dem Bild von Deinem Aufbau ist am DS18B20 der linke Pin GND.

von (prx) A. K. (prx)


Lesenswert?

5465 schrieb:

> Sehe ich was was du nicht siehst oder wie ?

Auch hier andersrum ;-). Du übersiehst das "BOTTOM VIEW" in der unteren 
linken Ecke vom Bild. Das ist von der Seite der Pins betrachtet, bei dir 
also aus Sicht des Steckbretts, von unten gesehen.

Tröste dich, du bist nicht der Erste im Forum, der darüber stoplert.

von 5465 (Gast)


Lesenswert?

Ja, vollkommen richtig. Hab es für eine Topview gehalten , das 
wichtigste
überließt man immer. Wie peinlich :/


Geht jetzt alles. Vielen Dank für eure Hilfe!

von b_k__BS (Gast)


Lesenswert?

Hallo,
ich beacker auch seit einigen tagen ein DS18S20.
Leider mit nur mäßigem Erfolg.
Der Code von 5465 (Gast) deckt sich mit vielen Tutorial oder 
Forenbeiträgen hier... und wie bereits festgestellt gab es bei Ihm ein 
Hardware Problem.
Also schließe ich mal aus, dass der von Ihm verwendete Sourecode 
fehlerhat ist.

Daher habe ich diesen Code für mein Projekt bis auf die unten 
beschriebenen Änderungen 1:1 übernommen.
Da ich leider über kein Display verfüge.
Gebe ich das Array temperature[0] bzw. temperature[1] auf die paralellen 
Ports B und D aus.
Als MUC ist ein Atmega8L im Einsatz.
Den DQ hab ich über 4,7k auf vcc (5V) gezogen.
Der DS18S20 ist bei mir in 3 Drahttechnik (GND,DQ,VCC -- bevor jemand 
fragt Bottem View) angeschlossen.

Trotz allem Bekomme ich als Übergabe in die Ports:
temperature[0]=0xff,
temperature[1]=0xff;

mir ist nicht klar warum.....
hat jemand von euch einen guten Tipp, bzw. eine Idee wie ich das, ohne 
Oszi, noch sinnvoll debuggen kann?

Danke für Eure Hilfe. Viele Grüße Björn

von (prx) A. K. (prx)


Lesenswert?

b_k__BS schrieb:

> Trotz allem Bekomme ich als Übergabe in die Ports:
> temperature[0]=0xff,
> temperature[1]=0xff;

Genau das hatte er auch gekriegt. Infolgedessen kannst du nun einfach 
oben im Thread anfangen und die gleichen Tipps und Ansätze verfolgen.

von b_k__BS (Gast)


Angehängte Dateien:

Lesenswert?

Hallo A. K.,
danke für Deine Hilfe...

Gehen wir es mal von oben durch:

1.)

Alex W. schrieb:
> Wichtig für alle 18x20 -Bastler! Jeder der drei Typen benötigt anderen
> Code!

Ich benutze eine DS18 S 20.
Aber:

A. K. schrieb:
> Für die Umrechnung. Weshalb man damit anfangen sollte, die beiden Bytes
> in Hex auszugeben und zu kontrollieren. Umrechnen kann man später, wenn
> da überhaupt was Sinnvolles kommt. Hier kommen offenkundig nur Einsen,
> was bedeutet, dass der DS nicht reagiert.

Also habe ich mir, deinem Rat folgend, die Hexziffern der Beiden 
übergeben Bytes auf die Ports geführt.
______________________________________________
2.)

A. K. schrieb:
> Das ist vorerst nicht relevant. So lange der presence pulse nicht kommt.

Ich ziehe das Kontrollsignal i aus der Resetfunktion als Fehlersignal in 
eine glob. variable. Und lese sie am Ende aus. Da das Fehlersignal 
gesetzt wird ...bedeutet das, dass ich eine Rückmeldung vom DS18S20 
bekomme.
Also alles I.O.
_______________________________________________
3.)
Timeming lässt sich bei mir ohne Oszi schwer kontrollieren.
Ich glaube aber mal, dass der Code den  internen Schwingkreis schon 
richtig konfiguriert.
_______________________________________________
4.)
Den Aufbau hab ich jetzt x-mal kontrolliert ich glaube die Stolperfalle 
mit dem "Bottom view "müsste ich umgangen sein...
_______________________________________________
Habe im Anhang eine Skizze des Aufbaus.

Wäre klasse, wenn da jemand von euch nochmal drüber fliegt.
Danke!
Viele Grüße
Björn

PS: Mir ist völlig klar, dass die dezimale Temperatur nicht passen 
kann!!!
Ich lasse mir nur die Bytes aus dem Temperatur Register übergeben! Und 
die müssten nach Datenblatt etwas anderes sein als 0xff! (das wären 
-0,5°C) Was zu dieser Jahreszeit unwahrscheinlich ist.

von (prx) A. K. (prx)


Lesenswert?

b_k__BS schrieb:

> Ich ziehe das Kontrollsignal i aus der Resetfunktion als Fehlersignal in
> eine glob. variable. Und lese sie am Ende aus. Da das Fehlersignal
> gesetzt wird ...bedeutet das, dass ich eine Rückmeldung vom DS18S20
> bekomme.

Verstehe ich das richtig: Du kriegt ein Fehlersignal welches anzeigt 
dass kein Sensor reagiert und wunderst dich dass kein Ergebnis 
rauskommt?

Die oben gezeigte Reset-Funktion liefert, wie dort dokumentiert, 0 wenn 
ein Sensor reagiert und 1 wenn nicht. Wiederspiegelt damit direkt die 
Situation auf dem Bus.

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.