Gast
#2847765
Hallo erstmal
Also zu meinem Problem I ich hab ein C programm für eine Uhr mit meinen
attiny 2313 geschrieben die formel ist doch
(4194304/256)/256 = 64 mal = 1sec
warum muss ich aber (4194304/256)/(256 * 8 ) = 16 mal = 1sec
/*
* LED_Display.c
*
* Created: 31.08.2012 18:47:22
* Author: Sausy
*/
#define XTAL 4194304
#define F_CPU XTAL
#define HIGH 1
#define LOW 0
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include "LED_Disp.h"
volatile int tc; // seconds counter
int overflow_c = 0;
ISR(TIMER0_OVF_vect) // 1 second clock
{ if(overflow_c < 16) //prescala = 256 max.vec = 256
overflow_c++; //(4194304/256)/256 = 64 mal = 1sec
if(overflow_c >= 16){ //für sec++
overflow_c = 0;
PORTB ^= (1<<PB1); //für DP togl
tc++;
}
if(overflow_c == 8)
PORTB ^= (1<<PB1); //für DP togl
}
int main(void)
{ int hr=9, min=0, sec=0; //set start time
inite_LED_D(); //inizalisiert LED display
DDRB &= ~(1<<PB0);
PORTB &= ~(1<<PB0);
DDRB |= (1<<PB1);
//----[ initialize timer1 ]---
TIMSK |= _BV(TOIE0); // erlaubt overflow interupt --
//aktiviert den overflow interrupt des timer1
TCCR0B |= (1<<CS02); // prescaler = 256
TCNT0 = 0x00;
sei();
while(1)
{
number_output (hr*100+min); // setz die Variablen
// für meinen Led display
{ sec=tc;
if (sec>=60)
{ tc=0; sec=0; min++;
if (min>=60)
{ min=0; hr++;
if (hr>=12) hr=0;
}
}
}
while (sec==tc) refresh(); //refrescht das bild
}
return(0);
}