Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос по прерываниям.
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
ps1x
Как реализовать одновременную работу индикатора (16 светодиодов для отображения времени в двоичном виде, т.е. 6 диодов на секунды, 6 на минуты и 4 на часы), кнопок и собствено подсчет времени. При этом я не втыкаю как управлять ключами на транзисторах. На сколько я понял -
нужно сделать прерывание по таймеру(быстрому, чтобы не было мерцания) и в прерывании включить первые 6 диодов, а затем вторые, т.е. если допустим светодиоды подключены к порту B а ключи к ногам 0 и 1 порта C то:

interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
PORTC.0=1;//включаем первые 6 диодов (секунды)
PORTB=sec;//собсно записываем на выход значение секунд.
delay_ms(100);//ждем чтобы они немного посветили
PORTC.0=0;//выключаем первые 6 диодов (секунды)
PORTC.1=1;//включаем вторые 6 диодов (минуты)
PORTB=min;//собсно записываем на выход значение минут.
delay_ms(100);//ждем чтобы они немного посветили
PORTC.1=0;//выключаем вторые 6 диодов (минуты)
}

- но в протеусе это не работает (((

а еще одно прерывание, делаем для подсчета времени, прерывание выполняется каждую секунду.
DASM
Откуда такая схема ? Бред полный. Включение транзисторов совершенно безумное, работать не будет. Даже если бы они включены были правильно, причем тут PC0, если линия управления на PC5 для секунд ?
Попробуйте что-нибудь вроде такого...
defunct
Хм... Да что и говорить схема серьезная. советую почитать теорию http://www.ssau.ru/books/electronic_keys/

ну и вдобавок что касается непосредственно AVR - имея практически полностью свободный порт D вы жертвуете пином Reset от которого зависить ISP программирование. После чего можно бежать покупать параллельный программатор или бежать покупать новый чип..
ps1x
Цитата
После чего можно бежать покупать параллельный программатор или бежать покупать новый чип..

- можно с этого места поподробнее?
Насколько я понял из Вашего высказывания если пин reset занят выводом то с чипом что-то произойдет, после чего, восстановить его можно только паралельным программатором?

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

и еще, как всеже организовать совместую работу:
1 подсчет времени
2 вывод на индикатор
3 настройка времени кнопками

???
defunct
Цитата(ps1x @ Mar 19 2006, 16:35) *
Цитата
После чего можно бежать покупать параллельный программатор или бежать покупать новый чип..

- можно с этого места поподробнее?
Насколько я понял из Вашего высказывания если пин reset занят выводом то с чипом что-то произойдет, после чего, восстановить его можно только паралельным программатором?

Чип переводится в режим программирования при подаче низкого уровня на пин Reset, после чего с некоторой задержкой требуется подать команду перевода в режим программирования по SPI (MISO/MOSI/SCK). Если Вы будете использовать пин Reset для своих нужд как обычный пин порта, то Reset будет отключен, и следовательно в режим программирования можно будет войти только c помощью высоковольтного программатора, а насколько мне известно mega8 поддреживает только параллельный высоковольный программатор.
Цитата
А есть у вас ссылка на похожее устройство, в котором используются ключи для смены активного сегмента?
DASM уже нарисовал..

Цитата
и еще, как всеже организовать совместую работу:
1 подсчет времени
2 вывод на индикатор
3 настройка времени кнопками

Подсчет времени - по прерыванию таймера.
Обновление индикатора (у вас индикатор динамический) по прерыванию от другого таймера.
Реакцию на кнопки - в основном цикле программы.
ps1x
Всем спасибо за ответы.

А какие параметры задавать для таймера, вызывающего прерывание на индикацию? Т.е. какую частоту ему указывать? Или если знаете где можно прочитать про таймеры и прерывания в AVR (желательно на русском и поподробнее)?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.