Forum: Mikrocontroller und Digitale Elektronik 1 Wire DS1822 ATmega und ganz einfach?


von Jens (Gast)


Lesenswert?

Hallo zusammen,
ich möchte mit einem ATmega (n Mega brauch ich für den Rest drum herum) 
Temperaturen messen - maximal 4 Stück, die allerdings etwas weiter weg 
vom Controller. Meine Wahl fiel auf die 1 Wire Chips von Maxim, weil das 
angeblich ganz einfach is. In zwischen hab ich viel gelesen und mit 
folgendes zusammengereimt:
1. wenn ich etwas von meinen 1 Wire Slaves wissen mag, dann muß ich als 
erstes reseten
2. jeder DS1822 is einmalig (ROM-Code)
Allerdings weiß ich ned so recht was ich damit anfangen soll, weil von 
der Logik her würde ich sagen, ich ermittle einmal alle ROM-Codes meines 
Buses und sende dann ein Request für einen Sensor und dieser antwortet 
dann. Die Beispiele die man so im Netz und hier findet bestätigen das 
aber irgendwie nich so, jedenfalls nich bis zu dem Punkt wo ich es 
verstanden habe.

Kann mich da jemand freundlicher Weise etwas aufgleisen, wenn möglich 
bitte ohne Web-Server und solche Späße, habe ich alles schon gefunden, 
verwirrt mich nur noch mehr. Achso und welcher Sinn besteht eigentlich 
darin jeden DS1822 an einen einzelnen Port des µCs zu hängen - gibt es 
etwa auch die Möglichkeit eines Art Standalone-Betriebs ohne ROM-Code, 
einfach Wandlung auslösen und dann ergebnis abholen? Fände ich zwar 
unschön, hört sich aber einfach an.
Besten Dank
Gruß Jens

von christian (Gast)


Lesenswert?

hallo!!!

mit was programmierst du??? (asm,c...)
und ich hoffe du meinst den ds1820

du hast geschrieben:
1. wenn ich etwas von meinen 1 Wire Slaves wissen mag, dann muß ich als
erstes reseten
2. jeder DS1822 is einmalig (ROM-Code)

zu 1. is richtig also reset routine schreiben
zu 2. is auch richtig aber mit skip_rom_befehl kannst du nur einen 
sensor auf einen pin ansteuern, wenn du aber den search_rom nutzt dann 
fragt die software erstmal ab, wie die adressen sind, die kannst du dann 
speichern im eeprom,
bzw. jetzt kannst du an einem pin ich glaub bis zu 255 sensoren dran 
hängen.

guck mal auf seite 14 da ist eine übersicht und auf seite 17 ist noch 
eine übersicht wie du eine sensor ansteuerst.

ein wenig geholfen???

von AVRFan (Gast)


Lesenswert?

>Meine Wahl fiel auf die 1 Wire Chips von Maxim, weil das
>angeblich ganz einfach is.

Naja, sagen wir mal, so einfach wie ne LED an nem Portpin ein- und 
auszuschalten sind die nun auch wieder nicht.  Für C-Anfänger nur 
eingeschränkt empfehlenswert.

>1. wenn ich etwas von meinen 1 Wire Slaves wissen mag, dann muß ich als
>erstes reseten

Meister, das geht eindeutig aus dem Datenblatt hervor, das Du bei 
www.maxim-ic.com downloaden kannst (Titel "DS1822 Econo 1-Wire Digital 
Thermometer"). Zitat:
1
INITIALIZATION PROCEDURE: RESET AND PRESENCE PULSES
2
All communication with the DS1822 begins with an
3
initialization sequence that consists of a reset pulse
4
from the master followed by a presence pulse from the DS1822.

>2. jeder DS1822 is einmalig (ROM-Code)

Ja.  Jedes Exemplar bekommt bei der Herstellung einen uniquen ROM-Code 
eingelasert.

>Allerdings weiß ich ned so recht was ich damit anfangen soll, weil von
>der Logik her würde ich sagen, ich ermittle einmal alle ROM-Codes meines
>Buses und sende dann ein Request für einen Sensor und dieser antwortet
>dann.

So ist es auch.  Der Request ist das "Match ROM"-Command, siehe 
Datenblatt.

>Kann mich da jemand freundlicher Weise etwas aufgleisen, wenn möglich
>bitte ohne Web-Server und solche Späße, habe ich alles schon gefunden,

Alles, was Du wissen musst, steht im Datenblatt, das Du gut verstanden 
haben solltest, wenn Du mit Programmieren anfangen willst - sonst wirst 
Du Dir Frust holen.

>welcher Sinn besteht eigentlich
>darin jeden DS1822 an einen einzelnen Port des µCs zu hängen - gibt es
>etwa auch die Möglichkeit eines Art Standalone-Betriebs ohne ROM-Code,
<einfach Wandlung auslösen und dann ergebnis abholen?

So ist es.  Nur ein Sensor am Bus = "Single-Drop-Betrieb", mehrere 
Sensoren am Bus = "Multi-Drop-Betrieb".  Bei vier Sensoren kannst Du 
entweder

a) jeden an einem eigenen Portpin single-drop betreiben. 
Hardware-Aufwand: vier µC-Pins; Software-Aufwand: geringer, da Du Dich 
um die ROM-Codes der vier Sensoren nicht kümmern brauchst (Command "Skip 
ROM" - siehe Datenblatt).

Oder b) alle vier an einem einzigen Portpin multi-drop betreiben. 
Hardware-Aufwand: ein µC-Pin.  Software-Aufwand: höher, weil Du die 
Sensoren über die ROM-Codes ansprechen musst.

von Nico E. (masta79)


Lesenswert?

Jens wrote:
> Hallo zusammen,
> ich möchte mit einem ATmega (n Mega brauch ich für den Rest drum herum)
> Temperaturen messen - maximal 4 Stück, die allerdings etwas weiter weg
> vom Controller. Meine Wahl fiel auf die 1 Wire Chips von Maxim, weil das
> angeblich ganz einfach is. In zwischen hab ich viel gelesen und mit
> folgendes zusammengereimt:

Ich persönlich finde 1Wire alles andere als einfach, da das Timing hier 
sehr kritisch ist.

> 1. wenn ich etwas von meinen 1 Wire Slaves wissen mag, dann muß ich als
> erstes reseten
> 2. jeder DS1822 is einmalig (ROM-Code)

Ja, und wenn du alle an einem Bus betreibst ist das (IMHO) auch einer 
der grössten Nachteile vom 1Wire Bus. Du kannst zwar rausfinden wieviele 
und welche Geräte am Bus sind, du weisst aber nicht WO sie sich 
befinden, ausser natürlich du betreibst jeden Slave an einer eigenen 
Leitung des µC. Ansonsten musst die alle einzeln vor der Bestückung 
einmal auslesen und sie manuell zuordnen.

Ich persönlich bevorzuge die LM74(SPI) oder LM75(I2C) ICs, die sind 
recht einfach anzusprechen. Sie sind günstiger als die Maxim-Sensoren 
und du nutzt entweder eine CS-Leitung(beim LM74) oder programmierst sie 
auf eine Busaddresse(LM75). Somit weisst du auch immer WO sich der 
Sensor befindet. Alle (aktuellen?) Megas haben ein SPI-Interface und die 
meisten besitzen auch I2C(TWI bei Atmel) oder wenigstens das 
USI-Interface mit dem man I2C rel. gut nachbauen kann (wobei ich 
persönlich USI in der aktuellen Form nicht mag).

Kleiner Hinweis, wenn du mehrere LM74 nutzen willst und nicht mehr genug 
Ports für die einzelnen CS-Leitungen hast, dann lohnt es sich an den SPI 
Bus ein Shift-Register zu setzen über das du dann seriel die einzelnen 
CS-Leitungen auswählen kannst. Mehr Infos dazu gibts auch hier: 
Porterweiterungen.

von Peter D. (peda)


Lesenswert?

Nico Erfurth wrote:

> Ich persönlich finde 1Wire alles andere als einfach, da das Timing hier
> sehr kritisch ist.

Nö ist es nicht.
Alle Timings haben einen Bereich von mindestens 2:1.
Pi*Daumen und RC-Oszillator reicht völlig.
Man muß bloß beachten, daß kein Interrupt dazwischen fährt und das 
Timing total versaut, das ist alles.


> Ja, und wenn du alle an einem Bus betreibst ist das (IMHO) auch einer
> der grössten Nachteile vom 1Wire Bus. Du kannst zwar rausfinden wieviele
> und welche Geräte am Bus sind, du weisst aber nicht WO sie sich
> befinden, ausser natürlich du betreibst jeden Slave an einer eigenen
> Leitung des µC. Ansonsten musst die alle einzeln vor der Bestückung
> einmal auslesen und sie manuell zuordnen.

Man muß nicht so umständlich denken, es geht doch ganz einfach:
Man schließt die Sensoren der Reihe nach an. Und die Software schreibt 
jeden neu erkannten in ihren EEPROM. Du mußt sie also nur in der 
Reihenfolge anschließen, wie Du sie später verwenden willst.

Bei längeren Leitungen könnte ein getrennter Anschluß sinnvoll sein, 
damit die Leitungskapazität nicht zu hoch wird. Die Bit-Routinen wählen 
dann per Bitmaske einen von 8 Portpins aus.


> Ich persönlich bevorzuge die LM74(SPI) oder LM75(I2C) ICs,

Die haben allerdings eine sehr schwerwiegenden Nachteil, das SO-8 
Gehäuse ist extrem Sensor unfreundlich.
Die DS18B20 im TO-92 kann man dagegen sehr gut in ein Rohr eingießen 
oder einfach in Schlauch einschrumpfen.


Peter

von Frank Z. (frankovic)


Lesenswert?

...es gibt auch den DS2482S, eine I²C nach 1-Wire-Brücke, der einem 
sämtliche Timingprobleme abnimmt. Als DS2482S-800 für 8 Kanäle oder 
DS2482S-100 für einen.

von Jens (Gast)


Lesenswert?

also das Datenblatt des DS1822 hab ich studiert nur blieb mir halt so 
manches unklar - klar programmieren muß ich schon selber

vielleicht läßt mein Englisch auch nach, aber das mit dem single-drop 
hab ich zwar im Datenblatt gefunden, nur irgendwie eine schlüssige 
Erklärung stach mir ned ins Auge, aber mal morgen probieren

also den DS1822 habe bewußt gewählt, weil da auch einige Meter Leitung 
zwischen Sensor und µC sein dürfen und ISP und I^2C da is sowas ja 
eigentlich nur bedingt legal und KTYs sind mir zu ungenau und n paar 
Meter Leitung sind da bestimmt au ned der Renner

von Peter D. (peda)


Lesenswert?

Also mit SEARCH-ROM kann man alle Device an einem Bus der Reihe nach 
erkennen oder adressieren. Das ist wohl das einzige Kommando, mit dem 
Anfänger etwas Schwierigkeiten haben.

Hat man nur ein Device, dann schickt man ein SKIP_ROM und es ist 
addresiert.

Danach kann man dem adressierten Device ein Funktionsbyte schicken um 
eine Wandlung zu starten oder Daten zu lesen/schreiben.


Peter

von Martin S. (smartinick)


Lesenswert?

Hallo Jens!

In deinem ersten Post fragst du ob du die Wandlung für alle gleichzeitig 
auslösen kannst -> reset/presence pulse, skip-rom und dann convert_t 
befehl.
das geht auch bei x sensoren an einem pin gleichzeitig, dann messen alle 
gleichzeitig drauf los. dann wirst du aber wohl mir parasite-power ein 
problem haben, eventuell erst mit 3-draht leitung ausprobieren wenn das 
nicht gleich klappt.

anschließend dann einen sensor nach dem anderen über rom-code 
selektieren und auslesen.

eine andere variante findest du über die suche - ist der code von Ulrich 
Radig. Trick dahinter ist dieser: im sensor sind 2 bytes die du 
beschreiben kannst -> gedacht für temperaturüberwachung/alarm. wenn du 
diese funktion aber nicht nutzt kannst du in diese 2 bytes schreiben was 
du willst.
also auch deine eigene id für den sensor. die musst du dann natürlich 1x 
je sensor vergeben und ich hab die dann einfach drauf geschrieben.
-> damit weis ich auf einen blick auf den sensor die id und weis damit 
z.b. das der "3er" sensor drausen ist.

und dann gibt es dazu noch die rom-search funktion, mit der kannst du im 
prinzip einen sensor nach dem anderen adressieren. d.h. du klapperst 
einem nach dem anderne ab. und liest jetzt aber nicht nur die temperatur 
sondern auch das user-byte wo deine id gespeichert ist.

spart platz im rom und wenn ein neuer sensor dazu kommt oder einer 
ausfällt musst du nur die id im neuen sensor entsprechend setzen.

aber mach mal schritt für schritt, 1 sensor am bus per skip rom, 2 mit 
rom-adressierung und wenn das mal läuft schau dir die routinen von 
Ulrich an, bzw. ist das in einem anscheinend älteren datenblatt auch 
besser beschrieben wie im allerneusten - lassen sich aber beide via 
google finden.

Martin.

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.