Прошу помощи в написание алгоритма для спидометра.
Спидометр для скутра должен работать как велоспидометры, с той лишь разницей что вместо геркона я хочу использовать датчик холла.
Как правильней мерить скорость измерением частоты импульсов за одну секунду или измерением периода и пересчетом в скорость?
Написал два алгоритма, прошу строго не судить , я только начинаю АВРки изучать.
Для упрощение пока беру длинну окружности колеса 1 метр, потом пересчитаю
Алгоритм номер 1
Должен работать так
Таймер 1 переполняется каждую секунду, по прерыванию я забираю из счетчика таймера о значение, это частота импульсов, пересчитываю её в скорость.
В протеусе работает странно, к примеру если у меня частота с генератора 1 герц, то нормально считает 3.6 км/ч, если я ставлю дробное значение частоты, скажем 1.5 гц, то показание всё время меняются. Что это Глюк протеус?
$regfile = "m8def.dat"
$crystal = 16000000
$hwstack = 40
$swstack = 16
$framesize = 32
Dim S As Single ' Speed
Dim B As Byte ' Помещаем значение из Timer0
Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4
Reset Ddrb.1
Config Timer1 = Timer , Prescale = 256 ' Таймер должен переполнятся 1 раз в секунду
Config Timer0 = Counter , Edge = Falling ' Счетчик импульсов
Timer1 = 0
Enable Timer0
Start Timer0
On Timer1 Speed
Enable Interrupts
Enable Timer1
Timer1 = 3036 ' Таймер должен переполнятся раз в секуду
Cursor Off
Cls
Locate 1 , 1
Lcd "Test Line"
Wait 1
Cls
Do ' основной цикл
S = B * 36 ' скорость из частоты
S = S / 10
Locate 1 , 1
Lcd S
Loop
Speed:
Stop Timer0 ' Останавливая Таймер
B = Timer0 ' Забираю значение
Timer0 = 0 ' Обнуляю Таймер
Timer1 = 3036
Start Timer0
Return



