www.mikrocontroller.net

Forum: Codesammlung DCF 77 Uhr mit CodeVision


Autor: Marcel (Gast)
Datum:
Angehängte Dateien:
  • DCF.zip (80,7 KB, 2102 Downloads)

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
Autor: !(void) MIKE(!(void)) (Gast)
Datum:

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
Autor: Marcel (Gast)
Datum:

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
Autor: !(void) MIKE(!(void)) (Gast)
Datum:

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
Autor: Marcel (Gast)
Datum:

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
Autor: !(void) MIKE(!(void)) (Gast)
Datum:

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
Autor: Marcel (Gast)
Datum:

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
Autor: Marcel (Gast)
Datum:
Angehängte Dateien:

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 (",)
Autor: Marco S. (masterof)
Datum:

abo
Autor: janine (Gast)
Datum:

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
Autor: Wolfgang Horn (Gast)
Datum:

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
Autor: Tanja (Gast)
Datum:

Stell im Forum eine Frage mit Frauenname, und die Kerle sind alle ganz
geduldig ...
Autor: Hein (Gast)
Datum:

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
Autor: Hein (Gast)
Datum:

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
Autor: Marcel (Gast)
Datum:

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
Autor: Hein (Gast)
Datum:

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.
Autor: Marcel (Gast)
Datum:

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
Autor: Marcel K. (viewer)
Datum:

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
Autor: Hein (Gast)
Datum:
Angehängte Dateien:

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
Autor: Marcel K. (viewer)
Datum:

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
Autor: Hein (Gast)
Datum:

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
Autor: MIchael Herling (Gast)
Datum:

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
Autor: Marcel K. (viewer)
Datum:

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
Autor: Has (Gast)
Datum:

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^^
Autor: Schitzpa (Gast)
Datum:

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
Autor: Schitzpa (Gast)
Datum:

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

thx
Autor: Marcel K. (viewer)
Datum:

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
Autor: cedric (Gast)
Datum:

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 :)
Autor: Marcel K. (viewer)
Datum:

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
Autor: cedric (Gast)
Datum:

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 ?.
Autor: Marcel K. (viewer)
Datum:

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
Autor: cedric (Gast)
Datum:

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
Autor: cedric (Gast)
Datum:
Angehängte Dateien:

oups i have forget to send the photo ^^
Autor: David (Gast)
Datum:

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?^^
Autor: Marcel K. (viewer)
Datum:

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
Autor: Mihael Grabrovec (Firma: student) (majkel)
Datum:

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
Autor: Marcel K. (viewer)
Datum:

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(",)
Autor: Clyde H. (clyde)
Datum:

DCF77 mit Codevision gibt es hier...

http://www.cczwei-forum.de/cc2/thread.php?threadid...
Autor: Bernd M. (adventureman1972)
Datum:

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
Autor: Marcel K. (viewer)
Datum:

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
Autor: Bernd M. (adventureman1972)
Datum:

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

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




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 erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net