Отговори на тема  [ 11 мнения ] 
прекъсвания при ATmega8 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

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

avr-gcc, atmega8

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


Сря Юли 11, 2007 3:07 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
Не знам дали се продават OR логики с 8 входа. :) Ако се продават - по едно разклонение на всеки бутон на входа на чипа и резултата - на някой пин за външно прекъсване (обикновено са 2).


Сря Юли 11, 2007 6:52 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

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


Сря Юли 11, 2007 7:05 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Дек 14, 2004 1:31 pm
Мнения: 3849
Мнение 
Ако interrupt-а може да се хване на 1-0 преход, може да сложиш един 8-входов NOR, намира се лесно и трябва да е кьмто 20-30ст. Типьт е 4078.


Сря Юли 11, 2007 7:27 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Сря Юли 11, 2007 10:16 am
Мнения: 1730
Мнение 
Голямо благодаря!
Не се бях сетил за OR логика ;]
@HCL MCU-то хич не ми се вижда бавно - 16MIPS на 16Mhz ;] (в моя случай е на 10Mhz)

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


Чет Юли 12, 2007 1:22 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 24, 2005 11:41 pm
Мнения: 1049
Местоположение: Pz
Мнение 
HCL написа:
Ако interrupt-а може да се хване на 1-0 преход, може да сложиш един 8-входов NOR, намира се лесно и трябва да е кьмто 20-30ст. Типьт е 4078.
A може и с диоди...


Чет Юли 12, 2007 1:33 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Дек 14, 2004 1:31 pm
Мнения: 3849
Мнение 
michev написа:
@HCL MCU-то хич не ми се вижда бавно - 16MIPS на 16Mhz ;] (в моя случай е на 10Mhz)


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


Чет Юли 12, 2007 3:22 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Яну 30, 2006 2:48 am
Мнения: 1248
Местоположение: София
Мнение 
michev написа:
Голямо благодаря!
Не се бях сетил за OR логика ;]
@HCL MCU-то хич не ми се вижда бавно - 16MIPS на 16Mhz ;] (в моя случай е на 10Mhz)

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

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


Чет Юли 12, 2007 6:55 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Сря Юли 11, 2007 10:16 am
Мнения: 1730
Мнение 
Нека го кажа така -
при натискане на бутон, обикновено човек го задържа натиснат известно време. Обаче при енкодера (механичен 20п)
ако се засилиш на връткаш, това време се намалява значително и в случая няма да е като на бутоните.
Точно това време за енкодера ме интересува колко трябва да бъде.

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


Пет Юли 13, 2007 12:19 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Ное 21, 2004 11:31 pm
Мнения: 10088
Мнение 
смени чипа с мега88. той има точно това, което ти трябвa -PCINTx


Пет Юли 13, 2007 12:51 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

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


Пет Юли 13, 2007 1:54 pm
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 11 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 2 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни