| Автор |
Съобщение |
|
michev
Ранг: Форумен бог
Регистриран на: Сря Юли 11, 2007 10:16 am Мнения: 1730
|
 прекъсвания при ATmega8
Здравейте отново
Продължава серията въпроси
Имам 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 |
|
 |
|
HCL
Ранг: Форумен бог
Регистриран на: Вто Дек 14, 2004 1:31 pm Мнения: 3849
|
Ако не намери с достатьчно входове, нищо не пречи да сложи още един слой  µC-a е бавен, така че дали ще е един 4 входов OR или 3 двуходови няма значение
А ако има още нещо да се изнася навьн може направо една програмируема логика да се сложи. GAL, EEPROM всичко вьрши работа.
|
| Сря Юли 11, 2007 7:05 pm |
|
 |
|
HCL
Ранг: Форумен бог
Регистриран на: Вто Дек 14, 2004 1:31 pm Мнения: 3849
|
Ако interrupt-а може да се хване на 1-0 преход, може да сложиш един 8-входов NOR, намира се лесно и трябва да е кьмто 20-30ст. Типьт е 4078.
|
| Сря Юли 11, 2007 7:27 pm |
|
 |
|
michev
Ранг: Форумен бог
Регистриран на: Сря Юли 11, 2007 10:16 am Мнения: 1730
|
Голямо благодаря!
Не се бях сетил за OR логика ;]
@HCL MCU-то хич не ми се вижда бавно - 16MIPS на 16Mhz ;] (в моя случай е на 10Mhz)
Та... продължавам серията въпроси
При бутон, закачен на някой вход на МЦУ-то гледам че слагат време за което трябва да бъде натиснат бутона за да
се приеме от програмата че е натиснат, а не е някакво смущение. В моя случай освен бутони има и ротационен енкодер.
Въпроса ми е при него трябва ли да слагам такова време, и ако трябва колко мс трябва да е?
|
| Чет Юли 12, 2007 1:22 pm |
|
 |
|
Gogo
Ранг: Форумен бог
Регистриран на: Чет Фев 24, 2005 11:41 pm Мнения: 1049 Местоположение: Pz
|
|
| Чет Юли 12, 2007 1:33 pm |
|
 |
|
HCL
Ранг: Форумен бог
Регистриран на: Вто Дек 14, 2004 1:31 pm Мнения: 3849
|
Бързо и бавно са относителни понятия, има GAL-ове на 5ns.
|
| Чет Юли 12, 2007 3:22 pm |
|
 |
|
Syrius-B
Ранг: Форумен бог
Регистриран на: Пон Яну 30, 2006 2:48 am Мнения: 1248 Местоположение: София
|
 |  |  |  | michev написа: Голямо благодаря! Не се бях сетил за OR логика ;] @HCL MCU-то хич не ми се вижда бавно - 16MIPS на 16Mhz ;] (в моя случай е на 10Mhz) Та... продължавам серията въпроси При бутон, закачен на някой вход на МЦУ-то гледам че слагат време за което трябва да бъде натиснат бутона за да се приеме от програмата че е натиснат, а не е някакво смущение. В моя случай освен бутони има и ротационен енкодер. Въпроса ми е при него трябва ли да слагам такова време, и ако трябва колко мс трябва да е? |  |  |  |  |
закъснението при четене на бутон се слага, защото механичнине контакти притрепват, и ако четеш всеки фронт, ще регистрираш по десетина прехода вместо един.
Ако енкодера ти е механичен - важи същото съображение.
Ако изхода му е електронен елемент - скоростта е, колкото може да чете процесора, или колкото може да даде енкодера
|
| Чет Юли 12, 2007 6:55 pm |
|
 |
|
michev
Ранг: Форумен бог
Регистриран на: Сря Юли 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 |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
А не си ли се замислял някак си да го направиш да не ти викат прекъсване бутоните. Щото докато си на етап само четене на бутони добре, ама като стане по сложно какво ще правиш. Докато дебоунсваш бутона в прекъсването можеш да изтървеш нещо друго най-просто казано. Не можеш да си толкова бърз да натиснеш бутона за толкова кратко време, че да не го хване основния цикъл на програмата.
Слагал съм механичен енкодер - сега не си спомням точно какво беше времето но беше сранвително малко. Бих ти препоръчал опитно да си го намериш. Въпреки, че в дейташиита на енкодера би трябвало да има описани времената (поне този дето аз го ползвах си спомянм че имаше).
Сега гледам и друго си писал - времето което се чака не е заради смущения а заради това, че бутона се разтрептява преди да се установи. С други думи може едно натискане да се отчете като 10-15.
Ще ти кажа аз как съм си го направил и си ползвам тази методика : имам си едно прекъсване от таймер (приблизително 0,1 сек) което си ми е водещо за всички видове закъснения които ползвам. При първото засичане на промяна състоянието на даден вход (бутон) го приемам за натиснат обаче докато не изтече определено време дори и натиснат не се приема, след като изтече още малко време го приемам пак за натиснат(задържан) и тогава пък се чака по-малко време до следващото приемане, а и по този начин си вдигам един флаг за задържан бутон който може да се ползва по-нататък примерно ако редактираш стойност да почне да прескача. В крайна сметка се получава нещо като при клавиатурите на компютрите, не товари програмата и не напрактика не дебаунсвам бутона с чакане. През всичкото това време и основния цикъл и прекъсванията си действат без да се съобразяват с клавиатурата.
|
| Пет Юли 13, 2007 1:54 pm |
|
|