Mam następujący problem. Musze napisać program do zliczania obrotów na minutę na stanowisku laboratoryjnym. Ale ugrzęzłem w miejscu gdzie trzeba ustawić timer i napisać funkcje liczącą te impulsy. Sygnał mierzony pochodzi z czujników optycznych i jest to sygnał logiczny.
Program ma zliczać impulsy i wyświetlać prędkość obrotową na wyświetlaczu 4x20.
Na razie napisałem coś takiego:
Proszę o pomoc, bo musze to skończyć na wczoraj w
nie mam pojęcia jak to zrobić. Przejrzałem google wzdłuż i wszerz i nadal wiem, że nic nie wiem. Może ktoś jest mi w stanie wytłumaczyć to łopatologicznie.
Program ma zliczać impulsy i wyświetlać prędkość obrotową na wyświetlaczu 4x20.
Na razie napisałem coś takiego:
*********************************************************************/
#define F_CPU 1000000ul
#include <avr/io.h>
#include <util/delay.h>
//#include <avr/signal.h>
#include <avr/interrupt.h>
#include "HD44780.h"
#include "HD44780.c"
/***********************************************************************
Obsługa LCD 4x20
************************************************************************/
int main(void)
{
int a1=0;
int a2=0;
int a3=0;
int i;
char buffer1 [8],buffer2 [8],buffer3 [8];
DDRD= 0x20;
PORTD= 0x20;
DDRC= 0x00;
PORTC=0xff;
PORTC=PINC;
i=PINC;
itoa(a1,buffer1,10);
itoa(a2,buffer2,10);
itoa(a3,buffer3,10);
TCCR1B |= ((0<< WGM11)|(0<< WGM10));
TCCR1B |= ((1 << CS10) | (1 << CS11)); //Ustawia timer z preskalerem Fcpu/64
TCCR1B |= ((0<< WGM13)|(1<<WGM12));
MCUCR= (1<<ISC00) | (1<<ISC01);
TCNT1L= 0;
TCNT1H= 0;
LCD_Initalize(); //Inicjalizacja wyświetlacza
while (1)
{
LCD_GoTo(3,0); // LCD_GoTo(x,y)
LCD_WriteText("Tachometr v1.0"); //Wyświetlenie tekstu
LCD_GoTo(0,1);
LCD_WriteText("V1=");
LCD_GoTo(3,1);
LCD_WriteText(buffer1); //Wyświetlenie prędkości z czujnika 1
LCD_GoTo(17,1);
LCD_WriteText("rpm");
LCD_GoTo(0,2);
LCD_WriteText("V2=");
LCD_GoTo(3,2);
LCD_WriteText(buffer2); //Wyświetlenie prędkości z czujnika 2
LCD_GoTo(17,2);
LCD_WriteText("rpm");
LCD_GoTo(0,3);
LCD_WriteText("V3=");
LCD_GoTo(3,3);
LCD_WriteText(buffer3); //Wyświetlenie prędkości z czujnika 3
LCD_GoTo(17,3);
LCD_WriteText("rpm");
/*****************************************************************
Funkcja licząca impulsy
*****************************************************************/
while(1)
{
for(i=0;i>=TCNT1;i++)
{
a1= TCNT1;
TCNT1=0;
}
}
return(0);
}
}
Proszę o pomoc, bo musze to skończyć na wczoraj w
nie mam pojęcia jak to zrobić. Przejrzałem google wzdłuż i wszerz i nadal wiem, że nic nie wiem. Może ktoś jest mi w stanie wytłumaczyć to łopatologicznie.