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
> sondern für ein Schulprojekt! hmmm... Hausaufgaben Google genutzt? > die fertige Decodierung für Zeit und > Datum zu Verfügung stellen würde Im Anhang ein sehr berühmtes Bild...
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..
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
@ surr Danke für deinen Beitrag. Leider hab ich außer AVR noch nie was mit µC zu tun gehabt und weis nicht mal was "Pics" bedeutet. Ich sag ja bin echt ein blutiger Anfänger der Hilfe sucht. Trotzdem Danke
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! :-)
Ist ein anderer Controller, welcher auch sehr gerne von Atmel-Usern verwendet wird.. Aber Spass beiseite, C ist so unähnlich zu C++ auch wieder nicht. Was hast du denn schon beisammen ?
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
Easy, das wird schon.. Kanst du : Input (auf Flanke) auf uC empfangen ? Sprich, ein Variable setzen per Input ? Timer laufen lassen ? Wie kommt das ganze auf den PC ? RS232 ?
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.