witam!
Musze dosc precyzyjnie odmierzac czas (1ms)
dysponuje ATmega 32 z zewnetrznym kwarcem 8Mhz...
ustawilem sobie preskaler timmera na 8 ( czyli stuka sobie z f= 1Mhz)
teoretycznie powinno byc dobrze... ale w praktyce pomiar spoznia mi sie o 3sec. na minute ( ???!!!) juz nie wiem co robie nie tak...
jesli ktos moze spojrzec bylbym wdzieczny...
Poprawiłem tytuł:
https://www.elektroda.pl/rtvforum/topic1015361.html
[c_p]
Musze dosc precyzyjnie odmierzac czas (1ms)
dysponuje ATmega 32 z zewnetrznym kwarcem 8Mhz...
ustawilem sobie preskaler timmera na 8 ( czyli stuka sobie z f= 1Mhz)
teoretycznie powinno byc dobrze... ale w praktyce pomiar spoznia mi sie o 3sec. na minute ( ???!!!) juz nie wiem co robie nie tak...
jesli ktos moze spojrzec bylbym wdzieczny...
#include <inttypes.h>
#include <avr/io.h>
#include <stdio.h>
#include <stdlib.h>
#include <avr/iom32.h>
#include <avr/interrupt.h>
#include <string.h>
#include <avr/eeprom.h>
#include <avr/pgmspace.h>
#include "delay.h"
#include "lcd.h"
#define rf_in PD2 //wejscie na odbiornik
#define rf_out PD3 //wyjscie na nadajnik
#define led1 PB0//dioda LED
#define led2 PB1//dioda LED
#define led3 PB2//dioda LED
#define button1 PC5//przycisk1
#define button2 PC6//przycisk2
#define button3 PC7//przycisk3
//definicje zmiennych
uint8_t bit,bajt; // odebrane bity i bajty
int dms, ms, ds, s, ks;
char buf[256];
int aa, bb, cc;
SIGNAL(SIG_OVERFLOW0)
{
aa++;
}
SIGNAL(SIG_INTERRUPT0)
{
}
SIGNAL(SIG_OVERFLOW1)
{
bb++;
}
SIGNAL(SIG_INTERRUPT1)
{
}
SIGNAL(SIG_OVERFLOW2)
{
TCNT2=0x9C; // 156 = 9C
cc++;
}
SIGNAL(SIG_INTERRUPT2)
{
}
int main(void)
{
//ustawienia portów
PORTA=0x00;
DDRA=0xFF;
PORTB=0xff;
DDRB=0xFF;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x10;
PORTD=0x00;
TCCR0=0x02; //2 4=preskaler 256
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0x00;
TCCR1B=0x02; // 02 = podzial przez 8
TCNT1H=0x00;
TCNT1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x02;
TCNT2=0x00;
OCR2=0x00;
GICR|=0x40;
MCUCR=0x03; //3 zbocze narastajace INT0 generuje przerwani
MCUCSR=0x00;
GIFR=0x40;
LCD_init();
LCD_xy (0,0);
GIMSK |=_BV(6);//odblokowanie przerwania INT0
GICR |=_BV(6);
TIMSK=0x45;
sei();
TCNT0=0x00;
TCNT1=0x00;
TCNT2=0x00;
dms=0;
while(1){
if(cc>99){
++ms;
cc=0;
}
if(ms>99){
++ds;
ms=0;
++s;
}
LCD_xy(0,1);
sprintf(buf,"czas :%03d ",s);
LCD_putstr(buf);
}//koniec while(1)
}//end main
Poprawiłem tytuł:
https://www.elektroda.pl/rtvforum/topic1015361.html
[c_p]