Forum: Projekte & Code DS1820 DS18s20 Digital Thermometer 1-wire Beispiele ATmega8 Assembler


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Bernhard S. (bernhard)



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

von Bernhard S. (bernhard)


Angehängte Dateien:

Lesenswert?

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

von Bernhard S. (bernhard)


Angehängte Dateien:

Lesenswert?

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

von Bernhard S. (bernhard)


Lesenswert?


von Bernhard S. (bernhard)



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

von Tüddel (Gast)


Lesenswert?

Kommt die Software auch mit DS18B20 klar ?

von Alfons M. (alfonsmoeller)


Lesenswert?

Hallo Bernhard S.
ein sehr gut dokumentiertes Programm.
Ich werde es mal ausprobieren sobald ich die richtige
Hardware zusammen habe.
Danke!
Alfons

von Bernhard S. (bernhard)


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

von Herbert K. (avr-herbi)


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;

von Bernhard S. (bernhard)


Angehängte Dateien:

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

von Bernhard S. (bernhard)


Angehängte Dateien:

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

von Bernhard S. (bernhard)


Angehängte Dateien:

Lesenswert?

> 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

von Bernhard S. (bernhard)


Angehängte Dateien:

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

von Bernhard S. (bernhard)


Angehängte Dateien:

Lesenswert?

Version 6b kann folgende SLAVES / DEVICES auslesen bzw. beschreiben:


TEMPERATUR: DS1820 DS18s20 DS18B20 DS1822 DS1920

RTC:        DS2417

EEPROM 4k:  DS2433




Bernhard

von Alfons M. (alfonsmoeller)


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

von Bernhard S. (bernhard)


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

von Alfons M. (alfonsmoeller)


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

von Alfons M. (alfonsmoeller)


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

von Bernhard S. (bernhard)


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

von Bernhard S. (bernhard)


Angehängte Dateien:

Lesenswert?

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

von Bernhard S. (bernhard)


Lesenswert?

Beispiel eines SLAVES/DEVICES:

http://www.mikrocontroller.net/topic/241934

von ... (Gast)


Lesenswert?

Bernhard S. schrieb:
> http://1-wire.de/

Heiße Preisvorstellungen habe die.

von Alfons M. (alfonsmoeller)


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

von Alfons M. (alfonsmoeller)


Angehängte Dateien:

Lesenswert?

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

von Alfons M. (alfonsmoeller)


Lesenswert?

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

von eProfi (Gast)


Angehängte Dateien:

Lesenswert?

Der Family-Code des DS2422 lautet nicht 1C, sondern 41.
Im Anhang meine original familycode familycodes Liste mit über 70 
Einträgen.

von Bernhard S. (bernhard)


Angehängte Dateien:

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

von eProfi (Gast)


Lesenswert?

Danke für Deine neue Version!

Noch ein wenig Suchmaschinenfutter:
Dallas Maxim iButton 1wire onewire family code codes familycode 
familycodes list liste zusammenfassung

von Bernhard S. (bernhard)


Lesenswert?

@alle

Ein DCF77-Slave:

Beitrag "DCF  DCF77 UHR 1-WIRE  1WIRE SLAVES / DEVICES ATmega8 ASSEMBLER"


@eProfi

Danke für das "Suchmaschinenfutter" :-)


Bernhard

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.