DS18B20 zu komplizierte Ansteuerung?

OP #967007
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
Gast
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
Gast
>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.
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
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
Angehängte Dateien:

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.