Einige kleine Programmierbeispiele sollen helfen, den 1-wire Datenbus und den DS1820 / DS18S20 besser zu verstehen. Die Schaltung ist relativ einfach aufgebaut, ein kleines LCD und ein paar LEDs zeigen gewisse Zustände an. LED grün: PRESENCE Impuls OK LED gelb: Master Samples beim lesen der Daten vom Master (auch gut geeignet zum Triggern eines Oszilloskopen) LED rot: PRESENCE Impuls ERROR Das Display zeigt in hexadezimal in der oberen Zeile den Inhalt des ROM, beginnend mit dem Family Code (10h). In der unteren Zeile das SCRATCHPAD, leider ohne CRC (da das LCD nur 16 Zeichen pro Zeile erlaubt). Im Bild "4_MASTER_READ..." sind die Datenimpulse vom SLAVE und die Samples vom Master zu sehen. Die Samples, also die Abtastungen des Daten-Pins, müssen so getrimmt sein, dass ein 0 oder 1 Slot vom Slave getroffen wird. Eventuell kann auch auf ein Quarz in der Schaltung verzichtet werden. Programmablauf: 1. Messen (dauert ca. 1s) 2. ROM und SCRATCHPAD auslesen und DATEN im SRAM ablegen 3. LCD Ausgabe Es ist kein fertiges Projekt. Weitere Beispiele stelle ich Euch gern zur Verfügung. Der Assemler-CODE ist nicht so optimal. Ich habe versucht, den Programmcode so gut wie möglich zu kommentieren. Bernhard
In dieser Version ist folgendes realisiert: - Temperaturmessung und Berechnung 0,5 / 0,1 GRD - SCRATCHPAD WRITE - SCRATCHPAD COPPY - SCRATCHPAD RECALLEEPROM Die PINS (LEDs A...C) liefern Impulse, kann zum Triggern eines Oszis verwendet werden. Bernhard
die Version 3: - berechnet CRC vom SCRATCHPAD und ROM (bei Error leuchtet LED ROT) - ein einzelner Sensor (SLAVE) mit unbekannten ROM-Code läßt sich auslesen - Zwei bekannte Slaves lassen sich direkt ansprechen und auslesen (vereinfachtes Verfahren, ohne Suchalgorithmus) Bernhard
Version4: Es wird fleißig nach SLAVES gesucht und anschließend nacheinander die CRC geprüften ROM-IDs angezeigt. U.a. ist die Slavesuche nicht optimal programmiert, dieses Verfahren benötigt noch 64 Byte kostbaren SRAM. Bernhard
Hallo Bernhard S. ein sehr gut dokumentiertes Programm. Ich werde es mal ausprobieren sobald ich die richtige Hardware zusammen habe. Danke! Alfons
@Tüddel >kommt die Software auch mit DS18B20 klar ? Die ROM-ID und das SCRATCHPAD wird korrekt ausgelesen und ein CRC-Check, durchgeführt. die Temperaturberechnung funktioniert noch nicht, müsste aber so ähnlich sein wie beim DS2022, die programiere ich momentan noch mit dazu. @Alfons Möller >ein sehr gut dokumentiertes Programm. danke >Ich werde es mal ausprobieren sobald ich die richtige >Hardware zusammen habe. Bin jetzt auch auf ein 4x20 Display umgestiegen, denn 2x16 ist doch etwas grenzlastig. Beitrag "DISPLAY OLED EAW204 4-Bit Modus Initialisierung Assembler ATmega8" @alle gibt es irgendwo eine Zusammenfassung / Auflistung der Family Code ? Bernhard
DS2405_FamilyCode = $05; DS2502_FamilyCode = $09; DS1985_FamilyCode = $0B; DS1820_FamilyCode = $10; DS1920_FamilyCode = $10; { 1820 = 1920 } DS2406_FamilyCode = $12; DS2407_FamilyCode = $12; DS2430A_FamilyCode = $14; DS2422_FamilyCode = $1C; DS2423_FamilyCode = $1D; DS2409_FamilyCode = $1F; DS18S20_FamilyCode = $22; DS18B20_FamilyCode = $28; // 32+8=40 DS2890_FamilyCode = $2C;
Danke Herbert für die Zuarbeit :-) Die Liste Auflistung Zusammenstellung der Family Code / Codes für: DS1820, DS18B20, DS18S20, DS1822, DS1920, DS1985, DS2405, DS2406, DS2407, DS2409, DS2417, DS2422, DS2423, DS2430A, DS2433, DS2438, DS2502, DS2890 habe ich mit angehängt. Wenn jemand die Liste vervollständigen möchte, wären wir sehr dankbar. Bernhard
Der DS1820 DS18s20 und der DS1920 stellt im SCRATCHPAD einen 9-BIT Temperaturwert (0,5 GRD) zur Verfügung. Mit den COUNT REMAIN and COUNT PER ºC Registern, lässt sich eine höhere Auflösung errechnen (0,0625 GRD). In der Tabelle habe ich mal die Temperaturen und die Registerinhalte dargestellt. Bei den positiven Werten ist die Berechnung lt. Datenblatt Formel relaiv einfach, bei den negativen Temperaturen wird's etwas komlizierter. Ich habe mich auf eine Korrekturtabelle entschlossen. Vielleicht kennt jemand einen bessere Lösung? Bernhard
> Bei den positiven Werten ist die Berechnung lt. Datenblatt Formel relaiv > einfach, bei den negativen Temperaturen wird's etwas komlizierter. Nein, man muss nur das Zweierkomplement beachten, dann funktioniert auch die Formel. Danke Scotti für den Tipp. Bernhard
Die Version 6a sucht nach SLAVES und zeigt die Temperaturwerte an. Getestet wurde diese Version am DS18s20 und DS1822. Der DS1920 DS1820 und DS18B20 müsste auch korrekt eingelesen werden. Maximal 30 gefundene Slaves (ROM-ID) werden im SRAM "LISTE" abgelegt. Wenn es Temperatursensoren sind, wird das Scratchpad der gefundenen Slaves ausgelesen + CRC. Andere SLAVES werden ignoriert. Diese Version erkennt den Sensortyp und schaltet auf das entsprechende Temperaturberechnungsverfahren. Details eines jeden Salves werden angezeigt, ROM, SCRATCHPAD, Temperatur und die Typbezeichnung. In dieser Version sind mehrer Betriebsarten möglich. 1. Der Singlebetrieb. Nur ein Slave befindet sich am BUS. Auf die ROM-Suche kann verzichtet werden, nur wenige Programmroutinen sind nötig, um den Slave auszulesen. 2. Ein bekannter SLAVE kann direkt angesprochen und zum messen aufgefordert werden. Kann ev. nützlich sein, bei mehreren Slaves und ungünstigen Leitungsverhältnissen (Letungswiderstand). 3. Im Multibetrieb sind die ROM-IDs im Programmcode "TABELLE" hinterlegt, diese werden nacheinander abgefgragt, egal ob sich noch weitere SLAVES am BUS befinden oder nicht. 4. Ist der Suchmodus aktiv, dann wird versucht alles einzulesen :-) Besonderheiten: Der erste auftretende Fehler wird gespeichert, LED-ROT leuchtet und die Errornummer und teilweise der Klartext wird angezeigt. Vereinfacht etwas die Fehlersuche. Ein Reset setzt den Error-Zustand wieder zurück. Bei Hardwareproblemen kann der Oszi die LED Ausgänge zum Triggern verwenden. Bernhard
Version 6b kann folgende SLAVES / DEVICES auslesen bzw. beschreiben: TEMPERATUR: DS1820 DS18s20 DS18B20 DS1822 DS1920 RTC: DS2417 EEPROM 4k: DS2433 Bernhard
Hallo Bernhard S. Ich habe mir die V6a heruntergeladen, im AVR Studio auch fehlerfrei übersetzt. Da ich kein Display nutzen möchte sondern über die UART auf ein Terminalemulation am PC ausgeben muß ich wohl noch einiges ändern. Außerdem sollte das auch mit einem ATMega32 16 MHz gehen. Kannst Du mir die kritischen Stellen im Programm so nennen? Im Programm und auf Zeichnung gibst Du 1MHz als Tacktfrequenz an. Habe ich das falsch verstanden oder arbeite der ATMega8 wirklich nur mit 1MHz? Pollin Boards habe ich genug, oder sollte mir doch erst mal einen ATMega8 besorgen ? Danke! Alfons
Hallo Alfons, > Im Programm und auf Zeichnung gibst Du 1MHz als Tacktfrequenz > an. Habe ich das falsch verstanden oder arbeite der ATMega8 > wirklich nur mit 1MHz? Ja, 1MHz ist korrekt, die Umprogrammierung auf höhere Taktfrequenzen sollte eigentlich kein Problem sein. Der ATmega8 kann mit seinem internen Oszillator auf 1/2/4 oder 8Mhz getaktet werden. > Kannst Du mir die kritischen Stellen im Programm so nennen? Die kritischen Stellen sind die Warteschleifen. Diese müssten entsprechend angepasst werden, so dass die Zeiten, also das Timing wieder stimmt. Übrigens, der ATmega32 läßt sich auch mit 1MHz takten. Zum Testen der Software, auch ohne Display, könnte man die LEDs verwenden. Bleibt die rote LED, nach dem LED-Test, dunkel, gab es keine Probleme mit dem 1-wire-Bus und es wurde mindestens 1 Slave/Device gefunden. Bernhard
Hallo Bernhard S. Danke für die schnelle Antwort! Ganz so eilig werde ich noch nicht alles verwirklichen. Ich habe aber seit 1998 ein DS1820 bei mir unterm Wintergarten vergraben, um die Bodentemperatur zu messen. Das alte System kann nur max. 8 Sensoren, deswegen werde ich da dran bleiben. Mir ist noch aufgefallen das Du deine Sensoren nicht mit 5V versorgst. Also nur über die Datenleitung. Ich habe früher mal in den Datenblättern gelesen das diese dann nicht so genau sind. Ist das mittlerweile behoben? Danke! Alfons
Hallo Bernhard S. Ich bin überrascht wie vorbildlich Dein Programme strukturiert ist und auch noch sehr gut kommentiert. Ich komme erst mal klar damit. Vielen Dank! Von der Vorgehensweise würde ich erst mal das was Du zum Display sendest in das RAM speichern und statt der Waits 1Sec mal zur UART ausgeben. Falls ich Probleme bekomme melde ich mich wieder. Ich hoffe das ich bald ein funktionierendes Programm vorstellen kann. Mit PuTTY stelle ich erst mal dein Displaytext dar. Alfons
Hallo Alfons >Ich bin überrascht wie vorbildlich Dein Programme strukturiert ist >und auch noch sehr gut kommentiert. Ich danke Dir, der Programmcode ist zwar nicht hochgradig optimiert, hatte aber großen Wert darauf gelegt, dass man ihn nachvollziehen kann. >... das diese dann nicht so genau sind. >Ist das mittlerweile behoben? Dazu habe ich keine Erfahrungen, vielleicht kann auf diese Frage ander Foren-Nutzer besser antworten. >Von der Vorgehensweise würde ich erst mal das was Du zum Display >sendest in das RAM speichern und statt der Waits 1Sec mal zur UART >ausgeben. Man könnte auch relativ einfach alle Bytes für "LCD_DATA" und "LCD_COMMAND" zusätzlich oder direkt per USART ausgeben. Bernhard
Ein kleiner USB-1-WIRE-Adapter kann sehr nützliche Dienste leisten: Dieser Adaper sucht nach DEVICES und listet diese auf. Die Slaves lassen sich auch sehr gut auslesen und die Daten ändern z.B. RTC, EEPROM. http://1-wire.de/ Bernhard
Ich finde das nicht übertrieben, wäre natürlich besser wenn das nur für 15€ angeboten würde. Wir sollten aber auf den Boden bleiben. Ohne über die dazugefügte Software zu reden. 1998 habe ich ein Gerät für 8 Meßstellen erworben und das hat mit 98DM über 10 Jahre gute Dienste geleistet. m.f.G. Alfons
Hallo Bernhard S. Heute habe ich mich mal wieder mit Deinem Programm beschäftigt. Es ist schon was dabei rausgekommen. Das Programm ist sehr gut dokumentiert, etwas irritiert mich die Unstabilität des Prozessors in Richtung der RS232 Schnittstelle. Ich bleibe dran. m.f.G.Alfons
Hallo Bernhard S. bitte nicht falsch verstehen, die RS232 Programmierung habe ich selber vorgenommen. Bislang liefen alle Prozessoren mit einem Quarz sehr zu- verlässig bei mir. Vieleicht ist dies der erste mit unstabilen Ozzilator m.f.G.Alfons
Der Family-Code des DS2422 lautet nicht 1C, sondern 41. Im Anhang meine original familycode familycodes Liste mit über 70 Einträgen.
Die Version 6: - 3 programmierbare Scratchpads / Datenbereiche, je 32 Bytes (read/write) - 3 programmierbare Sonderfunktionen (z.B. Messung starten) - MATCH ROM, SKIP ROM, READ ROM, SEARCH ROM - etwas übersichtlicher programmiert, wenig Register, dafür etwas langsamer @eProfi Danke für die Liste :-) Bernhard
Danke für Deine neue Version! Noch ein wenig Suchmaschinenfutter: Dallas Maxim iButton 1wire onewire family code codes familycode familycodes list liste zusammenfassung
@alle Ein DCF77-Slave: Beitrag "DCF DCF77 UHR 1-WIRE 1WIRE SLAVES / DEVICES ATmega8 ASSEMBLER" @eProfi Danke für das "Suchmaschinenfutter" :-) Bernhard
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.