Forum: Projekte & Code DCF 77 Uhr mit CodeVision


von Marcel (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Forumgemeinde!!

es ist so weit, ich habe es endlich geschafft mit CodeVision das
DCF-Signal einzulesen. freu
Es ist vielleicht nicht ganz so perfekt wie einige andere Programme
hier im Forum, aber es läuft!!!

Na ja, ich muss zugeben dass ich das Grundgerüst meines Programm's von
einer Internetseite, www.digital-hobby.de habe! kleinlaut Doch das
Programm auf dieser Seite funktionierte ja eigentlich überhaupt nicht.
Da fehlte z.B. die <main> Anweisung oder ganze Variablen- Deklarationen
und einige "geschweifte Klammern". Ich habe auch viele zusätzliche
Funktionen mit eingebaut. Somit ist vom "abgeschauten" Programm nicht
wirklich mehr viel übrig geblieben. Ich habe den Verfasser auch schon
mal per E-Mail kontaktiert aber da kam nie etwas zurück.
Ich habe mich bemüht, vieles in eine <dcf.h> zu schreiben. Somit ist
das Hauptprogramm wirklich sehr klein geblieben.

Ich würde mich freuen, falls ihr das Programm ausprobiert, wenn ihr mir
mitteilen könntet ob das Programm bei euch auch wirklich funzt.

Auch über Verbesserungsvorschläge bin ich dankbar. Die Dokumentation
ist hoffentlich Weitgehens erklärlich geschrieben.

Bei mir lief das Programm auf  einem Atmega16 und einem 20
Zeichen-Display. Wenn man es auch mit einem 20-Zeichen-Display
probiert, dann passt alles genau in die erste Zeile. Benutzt man ein
Display mit weniger Zeichen, dann muss man in der <dcf.h> das Zeit-
oder Datum- String wo anders auf dem Display platzieren.

Für alle die auch noch nicht so viel Ahnung vom Programmieren
haben..... ( ich programmiere auch erst seit 9 Monate mit dem Atmel )
Die <dcf.h> kopiert man am besten in den Ordner  "C:\cvavr\inc"
dann findet der Compiler die Datei auch gleich.

Bis dahin....

Grüße, Marcel

von !(void) MIKE(!(void)) (Gast)


Lesenswert?

Hallo Marcel

"Für alle die auch noch nicht so viel Ahnung vom Programmieren
haben..... ( ich programmiere auch erst seit 9 Monate mit dem Atmel
)"

Ich programmiere seit ca.4 Monaten AVR in ASM und versuche jetzt auf C
umzusteigen. Deshalb maße ich mir nicht an mit ein Urteil über deinen
Code zu fällen. Aber wenns funzt, ist doch schon erstmal der wichtigste
Schritt getan.
Da ich deinen Code mal testen möchte hab ich ihn mir mal angeschaut.
Meine Frage:

Wie schließe ich das LCD-Display an? PortD (außer PD2) ok, aber an
welche D - Ports kommen die Steuer- und Dateneingänge? Möglicherweise
eine blöde Frage, aber ich hab´s halt im Code und anderswo nicht
gefunden.

Gruß Mike

von Marcel (Gast)


Lesenswert?

Hallo Mike,

das LCD wird nicht am Pord D sondern bei meinem Programm am Port C
angeschlossen. (schau mal in der dcf.c ; da habe ich es gleich nach der
Variablendekleration "auskommentiert" ) Nur die Antenne wird am Port
D, Pin 2 angeschlossen.

Wie du oben lesen kannst, habe ich das ganze mit CodeVision
programmiert. Was ich damit sagen will, CodeVision hat eine ganz
bestimmt Reihenfolge wie ein Display in ihren Programmen angeschlossen
wird. Das wird, glaub ich, in der lcd.h festgelegt. Deshalb sollte man
sich danach richten. Wenn dir das so aber nicht gefällt, dann steht es
dir natürlich frei es anders zu programmieren, was ich aber nicht
empfehlen würde.

Meine Frage ist jetzt, programmierst du denn auch mit CodeVision, (oder
hast du es vor)?? Das ist eine entscheidende Frage da viele Programme
hier im Forum meist nicht mit CodeVision geschrieben werden. Und somit
ist auch leider die Sprache etwas anders. (schade eigentlich) Mir hat
die Software einfach vom "Gefühl" her besser zugesagt, aber man ist
hier im Forum dann schon eher benachteiligt da viel die "ander"
Programmiersoftware benutzen und somit auf CodeVision nicht auf anhieb
übertragbar.
Wenn du willst kann ich dir, wenn ich heut Abend Heim komme, trotzdem
mal hier die Anschlussbelegung des LCD's "posten". Du brauchst dann
aber die Software von CodeVision. Die kostenlose Testsoftware gibt es
bei: http://www.hpinfotech.ro/ !! Mit der Version kann man schon sehr
viel machen. Und da liegt auch schon der Hund begraben!!! Deshalb
wählen viele eher die andere Software zum programmieren, da diese
nichts kostet (mit Recht auch). In der Testversion müsste aber irgednwo
die Anschlussbelegung des LCD's zu finden sein.

Wenn du Fragen hast, dann frag ruhig, ich weiß wie schwer es am Anfang
ist!!!!

Bis dahin...

Gruß Marcel

von !(void) MIKE(!(void)) (Gast)


Lesenswert?

Hallo Marcel,

dank für deine schnelle Antwort. Oh ja, PortC glatt übersehen.
Ich hab nur auf deine PortD Initialisierung gesehn, und dache du hast
alles über einen Port abgewickelt.

Ich nutze auch CodeVision und bin auch schon über einiges gestolpert
bezüglich CodeVision <--> GCC.
In meiner LCD.H steht keine Pinbelegung. Hab auch die Testversions
lcd.h durchgeschaut nichts.

Nur in der LCD40X40.h steht folgendes,

[LCD]            [AVR Port]
  RS  (pin 11) --- bit 0
  RD  (pin 10) --- bit 1
  EN1 (pin 9) ---- bit 2
  EN2 (pin 15) --- bit 3
  DB4 (pin 4) ---- bit 4
  DB5 (pin 3) ---- bit 5
  DB6 (pin 2) ---- bit 6
  DB7 (pin 1) ---- bit 7

was für mich aber nicht in Frage kommt.
Irgendwo muß dies doch aber stehn, bzw. offensichtlich def. sein.:(
Wäre nett von dir, wenn du mir deine Bezugsquelle nennen könntes

Gruß Mike

von Marcel (Gast)


Lesenswert?

Hallo Mike,

also so wie du das oben geschrieben hast stimmt es nicht ganz!!!

Ich weiß nicht ob es das auch in der Testversion gibt, aber bei
CodeVision gibt es einen "CodeWizardAVR". Das ist ein "Button" der
aussieht wie ein kleines Zahrrad. Wenn man den "Wizard" öffnet, dann
kannst du unter einem "Reiter" >LCD< dein gewünschtes LCD angeben.
Darunter findest du dann auch diese Pinbelegung:


[LCD]            [AVR Port]
  RS  (pin 4)  ---- bit 0
  RD  (pin 5)  ---- bit 1
  EN  (pin 6)  ---- bit 2
  Free         ---- bit 3
  DB4 (pin 11) ---- bit 4
  DB5 (pin 12) ---- bit 5
  DB6 (pin 13) ---- bit 6
  DB7 (pin 14) ---- bit 7

Ist vielleicht blöd wenn du nicht genau diese Pin-belegung hast aber
ich würde sie lieber so umlöten wie in den Dateien "rumbasten". Aber
wie gesagt, das ist dir überlassen.

Hast du eigentlich das STK500 zum programmieren??

Gruß Marcel

von !(void) MIKE(!(void)) (Gast)


Lesenswert?

Hallo Marcel,

ja, ich nutze (natürlich) das STK500 und ein paar eigene Applikationen,
die ich aber über die ISP Schnittstelle des STK´s programmiere.

Die Belegung sieht ganz gut aus, hab sie auch gefunden, Danke!!

Na dann probier ich´s mal, kann allerdings noch ein paar Tage dauern,
meld mich aber auf jeden Fall noch mal.

Gruß Mike

von Marcel (Gast)


Lesenswert?

Na dann dürfe es ja gar kein Problem geben. Was aber noch wichtig
ist!!!!
Du brauchst noch einen 4MHz Quarz auf dem Bord!!! (CRYSTAL)Ich weiß
nicht ob es ohne den Quarz laufen würde da ja der Timer von ihm
getaktet wird!!! (und das Display im 4-bit Modus, hast du aber bestimmt
schon!!)

Nu denn...

Marcel

von Marcel (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Forum-Gemeinde.

Ich stelle eine neue Version meiner DCF-Uhr vor. Ich habe alles in eine
Datei geschrieben. Dadurch steht relativ viel Text in der Include Datei
(das erste drittel ist nur Kommentar). Das gehört da zwar nicht rein
aber es erklärt alles was man wissen sollte.

Das Programm ist komplett überarbeitet.
Die Uhrzeit wird jetzt in einem String an das Hauptprogramm übergeben
und wird deshalb nicht mehr in der Include-Datei ausgegeben. Des
weiteren ist es möglich den Aktuellen "Synch-Status" z.B. auf dem
Display anzuzeigen. Auch die Uhrzeit(mit Datum) der letzten
Synchronisierung und die, seit dem verstrichenen Minuten, werden
gespeichert.
Die Uhr wird auch nur noch zu jeder vollen Stunde synchronisiert. In
der restlichen Zeit läuft die Uhr mit dem internen Timer.

Gebt mir doch bitte einen Rückmeldung falls jemand das Programm
ausprobiert hat....

Mit den besten Grüßen,

Marcel (",)

von Marco S. (masterof)


Lesenswert?

abo

von janine (Gast)


Lesenswert?

Schöen guten tag,
ich bin zum ersten mal hier, aber ich habe da so ein gefühl, dass ihr
mir helfen könnt!ich muss einen atmega 169 programmieren, sowohl mit
assembler als auch in c. ich suche dafür dringend gute unterlagen. Kann
mir da jemand vieleicht weiterhelfen?

danke schon mal im voraus

von Wolfgang Horn (Gast)


Lesenswert?

Hi, Janine,

entweder hast Du das Zeug zur Embedded-Programmiererin, oder Du hast es
nicht.

Ich unterstelle Dir, daß Du es hast. Deswegen wirst Du mit folgenden
Unterlagen / Material auskommen:
1. Das Tutorial in diesem Forum.
2. Das ausführliche Datenblatt zum atmega169, bekommst Du bei
www.atmel.com. Applikationen mit Atmega169 wie den Butterfly.
3. WINAVR
4. Atmel Studio, bei www.atmel.com, nach WINAVR zu installieren.
5. JTAG-ICE für Atmega, zu bekommen vom nächsten Distributor. (Billig
im Vergleich zu der ARbeitszeit, die es einspart.)
6. Das Lastenheft Deines Auftraggebers.
7. Dies Forum für die immer wieder auftretenden Probleme, wo man sich
nach der treffenden Antwort fragt, warum man nicht selbst drauf
gekommen ist.

Ciao
Wolfgang Horn

von Tanja (Gast)


Lesenswert?

Stell im Forum eine Frage mit Frauenname, und die Kerle sind alle ganz
geduldig ...

von Hein (Gast)


Lesenswert?

Hallo, Marcel

Ich muchte dir gerne danken fur deine dcf77.c code.
Es ist meine erste ubung mit (C) programmieren und STK500.
Das beste war wohl das du das ganse zo ge-zipped war das es auf ein mahl 
laufte. Klasse. Danke auch fur die sorgfältige documentierung.
Der ansluss des LCD's war wie es bei mir in der LCD.h von CodeVision 
stand.
Der empangskwalität des DCF77 moduul hat mir ein paar stunden gekostet 
bis ich durch hatte das der empfänger wirklich im fenster legen muss!!

Ich hab das hier zugefugt, damit einen led anzeigt das der DCF77 
empfangber lauft.
 antenne = PIND.2;              // bekommt den Wert der am Port D Pin 2
         // anliegt. (DCF_Antenne)
 PORTB.2 = ~PIND.2;             // write received pulse to LED 2 (HG)

Ich habe eine seriële schnitstelle hinzugefugt um ein grosses flip-bit 
mechanisches display an zu legen. (130 x 20 cm)
Der Modulo -256 checksum, der dieses display erwartet, war wohl etwas zu 
fiel fur das erste contact mit C aber jetzt lauft er.

Nur gelingt es mir nicht um die monat anzeige hin zu kriegen.
When ich...
     kalender_monat = 10;
// Monat
     if(kalender_monat == 1)  sprintf(maand,"Jan");
     if(kalender_monat == 2)  sprintf(maand,"Feb");

...hinzu fuge dann zeigt er Okt an, also ist anscheinend die variabele 
kalender_monat nicht in die reihe 1 bis 12.

Wenn du da ne idee hasst hore ich es gerne.

tjuss

von Hein (Gast)


Lesenswert?

Hallo Marcel...
Der monat fehler habe ich schon gelöst, du hast ihm anscheinend auch 
gesehen da deine zweite version (dcf77.h.txt) der datum ja anders 
(richtig) einlehst.
also fur al die leute die da noch basteln... dies hier ist richtig:

// Die Monat-Einer werden zwischen den 45 - 48 Sekunde,
// der Monat Zehner wird in der 49. Sekuden gesendet

    if(dcf.sekunde>=45 && dcf.sekunde<=50)
     {
      dcf.monat>>=1;         // Bit schieben
      dcf.monat|=impuls*32;     // Bits von oben hinzufügen
     }

    if(dcf.sekunde==50)
     {
     dcf.monat>>=1;
      dcf.monat=bcd2bin(dcf.monat);     // Monat umrechnen
     }

ich denke Marcel, du hast der vorige version getested irgentwo in die 
ersten 9 monaten von ein jahr!
tjuss.

Hein

von Marcel (Gast)


Lesenswert?

Hallo Hein,

das freut mich dass dir mein Programm gefällt :o) So etwas höre ich 
gerne. Klasse das dein Einstieg in die C-Welt mit dem STK500 so geklappt 
hat!!!!

Du hast vollkommen Recht. Ich habe im letzten Jahr schon das Problem 
gehabt, dass der Monat >Oktober< nicht richtig angezeigt wurde. Ich habe 
dann nach eine Änderung wieder ein Jahr warten müssen. Leider konnte ich 
die Uhrzeit bis heute nicht testen da ich leider noch keine Zeit dazu 
hatte :.(
Auf jeden Fall bin ich dir sehr dankbar für deine Info!!! Ich hoffe dass 
ich in den nächsten Tagen noch dazu komme es selber zu testen!! (habe 
noch 6 Tage lach)

Vielen Dank noch mal……

PS: bist du Holländer?? Deine Schrift sieht so danach aus :o)

Viele Grüße, Marcel

von Hein (Gast)


Lesenswert?

Hallo Marcel,

Ja... zugegeben, ich esse jeden tag käse.
Also auch wenn ich wusste wo ringel-S und umlaut ein zu zetsen sind, ich 
habe sie einfach nicht auf dem keyboard :o(
Demnächst kan ich nur "fonetisch" schreiben.

Mir ist da noch einen letsten fehler aufgefallen, einen der du möglichst 
noch nie gesehen hast.
Wie ich schrieb, benutze ich das programm fur ein grosses display mit 
mechanischen flipbits. (siehe foto) Dieses display wird also mit ASCII 
angesprochen, und darum benutze ich das LCD nicht.
Gestern abend hab ich mir ne platine gebasteld das jetst in das display 
eingebaut worden ist.... und nicht laufen....
Processor wieder zuruck in die STK500.... geht er wieder.
Habe mich vertieft in die cksel und sut fuses, da wa alles gut.
Da fand ich aus das die software nicht mehr lauft wenn das LCD 
ausgenommen wird!!! Bin ich jetzt doof?? das sind doch nur ausgange!!
Es schien zu kommen fon irgend eine hoch impedance von pin 29, der PC7 
oder besser gesagt der TOSC2 !!! Wiederstand von 10K auf ground gelegt 
und da ging er! Wahrscheinlich wurde da 50Hz vom netzt eingefugt.
Benutzt du den pin irgend wie?? nein, es sind nur ausgange fur das 
display. Was ist da loss? Kann doch nicht wahr sein das einen AVR chip 
(ich habe mehrere versucht!!) so was an sich hat. Einen netten 
processor, "mann muss nur pin 29 uber einen wiederstand auf nul legen" 
!!!!
Oder könte sowas kommen von die RS232 schnittstelle die ich eingefuhgt 
habe?
Versuche das doch auch mahl. Die LED "dcf puls" anseige in die software 
einbauen und dann das LCD herrausnemen.
(PB2 auf LED2 legen und Port B initialisieren...ehhh..PORTB=0xFF und 
DDRB=0xFF)
Wen jetzt das LCD rausgenommen wird, sollte das DCF LED, nicht mehr 
flashen.
Ich bin gespannt.

von Marcel (Gast)


Lesenswert?

Hallo Hein,
aha, dann bist du also ein Landsmann von mir!!! :o) Ich bin zwar in 
Deutschland geboren und wohnen auch schon immer hier, aber ich habe 
durch meine Eltern die Niederländische Staatsbürgerschaft. Ich kann 
allerdings nicht holländisch schreiben, das habe ich nie gelernt
Zu deinem Problem….
Ich bin leider auch kein all zu großer Spezialist. Ich weiß nur dass 
manche Pins nicht immer so funktionieren wie sie sollen. Ich hatte auch 
mal ein Problem mit irgendeinem Port an dem ich ein Display 
angeschlossen habe. Ich habe dann einen anderen Port genommen und dann 
ging es. Welcher Port das war und woran es gelegen hat, weiß ich nicht. 
Ich glaube der PC7 hat auch etwas mit JTAG zu tun. Vielleicht kann man 
das irgendwo abschalten.
Eine Frage, wie können 50Hz auf deinen Pin kommen??
Schau dich mal hier im Forum um. Ich bin mir nicht sicher aber ich 
glaube dass es mehrere Probleme mit dem PC7 gibt.
Kannst du nicht einfach einen anderen Port nehmen??

Ich werde mir mal die Zeit nehme und deine Änderungen vom dcf.h testen.

PS: Du hast kein Foto angehängt!!


Grüße Marcel

von Marcel K. (viewer)


Lesenswert?

Ach Hein,
da fällt mir noch etwas ein. Die Idee von dir mit der LED ist ganz gut. 
Ich habe eine LED direkt am Antennen-Signal angeschlossen. So sieht man 
das eigentliche Signal welches Empfangen wird.

        AVR Int
     |
     |        | K --|1K|--|LED|---- PLUS
Antenne --|10K|--|---- NPN B |
            | E ----------------- Masse

So ist kein Mikrocontroller dazwischen.

Grüße, Marcel

von Hein (Gast)


Angehängte Dateien:

Lesenswert?

Hallo, Marcel

Ich hab mir das auch uberlegt, das mit dem LED, aber der DCF77 darf ja 
die specification nach gerade keinen strom liefern. Die doc. sagt 1mA.
Ich möcht das signal lieber nicht uberlasten, oder versogerungen in die 
implus flanken verursachen. Wenn schon dan lieber ein low current LED 
mit 3k3 auf der freien ausgang der DCF77 platine.
Eeine andere PORT benutzen ist hier nicht im frage, weil das problem lag 
ja darin das ich das LCD PORTC NICHT mehr benötigde. Das programm lief 
ja WEIL da ein LCD display an PORTC an lag. Der LCD ansluss WAHR der 
absluss wiederstand den ich rauszog.
War doch net wen du das mahl versugen kontest.
Auw ja... 50 Hz ist im hause uberall. Das gibt die netz verdratung ab, 
und alles was strom gleited wikt dan wieder als einen antenne. Das 
benutzen ja zum teil die alten tip taster auf plattenspieler un 
fehrnseher.
CMOS eingange sind so sensibel das die immer abgeslossen werden mussen. 
Deshalb gibt's ja bei uProzessoren pull-up resisters.
Um aber zu beweizen das das programm NICHT lauft ohne LCD display sollst 
du doch das LED ansliessen wie ich sagte, weil dein LED flasht auch ohne 
das der prozessor lauft, und das mochtte ich dir ja gerne zeigen.

Ich habe jetzt genau wie gestern das foto im Dateianhang angehängt, 
sonst weis ich auch nicht wie das funzt.

Tjuss, Hein

von Marcel K. (viewer)


Lesenswert?

Hallo Hein,
also ich bin jetzt immer noch nicht dazu gekommen es auszuprobieren, 
Sorry. Ich habe einfach nicht genügend Zeit die Schaltung nazubauen. 
Hast du denn immer noch das Problem? Funktioniert denn irgendetwas nicht 
oder ist es nur das eine Problem dass du 10k an den Port legen musst? 
Wenn es so läuft, ist es doch gut :o) Oder willst du den genauen Grund 
wissen wieso das so ist?
Ich habe auch gar kein LCD direkt am µC hängen. Ich habe ein 
Grafik-Display über die RS232 am µC hängen. Also auch eine ganz ander 
Umgebung wie du. Das ist dann schwer zu vergleichen.

Grüße, Marcel

von Hein (Gast)


Lesenswert?

Nein...ist es nicht, es ist schön zu vergleichen. Weil wenn bei dir kein 
LCD dran ist, ist ja auch PC7 offen...also nicht angeschlossen!! Wenn 
das bei dir lauft hast du das problem das ich habe nicht.
Bei mir lauft ja wie gesagt der processor nicht (mehr) wen PC7 unbelasst 
bleibt.
Wie gesagt brauche auch ich das LCD nicht weil es bei mir ja auch um 
eine serielle schnittstelle zum display geht.
Verstehen tu ich es damit allso nicht, aber, indertat, es lauft ja wie 
es ist mit denn wiederstand drin.
Unbedingt muss ich das nicht zum boden ausvogeln.

Schöne grüsse also,
und bis mahl wieder was ist.
Groetjes
Hein

von MIchael Herling (Gast)


Lesenswert?

Hallo Marcel,
ich möchte gerne Deine 2. Version (dcf_77[1].h.txt ausprobieren. Da ich 
aber auch erst mit CodeVision beginne, kann ich mit der file so nichts 
anfangen:
Als c-code läßt sie sich (natürlich) nicht gebrauchen. Frage: Muß ich 
diese Datei in mein inc-Verzeichnis kopieren? Was muß ich denn dann noch 
tun, damit das läuft? Muß ich in Deinem 1.Programm die Definition von 
#include <dcf.h> in #include <dcf_77[1].h> ändern und es läuft?

Wie Du siehst brauche ich Hilfe...

Grüße

Michael Herling

von Marcel K. (viewer)


Lesenswert?

Hallo Michael,
was hast du den bis jetzt an Programmen geschrieben?? Hast du ein 
LCD-Display am laufen??
Du musste als aller erstes mal die Datei unter C:\cvavr\inc abspeichern. 
Dann kannst in einem Programm bei dem ein LCD oder ein anderes Display 
angesteuert wird, mit include aufrufen.
Wie die ganzen Funktionen aufgerufen werden, steht im ersten drittel der 
Datei. Wenn du die Antenne richtig angeschlossen hast und der Timer 
richtig eingestellt ist, kannst du die Uhrzeit mit

goto x,y
puts (zeit)
goto x2, y2
puts (datum)

ausgeben. (ist nur ein Beispiel, der Aufruf ist kein C-Code!!!)

Ich hoffe das ich dir helfen konnte.

Mit bestem Gruß,

Marcel

von Has (Gast)


Lesenswert?

Hier noch mal DCF77:



Sekunde |         Ereignis           |  Wert
------------------------------------------------------------------------ 
-
0       |      Begin des sendens     | immer 0
1-14    |      Nicht benutzt         | immer 0
15      |        Antenentyp          | 0 = Normal 1 = Ersatz
16      |    Änderung der Zeit       | 0 = Normal 1 = eine Stunde zurück
17-18   |   Zeit(Sommer/Winter)      | 01 = Winterzeit 10 = Sommerzeit
19      |    Zusätzliche Sekunde     | 0 = Normal 1 = Vorhersage?
20      |  Start der Zeitangaben     | immer 1
21-24   |  einer der Minuten         | BCD-Code (24,23,22,21)
25-27   |  zehner der Minuten        | BCD-Code (27,26,25)
28      |  parität bits 21 - 27      | 0 wenn zahl "1" = par. 0 wenn 
nicht
29-32   |  einer der Stunden         | BCD-Code (32,31,30,29)
33-34   |  zehner der Stunden        | BCD-Code (34,33)
35      |  parität bits 29 - 34      | 0 wenn zahl "1" = par. 0 wenn 
nicht
36-39   |    einer der Tage          | BCD-Code (39,38,37,36)
40-41   |   zehner der Tage          | BCD-Code (41,40)
42-44   |    Tag der Woche           | BCD (44,43,42) 1-Mo 2-Di 3-Mi 
usw.
45-48   |   einer des Monats         | BCD-Code (48,47,46,45)
49      |  zehner des Monats         | BCD-Code (49)
50-53   |    einer des Jahres        | BCD-Code (53,52,51,50)
54-57   |   zehner des Jahres        | BCD-Code (57,56,55,54)
58      |   parität bits 36 - 57     | 0 wenn zahl "1" par. 0 wenn nicht
59      |        nichts              | Ende des Sendens

Angaben ohne gewähr ;)
Hoffe es hilft euch.

Finger tun jetzt weh vom ganzen schreiben^^

von Schitzpa (Gast)


Lesenswert?

Hallo

Ich bin seit ein paar Wochen dabei ein LCD-Display anzusteuern doch es 
klappt nicht. Ich muss auch vom DCF 77 die Uhrzeit auf dem LCD ausgeben. 
Ich habe c kenntnisse habe aber noch nie etwas mit microcontroller 
programmierung zu tuen gehabt. Ich habe schon einige Tutorials gelesen 
doch die sagen mir garnichts ich brauche z.B. Wie man einen port 
ansteuert und eine led zum leuchten bringt. Danke voraus


PS: Mein LCD-Display ist nicht standartmässig angeschlossen

von Schitzpa (Gast)


Lesenswert?

Ich habe auch den Code hier runtergeladen doch der geht nicht und ich 
habe auch keinen blassen schimmer wie man ihm anpassen kann.

thx

von Marcel K. (viewer)


Lesenswert?

Hi Schitzpa,

also du solltest „Step by Step“ vorgehen!! Bevor du kein Display zum 
laufen bekommst, solltest du die Finger von irgendeiner DCF Antenne 
lassen :o).
Unter C:\cvavr\examples\LCDDEMO ist ein ganz normales Beispiel wie man 
ein Display betreiben kann. Anschluss am Port C. Solltest du ein andern 
Controller wie den AT90S8515 haben dann benutze den WizardAVR und 
kopiere die Zeilen ab dem >void main (void)< in dein Programm.

Du solltest dich aber an folgende Anschlusse des LCD halten:

1   GND- 9  GND
 2   +5V- 10 VCC
 3   VLC- LCD contrast control voltage 0..1V
 4   RS - 1  PC0
 5   RD - 2  PC1
 6   EN - 3  PC2
 11 D4 - 5  PC4
 12 D5 - 6  PC5
 13 D6 - 7  PC6
 14 D7 - 8  PC7

Das ist natürlich nicht zwingend notwendig, allerding macht es dein 
Leben in Zukunft leichter wenn du mit dem WizardAVR arbeiten willst. 
Dann musst du dort nur noch den Port einstellen und dann geht’s.

Wenn du das hin bekommen hast, kann man weiter Probieren!!!

Viel Glück.

Marcel

von cedric (Gast)


Lesenswert?

hi Marcel, i'm french and i have try your first version and it's great 
but i don't understand the new version without lcd. Can you help me ? i 
only speak english and french so i have some difficult with your code :)

von Marcel K. (viewer)


Lesenswert?

Hallo cedric,
ich kann leider kein Französisch und nur sehr schlechtes Schulenglisch. 
Aber ich werde es mal trotzdem auf Deutsch probieren…

Also ich steuer ein Display über die seriell Schnittstelle an. Deshalb 
fehlt die alte LCD-Funktion.
Du brauchst erst mal ein Hauptprogramm. In diesem Programm machst du 
ein:

Include <dcf_77.h>
Das ist die Datei die du hier herunter geladen hast. Dann brauchst du 
noch:

//Globale Variable (vor main)

#define TEXTLAENGE 12
unsigned char zeit[TEXTLAENGE];  //Variable für Zeit-String
unsigned char datum[TEXTLAENGE]; // Variable für Datum-String

Dann brauchst du im Hauptprogramm (vor main) noch die Funktion 
„dcf_uhr()“. Die ist in der „dcf_77.h“ oben erklärt. Also einfach 
kopieren und über der main einfügen.
Auch die Code-Zeilen für die Inerrupt-Service-Routine [EXT-INT0] und dem 
Timer-Interupt [TIM0_OVF] musst du kopieren. Das steht aber alles in der 
Erklärung oben in der dcf_77.h.

Dann fehlt lediglich noch der Aufruf in der main. dcf_uhr(); (so wie es 
in der dcf_77.h auch erklärt ist)

So und jetzt kommt das Problem mit der Anzeige. In der Funktion 
„dcf_uhr()“ erzeugst du deine Anzeige auf dem Display. Am Ende dieser 
Funktion steht:

// ab hier muss die Uhrzeit ausgegeben werden.
// goto x,y
// puts (zeit)
// goto x2, y2
// puts (datum)

Das ist für deine Anzeige. Also zum Beispiel:

lcd_gotoxy(0,0);  // Spalte 0, Zeile 0
lcd_puts(zeit);    // Ausgabe des zeit-Strings
lcd_gotoxy(0,1);  // Spalte 0, Zeile 1
lcd_puts(datum);  // Ausgabe des datum-Strings

Dann gibt es in der dcf_uhr() noch die switch-Anweisung . Wenn du weißt 
wie man Symbole auf deinem Display erzeugen kann dann kannst du für die 
verschieden Synch-zustände unterschiedliche Symbole anzeigen lassen.

Ich hoffe dass ich dir etwas helfen konnte.

Ich arbeite allerdings an einer neuen Version für die DCF-Uhr. Da ich 
aber momentan sehr wenig Zeit habe, wird das bestimmt noch mindestens 
zwei Monate dauern. In der neuen Version wird unter anderen der Timer 
von 4MHz auf 15.625kHz herunter gesetzt.

Grüße,
Marcel

von cedric (Gast)


Lesenswert?

Thanks Marcel, in fact i'm a teacher for student in electronic and we 
have a project : make a DCF clock which can speak. So when we will 
finish it i'll send the complete schematic and code for codevision. We 
use the chip ISD5116P for speak. Your code will make us win some time so 
thanks for all :) .

what do you you think about use two timer and the timer  1 which can use 
a quartz of 3.2768 MHz will make theninternal clock and when the dcf 
code is valid we can upadate it ?.

von Marcel K. (viewer)


Lesenswert?

Hallo cedric,
lustig, ich studiere gerade Elektrotechnik und bin im letzten Semester 
:o) Deine Idee mit den zwei Timern finde ich gut. Für eine 
Einzelanwendung sicherlich auch sehr nützlich. Ich habe allerdings einen 
ATMega16 in meinem Auto eingebaut. Der steuert unter anderem ein kleines 
Touchdiplay an. Das Problem dabei ist das ich dort keinen Timer mehr 
frei habe :.( Also muss ich bei einem Timer bleiben.
Das mit dem ISD5116P hört sich echt interessant an!!! Ich würde mich 
freuen wenn ich mal das fertige Produkt sehen kann :)

Grüße,
Marcel

von cedric (Gast)


Lesenswert?

here the prototype :) the isp5116P is not yet plug to the KIT200 but 
soon :)
the isp5116p is quiet good because he need i2c bus and with codevision 
AVR it's really simple to make dialogue.

i promise to send all the code and schematics when we will finih this 
project.

Best regards

von cedric (Gast)


Angehängte Dateien:

Lesenswert?

oups i have forget to send the photo ^^

von David (Gast)


Lesenswert?

Hi Marcel!

Ich arbeite gerade an meiner Diplomarbeit in der HTL (also keine 
richtige dipl. arbeit sondern eine art Projekt) und muss dort auch eine 
DCF Uhr einbinden weil ich zu gewissen Zeiten die Leuchtkraft der LEDs 
an meiner "Ampel" verringern will ums Energie zu sparen.
Wollt fragen ob es okay is wenn ich einige Stellen deines Codes direkt 
einbinde?

lg David

PS: Eigentlich könnt ich das ganze ja auch ohne eigenem header file mach 
und statt dessen einfach alles ins Main/Unterprogramme schreiben, das 
eigentliche Main mit der ausgabe brauch ich nämlich nicht... oder?^^

von Marcel K. (viewer)


Lesenswert?

Hallo David,
klar kannst du das!!!! Freut mich wenn ich dir ein ganz klein wenig bei 
deiner Diplomarbeit helfen kann. Jeder Arbeit die man abkürzen kann ist 
brauchbar.

Also du kannst das schon alles in ein einziges Programm schreiben wenn 
du willst (wenn ich das jetzt richtig verstanden habe). Aber glaub mir, 
je mehr man in eine "include-Datei" schreiben kann, desto besser ist die 
Übersicht in der Main!!! Es gibt nichts schlimmeres wenn man ständig 
über den Bildschirm scrollen muss. Da ist es einfacher in den Dateien zu 
springen. (meiner Meinung nach!!)

Das bleibt ganz dir überlassen!!



Viele Grüße,
Marcel

von Mihael G. (Firma: student) (majkel)


Lesenswert?

Hello!

I work on a dcf 77 project.And i found this site.I see that you have 
interest debate about dcf77 .c code.Have any of you final version of .c 
code for dcf.I have working on .c code my self but i didn`t have any 
luck.Projest doesn`t work.

Thank you,Mihael

von Marcel K. (viewer)


Lesenswert?

Hallo Mihael,
sorry das ich mich so spät melde!! Also ich muss leider gestehen, dass 
ich an der Version leider nicht mehr weiter gearbeitet habe. Andere, 
interesantere Projekte folgten und dieses ist dann völlig in 
Vergessenheit geraten. Ich habe also keine gute Nachricht bezüglich 
eines neuen .c Code für dich.
Aber schreib doch mal genauer was dein Problem ist. Vielleicht kann ich 
oder vor allem auch andere dir hier im Forum helfen. Hast du ein Problem 
mit meinen Quellcode oder eine generelles Verständnissproblem?

Viele Grüße,
Marcel(",)

von Clyde H. (clyde)


Lesenswert?


von Bernd M. (adventureman1972)


Lesenswert?

Hallo Marcel,

ich wollte deinen Code in meinen Atmega16 laden doch leider kann ich die 
bcd.h nicht finden. Wo ist die Datei versteckt?

Ein Versuch das DCF-Signal mit AVR-GCC einzulesen ist momentan 
gescheitert. Warum weiß ich noch nicht. Der gleiche Aufbau mit 
AVR-Assembler-Code klappt komischer Weise. Kannst du mir einen Tipp 
geben?

Mein Wunsch ist es dein Programm so zu erweitern , das ich eine 
nachgebaute Analog-Digital-Uhr von ELV mit DCF-Signal zum laufen kriege.
Doch noch fehlt mir als Neuling das Wissen dazu...

Grüße, Bernd

von Marcel K. (viewer)


Lesenswert?

Hallo Bernd,
also ich muss jetzt erst mal gestehen dass ich mich echt nicht mehr so 
gut mit meinem Code auskenne. (habe vorhin mal drin rumgestöbert) Es ist 
echt zu lange her :o) Aber ich möchte trotzdem versuchen dir zu helfen.
Es ist so, dass ich seit mehr als zwei Jahre nicht mehr mit CodeVision 
arbeite. Daher kann ich nicht mehr so gut im Quellcode suchen. (ist halt 
nicht mehr auf dem System installiert)
Du fragst nach der bcd.h! Ich kann mir nicht vorstellen dass ich eine 
eigene bcd.h geschrieben habe. Die habe ist sicherlich von CV verwendet. 
Schau doch mal ob es die bcd.h nicht unter CV gibt!! (mal die Hilfe 
verwenden)

Meld dich einfach wieder wenn ich helfen kann…

Gruß, Marcel

von Bernd M. (adventureman1972)


Lesenswert?

Hallo Marcel!

Danke für dein Angebot. Steckte die ganze Zeit über in 
Klausurvorbereitungen fest. Mittlerweile habe ich die Programmierung 
auch geschafft und die DCF-Uhr ist fertig! Mit Ersatzuhr, 
Plausibilitätsprüfung des Dcf-Signals und 76LEDs für Minunten, Stunden 
und 2 für Signalisierungen. Das Aussehen ähnelt der ELV-LED-Uhr nur mit 
ca. 75% der Größe.
Werde den Code nach einem Dauertest vielleicht auch in die Codesammlung 
einstellen.

Danke nochmal für nichts ...

Bernd

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.