Forum: Mikrocontroller und Digitale Elektronik DS18B20 zu komplizierte Ansteuerung?


von Marco M. (marco1987)



Lesenswert?

Hi Leute habe gerade mal in dem ausführlichen Datenblatt (siehe anhang) 
den C code mir angeschaut und die Anzahl der benötigten Funktionen. Das 
ist ja unglaublich wie umfangreicht das ist.
Ich hatte mir das mit dem 1 wire sensor einfach so vorgestellt:


Tempsensor versorgen, adresse abfragen, temp einlesen fertig.


hat jmd von euch so ein kurzes programm in C? meisten hier im Forum sind 
nu in asm.

mfg

von uwe (Gast)


Lesenswert?

Ich hatte so ein teil mit Bascom angesteuert, das war natuerlich 
einfach. so kompliziert ist der prinzipielle Ablauf aber nicht:

einzelner DS18S20 am Bus:

- Reset
- search first device (um zu wissen das auch 'jemand' da ist)
- skip rom[1]
- jetzt messen
- jetzt 200ms(?) warten
- jetzt scratchpad uebertragen in array aus 9 bytes
- fertsch

im ersten byte ist der absolutwert der Temperatur, um 2. das vorzeichen

[1]: bei mehreren geraeten wird es hier etwas komplexer mit den 
Adressen, bei einem Geraet ist die Adresse Wurst.

HTH, bye uwe, der aber kein C beherrscht, auch kein assembler

von Matthias (Gast)


Lesenswert?

siehe Codesammlung:
Beitrag "DS1820, DS18B20 in C"

Beim 1-Wire Protokoll ist stark auf das Timing zu achten. Es ist gerade 
am Anfang nicht leicht zu durchblicken, wenn man das Prinzip erstmal 
kapiert hat, ist es ein recht leistungsstarkes Verfahren.

von dummy (Gast)


Lesenswert?

>Beim 1-Wire Protokoll ist stark auf das Timing zu achten. Es ist gerade
>am Anfang nicht leicht zu durchblicken, wenn man das Prinzip erstmal
>kapiert hat, ist es ein recht leistungsstarkes Verfahren.

Wenn man Programme gerne per Interrupt steuert
ist es ein absolut bescheuertes und unbrauchbares
Protokoll.

von Peter D. (peda)


Lesenswert?

dummy wrote:

> Wenn man Programme gerne per Interrupt steuert
> ist es ein absolut bescheuertes und unbrauchbares
> Protokoll.

Das ist eher eine Frage, wie klug oder dumm man sich anstellt.

Wer mich kennt weiß, daß ich sehr gerne Interrupts verwende. Ich kann 
aber nicht behaupten, daß es mit 1-Wire irgendwelche Probleme gäbe, 
obwohl ich die fast auf jeder Platine einsetze.

Das einzige Problem ist, daß ein 1-Wire Transfer relativ lange dauert 
und damit die Mainloop manchmal zu langsam werden könnte. Dann kann man 
aber das 1-Wire im Hintergrund mit einem Timerinterrupt machen.


Peter

von Bernhard S. (dk9nw)


Angehängte Dateien:

Lesenswert?

Hallo Peter,

Von dir hatte ich vor kurzem irgendwo im Netz ein Programmbeispiel
aufgestöbert. Das hat mir viel geholfen einen 1 wire DS1820
Temperatursensor auf einer AVR-Ctrl Experimentierplanine zum Laufen
zu bekommen. Habe diese mit einem ATMega644p mit 20 MHz bestückt.

Da ich nur einen Sensor habe, brauche ich das SEARCH ROM [F0h] nicht,
sondern habe das READ ROM [33h] verwendet.

Außerdem habe ich in der function w1_bit_io() den zweiten delay
auf insgesamt 20 us erhöht. Das war vorher etwas wackelig. Mal gings
mal nicht.

Das Programm ist als Demo gedacht und noch nicht optimiert.

Gruß
Bernhard

https://www.mikrocontroller.com/index.php?main_page=product_info&cPath=65&products_id=181

http://home.tiscali.de/peterd/appl/soft/c51/thclock/index.htm

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.