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
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
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
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
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
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
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
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 (",)
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
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
Stell im Forum eine Frage mit Frauenname, und die Kerle sind alle ganz geduldig ...
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
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
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
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.
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
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
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
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
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
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
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
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^^
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
Ich habe auch den Code hier runtergeladen doch der geht nicht und ich habe auch keinen blassen schimmer wie man ihm anpassen kann. thx
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
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 :)
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
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 ?.
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
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
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?^^
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
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
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(",)
DCF77 mit Codevision gibt es hier... http://www.cczwei-forum.de/cc2/thread.php?threadid=1841&sid=1da2284927e5839c512ac117226d8f7d
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.