ПрЕрывания в WinAVR...

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 375
Зарегистрирован: Вс мар 04, 2007 13:14:25
Откуда: Украина

Сообщение Krik99 »

Дарова!!!
Я недавно начял изучать Си для микроконтроллёры AVR и остановился на прирываниях. Для того чтобы научиться работать с прирываниями на контроллёре Atmega 8 я хочу написать простую программу с использованием прирываний.
Я хочу написать программу которая мигала б раз в минуту светодиодом и при нажатие на кнопку чтобы загорался второй светодиод но при этом чтобы первый светодиод не прикращал мигать. И по отпусканию кнопки второй светодиод гас а первый всёравно мигал раз в минуту. Желательно чтобы программа была написана под WinAVR.
За ранние благодарен!!!
Контактная информация:
Реклама
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1529
Зарегистрирован: Пн авг 22, 2005 21:02:22
Откуда: Питер

Сообщение Serega »

А кто-нибудь понял, что аффтар хотел сказать своим оптимистичным постом? :)
В чем собсна вопрос, любезнейший? Вам программу написать, или вы просто хотели похвастаться своими планами? ;)
Лучше быть первым в деревне, чем вторым в Риме
Реклама
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1269
Зарегистрирован: Пт июл 21, 2006 15:05:19
Откуда: плод воображения

Сообщение KT315B »

Короче, похоже, что аффтар хочет мигать одним светодиодом по таймеру, а другим - по внешнему прерыванию... Хоть я и не телепат, конечно =)
R2AIV 73!
Контактная информация:
Открыл глаза
Аватара пользователя
Сообщения: 68
Зарегистрирован: Вт июл 24, 2007 23:34:23

Сообщение Mr.Moss »

Наверное автор хочет чтоб здесь оценили верность хода мыслей, и если неверны, поправили.
Реклама
Эиком - электронные компоненты и радиодетали
Вымогатель припоя
Аватара пользователя
Сообщения: 586
Зарегистрирован: Ср мар 07, 2007 22:58:02
Откуда: Черкассы, Украина

Сообщение Negor »

А мне кажется что аффтару просто нужжно оформление прерываний показать :roll:
There is only 10 kind of people: those who understands binary code and those who dont!!!
Контактная информация:
Реклама
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1269
Зарегистрирован: Пт июл 21, 2006 15:05:19
Откуда: плод воображения

Сообщение KT315B »

Дык в чем тогда проблема? Добро пожаловать в Обучалку: http://www.radiokot.ru/start/mcu_fpga/avr/10/
R2AIV 73!
Контактная информация:
Реклама
Э...
Аватара пользователя
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва

Сообщение tych »

Krik99 писал(а):Я недавно начял изучать Си для микроконтроллёры AVR и остановился на прирываниях.

Для того чтобы научиться работать с прирываниями на контроллёре Atmega 8 я хочу написать простую программу с использованием прирываний.
Я сделал програмку управл. кнопками и показывающую взаимодействие прерываний в AVR - см стр. 3 под кнопкой "www".

А первые шаги с WinAVR и Astudio на странице 4 подробнейше и с картинками - советую почитать и проделать.
Последний раз редактировалось tych Чт авг 30, 2007 22:36:55, всего редактировалось 1 раз.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Контактная информация:
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 375
Зарегистрирован: Вс мар 04, 2007 13:14:25
Откуда: Украина

Сообщение Krik99 »

кароче мне надо чтобы две операции выполнялись одновременно. Ну типа мигание светодиодом и проверка нажатия кнопки и если кнопка нажата то второй светоиод должен загорется. И можно приделать ещё один третий светодиод который будет загоратся раз в две минуты.
Контактная информация:
Открыл глаза
Аватара пользователя
Сообщения: 68
Зарегистрирован: Вт июл 24, 2007 23:34:23

Сообщение Mr.Moss »

Все просто.
Включаеш таймер, включаеш прерывание компаратора этого таймера,
по этому прерыванию будет светится первый светодиод (не забудь про задержку), задаеш с какой частотой будет срабатывать прерывание, в основном цикле опрашивай кнопку от которой будет светится второй светодиод, и все.
С третим светодиодом анологично что и с первым.
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 375
Зарегистрирован: Вс мар 04, 2007 13:14:25
Откуда: Украина

Сообщение Krik99 »

Mr.Moss это я так и думал.
Но немоглибы хоть както программу набросать на Си просто на примере легче изучать. Заранние благодарен! :))
Контактная информация:
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 174
Зарегистрирован: Вт июл 31, 2007 20:32:30
Откуда: Киев, Украина

Сообщение Томатный »

что-то типа такого
Вложения
led.rar
исходники WinAVR, hex и проект в Proteus
(12.33 КБ) 427 скачиваний
Контактная информация:
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 375
Зарегистрирован: Вс мар 04, 2007 13:14:25
Откуда: Украина

Сообщение Krik99 »

Да спасибо чтото типа этого. Получается что выполняется две операции одновременно. Биг сенкс!!! :)))
Контактная информация:
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 375
Зарегистрирован: Вс мар 04, 2007 13:14:25
Откуда: Украина

Сообщение Krik99 »

Да ещёё можно попросить написать программу герлянд ну например три эфекта и кнопка которой эти эфекты переключать. За ранние благодарен!!!
Контактная информация:
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1529
Зарегистрирован: Пн авг 22, 2005 21:02:22
Откуда: Питер

Сообщение Serega »

Хм... Программы пишут програмеры, за бабки. А мы тут только советуем и помогаем ;)
Лучше быть первым в деревне, чем вторым в Риме
Вымогатель припоя
Аватара пользователя
Сообщения: 586
Зарегистрирован: Ср мар 07, 2007 22:58:02
Откуда: Черкассы, Украина

Сообщение Negor »

Хм... Программы пишут програмеры, за бабки. А мы тут только советуем и помогаем
Кстати да! Но если хош - давай ты будеш писать, а мы - подсказывать - ну типа что не так, как лудше... а так как ты хочеш :roll:
There is only 10 kind of people: those who understands binary code and those who dont!!!
Контактная информация:
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 375
Зарегистрирован: Вс мар 04, 2007 13:14:25
Откуда: Украина

Сообщение Krik99 »

Ок! Сегодне набросая программу а вы мне поможете. Ок?! :) Да и чем лутче делать паузы между веключением и выключением одного канала герлянд, ну типа зажог первый канал через 1 сек. потушил первый канал и зажог второй канал тоже через 1сек.??? Как зажигать и тушить светодиоды я знаю но не знаю как лутче написать паузу между ними.
Контактная информация:
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1529
Зарегистрирован: Пн авг 22, 2005 21:02:22
Откуда: Питер

Сообщение Serega »

Паузу - на таймерах, есесно.
Делаем прерывание на событие таймера (overflow или compare). По событию переключаемся
Лучше быть первым в деревне, чем вторым в Риме
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 375
Зарегистрирован: Вс мар 04, 2007 13:14:25
Откуда: Украина

Сообщение Krik99 »

Можно поподробние про паузу.
Вот тут я напсал кусок программы в которой хранятся эфекты в ней только осталось поставить паузы вместо ????? скоро добавлю до этой проги выбор эфектов кнопкой.
Вот код:

Код: Выделить всё

switch (prog)
{
       case 0:          //Эфект бегущий огонь.
       PORTB=0xEF;      //Зажигаем первый канал герлянд.
       ????             //Тут пишем ПАУЗУ в 1 сек.
       PORTB=0xFF;      //Тушим первый канал герлянд.
       ????             //Тут пишем ПАУЗУ в 1 сек.
       PORTB=0xDF;      //Зажигаем второй канал герлянд.
       ????             //Тут пишем ПАУЗУ в 1 сек.
       PORTB=0xFF;      //Тушим второй канал герлянд.
       ????             //Тут пишем ПАУЗУ в 1 сек.
       PORTB=0xDF;      //Зажигаем третий канал герлянд.
       ????             //Тут пишем ПАУЗУ в 1 сек.
       PORTB=0xFF;      //Тушим третий канал герлянд.
       ????             //Тут пишем ПАУЗУ в 1 сек.
       PORTB=0x7F;      //Зажигаем четвёртый канал герлянд.
       ????             //Тут пишем ПАУЗУ в 1 сек.
       PORTB=0xFF;      //Тушим четвёртый канал герлянд.
       break;

       case 1:          //Эфект мирцания.
       PORTB=0xAF;      //Зажигаем второй и четвёртый канал герлянд.
       ????             //Тут пишем ПАУЗУ в 1 сек.
       PORTB=0xFF;      //Тушим второй и четвёртый канал герлянд.
       ????             //Тут пишем ПАУЗУ в 1 сек.
       PORTB=0x5F;      //Зажигаем первый и третий канал герлянд.
       ????             //Тут пишем ПАУЗУ в 1 сек.
       PORTB=0xFF;      //Тушим второй и четвёртый канал герлянд.
       ????             //Тут пишем ПАУЗУ в 1 сек.
       PORTB=0x0F;      //Зажигаем все каналы герлянды.
       ????             //Тут пишем ПАУЗУ в 1 сек.
       PORTB=0xFF;      //Тушим все каналы герлянды.
       ????             //Тут пишем ПАУЗУ в 1 сек.
       break;
}
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 586
Зарегистрирован: Ср мар 07, 2007 22:58:02
Откуда: Черкассы, Украина

Сообщение Negor »

Ну во первых: есть функции задержки. Если под КодВижн, то подключаеш соотв. библиотеку:

Код: Выделить всё

#include <delay>
И так и пишеш

Код: Выделить всё

delay_ms(30);
Задержка на 30 миллисекунд

Код: Выделить всё

delay_us(30);
задержка на 30 наносекунд.
Да, многие скажут "Это не профессионально!"...
Не знаю... мне, как чайнику, в первой своей программе(которая ксати как раз переключала 8 светодиодов по программе) было очень весело и с delay. Т.е. для твоего кода, который ты привёл - это самое оно! :)))
Если же использовать прерывания, то надо программу делать не так. Я бы организовал двумерный массив. Строки - эффекты. допустим в одном эффекте 8 состояний портов. И эффектов 5. Значит массив у нас 5 строк по 8 столбцов. Координаты массива - глобальные переменные. В процедуре обработки прерывания выводим элемент массива в порт

Код: Выделить всё

PORTB=effect[i][j];
и в конце обработчика увеличиваем i чтобы при новом прерывании в порт выводился след. элемент эффекта.
Ну а в самой программе переключаем сам эффект изменением j...
Примерно так :roll: [/b]
There is only 10 kind of people: those who understands binary code and those who dont!!!
Контактная информация:
Э...
Аватара пользователя
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва

Сообщение tych »

Negor писал(а):

Код: Выделить всё

delay_us(30);
задержка на 30 наносекунд.

Да, многие скажут "Это не профессионально!"...
и не верно !
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Контактная информация:
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»