Hallo,
beschäftige mich zurzeit ein wenig mit Mikrocontrollern und habe nun
versucht einen DALLAS DS18S20 an meinen ATmega8 anzuschließen. Im Netz
habe ich einen Quellcode gefunden und diesen dann auch verwendet.
Den Sensor habe ich an den Pin PC6 gelegt, da dieser gerade frei war.
Habe ihn so angeschlossen wie man in der Datei Verbindung.jpg sehen
kann.
Doch irgendwo hängt jetzt das Programm. Da ich leider noch keine RS232
Schnittstelle realisiert habe, ist die Fehlersuche jetzt ziemlich
mühselig. Ich schicke deshalb auch noch meinen bisherigen
angepassten Quellcode mit.
Die Unterprogramme habe ich an mein Projekt angepasst, also die
Port-Definition und so weiter geändert. Wäre nett, wenn ihr das mal
kontrollieren könntet. Vielleicht ist mir dabei ja irgend ein blöder
Fehler unterlaufen...
Vielen Dank schon mal. Ich weiß echt nicht mehr weiter und kenne sonst
auch niemanden, der sich mit der Materie auskennt.
Mit frendlichen Grüßen,
Sven Scholz
"Ich meine, ich warte ja schon etwas."
Versuchs mal mit ner festen Wartezeit (1s).
Busy-waiting habe ich nie gemacht, da ich parasite power benutze.
Peter
Was denn das für´n Stil?
get_temp:
push R24
lds R24, 0x0060
mov R1, R24;
lds R24, 0x0061
mov R0, R24;
pop R24;
ret
Warum nicht gleich wie folgend im Main ohne Sub:
lds R1, 0x0060
lds R0, 0x0061
Oder besser mit Marken (Variablenbezeichner) im SRAM:
lds R1, Temp
lds R0, Temp+1
.dseg
Temp: .byte 2 ;Temp.-Variable im SRAM (16 Bit)
MfG
Andi
Also ich bin mir auch immer noch nicht sicher, ob ich überhaupt meinen
Sensor richtig angeschlossen habe.
Also ich habe jetzt Definitiv nur 2 Pins vom DS18S20 angeschlossen. Vdd
ist bei mir völlig entfallen. GND geht auf Ground, logisch und DATA
liegt an PC6.
Dazu kommt noch ein Widerstand (4,7kOhm) von Vcc nach DATA.
Fertig.
wait_presence_pulse_end:
sbis pinc, 6
rjmp wait_presence_pulse_end ;wartet bis presence
pulse fertig
Also, das ding erzeugt bei mir irgendwie eine Endlos-Schleife. Das
Programm kommt darüber nicht hinaus. Also wie gesagt, der Sensor ist an
PIN C6 geschaltet.
Ist die Zeile
sbis pinc, 6
denn so korrekt?
Siehe auch Beitrag drüber...
DANKE.
Wenn die Zeile so stimmt, sieht es halt so aus, dass sich der Sensor
nicht meldet. Wie gesagt ich vermute, dass da irgendwas mit meinem
Anschluss nicht stimmt.
Im Parasite-Power Mode muss der Vdd-Pin mit Gnd verbunden sein.
Oder man baut einen Pseudo-Parasite-Mode, mit Schottky-Diode von Data
nach Vdd und großem C von Vdd nach Gnd.
Hast Du nun wirklich den DS18S20 an PC6 (RESET) angeschlossen?
Sofern Dein Mega8 noch über "serial downloading" programmierbar ist,
geht das nicht.
Auch mit dem Fuse RSTDSBL ist PC6 eingeschränkter als die anderen
Pins.
Versuche es mal an einen anderen Pin.
MfG
Andi
"Also ich habe jetzt Definitiv nur 2 Pins vom DS18S20 angeschlossen.
Vdd
ist bei mir völlig entfallen. GND geht auf Ground, logisch und DATA
liegt an PC6.
Dazu kommt noch ein Widerstand (4,7kOhm) von Vcc nach DATA."
Also daran ist ja nun alles falsch !
Wenn Du VDD nicht beschaltest, geht gar nichts.
VDD muß mindestens an GND, aber dann kannst Du das Busy-Bit nicht
abfragen, sondern mußt während der gesamten Wandlung VCC (max 1mA) an
DQ anlegen.
Warum schaust Du nicht einfach mal ins Datenblatt, da sind doch beide
Schaltpläne drin (mit VDD oder mit parasite power).
Peter
Mein code is noch nicht perfekt ... ich benutz z.b. noch keine timer für
die warteschleifen ... wenn er komplett fertig ist, werde ich ihn In
der COdesammlung veröffentlichen. Du kannst mir ja mal ne mail
schreiben, dann kann ich dir den code auch schon mal so geben.
Also im Internet habe ich mich im Vorfeld ja mehr oder weniger schlau
gemacht und folgende Schaltung gefunden... (siehe Anlage)
Konnte ja nicht ahnen, dass Vdd völlig weggelassen wurde...
Hatte mir schon gedacht, dass das so niemals laufen wird, deshalb habe
ich ja hier nochmals nachgefragt.
Gut, also so wie es aussieht kann ich Pin C6 wohl nicht benutzen. Dann
werde ich jetzt die eine Verbindung umlöten und werde es mit dem nächst
besten Pin - wie sieht es mit Pin C0 aus? - versuchen.
Hat jemand noch irgendwelche Einwände, bevor ich meinen riesigen
Lötkolben schwinge. :-)
Danach werde ich den Quellcode natürlich anpassen müssen. Also überall
wo etwas mit DDRC, 6 oder so steht, DDRC 0 umtaufen.
Mal schauen was passiert...
DANKE, für eure ANTWORTEN, hoffentlich komme ich ein Stückchen weiter.
Das Programm hängt immernoch in der Schleife fest.
Ich habe zwischen GND (Vdd) und DATA die Spannung von 5V gemessen.
Wenn ich im Betrieb den Sensor kurzzeitig abziehe und dann wieder
anklemme, geht das Programm auch ordnungsgemäß weiter. Im Display
erscheint dann 0000, weil ja die Messung nur von mir simuliert worden
ist.