DS1820 DS18s20 Digital Thermometer 1-wire Beispiele ATmega8 Assembler

#2390905
Lesenswert?

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
#2405637
Lesenswert?

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
Angehängte Dateien:
#2407777
Lesenswert?

@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
#2407791
Lesenswert?

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;
#2410515
Lesenswert?

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
Angehängte Dateien:
#2411573
Lesenswert?

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
Angehängte Dateien:
#2415737
Lesenswert?

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
Angehängte Dateien:
#2433000
Lesenswert?

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
#2433059
Lesenswert?

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
#2433128
Lesenswert?

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
#2435274
Lesenswert?

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
#2443511
Lesenswert?

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
#2464241
Lesenswert?

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
#2723084
Lesenswert?

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
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren