DCF Decodierung

OP #818393
Lesenswert?
• ▲
▼
Hallo zusammen,

ich weis es kommt nie gut an wenn man nach fertigen Programmen fragt 
aber mit brennt die Zeit unter den Nägeln und trotz zahlreichen 
Versuchen und stundenlangem lesen im Internet hatte ich bisher keinen 
Erfolg.

Muss dazu sagen das ich mich in Sachen µC nicht gut auskenne, deshalb 
auch der Hilferuf!!!

Ich brauche dringend ein Programm für einen ATMega16 der mir aus den 
einsen und nullen, die ich über das DCF-Modul bekomme, das Datum und die 
Uhrzeit berechnet. Ich habe das AVR Studio 4.12 ServicePack 4. Der 
Mega16 ist im STK500 eingebaut.

Ich muss per Buttonclick in dem von mir geschriebenen C# Prog. die 
Systemzeit nach DCF stellen. Verbindung zum STK und Systemzeit stellen 
ist soweit alles klar nur das Decodieren will nicht.

Also falls irgendjemand von euch ein Auge zudrücken könnte und mir die 
fertige Decodierung für Zeit und Datum zu Verfügung stellen würde, wäre 
ich sehr dankbar!

Noch zu erwähnen. Das ganze soll nicht kommerziell genutzt werden sonder 
für ein Schulprojekt!

Ich hoffe es kann sich jemand überwinden und sag schon mal vielen Dank!

Gruß
dcf77-5
Gast #818433
Lesenswert?
• ▲
▼
Ich hab noch nix mit Atmel erledigt, aber mit Pics..

Timers haben beide, und einen Interrupt on Edge wahrscheinlich auch..

So ganz auf die schnelle :

Flankengetriggert die Länge des Signals messen.

Kurzer Blibb 100ms -> Ist eine 0

Langer Blibb 200ms -> Ist eine 1

Kann je nach Anschluss (Normal High, normal Low)
auch andersherum sein..


Am Ende gibts ein seeehr langes Nichts von 1800-1900ms-Länge :
Minute startet, Bit 0 wird beim nächsten Blibb aquriert..

Dann füllst du einen Buffer ab (Array mit 60bits Länge),
und dann wird dekodiert.. Angehängt ein Excel-Sheet,
mit welchem auf Richtigkeit geprüft werden kann. Einfach
Die empfangenen Bits in die violette Zeile eintragen..


So ganz billig könnte die Dekodierung dann so aussehen :
1
if(dcf_buffer[21]) t_dcf_new.minute+=1;
2
if(dcf_buffer[22]) t_dcf_new.minute+=2;
3
if(dcf_buffer[23]) t_dcf_new.minute+=4;
4
if(dcf_buffer[24]) t_dcf_new.minute+=8;
5
if(dcf_buffer[25]) t_dcf_new.minute+=10;
6
if(dcf_buffer[26]) t_dcf_new.minute+=20;
7
if(dcf_buffer[27]) t_dcf_new.minute+=40;
8
// dcf_stunden
9
if(dcf_buffer[29]) t_dcf_new.hour+=1;
10
if(dcf_buffer[30]) t_dcf_new.hour+=2;
11
if(dcf_buffer[31]) t_dcf_new.hour+=4;
12
if(dcf_buffer[32]) t_dcf_new.hour+=8;
13
if(dcf_buffer[33]) t_dcf_new.hour+=10;
14
if(dcf_buffer[34]) t_dcf_new.hour+=20;
15
// dcf_kalendertag
16
if(dcf_buffer[36]) d_dcf_new.day+=1;
17
if(dcf_buffer[37]) d_dcf_new.day+=2;
18
if(dcf_buffer[38]) d_dcf_new.day+=4;
19
if(dcf_buffer[39]) d_dcf_new.day+=8;
20
if(dcf_buffer[40]) d_dcf_new.day+=10;
21
if(dcf_buffer[41]) d_dcf_new.day+=20;
22
// dcf_wochentag
23
if(dcf_buffer[42]) d_dcf_new.weekday+=1 ;
24
if(dcf_buffer[43]) d_dcf_new.weekday+=2 ;
25
if(dcf_buffer[44]) d_dcf_new.weekday+=4 ;
26
// dcf_monat
27
if(dcf_buffer[45]) d_dcf_new.month+=1 ;
28
if(dcf_buffer[46]) d_dcf_new.month+=2 ;
29
if(dcf_buffer[47]) d_dcf_new.month+=4 ;
30
if(dcf_buffer[48]) d_dcf_new.month+=8 ;
31
if(dcf_buffer[49]) d_dcf_new.month+=10 ;
32
// dcf_jahr
33
if(dcf_buffer[50]) d_dcf_new.year+=1 ;
34
if(dcf_buffer[51]) d_dcf_new.year+=2 ;
35
if(dcf_buffer[52]) d_dcf_new.year+=4 ;
36
if(dcf_buffer[53]) d_dcf_new.year+=8 ;
37
if(dcf_buffer[54]) d_dcf_new.year+=10 ;
38
if(dcf_buffer[55]) d_dcf_new.year+=20 ;
39
if(dcf_buffer[56]) d_dcf_new.year+=40 ;
40
if(dcf_buffer[57]) d_dcf_new.year+=80 ;


Viel Spass..
Angehängte Dateien:
OP #818434
Lesenswert?
• ▲
▼
Danke das Bild kenn ich bereits. Ist nicht so das ich mich nicht schon 
länger mit der Sache beschäftige. Aber ich komm hier nicht weiter. Wie 
gesagt ich hab ein Prog. in C# geschrieben das ist auch eher meine Welt. 
Bei den µC muss ich mich schon von Ast zu Ast hangeln.
Hab mir aber schon gedacht das ich mit der plumpen Bitte nach einem 
Laufenden Prog. nicht weit komm.

Gruß
dcf77-5
Gast #818455
Lesenswert?
• ▲
▼
Blos nicht mit Code drauflostippen anfangen - das bringt statt Erfolg 
nur Verdruss.  Zuerst den Programmflussplan für den Decoder erstellen. 
Dabei gründlich überlegen, sorgfältig vorgehen und sich vor Augen 
halten, dass das der wesentliche Teil der Arbeit ist (Code tippen kann 
jeder). Das Ding muss einwandfrei sein - sonst tuts nicht. Wenn Du 
sicher bist, dass es funktionieren kann, diesen Plan in ein C- oder 
Pascal-Programm umsetzen.  Zusätzlich natürlich einen Encoder für das 
Signal schreiben (ist viel einfacher als der Decoder und in ein paar 
Zeilen erledigt).  Dann die Chose am PC simulieren und testen, testen 
und nochmals teste.  Wenn alles läuft, weißt Du, dass Du es geschafft 
hast. Die Routinen nach dem Assembler für Deinen µC zu portieren, ist 
dann schließlich nur noch ein Klacks.

Viel Glück! :-)
OP #818467
Lesenswert?
• ▲
▼
Was ich habe? Viel Arbeit hinter mit und ein großen Problem vor mir. Die 
Sache mit dem DCF decodieren sollte erst durch ein fertiges Modul 
erledigt werden aber da nun schon das STK zum Einsatz kommt soll auch 
hier die Decodierung statt finden. Ich bin ganz ehrlich, µC mag ich 
nicht besonder und ich hab mir gedacht ich muss das Rad ja nicht neu 
erfinden. Also hab ich mich auf die Suchen nach Programmen gemacht. 
Leider sind es meist sehr umfangreiche mit vielen zusätzlichen 
Funktionen. Tue mir das schwer durch zu steigen. Jetzt hab  ich eben 
versucht hier weiter zu kommen, aber ich denke das ich wohl doch ein 
paar Nachtschichten einlegen werd und mich in die Sache reinarbeiten 
muss.

Gruß
dcf77-5

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren