Forum: Mikrocontroller und Digitale Elektronik Selbstgebaute Funkgesteuerte LED Uhr


von Julian S. (julli_s)


Angehängte Dateien:

Lesenswert?

Hallo liebe Mikrocontroller Gemeinde,

ich habe mir in den letzten Semesterferien eine LED Uhr überlegt und 
verwirklicht (siehe Anhang). Die Uhr ist zu 100% eine Eigenentwicklung 
und wurde von mir gebaut und programmiert. Die Uhr arbeitet dabei mit 
einem ATMEGA16 und einigen schieberegistern.
Das Problem ist, ich bin eher der Hardware als der Software-typ und habe 
es in den letzten Semesterferien gerade noch so geschafft die Uhr fertig 
zu Programmieren.
Im Moment läuft sie mit einem Externen Taktgeber der jede Sek ein Impuls 
gibt. (ca. 30Sek Abweichung /Monat)
Ich habe bereits einen DCF77 Empfänger von Conrad am INT0 Pin allerdings 
ist dieser noch nicht implementiert.
So, wie gesagt ich bin eher der HardwareTyp und leider verstehe die 
ganzen mehr oder weniger fertigen Programme zur signalauswertung, die 
ich hier im Forum gefunden habe nicht.
Darum bitte ich jetzt euch um Hilfe. Falls Interesse besteht, kann ich 
auch gern die Teile Liste und Pläne zur Verfügung stellen.

Ich bräuchte eine Funktion o.ä. welche ich einfach einmal die Woche 
aufrufe, dabei kann die Uhr von mir auch auch gern stehen bleiben. 
Welche mir dann nachdem sie das Signal dekodiert hat einfach 3 Werte 
liefert (sek, min, h), die ich dann der Uhr übergebe. Ich habe noch nie 
was mit Interrupts oder ähnlichem gemacht und wahrscheinlich deswegen 
blicke ich durch die ganzen Ansätze dafür nicht durch..
Ich würde mich wirklich freuen, wenn mir jemand helfen könnte.



Hier die haupt Schleife meines aktuellen Codes. Am Anfang werden die 3 
Ringe auf die jeweilige zeit gestellt und bei einem Takteingang geht 
einfach eine blaue led mehr an (sekp1()).
1
  for(i=0;i<sek;i++)
2
    sekp1();
3
    
4
  for(i=0;i<min;i++)
5
    minp1();
6
  
7
  if(stund>=12)
8
    for(i=12;i<stund;i++)
9
      stdp1();
10
      
11
  if(stund<12)
12
    for(i=0;i<stund;i++)
13
      stdp1();
14
  
15
  while(1)
16
    {
17
    if (PINA & (1<<PINA7))//if - puls ->eine blaue led mehr an, sek um 1 erhöhen
18
    {
19
      _delay_ms(600);
20
      sek++;
21
      sekp1();
22
      
23
      if(sek == 60)
24
      {
25
        sek = 0;
26
        min++;
27
        sekoff();
28
        sekp1();
29
        minp1();
30
      }    
31
      
32
      if (min == 60)
33
      {
34
        min = 0;
35
        stund++;
36
        minoff();
37
        minp1();
38
        stdp1();
39
      }
40
      
41
      if (stund == 12 && sek == 0 && min == 0)
42
      {
43
        stdoff();
44
        stdp1();
45
      }
46
      
47
      if (stund == 24)
48
      {
49
        stund = 0;
50
        stdoff();
51
        stdp1();
52
      }      
53
      
54
      seg1[min%10]();
55
      seg2[min/10]();
56
      seg3[stund%10]();
57
      seg4[stund/10]();
58
      
59
    }//if takt
60
    }//while 1

von Karl H. (kbuchegg)


Lesenswert?

Julian Schäfer schrieb:

> Ich bräuchte eine Funktion o.ä. welche ich einfach einmal die Woche
> aufrufe,

das hat wenig Sinn.
Denn im Grunde ist der ganze Ansatz mit dem externen Taktgeber schon 
unsinnig. Das kann der µC auch ganz alleine problemlos, indem man mit 
dem verbauten Quarz am Mega sich die Uhr aufbaut.

Jetzt wirds schwierig. Denn im Grunde ist der ganze Software-Aufbau 
nicht besonders schlau gemacht. Am vernünftigsten wäre es, das mal 
umzubauen.

Wenn du sagst, dass du der Harware-Typ bist. Eine langfristig stabile 
Takquelle stellt zb das 50Hz 230V Netz dar. In deinem Netzteil hast du 
nach dem Trafo sicherlich noch Zugang zu den 50Hz. Die Spannung 
entsprechend heruntergeholt, eventuell noch einen Dezimalzähler bis 50 
zählen lassen (das kann aber auch der Mega machen) und du hast ein 1 
Sekunde-Signal, dass sich in Punkte Langzeitstabilität nicht verstecken 
braucht. Der Vorteil wäre halt, dass du in deinem Programm nichts ändern 
brauchst. Den Nachteil brauch ich dir nicht erzählen - du müsstest halt 
wieder was bauen und du bist extrem unflexibel.

Wenn du die Uhr noch weiter ausbauen willst, wirst du aber nicht umhin 
kommen, dich mit Software weiter zu beschäftigen. Ohne Interrupts ist 
das alles nun mal recht sinnfrei. _delay_ms ist zwar einfach - aber 
_delay_ms ist in richtigen Progammen selten eine Lösung, oft aber das 
Problem.
So wie ich das sehe, wirst du um Timer/Interrupt bzw. externe Interrupts 
nicht herumkommen. Ich seh da ehrlich gesagt keine wirkliche 
Lösungsmöglichkeit, die ohne derartige Basiskonzepte auskommen würde und 
ohne dass man da ein 'richtiges' Uhrenprogramm dafür schreibt.
Oder eben ganz klassisch alles in Hardware realisieren.

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Karl Heinz schrieb:

> unsinnig. Das kann der µC auch ganz alleine problemlos, indem man mit
> dem verbauten Quarz am Mega sich die Uhr aufbaut.

Oops.
Seh grad auf deinem Foto: Du hast dem ja gar keinen Quarz verpasst!
Das ist schon mal nicht schlau. Gar nicht schlau.

Wenn es um Zeit Sachen geht, dann führt an einem Quarz kaum ein Weg 
vorbei. Bei ganz kurzen Zeiten, die dann auch noch nicht besonders genau 
sein müssen, ok da kann man drüber reden. Aber bei einer Uhr, bei der 
sich Fehler im Millionstel Sekunden Bereich ganz schnell aufsummieren 
....

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

?
Wie stellst du eigentlich die Uhr?
Ich seh nirgends irgendwelche Taster oder sonstige Bedienelemente. Im 
geposteten Programmausschnitt ist auch nichts in dieser Richtung zu 
sehen.
DCF77 alleine ist auch keine Lösung. Hast du (aus welchem Grund auch 
immer) keinen Empfang, dann kannst du die Uhr noch nicht mal von Hand 
stellen und laufen lassen.

: Bearbeitet durch User
von Julian S. (julli_s)


Lesenswert?

Im momentan am

Karl Heinz schrieb:
> Wie stellst du eigentlich die Uhr?

Ich stelle dir Uhr am PC, indem ich einfach die 3 variablen vorgebe. So 
läuft die Uhr jetzt seit ca. 6 Monaten. Musste sie zwischendurch nur 1x 
neu stellen wegen einem Stromausfall.

von Marc P. (marcvonwindscooting)


Lesenswert?

Julian Schäfer schrieb:
> uft die Uhr jetzt seit ca. 6 Monaten. Musste sie zwischendurch nur 1x
> neu stellen wegen einem Stromausfall.

Na dann w"urde ich 'nen Akku parallelschalten, wenn der Stromausfall der 
einzige Grund war, die Zeit neu einzustellen ;-)

DCF77 eignet sich nicht besonders als Sekundentakt, wenn der 59. Takt 
ausbleibt. Aber wenigstens weiss man dann wenigstens GANZ GENAU um 
wieviel die Uhr falsch geht: -1/60*86400s pro Tag.

von Karl H. (kbuchegg)


Lesenswert?

Julian Schäfer schrieb:
> Im momentan am
>
> Karl Heinz schrieb:
>> Wie stellst du eigentlich die Uhr?
>
> Ich stelle dir Uhr am PC, indem ich einfach die 3 variablen vorgebe. So
> läuft die Uhr jetzt seit ca. 6 Monaten. Musste sie zwischendurch nur 1x
> neu stellen wegen einem Stromausfall.

Das ist aber mehr als unbefriedigend.

Schaffst du es, ein 50Hz Signal aus der Netzspannung abzuleiten und an 
den Pin zu geben? Das erscheint mir momentan als das kleinere Übel, 
zumal du ja Hardware-Spezi bist.
Das würde das Genauigkeitsproblem recht einfach beheben, denn dann 
kümmern sich 'die' darum. Und die machen das so gut, dass die Zeit zwar 
kurzfristig schon mal um +-20 oder 30 Sekunden daneben sein kann, über 
die Jahre gesehen aber die Abweichung fast bei 0 bleibt. Sprich: "die" 
steuern die Netzfrequenz aktiv gegen. Hat sich der Zeitfehler 
aufsummiert, dann wird die Netzfrequenz ein klein wenig abgesenkt und 
umgekehrt.

Die andere Frage: Wieviele und welche Pins hast du denn noch frei? Eine 
Uhr, die man nur Stellen kann, indem man ein Programm compiliert ist 
doch auf Dauer ein Unding. DCF-77 hin oder her. Und um Vergleich zum DCF 
ist die Integration von ein paar Tasten relativ simpel, sofern man ein 
paar Pins frei hat.

DCF-77 ist dann noch das Sahnehäubchen oben drauf. Sozusagen die Kür. 
Aber erst mal muss die Pflicht stimmen.

: Bearbeitet durch User
von afroman (Gast)


Lesenswert?

Wie wärs den mit ner externen RTC + Pufferbatterie? z.b. DS1307?

von Karl H. (kbuchegg)


Lesenswert?

Was steckt eigentlich da
1
      seg1[min%10]();
2
      seg2[min/10]();
3
      seg3[stund%10]();
4
      seg4[stund/10]();
für eine Teufelei dahinter?

Du wirst doch nicht eine Tabelle mit Funktionszeigern gemacht haben?
Ich meine: klar, kann man so machen. Aber das geht sicher auch 
wesentlich einfacher und in einem Bruchteil des Codes, den die ganzen 
Funktionen verbrauchen.

: Bearbeitet durch User
von Julian S. (julli_s)


Lesenswert?

Also schonmal danke für die rege beteiligung =)

Das ableiten des 50Hz Signals halte ich für unnötig, ich habe ja schon 
ein recht genauen taktgeber.
Ein Puffer Akku ist das kleinste Problem, das ist eh in planung und muss 
nur noch eingelötet werden. Die Tasten würde ich gern weglassen, 
zumindest im Moment brauche ich die nicht, da ich die Uhr nur allein 
benutze und noch kein Vertrieb geplant ist ^_^
Zumal soll diesen part ja der DCF empfänger erledigen, worum es mir ja 
hauptsächlich in diesem thread geht ;)
Ich habe auch schon an dieses Teil hier gedacht, das wäre doch mit 
sicherheit einfach zu implementieren oder?
http://www.robotikhardware.de/download/DCF_RS1.pdf

von Marc P. (marcvonwindscooting)


Lesenswert?

Mir will nicht in die Birne, warum du einen Microcontroller verheizt, um 
die LEDs anzusteuern und genau der das DCF77 nicht decodieren k"onnen 
soll????????
Ist doch komplizierter den Output von dem Modul zu interpretieren, als 
DCF77 direkt zu decodieren!! Und Empf"anger ist da keiner drin, schon 
klar, oder?

Der Microcontroller ist doch vollkommen im Leerlauf, den k"onntest Du 
mit 20kHz takten und die Rechenpower w"urde immer noch reichen. Ausser 
nat"urlich man fackelt alles mit busy waits ab. Das kriegt man aber auch 
auf einem Quadcore mit 4GHz hin!

Du hast dir M"uhe gegeben mit der Hardware.
ABER: Willst Du ein Arzt sein, der nichts von Chemie versteht? Ein 
Schreiner, der nichts von Schrauben versteht und daher nur N"agel 
verwendet? Ein Vater der nur ... kann, aber nichts von Erziehung 
versteht?
Wenn Du nur Hardware machen kannst, dann lass den Mikrocontroller raus.
Meinst du, dass (irgend-)ein DCF77-Decoder von der Stange zuf"allig 
genau das Bitmuster f"ur deine LEDs ausgibt, das Du gerne h"attest? Echt 
jetzt, oder?

Auch wenn's hier im Forum zig Leute gibt, die dein Problem in max. 2h 
gel"ost haben, wird's keiner tun, denn du bist lern- und 
beratungsresistent und das macht nicht sympathisch. Dein Problemchen ist 
Kinderkram. Eine tolle Einstiegs"ubung. Nutze sie!
Jetzt musst Du dir M"uhe geben mal die ALLEREINFACHSTEN Konzepte von 
Programmierung zu verstehen. Der Microcontroller hat's verdient. Die 
vielen sch"onen LEDs auch. Sonst gilt:

Perlen vor die S"aue!

(Und du bist keine von den Perlen)

Mann, Mann, Mann!
Ich kann's verstehen, wenn hier im Forum immer mal wieder einer 
ausflippt.

: Bearbeitet durch User
von kopfkratzer (Gast)


Lesenswert?

kopfkratz
Tja nun das Karlheinz noch nicht auf die Tutorials und Codesammlung 
"genaue Zeit in Sekunden" von PeDa z.B. verwiesen hat wundert mich ja 
schon bissle :-P
Taster für Einstellungen lassen sich ohne große Probleme via ADC und 
passenden Vorwiderständen realisieren, braucht einen ADC Pin.
Taktgeber kannst Du einen Quarzoszillator nehmen, genug Platz hast Du 
noch und brauchst auch nur einen Pin.
Also wenn Du noch zwei Pins übrig hast, einen mit ADC und den ClockIn 
für den Quarzoszillator dann baue das so um.
Dann gehst Du mal das AVR Tutorial durch, vor allem Timer, ADC und IRQs 
!
Wenn Du dann mit dem Käfer selber eine ungefähre Sekunde hinbekommen 
hast schaust Du Dir PeDas Lösung mal genau an und überlegst wie Du das 
ganze pro Minute mit Deinem DCF77 abgleichst.
Was anderes macht keine DCF77 Uhr ;-)

von Karl H. (kbuchegg)


Lesenswert?

kopfkratzer schrieb:
> *kopfkratz*
> Tja nun das Karlheinz noch nicht auf die Tutorials und Codesammlung
> "genaue Zeit in Sekunden" von PeDa z.B. verwiesen hat wundert mich ja
> schon bissle :-P

Ich war versucht. Aber als ich das 'Programm' gesehen habe, hab ich mir 
gedacht: lass mal. Es gibt noch eine einfachere Lösung und da er doch 
eher der Hardware Mensch ist ....

> Taster für Einstellungen lassen sich ohne große Probleme via ADC und
> passenden Vorwiderständen realisieren, braucht einen ADC Pin.

Im Minimalfall hab ich mir überlegt, bräuchte er genau 2 Taster. NIcht 
mehr. Und wie man die für Eingaben einsetzt, ... da hätten wir ihn schon 
durchgekriegt. Auch ohne PeDa Entprellung, mit einem kleinen 
_delay_ms(20) in der Hauptschleife, wäre das Einstellen der Uhr gar 
nicht mal so unkomfortabel geworden. Denke ich mal.

Aber: ist doch alles egal. Er hat sich DCF in den Kopf gesetzt, also 
soll er auch DCF kriegen. Wenn er meint. Mit dem Spazial-Ic geht das 
doch ohnehin so einfach. Ja, gut. Dann mach mal.



Kopfschüttel. 30 Sekunden im Monat. Wenn meine Netz-Uhr in 3 Jahren 30 
Sekunden Abweichung hat, dann mach ich schon Sorgen und seh nach, was 
beim Schätzeisen nicht stimmt.

: Bearbeitet durch User
von Julian S. (julli_s)


Lesenswert?

So, bitte nochmal zurück zum Thema.
Ich habe schon mal eingesehen, dass der externe Taktgeber eine schlechte 
lösung ist.
Hab mich also umgeschaut wie man es anders machen kann und bin dabei 
darauf gestoßen:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Die_Timer_und_Z%C3%A4hler_des_AVR#Timer2_im_Asynchron_Mode
Der Code sieht in meinen Augen sehr übersichtlich aus und damit würde 
ich es bestimmt auch selbst hinbekommen. Nun die Frage, funktioniert das 
mit meinem Atmega16A?
Hab den Code schonmal versucht in avr-studio zu compilieren, da fehlen
-GTCCR undeclared
-TSM
-PSRASY
-....
fehlt da ne libary oder muss ich die selbst deklarieren..?
Das ist bestimmt wieder irgendein totaler Basiswissen fehler, aber ich 
weiß es halt nich besser..  google liefert leider auch keine antwort zu 
dem thema..
Könnte mir dazu bitte jemand eine hilfreiche antwort geben =/ ?

von Julian S. (julli_s)


Lesenswert?

Hab jetzt durch rumprobieren und ewigem googlen den Programmcode 
Compilier-fähig.
Ist nur die Frage ob er auch das macht, was er soll.
kann mir da jemand eine Prognose geben?
Der 32,768 Quarz kommt erst morgen mit der Post.
1
//Variablen für die Zeit
2
volatile unsigned int sekunde;
3
volatile unsigned int minute;
4
volatile unsigned int stunde;
5
 
6
int main(void)
7
{
8
  // Timer 0 konfigurieren
9
  GTCCR |= (1 << TSM) | (1 << PSRASY);  //Timer anhalten, Prescaler Reset
10
  TCCR2 = (1 << WGM21);                //CTC Modus
11
  TCCR2 |= (1 << CS21) | (1 << CS21);  //Prescaler 256
12
  // 32768 / 256 / 1 = 128                Intervall = 1s
13
  OCR2 = 128 - 1;
14
  ASSR |= (1 << AS2);                   //Asynchron Mode einschalten
15
  TIMSK |= (1<<OCIE2);                //Enable Compare Interrupt
16
  GTCCR &= ~(1 << TSM);                 //Timer starten
17
  sei();                                //Enable global Interrupts
18
 
19
  while(1)
20
  {
21
    /*Hier kann die aktuelle Zeit
22
      ausgeben werden*/
23
  }
24
}
25
 
26
/*
27
Der Compare Interrupt Handler 
28
wird aufgerufen, wenn 
29
TCNT2 = OCR2A = 128-1 
30
ist (128 Schritte), d.h. genau alle 1s
31
*/
32
ISR (TIMER2_COMPA_vect)
33
{
34
    TCCR2 = TCCR2;              //Wird weiter unten im Text erklärt!
35
    sekunde++;
36
    if(sekunde == 60)
37
    {
38
      minute++;
39
      sekunde = 0;
40
    }
41
    if(minute == 60)
42
    {
43
      stunde++;
44
      minute = 0;
45
    }
46
    if(stunde == 24)
47
    {
48
      stunde = 0;
49
    }
50
    // Wird weiter unten im Text erklärt!
51
    while(ASSR & ((1<<TCN2UB) | (1<<OCR2UB) |
52
                  (1<<TCR2UB)));
53
}

von kopfkratzer (Gast)


Lesenswert?

kopfkratz
Also erstmal zwei Grundregeln bei µC Programmierung:
1. Datenblatt holen, LESEN und VERSTEHEN !
2. Top-Down designen, also bevor man irgendwas hackt erstmal auf Papier 
einen Ablaufplan o.ä. machen.
Solange Du Deinen Uhrenquarz noch nicht hast nimm Dir ein Blatt Papier 
und schreibe Dir auf was in Deinem µC passieren muß damit Du eine genaue 
Sekunde bekommst.
Dafür brauchst Du auch das Verständnis was Du tust und wie der Timer 
funktioniert.
Du solltest auch ein C Buch haben bzw. im Netz gute Tutorials o.ä. 
kennen.
Viele Abfragen und gar eine while Schleife in einer ISR sind murks.
Zähle einfach die Sekunden hoch und wenn die 60 erreicht ist die Minuten 
danach Stunden, z.B. so:
1
if(!((sek++)%60))
2
 if(!((min++)%60))
3
   (std++)%24;
Wenn Du mir nun erklären kannst was der Code tut hast Du schonmal etwas 
gelernt ;-)

von Karl H. (kbuchegg)


Lesenswert?

kopfkratzer schrieb:

> Viele Abfragen und gar eine while Schleife in einer ISR sind murks.

An der Stelle übertreibst du.
Das wird im Object COde auch nicht langatmiger als deine kompremierte 
Version. Ganz im Gegenteil: deine ist durch die Modulo Rechnung höchst 
wahrscheinlich im Worst Case sogar langsamer. Ok, er hätte die if 
ineinander schachteln können, aber die 3 Abfragen von 3 uint8_t, von 
denen 2 die meiste Zeit unnütz sind, machen das Kraut auch nicht fett.


Vom Rest drummherum weiß ich zu wenig, als das ich mich da äussern will. 
Ich hab noch nie selber den Timer 2 asynchron mit einem 32kHz Quarz 
getaktet. Die while Schleife in der ISR kommt mir allerdings dann doch 
etwas seltsam vor. Wozu die gut sein soll, kann ich mir beim besten 
Willen nicht vorstellen - selbst wenn ich mir im Datenblatt die 
entsprechenden Bits nicht rausgesucht habe.

: Bearbeitet durch User
von Julian S. (julli_s)


Lesenswert?

Öhm, das ist ein Codebeispiel aus dem verlinkten tut. Es geht mir nicht 
darum, wie gut oder schlecht das ist, solange es funktioniert.
Außerdem sieht das in meinen augen sehr übersichtlich aus und das ist 
mir im moment wichtiger als die "Kompaktheit".

die while schleife ist dafür: (bin mir nicht sicher, ob ich die wirklich 
brauche)
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Die_Timer_und_Z%C3%A4hler_des_AVR#Wenn_er_die_Minute_in_20s_schafft

: Bearbeitet durch User
von Wolfgang-G (Gast)


Lesenswert?

Eigentlich werden Taster zum Stellen der Uhr nicht benötigt, da man das 
DCF-77 -Signal decodiert und die Uhr damit stellen kann.
Da bereits ein Taktgeber  vorhanden ist, muss man die Uhr doch nur noch 
mit der DCF-77  Zeit synchronisieren.
Vorteilhaft hat sich bei mir erwiesen, wenn man 2 hintereinander 
liegende Zeiten vergleicht und nur dann die DCF-77 Zeit übernimmt, wenn 
sich beide Zeiten um eine Minute unterscheiden.

von kopfkratzer (Gast)


Lesenswert?

Karl Heinz schrieb:
> Ganz im Gegenteil: deine ist durch die Modulo Rechnung höchst
> wahrscheinlich im Worst Case sogar langsamer.

Hast Du eigentlich meinen letzten Satz mit dem Smiley gelesen ;-)
Und ich glaube kaum das der Compiler wegen dem Modulo einen viel 
langsameren Code generiert.

Julian Schäfer schrieb:
> Öhm, das ist ein Codebeispiel aus dem verlinkten tut. Es geht mir nicht
> darum, wie gut oder schlecht das ist, solange es funktioniert.

Das ist Dein Problem, Du beschäftigst Dich nicht mit dem µC sondern 
kopierst Dinge die Du nicht verstehst.
Damit fährst Du sehr schnell so dolle gegen die Wand das die Vöglein 
lange zwitschern :-P

Wolfgang-G schrieb:
> Eigentlich werden Taster zum Stellen der Uhr nicht benötigt, da man das
> DCF-77 -Signal decodiert und die Uhr damit stellen kann.

Ja das kannst Du tun aber was ist mit dem TO ?
Es geht hier eher darum einen "Hardwaremenschen" auf die Tücken der 
Softwareentwicklung einzustellen und ihm zu helfen zu verstehen was er 
tut.

von Karl H. (kbuchegg)


Lesenswert?

kopfkratzer schrieb:
> Karl Heinz schrieb:
>> Ganz im Gegenteil: deine ist durch die Modulo Rechnung höchst
>> wahrscheinlich im Worst Case sogar langsamer.
>
> Hast Du eigentlich meinen letzten Satz mit dem Smiley gelesen ;-)
> Und ich glaube kaum das der Compiler wegen dem Modulo einen viel
> langsameren Code generiert.

Und um ehrlich zu sein: In dieser Applikation wärs mir auch wurscht.
Ich  hatte  nur das Gefühl, dass du ihn hier bei diesem Punkt etwas zu 
hart rangenommen hast.
Da wusste ich allerdings auch noch nicht, dass der gepostete Code 1:1 
aus dem AVR-gcc-Tutorial stammt :-)


Hast du Erfahrung mit dem Timer 2 im asynchron Modus? Die im Tutorial 
angegebene Begründung für den zusätzlichen Code kommt mir etwas 
hahnebüchern vor. Im Datenblatt wird darauf eingegangen. Allerdings im 
Zusammenhang mit dem Sleep, aus dem der µC nicht aufwachen würde, wenn 
man nicht auf das Zurücksetzen des Interrupt-Systems warten würde. 
Davon, dass es mit dem Interrupt-Flag selbst irgendwelche Probleme geben 
würde, ist im Datenblatt (des Mega16) kein Sterbenswörtchen zu lesen. 
Das wäre auch unlogisch, denn genau dasselbe Problem würde auftreten, 
wenn man den Timer (irgendeinen der Timer) synchron mit einem der 
größeren Prescaler betreiben würde. D.h. der Code in der ISR hat seine 
Berechtigung. Aber die Begründung dafür glaub ich erst, wenn ich das 
selbst mal gemacht habe oder wenn mir jemand glaubhaft versichert, dass 
die korrekt ist.

von Julian S. (julli_s)


Lesenswert?

Soo.
Weitergeholfen hat mir dieser Thread nicht im geringsten, allerdings 
läufts jetzt auch ohne eure Hilfe. Also nochmal danke dafür ;)

Hier die vorerst fertige v2.0 mit implementiertem DCF77 empfang.

http://youtu.be/Hqx4a2ULyOs

von Julian S. (julli_s)


Lesenswert?

http://youtu.be/SGlNTtPLA60
hier der neue link..

von Jobst M. (jobstens-de)


Lesenswert?

Julian Schäfer schrieb:
> Ich habe bereits einen DCF77 Empfänger von Conrad am INT0 Pin allerdings
> ist dieser noch nicht implementiert.

Ich hoffe, dass Du nicht auch noch auf die Idee kommst, diesen 
tatsächlich mit der Interruptfunktionalität des Pins auszuwerten ...


Gruß

Jobst

von Jobst M. (jobstens-de)


Lesenswert?

Julian Schäfer schrieb:
> Weitergeholfen hat mir dieser Thread nicht im geringsten,

Scheint, als hätte Marc recht gehabt:

Marc P. schrieb:
> denn du bist lern- und beratungsresistent


> allerdings läufts jetzt auch ohne eure Hilfe. Also nochmal
> danke dafür ;)

?

von Karl H. (kbuchegg)


Lesenswert?

Jobst M. schrieb:
> Julian Schäfer schrieb:
>> Weitergeholfen hat mir dieser Thread nicht im geringsten,
>
> Scheint, als hätte Marc recht gehabt:

Finde ich nicht unbedingt.
Wenn er es alleine hin gekriegt hat, dann hat er auf jeden Fall etwas 
dabei gelernt.
Und das war ja dann auch einer der Zwecke der Übung.
Denn seien wir uns mal ehrlich. Das da oben im ersten Posting ist 
wahrlich nicht das gelbe vom Ei. Es ist eher sogar ziemlich weit davon 
entfernt.

: Bearbeitet durch User
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.