mikrocontroller.net

Forum: Projekte & Code DCF / DCF77 UHR - LCD LED Samplingverfahren 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.
Autor: Bernhard S. (bernhard)
Datum:
Angehängte Dateien:

Bewertung
5 lesenswert
nicht lesenswert
Hallo geschätztes Forum,

diese DCF Uhr tastet das DCF-Signal mit einem Samplingverfahren ab.
Die Impulslängenbestimmung wird nicht durch eine Zeitmessung realisiert.

Störimpulse, wenn sie nicht zu extrem sind, beeinflussen die 
Uhrzeitberechnung kaum.

Ein fehlerhafter 100ms Impuls wird weitestgehend unterdrückt,
die letzten 100ms des 200ms langen "HIGH"-Impuls sind entscheidend.

Kurz nach Programmstart wird die Phasenlage des internen Timers mit dem
DCF-Impuls synchronisiert.

Die Phase, wird später auch korrigiert (wegen Quarzungenauigkeit),
aber nur sehr vorsichtig und behutsam.

Der "Turbomodus" versucht, kurz nach Programmstart, die Zeit und das 
Datum zu errechnen. Der Empfang des kompletten DCF-Protokolls ist nicht 
zwingend erforderlich. Nach ca. 25s vor Minutenende könnte theoretisch 
schon das
Datum errechnet werden.

Durch einen Jumper lässt sich das DCF-Ausgangssignal des DCF-Empfängers 
anpassen, denn manche DCF-Module geben ihr Signal invertiert wieder.

Ach ein interner Pull-UP-Widerstand am DCF-Engangspin lässt sich 
aktivieren, ist aber mit Vorsicht zu genießen, denn manche DCF-Module 
besitzen einen sehr hohen Ausgangswiderstand (einige 100k).

Kurz nach Programmstart muss die gelbe LED im Sekundentakt kurzzeitig 
aufleuchten (100..200ms DCF-Eingangssignal).

Blinkt sie nicht... Fehler suchen ;-)

Die Belegung der PINs lassen sich relativ einfach im Programmcode (ini) 
ändern.

Sonnenaufgang und Sonnenuntergangszeiten sind in einer Tabelle 
hinterlegt.

Eine LED-Variante möchte ich später noch zur Verfügung stellen.

Der Programmcode ist nicht sehr optimal gestaltet, ich bitte um 
Verzeihung, für Hinweise und Kritiken bin ich sehr danbar.

Bernhard

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

Bewertung
1 lesenswert
nicht lesenswert
... die LED Variante...

Kurz nach Programmstart wird die JUMPER-Konfiguration angezeigt:

"c0---0" keine DCF-Signal Invertierung
"c0---1" DCF-Signal Invertierung (ev. nötig bei Reichelt DCF-Modulen"


Anschließend wird der interne DCF-Zeiger angezeigt:

z.B. "----12"

Bei Minutenende springt er wieder auf "----00", oder das DCF-Protokoll 
wurde korrekt empfangen und es wird die Uhrzeit dargestellt.


Bernhard

Autor: fredl (Gast)
Datum:
Angehängte Dateien:

Bewertung
2 lesenswert
nicht lesenswert
Moin liebes Forum,
bin totaler Assembler-Anfänger, aber schon länger auf der Suche nach 
einer prozessorgesteuerten DCF77-Uhr. Habe mir die Software v. Bernhard 
mal angeschaut u. wenig davon verstanden. Gestern auf meinem 
Versuchsboard zusammengesteckt, funktionierte auf Anhieb.
Anbei ein Foto des Versuchaufbaus.

Gruß, fredl

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

Bewertung
0 lesenswert
nicht lesenswert
@alle

Nicht alle DCF-Module arbeiten so, wie man es gerne hätte.

Bei einigen Conrad-DCF-Modulen ist mir aufgefallen, dass die 
Impulslängen nicht ganz stimmen. Der 100ms lange Impuls ist teilweise 
120ms lang und der 200ms ist 220ms lang.

Im Vergleich zwischen Conrad und Reichelt, gibt es bei den Impulslängen 
doch einige Unterschiede, bei den Reichelt-DCF-Modulen sind sie etwas 
kürzer.

Mich hatte es nur gewundert, dass bei einigen DCF-Modulen die Uhren den 
DCF-Code nicht entschhlüsseln konnten, weil der LOW-Impuls zu lang ist 
und als HIGH Impuls gedeutet wird.



@fredl

Ich danke Dir


Bernhard

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

Bewertung
2 lesenswert
nicht lesenswert
Diese Version kommt besser mit den nicht ganz so optimalen Impulslängen 
zurecht.

Im Oszibild ist ein DCF-HIGH-Impuls(gelb) und die 
Samling-Aktivität(blau) an einem Reichelt-Modull dargestellt.


Bernhard

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

Bewertung
1 lesenswert
nicht lesenswert
Die verbesserte LED-Variante.

Der Ausgang für die blaue LED kann für einen Oszi genutzt werden, um 
sich Sampling "A" und Sampling "B" im Zusammenhang mit dem 
DCF-Eingangssignal anzuschauen.

Bernhard

Autor: Bernhard S. (bernhard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...ein kleines Beispiel, um die Taktfrequenz mit Hilfe des DCF-Signals 
zu bestimmen:


Beitrag "DCF  DCF77  Quarzfrequenz  Oszillatorfrequenz  Taktfrequenz bestimmen ATmega8 Assembler"


Bernhard

Autor: Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Bernhard:

Kleiner Tipp: Den Jumper kannst Du Dir sparen, wenn Du nicht die 
DCF-Pulse als High und Low, sondern nur die Pegeländerungen in 
entsprechend breiten Fenstern (70..130ms und 170..230ms und 1500-1600ms) 
abtastest. Dann ist es völlig egal, ob das Modul das DCF-Signal 
invertiert oder korrekt ausgibt.

Ausserdem sollten bei der LED-Version die Digit-Anoden über 
Treibertransistoren angesteuert werden, um unterschiedliche Helligkeiten 
bei "1" und "8" zu vermeiden. 51Ohm als Segmentwiderstände halte ich für 
etwas klein.

Edit:

AREF bitte nur mit 10n...100n beschalten. Ein 1µF-Elko ist beim 
Umschalten der Referenz eher hinderlich, da er die Referenzquelle stark 
belastet und das Umschalten unnötig lange dauert.

Autor: Bernhard S. (bernhard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Knut

> Kleiner Tipp: Den Jumper kannst Du Dir sparen, wenn Du nicht die
> DCF-Pulse als High und Low, sondern nur die Pegeländerungen in
> entsprechend breiten Fenstern (70..130ms und 170..230ms und 1500-1600ms)
> abtastest. Dann ist es völlig egal, ob das Modul das DCF-Signal
> invertiert oder korrekt ausgibt.

An diese Möglichkeit dachte ich auch schon, hatte nur etwas bedenken.

Ursprünglich sollte das Programm bei Programmstart in einen Lernmodus 
springen und ermitteln, ob das DCF-Signal vom Empfänger invertiert ist. 
Aber, die Empfangsbedingungen können bei Prorammstart u.U. so schlecht 
sein, dass eine falsche Entscheidung zur Invertierung gefällt wird.

Ich denke mal darüber nach, wie der Auto-Invertiermodus implementiert 
werden kann.

> Ausserdem sollten bei der LED-Version die Digit-Anoden über
> Treibertransistoren angesteuert werden, um unterschiedliche Helligkeiten
> bei "1" und "8" zu vermeiden. 51Ohm als Segmentwiderstände halte ich für
> etwas klein.

In dieser "Sparversion" verzichtete ich bewußt auf diverse Treiber (z.B. 
FET oder Transistorn). Wenig Hardware, das war das Motto.

Aber Du hast Recht, man erkennt einen leichten Helligkeitsunterschied.


> AREF bitte nur mit 10n...100n beschalten. Ein 1µF-Elko ist beim
> Umschalten der Referenz eher hinderlich, da er die Referenzquelle stark
> belastet und das Umschalten unnötig lange dauert.

Korrekt, wenn die Referenz permanent umgeschaltet wird, sollte der Wert 
der Kapazität nicht zu hoch gewählt werden. Trotzdem, bei jeder 
Umschaltung der Referenz sollte eine angemessene Wartezeit eingelegt 
werden, bis sich die Spannung am REF-PIN beruhigt hat.


Bernhard

Autor: Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bernhard S. schrieb:
> Ursprünglich sollte das Programm bei Programmstart in einen Lernmodus
> springen und ermitteln, ob das DCF-Signal vom Empfänger invertiert ist.

Muss es nicht. Wenn Du Dich an die vorgegebenen Fensterbreiten hältst, 
rastet das Programm nach einigen sauberen Pulsen von ganz allein auf das 
Protokoll ein. Die Pulse, die nicht in die Fensterbreiten passen 
(Rauschen zum Beispiel) werden ignoriert bzw. herausgesiebt. Auf die 
Weise werden auch nicht ganz korrekt lange Pulse sicher erkannt und das 
eingesetzte Modul spielt keine Rolle.

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

Bewertung
0 lesenswert
nicht lesenswert
@alle

Diese Programmversion untersucht jetzt das Ausgangssignal des 
angeschlossenen DCF-Moduls und schaltet automatisch in die entsprechende 
Betriebsart (invertiert / nicht invertiert) um.

Die Voreinstellung im Programmcode ist der Automatikmodus.

Die Betriebsart wird anschließend im EEPROM gespeichert, und beim 
nächsten Programmstart als "Starthilfe" verwendet.

Die Betriebsart wird intern nur automatisch umgeschaltet, solange noch 
kein gültiges DCF-Protokoll empfangen wurde. Ist die DCF-Uhr erfolgreich 
gestellt, lässt das Programm kein Betriebsartenumschaltung mehr zu.


Mehrere interne Uhren sind vorhanden:

- DCF-Uhr (relativ genau +/- 10ms)
- Quarz-Uhr (nur Quarzgenauigkeit, ohne Einfluß der DCF-Uhr)
- 50Hz/100Hz Netzfrequenz-Uhr (nur Netzgenauigkeit)
- Betriebsstunden-Uhr

Der eingebaute "Turbomodus" erlaubt eine Auswertung des DCF-Protokolls, 
auch wenn es nicht komplett empfangen wurde, somit synchronisiert sich 
die Uhr relativ schnell bei Programmstart und bei DCF-Empfangsstörungen.

Eine LED-Variante stelle ich noch zur Verfügung.


Bernhard

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

Bewertung
0 lesenswert
nicht lesenswert
Eine "MINI" - Version.

Es werden nur noch 3 LEDs angesteuert. Dieser Programmcode könnte als 
Grundlage für andere Projekte dienen.


Bernhard

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

Bewertung
0 lesenswert
nicht lesenswert
Die LED-Version.


Bei Bedarf kann folgendes genutzt werden:

- automatischer DCF-Modul-Erkennung (invertiert/nicht invertiert)

- Störunterdrückung. Die 7-Segmentanzeigen werden solange 
dunkelgetastet,
bis das DCF-Signal erfolgreich empfangen wurde. (Bei Programmstart und 
in den Morgenstunden)

- Helligkeitssteuerung

- Stunden-Klick

- Kurz nach Programmstart, wenn die Uhr noch nicht synchronisiert wurde, 
wird der Error-Code kurzzeitig angezeigt.

Mit relativ wenig Aufwand kann die Anschlussbelegung umprogrammiert 
werden.

Mit etws Glück steht nach Programmstart, durch den "Turbo-Modus", die 
DCF-Zeit nach ca. 50s zur Verfügung.


Bernhard

Autor: fredl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Bernhard:

Habe deine neue Software der LED-Variante eingespielt, funktioniert 
einwandfrei.
Autom. Umschaltung zwischen invertiertem u. nicht invertiertem 
Ausgangssignal funktioniert auch.
Lediglich die Datumsanzeige habe ich auf 2x p. Min. reduziert.

Zur Diskussion um die Segmentwiderstände:
51 Ohm sind m. E. OK! (5,0 V Betriebspannung minus rd. 2,0 V Schwellspg. 
des LED-Segments, ./. 51 Ohm, mach rd. 58 mA Segmentstrom. Lt. 
Datenblatt sind 40 mA erlaubt. Dies bezieht sich aber auf Dauerbelastung 
(DC). Im Pulsbetrieb (beim Multiplexen folgen nach jedem Puls fünf 
gleichlange Pausen) kann der Strom gut 5 mal so hoch sein wie bei DC, 
ohne den Ausgangs-FET zu stark zu quälen.

Einen Helligkeitsunterschied (bei 2 zu 7 eingeschalteten Segmenten) 
konnte ich nicht erkennen.
Der würde durch den Spannungsabfall des Kanalwiderstandes des FET im 
Portausgang enstehen.
Mit einem zusätzlichen Treibertransistor würde man dann diesen Fehler 
aber nur nach "außen" verlegen.
Beseitigen könnte man diesen Fehler nur, wenn man die Segmentwiderstände 
durch eine Konstantstromquelle ersetzt.

Alles in Allem hat mich gerade die minimale Außenbeschaltung d. 
Controllers fasziniert!

fredl

Autor: Tess E. (tesseract)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
@ Bernhard:

hab die Uhr nachgebaut ( mit Transistoren für die gemeinsamen Anoden ) 
und es funktionierte vom Anfang an ohne Probleme.
Das DCF77-Modul wurde aus eine alte Funkuhr ( 1€ am Flohmarkt ) 
rausgeschnitten. Läuft und Synchronisiert sogar im Keller !

Beim Synchronisieren erscheint ab und zu die Meldung E-0-20 oder E-1-18.
Was ist das ?

Grüße
tesseract

Autor: Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bernhard S. schrieb:
> Diese Programmversion untersucht jetzt das Ausgangssignal des
> angeschlossenen DCF-Moduls und schaltet automatisch in die entsprechende
> Betriebsart (invertiert / nicht invertiert) um.
>
> Die Voreinstellung im Programmcode ist der Automatikmodus.
>
> Die Betriebsart wird anschließend im EEPROM gespeichert, und beim
> nächsten Programmstart als "Starthilfe" verwendet.
>
> Die Betriebsart wird intern nur automatisch umgeschaltet, solange noch
> kein gültiges DCF-Protokoll empfangen wurde. Ist die DCF-Uhr erfolgreich
> gestellt, lässt das Programm kein Betriebsartenumschaltung mehr zu.

Warum so kompliziert? Es ist doch gar nicht nötig, zwischen invertiertem 
und nichtinvertiertem Signal zu unterscheiden. Die absoluten Pegel 
spielen doch keine Rolle. Du bekommst in jedem Fall Flankenwechsel. Und 
diese liegen im Bereich von 100 und 200ms beziehungsweise 900 und 800ms 
und 1900 oder 1800ms in der 59.Sekunde. Diese Flankenwechsel erkennst Du 
durch Dein Sampling welches auch die Störungen filtert, und die ordnest 
Du in die entsprechenden Pulsauswertefenster ein. Ein 10ms 
"Fenster-Timer" würde beispielsweise Werte von 10+-3, 20+-3, 80+-3, 
90+-3, 180+-3 oder 190+-3 zurückgeben, die alle in ein Byte passen. 
Damit hast Du Deine Bitlängen und alles ist gut. Nix Betriebsart und 
geht immer.

Autor: Tess E. (tesseract)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Bernhard:

wie oft synchronisiert sich die Uhr ?
1x / Tag ; 1x / Stunde ; 1x / Minute ?

tesseract

Autor: Bernhard S. (bernhard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@tesseract

>Beim Synchronisieren erscheint ab und zu die Meldung E-0-20 oder E-1-18.
>Was ist das ?

Das sind die Error-Codes (s. Programmcode) z.B. Paritätsproblem.

Diese werden aber nur kurz nach Programmstart angezeigt, bis zur ersten 
Synchronisation der Uhr.



>wie oft synchronisiert sich die Uhr ?

Im Idealfall 1 x pro Minute (wenn das DCF-Protokoll fehlerfrei empfangen 
wurde, grüne LED leuchtet ständig)


@Knut

>Warum so kompliziert? Es ist doch gar nicht nötig, zwischen invertiertem
>und nichtinvertiertem Signal zu unterscheiden. Die absoluten Pegel
>spielen doch keine Rolle. Du bekommst in jedem Fall Flankenwechsel.

Es ist nicht kompliziert.

Es gibt mehrere Lösungsvarianten, für ein Samplingverfahren (keine 
Zeitmessung), das ist eine mögliche Variante.

Vielleicht stellst Du mal eine weitere Lösungsvariante vor, würde dann 
gern mal das Pro und Contra mit Dir fachlich diskutieren?

Das Problem war, die erste Flanke des Sekundenimpulses zu finden. Der 
interne DCF-Timer wird phasengenau auf diese Flanke hin synchronisiert 
mit einer Genauigkeit von einigen ms und feinfühlig nachjustiert.

Hat den Vorteil, dass die DCF-Uhr relativ genau geht, auch wenn mal der 
Minutenimpuls unsauber empfangen wurde.

Bernhard

Autor: matze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tess Eract (tesseract),

hallo  Tess Eract (tesseract) möchte gerne nach deiner layoutvorlage die 
uhr von bernhard nachbauen, wäre es möglich das layout von dir zu 
bekommen?

vielen dank!
matze

Autor: Tess E. (tesseract)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@matze,
kein Problem, kannst bekommen. Ein Problem hab ich nur, das Layout wurde 
bei der Arbeit erstellt und bis am 07.01.2013 bin ich in Urlaub. Wenn du 
noch etwas warten kannst, werde ich es am 7-ten Januar uploaden.

Du musst dir aber VQE14 Anzeigen besorgen ( gibt's bei e**y.de genug) 
oder für andere 7 Segment-Anzeigen dein eigenes Board zeichnen.

grüße
tesseract

Autor: matze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
guten morgen Tess Eract ,

danke für deine antwort!

.....das wäre super!!! ....klar kann ich noch warten!

....schöne weihnachtstage noch!

matze

Autor: Jens S. (jens24)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe die Uhr auch nachgebaut, allerdings zum Betreiben von größeren 
LED-Anzeigen BCD zu 7-Segment Decoder dazwischengeschaltet. Ich 
beschäftige mich allerdings erst seit 4 Tagen mit AVR, habe daher so gut 
wie keine Ahnung von der Programmierung.
Wer kann mir helfen? Ich würde gerne die führende Null in der Zeit von 
0:00 bis 09:59:59 unterdrücken. Wie macht man das in dem Programm?
Ich habe folgendes probiert:
DIGIT_5:
  LDS temp1,(adr_LED_BYTE_5)
  rcall BALKEN
  if temp1,(adr_LED_BYTE_5) > 0 then
  sbi PORT_DIG_6,PIN_DIG_6
  else
  cbi PORT_DIG_6,PIN_DIG_6
  ret
Funktioniert aber irgendwie nicht. Wie macht man das richtig?

Autor: Bernhard S. (bernhard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Jens

>if temp1,(adr_LED_BYTE_5) > 0 then

In der Assemblerwelt gibt es leider kein "if".

Im Datenblatt des Atmega8 findest Du den kompletten Befehlssatz, z.B.
"tst", "cp", "cpi"


Die Anzeige der Uhrzeit wird im Unterprogramm

"LED_ZEIT_ANZEIGEN:"

aufbereitet. Hier könnte das linke Digit gesondert aufbereitet und 
angepasst werden.

Bsp:

LDS temp,(adr_LED_BYTE_5) ; aus SRAM in Register laden
cpi temp, xxx             ; Registerinhalt vergleichen
breq Sprungmarke_xyz      ; wenn gleich, dann springe nach xyz



Bernhard

Autor: Tess E. (tesseract)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
@matze,

anbei die Layouts für die Uhr / Anzeige.

Grüße
tesseract

Autor: Matze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo Tess,

vielen,vielen dank!

Autor: Stadler Josef (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich möchte gerne die Uhr "ASSEMBLER_20121020_OK" nachbauen, aber mit 
einem atmega 16 und 8 Mhz Quarz, ist dies möglich, was muss ich ändern
Danke im voraus
Sepp

Autor: Bernhard S. (bernhard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Sepp

> ... atmega 16 und 8 Mhz Quarz....was muss ich ändern

Ist unproblematisch. Die Warteschleifen müssten auf 8 MHz angepasst 
werden und vorallem der Timer, denn er muss gegenüber 16MHz doppelt so 
schnell einen Timerinterrupt auslösen.

Bernhard

Autor: Stadler Josef (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!
Wie werden beim atmega 16 die Fuse bits im Ponyprog gesetzt.
Stimmen die fuse bits für 8 Mhz, und wie für 16 Mhz
mfg
Sepp

Autor: Thomas D. (thomasderbastler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja die Einstellungen stimmen, kannst auch bei 16MHz genau so lassen

Autor: Thomas D. (thomasderbastler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moment hier muss auch JTAG demarkiert werden ????? PC Ausgänge ?
Beitrag "Hilfe und Tipps bei der Fehlersuche"

Autor: Stadler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe die Uhr "ASSEMBLER_20121020_OK" nachgebaut, funktioniert 
einwandfrei.
Wollte dann die Uhr mit Atmega 16 und 16 Mhz nachbauen.
Habe die .include "m8def.inc"   in   .include "m16def.inc" geändert.
Darauf bringt mir das Atmelstudio beim compailieren folgende 
Fehlermeldung
C:\atmel_programe\dcf77\atmega16\DCF77_ini.asm(297): error: Relative 
branch out of reach
C:\atmel_programe\dcf77\atmega16\DCF77_ini.asm(301): error: Relative 
branch out of reach
C:\atmel_programe\dcf77\atmega16\DCF77_ini.asm(390): error: Relative 
branch out of reach
C:\atmel_programe\dcf77\atmega16\DCF77_ini.asm(401): error: Relative 
branch out of reach
C:\atmel_programe\dcf77\atmega16\DCF77_ini.asm(404): error: Relative 
branch out of reach
C:\atmel_programe\dcf77\atmega16\DCF77_SONSTIGES.asm(5): error: 
Undefined symbol: WDCE
habe dann in der ini Datei die include Reihenfolge geändert
.include "DCF77_TIMER.asm"
.include "DCF77_SONSTIGES.asm"
.include "DCF77_EXTINTERRUPT.asm"
.include "DCF77_DCF.asm"
.include "DCF77_LCD_ini.asm"
.include "DCF77_LCD.asm"
.include "DCF77_EEPROM.asm"
;.include "DCF77_08MHZwait.asm"
.include "DCF77_16MHZwait.asm"
.include "DCF77_LCD_KURZ.asm"

und in der Datei DCF77_SONSTIGES.asm
ldi TEMP,(1<<WDCE)|(1<<WDE)
in
ldi TEMP,(1<<WDTOE)|(1<<WDE)
geändert.
Die Ur funktioniert aber nicht, es blinkt nur die grüne LED "DCF gültig 
im 2 Hz Takt.
mfg
Sepp

Autor: Bernhard S. (bernhard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Sepp

den Programmcode kann nicht immer 1:1 für einen anderen µC verwendet 
werden.

Er muss Stück für Stück angepasst werden, z.B. SRAM-Belegung, 
Interrupt-Vektoren, Timer-Register usw.

Ist nicht immer ganz einfach.

Bernhard

Autor: Bernhard S. (bernhard)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
@alle

hier sind verschiedene Varianten veröffentlicht, wie per PC das 
DCF-Signal decodiert werden kann (mit und ohne weiteren µC):

Beitrag "Ein VB6-Programm dekodiert das DCF77-Signal. Das kommt von einem Mikrocontroller/avrasm über COM1"

Bernhard

Autor: Thomas N. (tonevi)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Habe die LED-Variante der Uhr mit 20mm hohen 7-Segment Displays gebaut, 
welche über invertierende PNP Transistoren angesteuert werden. Daher 
waren kleine Änderungen der Software nötig: cbi / sbi an den 
entsprechenden Stellen bei der Digit-Ausgabe vertauschen. Für die 
Platinen (CPU & Display) habe ich je ein einseitiges Eagle-Layout 
erstellt, das keinerlei Drahtbrücken auf der Bestückungsseite aufweist. 
Die Uhr läuft bei mir mit ASSEMBLER_2012_09_24_3 und den besagten 
Änderungen optimal.

Gruß
Thomas

Autor: Uwe M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Leider gibt es heute kaum noch Bausätze für Funkuhren zu kaufen - im 
Gegensatz zu früher.

Wäre es an dieser Stelle möglich, dass mir jemand eine Platine und einen 
programmierten Controller veräussert?!

Autor: gemoe (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo tonevi,
leider bin ich erst seit kurzer Zeit mit der Programmierung von ATMEL 
Prozessoren befasst,deshalb habe ich noch einige Probleme, die 
vorgeschlagene Änderung des Programms, cbi und sbi zu tauschen.
Gibt es die Möglichkeit, mir die brennfertige hex-Datei zukommen zu 
lassen. Die Variante mit den 20mm LED würde ich gern aufbauen, zumal nur 
einseitige Platinen verwendet werden.
Würde mich sehr freuen.
gemoe

Autor: Thomas N. (tonevi)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo gemoe,

ich hatte diese Uhr auch als eines meiner Übungs-/Lernprojekte zum 
Einstieg in die ATMEL-Programmierung benutzt. In der Zwischenzeit habe 
ich die CPU Platine nocheinmal etwas vereinfacht und übersichtlicher 
gestaltet. Die Treibertransistoren sind entfallen, und man kann einen 
ELV DCF-Empfänger gleich in die CPU-Platine einlöten. Zu finden unter:
http://www.nord-com.net/thomas.neveling/
Dort befindet sich auch eine brennfertige HEX-Datei (in BASCOM 
erstellt). Ich habe hierzu auch noch ein entsprechendes Pendant in 
Assembler mit gleicher Funktion.

Die ursprüngliche Uhr habe ich nicht mehr in Betrieb, aber die 
lauffähige Assembler-Firmware hierzu ist beigefügt. Falls man meine hier 
im Forum vorzufindende Version nachbaut, sollte man die 
Segmentwiderstände von 100 Ohm auf z.B. 180 Ohm vergrößern. Hierdurch 
verringern sich Empfangsstörungen, die durch das LED-Multiplexen 
entstehen.

- tonevi -

Autor: Gert M. (Firma: no) (gemoe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo tonevi,
recht herzlichen Dank für die schnelle Antwort und die Hilfe. Habe die 
vorgeschlagenen Möglichkeiten erstmal kurz in Augenschein 
genommen,bleibt also bloß, reinknieen und probieren.
Es wird aber paar Tage dauern, ich melde mich auf alle Fälle.
Nochmals danke und bis bald
gemoe

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

Bewertung
1 lesenswert
nicht lesenswert
Eine aktuelle LCD-Version.... kleinen Bug entfernt

und eine Variante, wie ein DCF-Modul mit 2 Adern betrieben werden kann.

Bernhard

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

Bewertung
0 lesenswert
nicht lesenswert
LED Update 2016

- am Testausgang (LED blau) bessere Messung möglich
  (Phasenlage, Samplng-A-B)
- weniger SRAM
- erkennt schneller invertierende DCF-Module
- erstaunlicherweise lief die 8MHz Version auch ohne Quarz

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

Bewertung
0 lesenswert
nicht lesenswert
LCD Update 2016

Autor: Abdul K. (ehydra) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bernhard S. schrieb:
> und eine Variante, wie ein DCF-Modul mit 2 Adern betrieben werden kann.
>

Gefällt mir!

Gruß - Abdul

Autor: eProfi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Saubere Sache!
Werde es in das von Falk Brunner konstruierte FrameDisplay einbauen.
Beitrag "Brauche Uhr/Zähler/Generator mit Frameanzeige und 100stel Sekunden, RS232 Anschluß"
9 20mm LED-Displays wollen was zum Anzeigen haben!

Autor: Bernhard S. (bernhard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Saubere Sache!

Danke

Bedenke bitte, diese DCF-Uhr arbeitet mit einer Genauigkeit
von +/- 20 ms, da das DCF Signal nur alle 10 ms abgetastet wird.

Auch die preiserten DCF-Module liefern kein exaktes DCF-Signal,
der 1 Sekunden Impuls jittert gern mal mal um ca. 3 ms.

Autor: Jens S. (jens24)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Bernhard,

hast Du vielleicht statt der 8MHz Variante dort auch die 16MHz 
hochgeladen?
Die Dateien sind identisch mit denen in der 2016-16MHz.zip und auch das 
HEX-File darin scheint nur mit 16MHz zu funktionieren.
Könntest Du bitte noch die korrekten Files für die 8MHz-Version 
hochladen?
Ansonsten wie immer vielen Dank für diese geniale Arbeit!


Bernhard S. schrieb:
> LED Update 2016
>
> - am Testausgang (LED blau) bessere Messung möglich
>   (Phasenlage, Samplng-A-B)
> - weniger SRAM
> - erkennt schneller invertierende DCF-Module
> - erstaunlicherweise lief die 8MHz Version auch ohne Quarz

Autor: Ulrich S. (reise)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo bernhard
habe mir die artikel zum thema angesehen. hätte dazu 'ne frage.
kann man die mini-version des atmega 8 als empfängerstütze verwenden?
hatte schon mehrmals dcf-bausteine die ihr geld fast nicht wert waren. 
kann man deine minivariante zur impulsformung verwenden? also schlechter 
dcf-empfangsimpuls in den atmega 8 rein...und an einen anderen pin 
ordentlich geformten dcf-impuls raus - zur weiterverarbeitung??? z.b. 
abgriff bei einer vorhanden led am atmega?

Autor: Bernhard S. (bernhard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Ulrich,

>kann man deine minivariante zur impulsformung verwenden?

Schöne Idee :-)

Theoretisch ja, wenn die Software auf diesen speziellen Fall angepasst 
wird.

Das "LCD Update 2016" könntest Du dafür verenden.


Kleiner Nachteil, die Ausgangsimpulse stehen nicht zeitgleich zur 
Verfügung (ca. 200ms verzögert), da erst der DCF-Impuls empfangen und 
ausgewertet werden muss.


Bernhard

: Bearbeitet durch User
Autor: Ulrich S. (reise)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo bernhard
habe gerade den "LCD Update 2016" runtergeladen. ich wollte mir für 
diesen zweck evtl. eine kl. eagleleiterplatte malen um so etwas bei 
bedarf mit wenig materialaufwand zu realisieren... und einer 
uhrenschaltung bei bedarf hinzufügen. ich habe derzeit eine gr. funkuhr 
mit 100mm anzeigen am laufen welche sehr schlecht synchronisiert... da 
kleinere uhren derselben schaltung tadellos funktionieren schieb ich's 
mal auf den empfänger und den standort der uhr.
woran könnte den bei deinen lcd-update der dcf-impulsausgang 
angeschlossen werden?
schönen sonntag
ulli

Autor: Martin H. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Berhard ,

Sehr Schöne Arbeit.Ich habe den ELV DCF77-Empfänger mit einen 10K 
Widerstand an +5V und DCF-Signal.Geht wunderbar.Zeit nach ca. 2-3 Min. 
von meinen Standort(Bastelzimmer-nicht ganz freie Sicht).
Version:2016_8MHz

Möchte jetz das ganze auf große SA23 Anzeigen ummünzen und die 
Datumanzeige deaktivieren.

MfG-Martin H. /Bayreuth

Autor: Jens S. (jens24)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Habe ich bereits getan. Anzeigen 100mm,Gehäuse ist ca. 50x50cm. 
Inklusive Helligkeitsregelung mit Fototransistor.

Autor: matze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo jens,

gibt es unterlagen für deine Uhr?
...Schaltplan, ....file zum nachbauen???

vielen dank
matze

Autor: tft (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
matze schrieb:
> hallo jens,
>
> gibt es unterlagen für deine Uhr?
> ...Schaltplan, ....file zum nachbauen???
>
> vielen dank
> matze

Beitrag "Re: DCF / DCF77 UHR - LCD LED Samplingverfahren ATmega8 ASSEMBLER"

Autor: matze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo jens,

ich meinte deinen sekundenring mit den leds den gibt es in dem beitrag 
leider nicht oder habe was nicht gelesen in dem beitrag?

vielen dank
matze

Autor: Andreas Frenzel (Gast)
Datum:
Angehängte Dateien:

Bewertung
2 lesenswert
nicht lesenswert
Hallo geschätztes Forum,

ich habe Bernhard`s Uhr in etwas anderer Form nachgebaut.
Bernhard bat mich, das Ganze im Forum öffentlich zu machen.
Na dann Bitteschön.
Ist noch nicht die finale Version. Einige Bauteile dienen erst mal nur 
als Platzhalter.
Wollte etwas anderes ausprobieren und mit dem Beitrag eine Anregung in 
Richtung
einer anderen Anzeigemöglichkeit geben. Die Software funktioniert auf 
Anhieb.
Das DCF-Modul habe ich aus einem alten Wecker ausgelötet, wurde von der 
Software erkannt und
spielt.
Viele Grüße, Andreas Frenzel

Autor: Andreas Frenzel (Gast)
Datum:
Angehängte Dateien:

Bewertung
3 lesenswert
nicht lesenswert
grrrrr Bild vergessen

Autor: Jörg R. (solar77)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas Frenzel schrieb:
> grrrrr Bild vergessen

Hallo Andreas,

welche Displays (Bezeichnung) hast Du da verwendet?

Autor: Andreas Frenzel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
IV-11 VFD-Röhre

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schick!

Autor: matze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
guten morgen Andreas,

gibt es deinen Schaltplan auch mit weisem Hintergrund?

matze

Autor: matze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Andreas,

noch was vergessen, wie funktioniert die heizspannungserzeugung der vfds 
mit ic8 und wie gross sind die widerstände? wie gross ist die 
eingangsspannung von ic8?

vielen dank

matze

Autor: Andreas Frenzel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Matze,
dein Fragen, betreffend zum Bild, wenn ich es nicht vergesse am 
Wochenende.
Wenn du unter dem Bild die blaue Schrift anklickst, geht das Bild mit 
einer Lupenfunktion auf.
Zur Heizung kurz gesagt: Nein.
Als ich anfing das Zeug auf dem Steckbrett zusammen zu stecke, hatte ich 
nur eine Röhre in Betrieb,
DIG0. Da sieht man am schnellsten was passiert, weil die ja ständig 
hochzählt.
Dann habe ich die nächste Röhre dazu gesteckt.
Und immer so weiter.
Dabei ist mir aufgefallen das IC8 selber zur Heizung wird, was ehr 
kontraproduktiv ist.
Ich denke mal, 6 Heizungen parallel und dann noch bei dieser Art der 
Beschaltung des 317
die geforderte Differenzspannung von min 5V zwischen Eingang und Ausgang 
sind suboptimal.
Funktionieren sollte das ganze so: R11 und R12 stellen die Spannung ein.
Wenn der Spannungsabfall an R14 auf Grund von zu viel Strom 0,7V 
übersteigt, wird der Transistor
leitend und IC8 gegen Masse gezogen und niemand muss sterben.
So war der Plan, funktioniert nur so nicht.
Werde am Wochenende mal versuche die 6 Röhren in 2 Gruppen zu teilen.
Dann je 3 Röhren in Reihe und dann die beiden Gruppen parallel.
Ich hatte ja geschrieben, dass ein paar Bauteile erst mal nur als 
Platzhalter dienen und dies nicht die
finale Version ist. Erst mal nur Anregung. Habe nie im Leben damit 
gerechnet dass da was kommt.
Platzhalter deshalb: zum einen wirklich als Platzhalter, das 
entsprechende Teil wird später, wenn ich
es habe und die tatsächliche Größe kenne ersetzt. Und zum andern weil 
ich es schon fertig gebracht
habe, ganze Leiterplatten ohne Stromversorgung zu ätzen. Deshalb als 
Gedankenstütze als erstes
mal so ein Dreibeiner irgendwo hingepappt.
Viele Grüße Andreas Frenzel

Autor: matze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Andreas

vielen dank für deine schnelle antwort!!!
bin schon älter mit nicht so guten augen und da ist die Zeichnung nicht 
so gut lesbar.
..sind die widerstandsbezeichnungen nicht 4stellig?
schwer zu lesen, im layoutprogramm ist es leicht, ...einfach 
anklicken....
falls du ein layout machen solltest machst du es öffentlich???

vielen vielen dank
matze

Autor: matze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Andreas

sorry was vergessen.
warum machst du nicht zur strombegrenzung einen widerstand vor dem lm317 
und ziehst bei überstrom über den transi nicht adj nach gnd?
wozu ist die Diode im heizkreis da?
schliesen nicht die Heizungen deinen Spannungsteiler nicht kurz?

matze

Autor: Hp M. (nachtmix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas Frenzel schrieb:
> Werde am Wochenende mal versuche die 6 Röhren in 2 Gruppen zu teilen.
> Dann je 3 Röhren in Reihe und dann die beiden Gruppen parallel

Du kannst alle Röhren auch parallel  mit Wechselspannung heizen und dir 
dazu einen kleinen  (Ringkern)übertrager wickeln, der von zwei 
Transistoren im Gegentakt angetrieben wird. Geeignete Kerne findest du 
z.B. in ausgebrannten Energiesparlampen.
Stabilisierte Versorgungsspannungen hast du ja, wodurch sich die 
Schaltung und Berechnung des Wandlers für die Heizung auf ein Minimum 
reduziert.
Sonst nimmt man eben z.B einen TL494.

Allenfalls muss man bei Funkuhren darauf achten, dass man mit der 
Schaltfrequenz nicht den Empfang stört. Aber das betrifft einen evtl. 
vorhandenen  Wandler für die hohen Spannungen genau so.

Autor: onkel_K (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe eine Frage zu den Fuse-Bits:

wenn ich den atmega8 mit dem 16 MHz - Quarz betreibe:

Müssen dann die FUSE-Bits High: 0xC9 und Low: 0xEF sein ?

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.