Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Тема закрыта

Вопрос от котенка (новичек те) по внешним прерывания

Пт июн 16, 2006 09:03:04

Товарисчи лохматые! сделал бегуший огонек на атмеге8 - теперь хочу разнообразить его поведение - тупо опрашивать кнопку считаю неэффективным - и неинтересно - посему жду от Вас примеров по реализации внешних прерываний на С. На асме информации полно - но хочется освоить С под AVR. Заранее спасибо
Мя: сцылки на интересующую информацию тоже принимаются с мурлыканьем !

Пт июн 16, 2006 16:58:04

Каким компилятором пользуется уважаемый?
Например, в Code Vision все это легко делается CodeWizard'ом...

Пт июн 16, 2006 19:23:09

пока WinAVR но весьма скоро перекачусь полностью на AVR-GCC @ Linux
вот - пока просто интересует более менее доступная инфа по внешним интераптам - тк то что на данный момент выяснил я - там далеко не все так просто (за счет гибкости конечно)
В основном пока на инглиш ресурсах по этой теме пасусь - но инглишь для меня не нативный - и в эл-ке он для меня совсем не нативный. Мучаюсь.
Посему и спрашивую у достопочтенного обшества совета - чтоб так сказать - лишних блох не нахватать на свой загривок

Пн июн 19, 2006 12:51:09

ну уважаемые, ну неужто никто не может поделиться простеньким примерчиком на С по организации внешних прерываний на Атмеге 8 ?
просто на асме - инфы полно - а на С - че то не очень - особенно то что прерывание может выставляться как по высокому уровню - так и наоборот - а это для меня пока в тех примерах что я видел не очень и понятно.....
кинте плиз кусок кода с коментами нормальными (желательно русскими) по поводу организации внешнего прерывания на Атмеге8 порты PD2 PD3
Не ленитесь! или линк какой или нормальную доку по С под АВР дайте - где ясно будет что где и как !

Пн июн 19, 2006 13:00:31

Что на асме, что на сях, нужно конфигурировать одни и те же регистры. В любом языке они будут называться одинаково - так, как указано в даташите. От язака зависит только процесс инициализации этого регистра
Если на асме нам нужно написать

ldi Temp,0b00110100
out REG,Temp

то на сях оно же буде выглядеть просто

REG = 0b00110100;

или что-то типа этого :)

Пн июн 19, 2006 13:21:07

Эт понятно по конфигурации регистров - а вот бы примерчик применительно к #include <interrupt.h>
можно а ?

Вт июн 20, 2006 09:47:48

А в хелп залазить не пробовал, в том же WinAVR. Кроме того посмотри примеры, и даташиты по реализации некоторых вещей от Atmel (atmel.com).... вперед!

Вт июн 20, 2006 09:56:04

http://www.scienceprog.com/avr-microcon ... llresult=2
ОЕВХДХ РПУФЙФШ УПДЕТЦЙНПЕ - ЮФПВ ОЕ ЪБУПТСФШ
ФПМШЛП РБТХ ЧПРТПУПЧ - ЕУМЙ С РТБЧЙМШОП РПОСМ - ФП ЛПОУФТХЛГЙС
outp((1<<

sei();
ТБЪТЕЫБЕФ ЧУЕ РТЕТЩЧБОС - Й РТЕТЩЧБОЙС ЙДХФ РП ЙЪНЕОЕОЙА ХТПЧОС ?
Б ЧПФ ЛБЛ ЙОЙГЙБМЙЪЙТПЧБФШ УТБВБФЩЧБОЙЕ РТЕТЩЧБОЙС РП ЧТИОЕНХ ХТПЧОА ЙМЙ РП ОЙЦОЕНХ ХТПЧОА ? ОХ УЛБЦЕН ФПЮОЕЕ РП РЕТЕДОЕНХ ЙМЙ РП ЪБДОЕНХ ЖТПОФХ УРБДБАЫЕЗП ОБТБУФБАЭЕЗП ХТПЧОС ?

Вт июн 20, 2006 17:01:15

ХТПЧОС ?

ЧТОС, простите? :)))

А если серьезно, то, например, в Mega16 3 внешних прерывания.
Можно настраивать срабатывание по уровню 0, 1 или по переходам 0>1 или 1>0 (непомню...), как - см. даташит.
В случае прерывания камень сохраняет текущие значения регистров шурует в область памяти, где в простейшем случае лежит ддействие-0обработчик или указатель туда, где есть соотв. подпрограмма обработки прерывания.
Вот так, кратенько. Вроде бы все просто...

Ср июн 21, 2006 09:44:37

в обшем ситуация такая - вопросы по прерываниям у меня сейчас несколько конкретизировались:
в примерах что идут в WinAVR интересующая меня тема фактически не отображена
а меня интересует сейчас использованеи sei();
это разрешает прерыывания
обязательно ли надо выставлять регистры GIFR и вроде как MCUCR - отдельные биты - для выставления режима срабатываний прерываний - по фронтам - перепадам уровня итд итп.... так вот - при начальной инициализации меги8 с разрешением прерываний через sei(); - биты в вышеуказанных регистрах выставлены как ? позволяющие инициировать прервание по любому изменению уровня ?

Чт июн 22, 2006 13:08:27

По умолчанию все прерывания у нее выключены.

Чт июн 22, 2006 16:44:56

те если я правильно понял матерого кошака - то при начальной инициализации системы - для работы в нешними прерываниями - я должен обязательно помимо sei();
еше выставлять биты вышеуказанных регистров ?
а не подскажет ли уважаемое мохнатое сообщество - как в С для WinAVR ожно это сделать не прибегая к асму ?

Пт июн 23, 2006 08:55:31

:)

Вообще должно быть просто: пишется имя соотв. регистра и присваивается ему значение, типа

// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Falling Edge
// INT1: On
// INT1 Mode: Falling Edge
// INT2: On
// INT2 Mode: Falling Edge
GICR|=0xE0;
MCUCR=0x0A;
MCUCSR=0x00;
GIFR=0xE0;

Это для 16-ой Меги

Пт июн 23, 2006 09:18:21

Спасибо б ольшое ,) Я всегда знал - что если правильно сформируешь мысль - то тебе обязательно ответят :)

Вс июн 25, 2006 21:00:22

Завсегда пожалуйста! :)
Тема закрыта