прерывания внешние и внутренние

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 167
Зарегистрирован: Ср ноя 04, 2009 18:00:56
Откуда: Алтайский край

Сообщение ssvd »

Подскажите как лучше поступить!
Есть atmega8 на int0 подключен tsop, соответственно задействован один таймер и прерывание на int0 для обработки сигнала.
Надо подключить еще 4 кнопки и отрабатывать их нажатие.
Повешать их отработку на прерывание срабатывающее к примеру на "насчитывание" таймером определенного значения?
или может повесить их на int1?
как корректнее все это отрабатывать?
Контактная информация:
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18856
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

TSOP лучше вешать не на INT0 или INT1, а на вход захвата TIMER1 - тогда декодирование RC5 получается элементарно легко. а кнопки, как правило, элементарно обрабатываются простым опросом, без всяких прерываний, т.е. в основном цикле. разве что у вас "пробуждение" микроконтроллера по нажатию кнопки или приему ИК-команды сделано - тогда ваш подход более верный...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 167
Зарегистрирован: Ср ноя 04, 2009 18:00:56
Откуда: Алтайский край

Сообщение ssvd »

ARV писал(а):TSOP лучше вешать не на INT0 или INT1, а на вход захвата TIMER1 - тогда декодирование RC5 получается элементарно легко. а кнопки, как правило, элементарно обрабатываются простым опросом, без всяких прерываний, т.е. в основном цикле. разве что у вас "пробуждение" микроконтроллера по нажатию кнопки или приему ИК-команды сделано - тогда ваш подход более верный...
можно пояснить по поводу INT1, почему на него вешать лучше?
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18856
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

ssvd писал(а):можно пояснить по поводу INT1, почему на него вешать лучше?
можно пояснить, где я утверждал, что на INT1 вешать лучше? нипонимэ....
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Встал на лапы
Аватара пользователя
Сообщения: 133
Зарегистрирован: Ср фев 20, 2008 03:09:21
Откуда: Украина г.Харьков

Сообщение Esya »

можно и одним таймером 0 обойтись когда происходит прерывание по int 0 или int1 в обработчике таймер обнуляеться а время посылки одного бита ик команды меньше чем время переполнения таймера я использовал внутренний генератор на 1 Мгц и делитель таймера на 1
Русский человек читает инструкцию тогда, когда точно понял, что поломал.
Контактная информация:
Реклама
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 167
Зарегистрирован: Ср ноя 04, 2009 18:00:56
Откуда: Алтайский край

Сообщение ssvd »

ARV писал(а):
ssvd писал(а):можно пояснить по поводу INT1, почему на него вешать лучше?
можно пояснить, где я утверждал, что на INT1 вешать лучше? нипонимэ....
сори, ступил ))))
Контактная информация:
Реклама
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 167
Зарегистрирован: Ср ноя 04, 2009 18:00:56
Откуда: Алтайский край

Сообщение ssvd »

я вообще tsop подключаю в первый раз. Вот взял по какой то ссылке вот этот исходник, мне на него основываться или есть алгоритмы получше?
на atmega8 он без проблем подойдет же?
Вложения
rc5_main.c
(5.86 КБ) 353 скачивания
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 133
Зарегистрирован: Ср фев 20, 2008 03:09:21
Откуда: Украина г.Харьков

Сообщение Esya »

а по какому протоколу ду работает??
Русский человек читает инструкцию тогда, когда точно понял, что поломал.
Контактная информация:
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 167
Зарегистрирован: Ср ноя 04, 2009 18:00:56
Откуда: Алтайский край

Сообщение ssvd »

Esya писал(а):а по какому протоколу ду работает??
RC5
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 133
Зарегистрирован: Ср фев 20, 2008 03:09:21
Откуда: Украина г.Харьков

Сообщение Esya »

я с rc5 не разбирался у меня nec протокол даи в С я не шарю
Русский человек читает инструкцию тогда, когда точно понял, что поломал.
Контактная информация:
Прорезались зубы
Аватара пользователя
Сообщения: 223
Зарегистрирован: Вт окт 02, 2007 14:43:23
Откуда: Ростов-на-Дону

Сообщение GRafGRay »

Не могу найти ошибку в прошивке, протеус отказывается эмулировать
надо помощи

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

; Таблица векторов прерываний ATtiny13
	rjmp RESET        ; презапуск МК
	rjmp INT_0        ; внешнее прерывание 0
	nop               ; rjmp PCINT0       (Pin Change Interrupt Request 0)
	nop               ; rjmp TIM0_OVF     (переполнение таймера/счётчика 0)
	nop               ; rjmp EE_READY     (готовность EEPROM)
	nop               ; rjmp ANA_COMP     (аналоговый компаратор)
	nop               ; rjmp TIM0_COMPA   (совпадение таймера/счётчика 0. Канал A)
	nop               ; rjmp TIM0_COMPB   (совпадение таймера/счётчика 0. Канал B)
	nop               ; rjmp WDT          (охранный таймер)
	nop               ; rjmp ADC          (ADC Conversion Complete)
; =================
RESET: 
	ldi R16, low(RamEnd)             
	out SPL,R16
	ldi R16,0b11111111               
	out DDRB,R16                       
	ldi R16,0b00000000                
	out PortB,R16                     

	ldi R16,(1<<INT0)                 ; Разрешение прерывания INT0  
	out GIMSK,R16
	ldi R16,(0<<ISC01)|(0<<ISC00)     ; Низкий уровень генерирует прерывание
	out MCUCR,R16

	sei
; ==================
Start:
	rjmp Start
; ==================
INT_0:
	push R16
	in R16,SREG

	sbis PortB,0 
	sbi PortB,0
	sbic PortB,0
	cbi PortB,0

	out SREG,R16
	pop R16
	reti
пробовал включать прерывание по другим событиям - всеравно не фурычит.
В железе соответственно пока не пробовал.
Вложения
shem.gif
(2.17 КБ) 370 скачиваний
При наличии отсутствия пропитанных шпал - это будет не трамвай а одно горе!
Контактная информация:
GP1
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград

Сообщение GP1 »

попробуй первой строкой написать что-нибудь вроде такого:

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

.include "Tn13def.inc"
:wink:
Чем дальше, тем больше становлюсь занудой...
Изображение
Контактная информация:
Прорезались зубы
Аватара пользователя
Сообщения: 223
Зарегистрирован: Вт окт 02, 2007 14:43:23
Откуда: Ростов-на-Дону

Сообщение GRafGRay »

GP1 писал(а):попробуй первой строкой написать что-нибудь вроде такого:

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

.include "Tn13def.inc"
:wink:
я не стал весь код программы писать сюда, написал только то что касается прерываний

а начало программы у меня выглядит так:

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

device ATtiny13
.nolist
.include "D:\Programs\Electronic\AVRStudio4\AvrAssembler\Appnotes\tn13def.inc"
.include "D:\Programs\Electronic\Avr-projects\ShVit_tiny13\macros.asm"
.list

; ==================
.dseg

Digit:     .byte 4

.cseg
.org 0
; ==================
; Таблица векторов прерываний ATtiny13

	rjmp RESET        ; презапуск МК
	rjmp INT_0        ; внешнее прерывание 0
	nop               ; rjmp PCINT0       (Pin Change Interrupt Request 0)
	nop               ; rjmp TIM0_OVF 
................ тра-ля-ля, тра-ля-ля
если нужен весь код, то могу скинуть
несколько раз себя перепроверял, прерывания разрешены, выход из подпрограмм через RETI

все остальное работает замечательно а здесь прям засада какая-то
и ведь стопудова виной всему какая-то мелоч которую мои замученные мозги не хотят заметить



<b>UPD:</b> Всё разобрался, в настройке портов нужно было бит 1 (нога PB1 и соттветственно она же INT0) установить на вход, вот так:

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

ldi R16,0b11111101                
out DDRB,R16       
При наличии отсутствия пропитанных шпал - это будет не трамвай а одно горе!
Контактная информация:
akl
Друг Кота
Сообщения: 4476
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Здравствуйте. Судя по этому коду, разрешаются прерывания по низкому уровню на INT0, который сидит, по схеме на общем через резистор и светодиод, а ожидаете команды низким уровнем, опять же по схеме, нажатием кнопки на INT1.

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

   ldi R16,(1<<INT0)                 ; Разрешение прерывания INT0 
   out GIMSK,R16
   ldi R16,(0<<ISC01)|(0<<ISC00)     ; Низкий уровень генерирует прерывание
   out MCUCR,R16
УПС Виноват, сослепу перепутал в схеме ATtiny13 за ATtiny2313
Последний раз редактировалось akl Чт янв 28, 2010 17:45:37, всего редактировалось 1 раз.
Прорезались зубы
Аватара пользователя
Сообщения: 223
Зарегистрирован: Вт окт 02, 2007 14:43:23
Откуда: Ростов-на-Дону

Сообщение GRafGRay »

[quote="akl"]Здравствуйте. Судя по этому коду, разрешаются прерывания по низкому уровню на INT0, который сидит, по схеме на общем через резистор и светодиод, а ожидаете команды низким уровнем, опять же по схеме, нажатием кнопки на INT1.
[quote]

Мне кажется вы перепутали INT0 и PCINT0
прерывания по INT1 в 13ой тиньке нет вообще
При наличии отсутствия пропитанных шпал - это будет не трамвай а одно горе!
Контактная информация:
Родился
Сообщения: 4
Зарегистрирован: Вс янв 31, 2010 01:53:19

Сообщение student770 »

Здравствуйте!
Помогите пожалуйста кто знает, нужно одним нажатием на кнопку включить светодиод, а другим нажатием выключить, и так далее. Желательно в cvavr. Заранее спасибо!
Закрыто

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