www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik dcf auswertung 8051 reichelt modul


Autor: Frank Schuster (funkuhrbastler)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Hubert G. (hubertg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du berücksichtigt das beim Reichelt-Modul die Ausgabe invertiert 
ist.

Autor: Frank Schuster (funkuhrbastler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja hab ich!! ich hab es mittels transisor invertiert!!!

Autor: Frank Schuster (funkuhrbastler)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: AVRFan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ron (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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-... 
vorbei. Bei den Beispielcodes ist was zu DCF77, was mit dem 
Reicheltmodul bei mir geklappt hat. Das sieht irgendwie eleganter aus.

Autor: AVRFan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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... ;-)

Autor: AVRFan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.