Forum: Mikrocontroller und Digitale Elektronik dcf auswertung 8051 reichelt modul


von Frank S. (funkuhrbastler)


Angehängte Dateien:

Lesenswert?

Hallo ihr!


ich hätte da mal ne frage

ich bin gerade an nem abschluss projekt dran  (auswerten eines dcf 
signals auf einem 8051 controller und ausgabe auf nem lcd display).

habe nun das problem das er mir die display ausgabe nicht macht! ich 
erkenne die minutenlücke und dann schreibt er mir auch auf dem display 
die einzelnen ausgaben hin. die sekunden zählt er auch richtig aber es 
passiert nichts mit den minuten, stunden etc.

die hab ich angelegt :

char lcd_zeit[21]=     {"Zeit:     00:00:00  "};
char lcd_date[21]=     {"Datum: Mo 17.01.2000"};


aber ausgabe kommt dann

char lcd_zeit[21]=     {"Zeit:     3?:7?:00  "};
char lcd_date[21]=     {"Datum: So 3?.1?.20??"};

ich bin jetzt schon 3tage dran und komm einfach nicht weiter! da ich es 
am mittwoch abgeben muss wende ich mich an euch.
da ich erst seit nem knappen halben jahr mit µC zu tun habe (das projekt 
mir von meinem proff vorgeschrieben wurde) hoffe ich dass ihr mir helfen 
könnt!

ich hänge mal den code ran!!

zum aufbau noch folgendes:

     12mhz takt
     dcf reichelt
     controller 8051
     mit timer ausgewertet

danke euch für eure hilfe.

gruß frank

von Hubert G. (hubertg)


Lesenswert?

Hast du berücksichtigt das beim Reichelt-Modul die Ausgabe invertiert 
ist.

von Frank S. (funkuhrbastler)


Lesenswert?

ja hab ich!! ich hab es mittels transisor invertiert!!!

von Frank S. (funkuhrbastler)


Angehängte Dateien:

Lesenswert?

moin leute hab gestern abend noch den code von nem anderen hier mir 
geladen und angeschaut!! sieht recht gut aus!! er findet mir das signal 
auch aber warum zum teufel macht berechtnet er mir keine uhrzeit1!! die 
funktion uc_TimeOut(); wofür ist den die da?

wär super wenn mir jemand helfen könnte!! langsam wirds echt eng!!

grüße

von AVRFan (Gast)


Lesenswert?

Kleiner Tipp: Auch wenn 'rar' ein noch so tolles Packformat ist - es 
gibt Leute hier, die nur Windows und Winzip benutzen, und wenig Lust 
haben, sich nur deswegen Linux aufzuziehen oder ne extra Software zu 
installieren.  Bei 'zip' kannst Du davon ausgehen, dass niemand hier ein 
Problem damit hat.

von Ron (Gast)


Lesenswert?

Winzip kann doch rar oder verwechselst Du das mit tar?

Mir ist der Code zu wüst. Schau mal bei 
http://www.elektor.de/jahrgang/2006/mai/mini-mega-board.64106.lynkx?tab=3 
vorbei. Bei den Beispielcodes ist was zu DCF77, was mit dem 
Reicheltmodul bei mir geklappt hat. Das sieht irgendwie eleganter aus.

von AVRFan (Gast)


Lesenswert?

>Winzip kann doch rar

Hm, mein Winzip 9.0 kennt es nicht - keine Treffer zu "RAR" im Index der 
Hilfe.  Aber zugegeben, ist auch nicht mehr die neueste Version.

>Mir ist der Code zu wüst.

Wüster Code?  Nix wie weg hier... ;-)

von AVRFan (Gast)


Lesenswert?

@Frank:

>                TR1=1;                  //Timer 1 starten
>    TIM_TICK=0;    //Timerstand auf Null setzen
>
>    while(PULS_EING==1);    //Warten auf nächsten Puls
>    TR1=0;                  //Timer stoppen

Ohje... Dein armer µC muss wirklich auf steigende oder fallende Flanken 
warten?  Und wenn der Puls erst in vier Stunden kommt, weil der 
Empfang gestört ist, und das Modul solange konstant "L" ausgibt, dann 
willst Du vier Stunden irgendwo mitten im Code in einer While-Schleife 
verharren, und währenddessen den Timer 95706 mal überlaufen lassen?

Vielleicht solltest Du Dich mal mit der Alternative auseinandersetzen. 
Die besteht darin, das DFC77-Signal vom Modul schlicht in einem festen 
Zeitraster, z. B. 10 ms, zu sampeln, und mit dem dadurch generierten 
Bitstrom eine sog. Zustandsmaschine zu füttern.  Diese Zustandsmaschine 
muss dann nichts weiter tun, als alle 10 ms ihren Zustand passend zu 
aktualisieren.  Sie prüft, ob ein Signalflanke vorliegt, ob es eine 
steigende oder fallende ist, stellt fest, wie lange die vorherige Flanke 
zeitlich zurückliegt, und verarbeitet diese Daten in geeigneter Weise zu 
dem codierten Zeitwert.  Nachdem sie mit ihrem Geschäft fertig ist, wird 
zum Hauptprogramm zurückgekehrt, wo der nächste Prozess mit seiner 
Zustandsmaschine an die Reihe genommen wird.  Tasten einlesen, StatusLED 
ansteuern, LC-Display bedienen... für jede Aufgabe gibt es einen Prozess 
mit je einer eigenen Zustandsmaschine - Du verstehst?  In der Main 
werden sie einfach alle immer reihum alle 10 ms aufgerufen. 
Irgendwelche Warteschleifen innerhalb der Prozesse sind dann natürlich 
tabu.  Wenn gewartet werden soll, setzt man eine Variable z. B. auf 30 
und zählt sie mit jedem 10 ms Tick herunter.  Ist sie bei Null 
angekommen, sind genau 300 ms Wartezeit um und es kann weitergehen.

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.