witam chcę zrobić obrotomierz na atmega16 mający dwa wejścia, oraz kontaktujący się z PC przez rs232. Impulsy z przerwań są zliczane przez czas 1 sekundy a następnie przemnażane przez 60 i wyświetlane na wyświetlaczu. Po wyświetleniu chce je przesłać do PC, gdy to robię wartość pomiaru jest zaniżana na lcd oraz PC. Np z włączonym przesyłaniem prędkość wynosi 1770 obr/min(118 imp/sec), natomiast bez wynosi ona 1830 (122imp/sec) - na jeden obrót przypadają 4 impulsy. Z czego to wynika? jak wyeliminować stratę tych impulsów?
w main mam
kod nie jest napisany przezemnie i pochodzi z kursu
Link
void USART_init(unsigned int myubrr)
{
/* Ustala prędkość transmisji */
UBRRH = (unsigned char)(myubrr>>8);
UBRRL = (unsigned char)myubrr;
/* Włącza nadajnika */
UCSRB = (1<<TXEN);
/* Format ramki: 8 bitów danych, 1 bit stopu, brak bitu parzystości */
UCSRC = (1<<URSEL)|(3<<UCSZ0);
}
/* Wysyła znak do portu szeregowego */
static int USART_Transmit(char c, FILE *stream)
{
while(!(UCSRA & (1<<UDRE)));
UDR = c;
return 0;
}
/* Tworzy strumienia danych o nazwie 'mystdout' połączony
z funkcją 'USART_Transmit' */
static FILE mystdout = FDEV_SETUP_STREAM(USART_Transmit, NULL, _FDEV_SETUP_WRITE);
w main mam
USART_init(MYUBRR);
stdout = &mystdout;
kod nie jest napisany przezemnie i pochodzi z kursu
Link