Go Down

Topic: Binäre DCF77 Uhr mit exponentiellem Filter und Blinkenlighty (Read 20386 times) previous topic - next topic

michael_k

Hi Udo,

ging schneller als ich dachte:
Ohne digitalWrite(dcf77_sample_pin, HIGH); im setup bekomme ich ein Signal:
Code: [Select]
---------+---------+---------+----1XXXXXXXXXX----+---------+---------+---------+---------+---------
       11, +---------+---------+---------+----3XXXXXXXXXX1---+---------+---------+---------+---------+---------
       12, +---------+---------+---------+-----8XXXXXXXXX----+---------+---------+---------+---------+---------
       13, +---------+---------+---------+-----7XXXXXXXX9----+---------+---------+---------+---------+---------
       14, +---------+---------+---------+----3XXXXXXXXX8----+---------+---------+---------+---------+---------
       15, +---------+---------+---------+----1XXXXXXXXXXXXXXXXXXXX2---+---------+---------+---------+---------
       16, +---------+---------+---------+----2XXXXXXXXXXXXXXXXXXXX2---+---------+---------+---------+---------
       17, +---------+---------+---------+-----8XXXXXXXXXXXXXXXXXXX1---+---------+---------+---------+---------
       18, +---------+---------+---------+----2XXXXXXXXXX3---+---------+---------+---------+---------+---------
       19, +---------+---------+---------+-----XXXXXXXXXX1---+---------+---------+---------+---------+---------
       20, +---------+---------+---------+-----XXXXXXXXXX1---+---------+---------+---------+---------+---------
       21, +---------+---------+---------+----4XXXXXXXXXX1---+---------+---------+---------+---------+---------
       22, +---------+---------+---------+-----9XXXXXXXXX2---+---------+---------+---------+---------+---------
       23, +---------+---------+---------+-----7XXXXXXXXX2---+---------+---------+---------+---------+---------
       24, +---------+---------+---------+----4XXXXXXXXXXXXXXXXXXXX----+---------+---------+---------+---------
       25, +---------+---------+---------+----1XXXXXXXXXX----+---------+---------+---------+---------+---------
       26, +---------+---------+---------+-----9XXXXXXXXX----+---------+---------+---------+---------+---------
       27, +---------+---------+---------+-----XXXXXXXXXX2---+---------+---------+---------+---------+---------
       28, +---------+---------+---------+----4XXXXXXXXX9----+---------+---------+---------+---------+---------
       29, +---------+---------+---------+-----XXXXXXXXX9----+---------+---------+---------+---------+---------
       30, +---------+---------+---------+-----9XXXXXXXXXXXXXXXXXX7----+---------+---------+---------+---------
       31, +---------+---------+---------+----1XXXXXXXXXXXXXXXXXXX9----+---------+---------+---------+---------
       32, +---------+---------+---------+----4XXXXXXXXXXXXXXXXXXX9----+---------+---------+---------+---------


Jetzt lass ich das mal ne Stunde laufen auf dem Arduino Micro.
Den Timer Code hab ich aus der MsTimer2 lib entnommen (und etwas an deinen Code angepasst):
Code: [Select]
#elif defined (__AVR_ATmega32U4__)
ISR(TIMER4_OVF_vect) {
    process_one_sample();
}

void initTimer2() {
  float prescaler = 0.0;
  int tcnt2;
TCCR4B = 0;
TCCR4A = 0;
TCCR4C = 0;
TCCR4D = 0;
TCCR4E = 0;
if (F_CPU >= 16000000L) {
TCCR4B = (1<<CS43) | (1<<PSR4);
prescaler = 128.0;
} else if (F_CPU >= 8000000L) {
TCCR4B = (1<<CS42) | (1<<CS41) | (1<<CS40) | (1<<PSR4);
prescaler = 64.0;
} else if (F_CPU >= 4000000L) {
TCCR4B = (1<<CS42) | (1<<CS41) | (1<<PSR4);
prescaler = 32.0;
} else if (F_CPU >= 2000000L) {
TCCR4B = (1<<CS42) | (1<<CS40) | (1<<PSR4);
prescaler = 16.0;
} else if (F_CPU >= 1000000L) {
TCCR4B = (1<<CS42) | (1<<PSR4);
prescaler = 8.0;
} else if (F_CPU >= 500000L) {
TCCR4B = (1<<CS41) | (1<<CS40) | (1<<PSR4);
prescaler = 4.0;
} else {
TCCR4B = (1<<CS41) | (1<<PSR4);
prescaler = 2.0;
}
tcnt2 = (int)((float)F_CPU * 0.001 / prescaler) - 1;
OCR4C = tcnt2;
        TIFR4 = (1<<TOV4);
TCNT4 = 0;
TIMSK4 = (1<<TOIE4);
}
#endif

Udo Klein

Die Timer2 Lib funktioniert nicht mit meiner Uhr. Problem ist, daß die Lib einen Bug hat der zu Gangabweichungen führt die die Uhr dann nicht einrasten lassen. Ich habe den Autor der Lib angeschrieben, der hat den Fehler aber bis heute nicht behoben. Wenn Du meinen Code verwenden willst solltest Du meine Implementation auf Deinen Controller anpassen. Außer Du nimmst den einfachen Code mit dem expoentiellen Filter. Bei dem ist das OK.
Check out my experiments http://blog.blinkenlight.net

Codeman

Hiho,

alter Thread, aber egal.

ich habe Probleme mit dem Modul von Reichelt. Habe gestern eine Transistor-Stufe nachgeschaltet, damit der Arduino ueberhaupt was erkennt. Jetzt kommt zwar was an, aber ich habe permanent parity-erros. Ich werde es mal mit dem DCF-Filter probieren.

Gruss, Holger
Perl is the only language that looks the same before and after RSA encryption.

Go Up