Ich hab den Code auch nochmal ein wenig geändert, außerdem hab ich noch vergessen zu sagen, dass ich den invertierten DCF-Ausgang benutze.
Code:
#include <avr/io.h>
#define BAUD 9600UL
#include "../classes/rs232/UART/UART.h"
#include "../classes/time/time.h"
int main(void)
{
uint8_t i=0;
uint8_t c=0;
char dcf[60];
char buf[256];
buf[0]='\0';
dcf[0]='\0';
DDRC&=~(1<<PC0); //EINGANG PC0
DDRD|=(1<<PD5) | (1<<PD6);
PORTC|=(1<<PC0); //PULLUP aktivieren
uart_init();
i=0;
c=0;
while(1)
{
if(i<=59)
{
while((PINC & (1<<PC0)))
{
PORTD|=(1<<PD5);
PORTD&=~(1<<PD6);
_delay_ms(10);
c++;
}
PORTD&=~(1<<PD5);
PORTD|=(1<<PD6);
if(c>=8 && c<=23)
{
if(c<=10) //100msec == 0
{
dcf[i]='0';
}
if(c>10) //200msec == 1
{
dcf[i]='1';
}
c=0;
i++;
}
}
else
{
dcf[i]='\0';
send(dcf);
send("\r\n");
i=0;
}
}
return 0;
}
Mit dem Code erhalte ich nach ca. 3-4 Minuten recht anschauliche Werte. Zumindest, wurden einige Teile, wie zum Beispiel die Minuten korrekt interpretiert.
Gruß
cesupa
Lesezeichen