Forum: Projekte & Code DCF / DCF77 UHR 1-WIRE / 1WIRE SLAVES / DEVICES 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?

Hallo,

mit relatv wenig Hardware lässt sich ein DCF-1Wire-Slave realisieren.

Selbst auf das Display, Tasten und LEDs kann verzichtet werden


Mehrere Kommandos versteht der SLAVE u.a:

0x33=READ-ROM
0x55=MATCH-ROM
0xF0=SEARCH-ROM
0xCC=SKIP-ROM

0xF0=read DCF-ZEIT


Die ROM-ID ist im Programm festgelegt mit:

.equ ROM_ID_BYTE1  = 0xEF    ; FAMILY EF = Erfurt ;-)
.equ ROM_ID_BYTE2  = 0x00
.equ ROM_ID_BYTE3  = 0x70
.equ ROM_ID_BYTE4  = 0xF7
.equ ROM_ID_BYTE5  = 0xDC
.equ ROM_ID_BYTE6  = 0x00
.equ ROM_ID_BYTE7  = 0x00
.equ ROM_ID_BYTE8  = 0x00    ; Prüfsumme


Die exakte Prüfsumme kann, muss aber nicht eingetragen werden. Sie wird 
automatisch bei Programmstart geprüft und ggf. korigiert.

Die Hardware ist an das DCF-MODUL von Reichelt angepasst (invertierter 
Ausgang ohne Widerstand)

In folgender Reihenfolge werden die 1-Wire Daten zur Ausgegeben:

-Sekunden
-Minuten
-Stunden
-Tag
-WochenTag
-Monat
-Jahr
-SONNENAUFGANG
-SONNENUNTERGANG

Es ist kein perfekter Programmcode, vieles lässt sich noch optimieren.

Bernhard

von RoBue (Gast)


Lesenswert?

Hallo Bernhard,

sieht super aus.

Mal sehen, ob ich dazu komme, das nachzubauen.

Noch ein paar Ideen:
Ich habe eine 1-Wire-Slave-Version (z.B. für SHT11) in BASCOM erstellt
(-> Beitrag "Re: 1-WIRE SLAVE DEVICE BEISPIELE AVR ASSEMBLER ATmega8")

- Könnten wir uns auf eine einheitliches ID-System einigen?
Byte_1          -> 0xEF -> o.k. (habe ich auch! :-) )
Byte_2 - Byte_4 -> Name des verwendeten Bausteins (z.B. "DCF", "SHT", 
...)
Byte_5 - Byte_7 -> eigentliche Nummer des Slaves
Byte_8          -> CRC

- Das gleiche gilt für das Ausgabeformat:
0x44 (Convert)         -> Berechnung der Werte (falls nötig)
0xBE (Read Scratchpad) -> Ausgabe der Werte (feste Anzahl)
Dann könnte man z.B. für DigiTemp o.ä. eine einheitliche Ausleseroutine 
für alle neuen 1-Wire-Slaves schreiben.

Was meinst Du dazu?
(Ich versuche auch mio/Tobias dazu zu bewegen
-> http://www.tm3d.de/index.php/1-wire-barometer)

RoBue

von Bernhard S. (bernhard)


Angehängte Dateien:

Lesenswert?

Hallo RoBue


> Könnten wir uns auf eine einheitliches ID-System einigen?

Ja, diese Frage habe ich schon erwartet ;-)

Im Programmcode "_ini.asm" lassen sich die einzelnen Function-Commands 
definieren und bei Bedarf anpassen.

Ich hatte die gleiche Grundidee wie Du :-)


Mit 0xBE (Read Scratchpad) hätte ich keine Probleme, nur mit der festen 
Anzahl zu lesender Bytes hätte ich meine Sorgen.

Bsp: Eine Wetterstation soll Datum, Zeit, Luftdruck, Feuchte, 
Sonnenaktivität usw. ausgeben... eine Menge Bytes


Das Function-Command 0xF6 (write Data) benutze ich, um spezielle Daten 
z.B. Datum, Zeit und mehrere Temperaturen, an alles Slaves, die 0xF6 
akzeptieren, zu senden.

In meinem Bussystem befinden sich z.B. mehrere LED-Displays, die die 
Aussentemperatur anzeigen. Aber diese Displays besitzen keine eigene 
ROM-ID, brauchen sie auch nicht, denn sie werden mit "SKIP-ROM" 
angesprochen.

Bernhard

von Einhart P. (einhart)


Lesenswert?

Hallo Bernhard,

Vielen Dank für diesen und die anderen Beispielcodes. Ich versuche 
gerade die Minimalversion ohne Taster und LCD zum Laufen zu bringen. Das 
DCF Signal liegt sauber an PC0 (positive 100 bzw. 200ms Pulse). Beim 
Reset sind kurz alle drei LEDs an; dann blinkt's noch kurz. Danach sind 
und bleiben die LEDs aus.

Reicht es, das DCF-Signal anzulegen und zu warten, dass nach 
erfolgreicher Dekodierung entweder die rote oder grüne LED angeht?

Ist vielleicht ein 1-Wire Kommando notwendig?

Wäre schön wenn sich jemand meldet der das schon erfolgreich probiert 
hat.

Gruß
Einhart

btw: Ich weiss, dass ich mich diurch den Code arbeiten sollte - schaffe 
das aber z.Zt. nicht.

von Einhart P. (einhart)


Lesenswert?

Hat sich erledigt - habe doch ´mal den Code angesehen ;-)

Gruß
Einhart

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.