Например TDA7294

Форум РадиоКот • Просмотр темы - вопрос: динамическая инидикация и прерывания CPU
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пт окт 03, 2025 22:23:31

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 5 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: вопрос: динамическая инидикация и прерывания CPU
СообщениеДобавлено: Пт май 30, 2008 17:41:23 
Мучитель микросхем
Аватар пользователя

Зарегистрирован: Ср дек 26, 2007 18:33:00
Сообщений: 422
Рейтинг сообщения: 0
Подскажите начинающему: я пишу программу для вывода на дисплей семисигментного инидикатора (под Tiny2313). Программа пока тренировочная. На дисплей выводится счет секунд и минут. Индикация дисплея ессно динамическая, управляем 4-мя разраядами. Частота кварца 4мгц. Алгоритм такой: загружаем константы, загружаем таймер, включаем прерывания. Далее бесконечный цикл индикации, из которого выходим по прерыванию. Делаем inc счетчика секунд, и снова бесконечный цикл индикации.

Так вот суть вопроса в чем: программа работает, но когда меняются секунды (т.е. выходим по прерыванию), весь дисплей промаргивает. Думал что дело в длительной обработке участка кода обрабатывающего прерывание, но выходит всего около 0,16 милисекунд (по числу тактов в участке обработки TIM_COMP1:
), т.е. промаргивания быть не должно. Потом переписал прогорамму так, чтоб секунды и минуты хранились регистрах (сначала хранились в памяти), та же петрушка выходит. Просвятите пожалуйста, что я делаю не так?

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


Вложения:
Комментарий к файлу: Текст самой программы
dynamic.asm [6.38 KiB]
Скачиваний: 374
Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пт май 30, 2008 18:49:53 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2119
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18406
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
начитались обучалок... ну кто делает динамическую индикацию в бесконечном цикле?! сделайте наоборот: по прерываниям от одного таймера обновляйте индикатор, а по прерываниям от другого - считайте время. а основной цикл программы будет бесконечным и пустым :)

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пт май 30, 2008 22:02:09 
Мучитель микросхем
Аватар пользователя

Зарегистрирован: Ср дек 26, 2007 18:33:00
Сообщений: 422
Рейтинг сообщения: 0
Проясните все же, почему промигивает? В чем ошибка? Почему нельзя делать индикацию циклом?

За совет спасибо, воспользуюсь :P , только поясните все же, почему в вашем варианте промигивать не будет, а в моем промигивает. Хоцца физику процесса понять :))


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вс июн 01, 2008 02:38:44 
Нашел транзистор. Понюхал.
Аватар пользователя

Зарегистрирован: Вт май 16, 2006 06:24:49
Сообщений: 188
Откуда: Москва
Рейтинг сообщения: 0
Рисуйте Временной график работы всего, и тогда будет ясно (это можно легко сделать в протеусе, если сделать какой-то пин сигнализирующим о входе в прерывание, и глушить его по выходу), просто пока ваша программа в бесконечном цикле ждет задержки для отрисовки, в какой-то момент эта задержка становиться длиннее на врема входа в прерывание отсчета времени, его отработки, и выхода из него, этого может быть вполне достаточно для того, чтобы заметить глазом...

_________________
CLM-9000 CLM-9000+, и прочие вкусности :-)


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн июн 02, 2008 12:00:07 
Мучитель микросхем
Аватар пользователя

Зарегистрирован: Ср дек 26, 2007 18:33:00
Сообщений: 422
Рейтинг сообщения: 0
Все решил проблему, :)) Дело было в команде Rcall, которая была тексте обработчика прерывания. Убрал rcall, поменял текст программы все стало ОК. :))

Обошелся без использования второго таймера.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y