Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AVR. Программа тахометра
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Serega_0180
Приветствую всех. Вопрос к знающим. Начал писать первую серьезную (для меня, т.к. зашел в тупичек) программу. Задумал сделать тахометр на "копейку". Взял за основу программу частотомера. Программа должна выводить значения частоты вращения двигателя на линейку светодиодов. Чем больше частота вращения, тем больше светодиодов светятся.
В конечном итоге программа вычисляет частоту, но светодиоды загораются непонятно как. Посмотрите, пожалуйста исходник, может опытные программисты сразу увидят что не так.
Программа написана в CodeVisionAVR и есть симуляция работы схемы в Протеусе.
Заранее оч. благодарен!
akl
Здравствуйте. Может пригодится вот это, правда на асме и индикация в виде точки. Переделать индикацию и заменить множитель, думаю, не сложно.
Нажмите для просмотра прикрепленного файла
Serega_0180
спасибо. это уже находил, смотрел. Но очень плохо знаю ассемблер (еще хуже,чем СИ biggrin.gif ).
мне подсказали немного, что нужно использовать цикл if Пока думаю дальше.
Paulina
Цитата(Serega_0180 @ Jul 31 2009, 22:03) *
спасибо. это уже находил, смотрел. Но очень плохо знаю ассемблер (еще хуже,чем СИ biggrin.gif ).
мне подсказали немного, что нужно использовать цикл if Пока думаю дальше.


1)если гасить светодиоды, то все, а у вас только порт D гасится:
#define OFF_LEDS PORTD = 0b00000000
добавьте то же для других портов

2)смотрите, что у вас между 6-м и 4-м светодиодом стоит:

if (Fx >= 40)
{
ON_LED6;
}
if (Fx >= 33.3)
{
OFF_LEDS;
}
while (Fx >= 26.7)
{
ON_LED4;

я так понимаю, результат ctrl-c ctrl-v))

3) на малых частотах входного сигнала (около 10 имп/с) ошибка будет составлять до 20% (т.к. подсчет ведется примерно за 500 мс). здесь лучше использовать измерение не количества импульсов, а их периода следования (скажем, померили период следования T в микросекундах и находите частоту по формуле N0*1000000/T, где N0 - количество оборотов на импульс, у вас это 30)
Serega_0180
спасибо, что прокомментировали программу. Потом и сам увидел, что где-то остались if, а где-то while
невнимательно смотрел. Щас применил везде if и перед каждым включением светодиодов добавил выключение всех (исправил тоже, чтоб были нули на всех портах).
Проверял в протеусе, работает, но почему-то не светятся светодиоды, подключенные к выходам PC1, PC2, PC3. Ставил туда щуп напряжения, показывает 1.5 В. Когда же отключаешь эти светодиоды (или включаешь вместо них обычные), тогда все ровно - нормальная единица на выходах. Надеюсь, что это может быть просто глюк программы. smile.gif Щас делаю всю схему на макетке и опробую.
По поводу точности пока очень не загоняюсь, сейчас главное, чтоб правильно работало. На всяк. случай выложу тут программу. Если кто прокомментирует, только рад буду w00t.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.