Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

прекъсвания при ATmega8
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=4498
Страница 1 от 1

Автор:  michev [ Сря Юли 11, 2007 3:07 pm ]
Заглавие:  прекъсвания при ATmega8

Здравейте отново :)
Продължава серията въпроси :D
Имам 6 бутона закачени на порт Д 0..5. Искам при промяна на състоянието на някой 0..5 пин на порт Д да
се извика прекъсване. Като се поразрових из интернет открих това (АТМега1281).. PCINT1_vector.. но се оказа че за ATMega8 липсва такъв вектор.
Въпроса ми е - мога ли да ползвам някакво прекъсване и ако да - как, или трябва да цикля и да проверява състоянието на тези пинове?

avr-gcc, atmega8

Поздрави,
Десислав Мичев

Автор:  Реконструктор [ Сря Юли 11, 2007 6:52 pm ]
Заглавие: 

Не знам дали се продават OR логики с 8 входа. :) Ако се продават - по едно разклонение на всеки бутон на входа на чипа и резултата - на някой пин за външно прекъсване (обикновено са 2).

Автор:  HCL [ Сря Юли 11, 2007 7:05 pm ]
Заглавие: 

Ако не намери с достатьчно входове, нищо не пречи да сложи още един слой :) µC-a е бавен, така че дали ще е един 4 входов OR или 3 двуходови няма значение :)
А ако има още нещо да се изнася навьн може направо една програмируема логика да се сложи. GAL, EEPROM всичко вьрши работа.

Автор:  HCL [ Сря Юли 11, 2007 7:27 pm ]
Заглавие: 

Ако interrupt-а може да се хване на 1-0 преход, може да сложиш един 8-входов NOR, намира се лесно и трябва да е кьмто 20-30ст. Типьт е 4078.

Автор:  michev [ Чет Юли 12, 2007 1:22 pm ]
Заглавие: 

Голямо благодаря!
Не се бях сетил за OR логика ;]
@HCL MCU-то хич не ми се вижда бавно - 16MIPS на 16Mhz ;] (в моя случай е на 10Mhz)

Та... продължавам серията въпроси :P
При бутон, закачен на някой вход на МЦУ-то гледам че слагат време за което трябва да бъде натиснат бутона за да
се приеме от програмата че е натиснат, а не е някакво смущение. В моя случай освен бутони има и ротационен енкодер.
Въпроса ми е при него трябва ли да слагам такова време, и ако трябва колко мс трябва да е?

Автор:  Gogo [ Чет Юли 12, 2007 1:33 pm ]
Заглавие: 

HCL написа:
Ако interrupt-а може да се хване на 1-0 преход, може да сложиш един 8-входов NOR, намира се лесно и трябва да е кьмто 20-30ст. Типьт е 4078.
A може и с диоди...

Автор:  HCL [ Чет Юли 12, 2007 3:22 pm ]
Заглавие: 

michev написа:
@HCL MCU-то хич не ми се вижда бавно - 16MIPS на 16Mhz ;] (в моя случай е на 10Mhz)


Бързо и бавно са относителни понятия, има GAL-ове на 5ns.

Автор:  Syrius-B [ Чет Юли 12, 2007 6:55 pm ]
Заглавие: 

michev написа:
Голямо благодаря!
Не се бях сетил за OR логика ;]
@HCL MCU-то хич не ми се вижда бавно - 16MIPS на 16Mhz ;] (в моя случай е на 10Mhz)

Та... продължавам серията въпроси :P
При бутон, закачен на някой вход на МЦУ-то гледам че слагат време за което трябва да бъде натиснат бутона за да
се приеме от програмата че е натиснат, а не е някакво смущение. В моя случай освен бутони има и ротационен енкодер.
Въпроса ми е при него трябва ли да слагам такова време, и ако трябва колко мс трябва да е?

закъснението при четене на бутон се слага, защото механичнине контакти притрепват, и ако четеш всеки фронт, ще регистрираш по десетина прехода вместо един.
Ако енкодера ти е механичен - важи същото съображение.
Ако изхода му е електронен елемент - скоростта е, колкото може да чете процесора, или колкото може да даде енкодера

Автор:  michev [ Пет Юли 13, 2007 12:19 pm ]
Заглавие: 

Нека го кажа така -
при натискане на бутон, обикновено човек го задържа натиснат известно време. Обаче при енкодера (механичен 20п)
ако се засилиш на връткаш, това време се намалява значително и в случая няма да е като на бутоните.
Точно това време за енкодера ме интересува колко трябва да бъде.

пс. Електрнонен енкодер от къде мога да закупя в БГ?

Автор:  ДедоБоре [ Пет Юли 13, 2007 12:51 pm ]
Заглавие: 

смени чипа с мега88. той има точно това, което ти трябвa -PCINTx

Автор:  Cekins [ Пет Юли 13, 2007 1:54 pm ]
Заглавие: 

А не си ли се замислял някак си да го направиш да не ти викат прекъсване бутоните. Щото докато си на етап само четене на бутони добре, ама като стане по сложно какво ще правиш. Докато дебоунсваш бутона в прекъсването можеш да изтървеш нещо друго най-просто казано. Не можеш да си толкова бърз да натиснеш бутона за толкова кратко време, че да не го хване основния цикъл на програмата.
Слагал съм механичен енкодер - сега не си спомням точно какво беше времето но беше сранвително малко. Бих ти препоръчал опитно да си го намериш. Въпреки, че в дейташиита на енкодера би трябвало да има описани времената (поне този дето аз го ползвах си спомянм че имаше).
Сега гледам и друго си писал - времето което се чака не е заради смущения а заради това, че бутона се разтрептява преди да се установи. С други думи може едно натискане да се отчете като 10-15.
Ще ти кажа аз как съм си го направил и си ползвам тази методика : имам си едно прекъсване от таймер (приблизително 0,1 сек) което си ми е водещо за всички видове закъснения които ползвам. При първото засичане на промяна състоянието на даден вход (бутон) го приемам за натиснат обаче докато не изтече определено време дори и натиснат не се приема, след като изтече още малко време го приемам пак за натиснат(задържан) и тогава пък се чака по-малко време до следващото приемане, а и по този начин си вдигам един флаг за задържан бутон който може да се ползва по-нататък примерно ако редактираш стойност да почне да прескача. В крайна сметка се получава нещо като при клавиатурите на компютрите, не товари програмата и не напрактика не дебаунсвам бутона с чакане. През всичкото това време и основния цикъл и прекъсванията си действат без да се съобразяват с клавиатурата.

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/