Serega_0180 0 26 июля, 2009 Опубликовано 26 июля, 2009 · Жалоба Приветствую всех. Вопрос к знающим. Начал писать первую серьезную (для меня, т.к. зашел в тупичек) программу. Задумал сделать тахометр на "копейку". Взял за основу программу частотомера. Программа должна выводить значения частоты вращения двигателя на линейку светодиодов. Чем больше частота вращения, тем больше светодиодов светятся. В конечном итоге программа вычисляет частоту, но светодиоды загораются непонятно как. Посмотрите, пожалуйста исходник, может опытные программисты сразу увидят что не так. Программа написана в CodeVisionAVR и есть симуляция работы схемы в Протеусе. Заранее оч. благодарен! Taxo.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
akl 0 26 июля, 2009 Опубликовано 26 июля, 2009 · Жалоба Здравствуйте. Может пригодится вот это, правда на асме и индикация в виде точки. Переделать индикацию и заменить множитель, думаю, не сложно. TAHOM74.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Serega_0180 0 31 июля, 2009 Опубликовано 31 июля, 2009 · Жалоба спасибо. это уже находил, смотрел. Но очень плохо знаю ассемблер (еще хуже,чем СИ ). мне подсказали немного, что нужно использовать цикл if Пока думаю дальше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Paulina 0 4 августа, 2009 Опубликовано 4 августа, 2009 (изменено) · Жалоба спасибо. это уже находил, смотрел. Но очень плохо знаю ассемблер (еще хуже,чем СИ ). мне подсказали немного, что нужно использовать цикл 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) Изменено 4 августа, 2009 пользователем Paulina Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Serega_0180 0 15 августа, 2009 Опубликовано 15 августа, 2009 · Жалоба спасибо, что прокомментировали программу. Потом и сам увидел, что где-то остались if, а где-то while невнимательно смотрел. Щас применил везде if и перед каждым включением светодиодов добавил выключение всех (исправил тоже, чтоб были нули на всех портах). Проверял в протеусе, работает, но почему-то не светятся светодиоды, подключенные к выходам PC1, PC2, PC3. Ставил туда щуп напряжения, показывает 1.5 В. Когда же отключаешь эти светодиоды (или включаешь вместо них обычные), тогда все ровно - нормальная единица на выходах. Надеюсь, что это может быть просто глюк программы. :) Щас делаю всю схему на макетке и опробую. По поводу точности пока очень не загоняюсь, сейчас главное, чтоб правильно работало. На всяк. случай выложу тут программу. Если кто прокомментирует, только рад буду :w00t: Taxometr_mega8.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться