DCF-Fehlerkorrektur, vorab- Binrversion zum Testen

Hinweise:
=========

1) Die Objekte passen zu avr-gcc und avr-binutils (elf32-avr)

2) Die Objekte sind erzeugt fr avr4: FLASH <= 8k und movw / mul
   Fr AVRs mit mehr als 8k FLASH sollte das Zeug auch gehen,
   wenn das gesamte Programm 8k nicht berschreitet
   
3) Die Objekte (*.o) werden einfach dem Linker mitgegeben   

4) Vosicht bei make, es lscht gerne o-Dateien
   
5) Du musst eine globale Funktion

       void uart_putc (char)
       
   implementieren. Diese Funktion wird aufgerufen, um ASCII Zeichen auszugeben.
   Du kannst dann in der uart_putc() die Zeichen ausgeben oder per
   UART verschicken oder schlicht garnix tun.
   
6) Du musst beim Compilieren Deiner eigenen Module folgende 
   Optionen an avr-gcc geben:
   -ffixed-2 -ffixed-3 -ffixed-4 -ffixed-5
   
7) Du includest in Deinen Quellen die Header.    
   
7) Alle 10ms rufst Du folgende Funktion auf (*nicht* aus einer ISR!):

      void dcf_eval_sample (uint8_t sample)
      
   Bei abgesenktem DCF-Trger (Sekunden-Anfang) gibst Du der Funktion
   eine 0, ansonsten eine 1.
   Genauer gesagt: Die Funktion muss nicht alle 10ms aufgerufen werden;
   es gengt, wenn die Samples im 10ms-Abstand gewonnen wurden.
   
8) Die Module fassen keine SFRs an

9) Die Module implementieren keine ISRs

10) Die Module blockieren keine IRQs

10a) Die Module belegen kein EEPROM

11) Ausgaben in ASCII: Freittext sowie
    0: Bit 0
    1: Bit 1
    .: Bit unbekannt
    #: Minuten-Marke
    
12) Ergebnisse kannst Du in der Struktur dcf_ec abholen
    Ist dcf_ec.time_updated == 0 oder ein Wert gleich 0xff bzw. 255,
    dann ist dieser Wert unbekannt.

	dcf_ec.time.minute : Minute
	dcf_ec.time.hour   : Stunde
	dcf_ec.time.day_of_week : Wochentag  // 1=MO ... 7=SO
	dcf_ec.time.day    : Tag
	dcf_ec.time.month  : Monat
	dcf_ec.time.year   : Jahr % 100
    
    Parity-Bits: Werden berechnet, aber nicht abgetestet.
    Bei unbekanntem Wert der zugehrenden Zeit-Komponente(n)
    hat das jeweilige Parity undefinierten Inhalt.
    
	dcf_ec.time.flags.parity_M : Minuten-Parity
	dcf_ec.time.flags.parity_H : Stunden-Parity
	dcf_ec.time.flags.parity_D : Datums-Parity
	dcf_ec.time.flags.parity_Z : Z-Parity
	
   Status-Info:
   
	dcf_ec.time_updated: Wird auf 1 gesetzt, wenn dcf_ec.time 
		verndert wurde.
		Wenn der Wert 0 ist, ist dcf_ec.time undefiniert.
		Es wird nur gesetzt, nicht rckgesetzt (kannst Du machen).
		
	dcf_ec.synced_sec: Sekunden sind synchronisiert	
	dcf_ec.synced_min: Minuten  sind synchronisiert	

13) Statischer Resourcen-Verbrauch:

  0x250	    0x0	    0x0	    592	    250	dcf-ec-asm.o
  0x69f	    0x0	  0x149	   2024	    7e8	dcf-ec.o
  0x216	    0x2	   0x12	    554	    22a	uput.o

14) Das beiliegende main.c Programm kann zB so bersetzt werden:
    
        avr-gcc -mmcu=atmega8 -Os main.c -ffixed-2 -ffixed-3 -ffixed-4 -ffixed-5 dcf-ec.o dcf-ec-asm.o uput.o -o main-dcf.elf
        avr-objcopy -j .text -j .data  -O ihex main-dcf.elf main-dcf.hex


14) Viel Spa!

Georg-Johann Lay

georgjohann@web.de
