Forum: Mikrocontroller und Digitale Elektronik DS1820 Adressierung mit PIC in C


von P. S. (fetter_homer)


Lesenswert?

Hallo zusammen,
über die Suchfunktion habe ich zwar schon einige Beiträge zum Thema 
gefunden, allerdings war da noch nicht das Richtige für mich dabei.
Ich würde gerne drei DS1820 Temperatursensoren an meinen PIC12F1840 an 
nur einen Pin anschließen. Dabei würde ich gerne diese Library 
verwenden: 
http://www.mikroe.com/download/eng/documents/compilers/mikroc/pro/pic/help/onewire_library.htm

Mich interessiert zunächst mal, ob die Routine, die auf den Seiten 10 
und 11 (http://www.micropik.com/PDF/ds1820.pdf) erklärt wird, 
automatisch ausgeführt wird oder ob ich das selbst umsetzen muss?
Und wenn das Ganze automatisch vonstatten geht, wo werden die Adressen 
dann gespeichert: sprich, wie kann ich jetzt die Temperaturen der drei 
Fühler nacheinander auslesen?

Danke und viele Grüße
Peter

von Nicht-PIC-Nutzer (Gast)


Lesenswert?

P. S. schrieb:
> Ich würde gerne drei DS1820 Temperatursensoren an meinen PIC12F1840 an

Zunächst mal scheint deine Datenbasis überaltert zu sein. Dallas bzw. 
Maxim hat schon mehrere Serien dieser Chips mit diversen Verbesserungen 
bzw. Bugfixes auf den Markt gebracht. Aktuell sollten sie bei "DS18S20" 
sein. Dazu das Datenblatt:
http://datasheets.maximintegrated.com/en/ds/DS18S20.pdf

Auf den Seiten 9 bis 12 steht die Bus"topologie" und die Adressierung 
und was man von den Chips sonst noch so erfragen kann.

> nur einen Pin anschließen. Dabei würde ich gerne diese Library
> verwenden:
> http://www.mikroe.com/...

> Mich interessiert zunächst mal, ob die Routine, die auf den Seiten 10
> und 11 (http://www.micropik.com/PDF/ds1820.pdf) erklärt wird,
> automatisch ausgeführt wird oder ob ich das selbst umsetzen muss?
Das steht im Beispiel der Library in der main() innerhalb der 
do{..}while(1) Schleife: -> Ja, das mußt du selber machen.
Die Funktionen selbst sind ja wohl nicht einsehbar. Jedenfalls kann ich 
davon nichts auf der Seite finden.
Falls sich deine Frage auf die Adressenfindung (Search ROM) der Chips 
bezieht: Das scheint die Lib offenbar nicht zu unterstützen. Diese ist 
wohl nur auf einen Busteilnehmer ausgelegt.

> Und wenn das Ganze automatisch vonstatten geht, wo werden die Adressen
> dann gespeichert: sprich, wie kann ich jetzt die Temperaturen der drei
> Fühler nacheinander auslesen?
In dem Beispiel wird 0xCC auf den Bus geschrieben: "Skip ROM", d.h. es 
gibt offenbar nur einen Chip am Pin und der muß nicht adressiert werden 
bzw. werden alle auf einmal adressiert, was aber keinen Sinn macht, weil 
dann alle gleichzeitig losreden und es Datensalat gibt. Hast du nun drei 
davon, mußt du deren Adressen jeweils auf den Bus schreiben ("Match 
ROM") und danach lesen, wie im Beispiel. Achtung: Hier spielt das Timing 
eine tragende Rolle!
Du mußt dir also selbst die Funktion zur Adressenfindung schreiben. 
Siehe dazu die Funktionene "Search ROM" und "Match ROM" im Datenblatt. 
Oder du siehst dir mal verschiedene offene Projekte an, wo das schon 
umgesetzt ist. Sollte z.B. bei Arduino zu finden sein. Jede 
$SUCHMASCHINE ist dein Freund.

Viel Erfolg!

von Mike (Gast)


Lesenswert?

Nicht-PIC-Nutzer schrieb:
> Aktuell sollten sie bei "DS18S20" sein.
Und für Neuentwiclungen ist dem eher der DS18B20 mit verändertem 
Datenformat vorzuziehen

von Nicht-PIC-Nutzer (Gast)


Lesenswert?

Ich habe gerade nochmal gestöbert:
In den Application Notes zum DS18B20 sind eigentlich alle relevanten 
Informationen verfügbar, wie man mit den Sensoren bzw. 1-Wire® Chips 
allgemein umgehen muß.
http://www.maximintegrated.com/en/products/analog/sensors-and-sensor-interface/DS18B20.html
- AppNote 162: "Interfacing the DS18X20/DS1822 1-Wire® Temperature 
Sensor in a Microcontroller Environment"
- AppNote 187: "1-Wire® Search Algorithm"
- AppNote 126: "1-Wire® Communication Through Software"

Die AppNote 1199 von Microchip selbst und der Quellcode dazu ist nicht 
sonderlich ergiebig in Hinblick auf mehrere Sensoren am Pin.
http://ww1.microchip.com/downloads/en/AppNotes/01199a.pdf

Oder vom AVR nehmen und umschreiben:
http://siwawi.bauing.uni-kl.de/avr_projects/tempsensor/

Aber mein Geheimtip: Sieh dir den Code vom BusPirate an, der auf einen 
PIC aufsetzt, und schreibe ihn nach deinen Bedürfnissen um!

http://code.google.com/p/dangerous-prototypes-open-hardware/source/browse/#svn%2Ftrunk%2FBus_Pirate%2FFirmware

Dort die Dateien:
- 1wire.c + 1wire.h
- 1wire_lib.c + 1wire_lib.h

Ist relativ gut dokumentiert und deshalb auch halbwegs zu verstehen.

Viel Erfolg!

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.