PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Genauen Sekunden Takt



DeltaEx
22.01.2007, 15:41
Hallo Leute,

ich wollte mit dem Asuro ... Also AtMega8 mit dem Timer0 einen genauen Sekunden takt erzeugen ... doch irgendwie ist es nicht eine Sekunde.

Kann mir einer sagen was falsch ist? Ist das LED togglen der LEDs in dem Overflow zu langsam? Wir der deshalb Overflow von den LEDs gestört?


Und irgendwie erkennt er nicht das ich das Zeichen "t" mit Hyper terminal schicke.


Danke für die Hilfe.


Code:



#include <string.h>

#include "asuro.h"


unsigned char sec_count=0;
char toggle=0;

//Clock variablen
unsigned char ss=0;
unsigned char mm=0;
unsigned char hh=0;


SIGNAL(TIMER0_OVF_vect)
{
sec_count++;

if(sec_count==250)
{
ss++;
if(ss==60)
{
mm++;
ss=0;
if(mm == 60)
{
hh++;
mm=0;
if(hh==24)
{
hh=0;
}
}
}
sec_count=0;
if(toggle == 0)
{
toggle=1;
BackLED(ON,OFF);
}
else
{
toggle=0;
BackLED(OFF,ON);
}
}

TCNT2=131;
}


void init_clock()
{
TCCR0 |= (1 << CS02);
TIMSK |= (1 << TOIE0);

TCNT2 = 131;

}

void setTime(unsigned char s_hh, unsigned char s_mm, unsigned char s_ss )
{
hh = s_hh;
mm = s_mm;
ss = s_ss;
}


int main(void)
{
unsigned char data;
char time_string[40]= {"Time: "};
char tmp[5];


init_clock();
Init();
StatusLED(OFF);
SerWrite("\n\r Asuro Clock V1 \n\r",20);
while(1)
{
SerRead(&data,4,1);
//if( memcmp(&data,"time",4) == 0 )
if(data =='t')
{
strcat(time_string,itoa(hh,tmp,10));
strcat(time_string,":");
strcat(time_string,itoa(mm,tmp,10));
strcat(time_string,":");
strcat(time_string,itoa(ss,tmp,10));

strcat(time_string,"\r\n>");
SerWrite(time_string,20);
}

}
return 0;
}

Ronny10
22.01.2007, 16:18
Wenn du den Timer0 verwendest, solltest du auch den Reload-Wert in den Timer0 laden und nicht in den Timer2!.

>>>>>> TCNT2 = 131;

Gruß,Ronny10

DeltaEx
22.01.2007, 16:31
stimmt!! habs übersehen. Danke!