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
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???
>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.
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.
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
...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.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.