mikrocontroller.net

Forum: Projekte & Code DCF / DCF77 UHR 1-WIRE / 1WIRE SLAVES / DEVICES ATmega8 ASSEMBLER


Autor: Bernhard S. (bernhard)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: RoBue (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bernhard S. (bernhard)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Einhart Pape (einhart)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Einhart Pape (einhart)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat sich erledigt - habe doch ´mal den Code angesehen ;-)

Gruß
Einhart

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.