что-то я повис на, как казалось простой, задаче.... контролировать скорость вращения вала.
ДЛя тестов установил на одну из лопостей вентилятора магнитик постоянный, и прикрепил геркон, так чтобы он срабатывал при "пролёте" лопости с магнитом. Геркон замыкает землю черезе резистор и ножку порта А.
Контроллер не правильно считает число импульсов. И к тому же, скорость гуляет плюс/минус 10 оборотов.
Возможно дело в герконе, мол не успевает реагировать. Посоветуйте альтернативную схему датчика вращения вала.
приведу на всякий случай программку свою, может кто найдёт принципиальную ошибку:
- Код: Выделить всё • Развернуть
#include <io.h>
#include <delay.h>
#define F_CPU 8000000UL
#define PD_OUT DDRD = 0xFF
void initialization(void){
PD_OUT;
TCCR0 = 0x03;/*
}
int d,g, i, h ;
void main(){
initialization();
DDRD = 0xff;
DDRC = 0xff;
DDRA = 0x00;
d=0;
PORTA=0xFF;
TCNT0=7;
while(1)
{
if (g==500) {g=0; PORTD=i; d++; i=0; }
if (PINA!=h) {i++;}
h=PINA;
g++;
while (!(TIFR&0x01));
TIFR=0x01; TCNT0=6;
}
}
при частоте 8 Мгц и делителе 64 таймер переполнятеся 500 раз в секунду, значит когда g=500 мы посчитали кол-во импульсов i за секунду.