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.
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.
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?
Kontrolliert ob der Controller wirklich mit 1MHz taktet?
Mittlerweile mal das Presence-Bit Kontrolliert? Wenn das nicht kommt,
dann stimmt die Hardware nicht.
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?
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.
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.
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.
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.
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.
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!
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
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.
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.
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.