Siedzę już nad tym kilka dni i nie mogę sobie z tym poradzić.
Czy da radę uzyskać taki mnożnik przy takim zakresie częst. wej.?
Stworzyłem coś takiego ale nie za bardzo to działa
Kod: Zaznacz cały
/*****************************************************
Chip type : ATmega8L
Program type : Application
Clock frequency : 8,000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*****************************************************/
#include <mega8.h>
unsigned int licznik=0, ovf=0;
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
TCCR0 = 0x00;
licznik = TCNT0 + (ovf*255);
TCNT0 = 0;
TCCR0 = 0x05;
ovf = 0;
licznik = licznik/39;
if (licznik<1) licznik=1;
}
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
ovf++;
}
// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
}
// Timer 2 overflow interrupt service routine
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
PORTB.3 = !PORTB.3;
TCNT2 = 0xFF - licznik;
}
void main(void)
{
// Input/Output Ports initialization
// Port B initialization
PORTB=0x00;
DDRB=0x08;
// Port C initialization
PORTC=0x00;
DDRC=0x00;
// Port D initialization
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
TCCR0=0x05;
TCNT0=0x00;
// Timer/Counter 1 initialization
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
ASSR=0x00;
TCCR2=0x07;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
GICR|=0x40;
MCUCR=0x03;
GIFR=0x40;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x41;
// Analog Comparator initialization
ACSR=0x80;
SFIOR=0x00;
// Global enable interrupts
#asm("sei")
while (1)
{
};
}