Перейти к содержанию
    

AVR. Программа тахометра

Приветствую всех. Вопрос к знающим. Начал писать первую серьезную (для меня, т.к. зашел в тупичек) программу. Задумал сделать тахометр на "копейку". Взял за основу программу частотомера. Программа должна выводить значения частоты вращения двигателя на линейку светодиодов. Чем больше частота вращения, тем больше светодиодов светятся.

В конечном итоге программа вычисляет частоту, но светодиоды загораются непонятно как. Посмотрите, пожалуйста исходник, может опытные программисты сразу увидят что не так.

Программа написана в CodeVisionAVR и есть симуляция работы схемы в Протеусе.

Заранее оч. благодарен!

Taxo.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте. Может пригодится вот это, правда на асме и индикация в виде точки. Переделать индикацию и заменить множитель, думаю, не сложно.

TAHOM74.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

спасибо. это уже находил, смотрел. Но очень плохо знаю ассемблер (еще хуже,чем СИ :biggrin: ).

мне подсказали немного, что нужно использовать цикл if Пока думаю дальше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

спасибо. это уже находил, смотрел. Но очень плохо знаю ассемблер (еще хуже,чем СИ :biggrin: ).

мне подсказали немного, что нужно использовать цикл 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)

Изменено пользователем Paulina

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

спасибо, что прокомментировали программу. Потом и сам увидел, что где-то остались if, а где-то while

невнимательно смотрел. Щас применил везде if и перед каждым включением светодиодов добавил выключение всех (исправил тоже, чтоб были нули на всех портах).

Проверял в протеусе, работает, но почему-то не светятся светодиоды, подключенные к выходам PC1, PC2, PC3. Ставил туда щуп напряжения, показывает 1.5 В. Когда же отключаешь эти светодиоды (или включаешь вместо них обычные), тогда все ровно - нормальная единица на выходах. Надеюсь, что это может быть просто глюк программы. :) Щас делаю всю схему на макетке и опробую.

По поводу точности пока очень не загоняюсь, сейчас главное, чтоб правильно работало. На всяк. случай выложу тут программу. Если кто прокомментирует, только рад буду :w00t:

Taxometr_mega8.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...