www.mikrocontroller.net

Forum: Mikrocontroller und Elektronik dcf auswertung 8051 reichelt modul

Autor: Frank Schuster (funkuhrbastler)
Datum: 24.03.2008 16:21
Dateianhang: funkuhr.rar (48,7 KB, 45 Downloads)

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: 24.03.2008 17:44

Hast du berücksichtigt das beim Reichelt-Modul die Ausgabe invertiert
ist.
Autor: Frank Schuster (funkuhrbastler)
Datum: 24.03.2008 17:50

ja hab ich!! ich hab es mittels transisor invertiert!!!
Autor: Frank Schuster (funkuhrbastler)
Datum: 25.03.2008 13:09
Dateianhang: dcfmitheader.rar (141,5 KB, 27 Downloads)

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: 25.03.2008 13:20

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: 25.03.2008 13:36

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: 25.03.2008 14:40

>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: 25.03.2008 15:01

@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 Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
  • Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel






webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net