Приветствую Уважаемые форумчане. Недавно по просьбе знакомого автомоделиста ( скорее по желанию попробовать собрать что-то серьезное) начал разработку измеритель скорости. В чем заключается суть данного девайса. Модель автомобиля едет по кругу в произвольный момент времени (т. е. по желанию спортсмена) при нажатии на кнопку начинается отсчет определенного количества кругов. И после все этих процедур выводится финальный результат. Забыл упомянуть до нажатия на кнопку показывается скорость каждого круга. Так спортсменам легче определить лучший момент.
Добавлено after 28 minutes 52 seconds:
Выклыдываю проект в протеусе и собственно саму программу.
Добавлено after 23 minutes 22 seconds:
Схему в протеусе выложить не получается(не знаю почему, но скорей всего ограничение модератора) Попробую нарисовать .jpeg
Программу выложил. Если есть мысли как её ускорить, сделать более читаемой критика приветствуется(попрошу сильно не пинаться это моя 2я программа).
Измеритель скорости на ATMEGA8.
Измеритель скорости на ATMEGA8.
- Вложения
-
- Poligon.rar
- (26.33 КБ) 175 скачиваний
-
- AvtoSpeed_0.0.1.c
- (4.12 КБ) 495 скачиваний
Последний раз редактировалось Tuz Ср апр 05, 2017 08:30:28, всего редактировалось 1 раз.
- АлександрЛ
- Друг Кота
- Сообщения: 43813
- Зарегистрирован: Пн ноя 30, 2009 03:00:01
- Откуда: Нерезиновая
Re: Измеритель скорости на ATMEGA8.
Заархивируйте файл протеуса в *.rar или *.zip - тогда выложится..Tuz писал(а): Схему в протеусе выложить не получается(не знаю почему, но скорей всего ограничение модератора) Попробую нарисовать .jpeg .
Re: Измеритель скорости на ATMEGA8.
Можно уйти от магических чисел типаTuz писал(а):Программу выложил. Если есть мысли как её ускорить, сделать более читаемой критика приветствуется(попрошу сильно не пинаться это моя 2я программа).
Код: Выделить всё
TCNT1 = 57535;Код: Выделить всё
TCNT1 = -8000 ; 1мсКод: Выделить всё
TCNT1 = -F_CPU/1000; 1мсДумаю, что лучше задать режим работы таймера по сравнению с автосбросом и привязать к 1мс динамическую индикацию.
Код: Выделить всё
OCR1A=F_CPU/1000-1; 1мс
TCCR1B=ICES1+WGM12+CS10; CTC F_CPU/1Re: Измеритель скорости на ATMEGA8.
Спасибо за совет АлександрЛ. Проект в протеусе выложил.
Добавлено after 41 minute 38 seconds:
Отиличная мысль. Буду исправлять.
Если вы имеете в виду эту часть кода
return (uint16_t)(((float)50000/data)*3600);
то здесь после деления, результат умножается что бы вывести нужную часть числа из дробной части (Поскольку точка скорей всего будет включена постоянно). Что бы вывести деление из формулы нужно будет добавить переменную и добавить еще отдельную строку кода для умножения. Что то типа этого:
float temp;
temp = ((float)50000/data):
return (uint16_t)(temp*3600);
Больше ничего в голову не приходит. Результат по формуле выдается правильный.
Про динамическую индикацию думал, но не успел добратся
Добавлено after 41 minute 38 seconds:
Код: Выделить всё
или вообще уйти от привязки к частоте тактирования
ТCNT1 = -F_CPU/1000; 1мс Код: Выделить всё
Не нравится проведение расчёта скорости. Операция деления должна проводиться в последнюю очередь. Не думаю, что компилятор настолько продвинутый, что сам определяет порядок выполнения операций.return (uint16_t)(((float)50000/data)*3600);
то здесь после деления, результат умножается что бы вывести нужную часть числа из дробной части (Поскольку точка скорей всего будет включена постоянно). Что бы вывести деление из формулы нужно будет добавить переменную и добавить еще отдельную строку кода для умножения. Что то типа этого:
float temp;
temp = ((float)50000/data):
return (uint16_t)(temp*3600);
Больше ничего в голову не приходит. Результат по формуле выдается правильный.
Код: Выделить всё
Думаю, что лучше задать режим работы таймера по сравнению с автосбросом и привязать к 1мс динамическую индикацию.
OCR1A=F_CPU/1000-1; 1мс
TCCR1B=ICES1+WGM12+CS10; CTC F_CPU/1Re: Измеритель скорости на ATMEGA8.
Не понимаю в ваших кыржиках, но почему нельзя сделать так
Код: Выделить всё
3600*50000/dataRe: Измеритель скорости на ATMEGA8.
Эту формулу я скопировал с термометра. Подставил только свои значения. Но следуя вашей формуле умножение можно убрать совсем, оставив только деление.
Re: Измеритель скорости на ATMEGA8.
Именно так, объявив константой.
http://radiokot.ru/forum/viewtopic.php? ... 2#p2988312
http://radiokot.ru/forum/viewtopic.php? ... 2#p2988312