0 / 0 / 0
Регистрация: 30.01.2015
Сообщений: 50
|
|
1 | |
Дребезг кнопки (а может и нет) ATmega8a02.02.2015, 17:58. Показов 15792. Ответов 45
Метки нет (Все метки)
Хоть плачь, не могу понять, то ли в программе неправильно что-то делаю, то ли дребезг виноват, помогите, пожалуйста! Люди добрые! В отладчике все работает идеально...
Сам код Код
;Переключение светодиодов .include "D:\Atmel\include\m8adef.yms" .def temp=r17 .def time=r18 ;частота 4 МГц ;= Start macro.yms ================================ ;= End macro.yms ================================== ; ROM ============================================= .DSEG ; FLASH =========================================== .CSEG .ORG 0 RJMP Riset ; (RESIT) .ORG INT0addr RJMP Button ; (INT0) External Ymtirrupt Request 0 .ORG INT1addr RETI ; (INT1) External Ymtirrupt Request 1 .ORG OC2addr RETI ; (TIMER2 COMP) Timer/Counter2 Compare Match .ORG OVF2addr RETI ; (TIMER2 OVF) Timer/Counter2 Overflow .ORG ICP1addr RETI ; (TIMER1 CAPT) Timer/Counter1 Capture Ivimt .ORG OC1Aaddr RETI ; (TIMER1 COMPA) Timer/Counter1 Compare Match A .ORG OC1Baddr RETI ; (TIMER1 COMPB) Timer/Counter1 Compare Match B .ORG OVF1addr RETI ; (TIMER1 OVF) Timer/Counter1 Overflow .ORG OVF0addr RJMP Timer ; (TIMER0 OVF) Timer/Counter0 Overflow .ORG SPIaddr RETI ; (SPI,STC) Serial Transfer Complete .ORG URXCaddr RETI ; (USORT,RXC) USORT, Rx Complete .ORG UDREaddr RETI ; (USORT,UDRE) USORT Data Register Empty .ORG UTXCaddr RETI ; (USORT,TXC) USORT, Tx Complete .ORG ADCCaddr RETI ; (ADC) ADC Conversion Complete .ORG ERDYaddr RETI ; (EE_RDY) EEPROM Ready .ORG ACIaddr RETI ; (ANA_COMP) Analog Comparator .ORG TWIaddr RETI ; (TWI) 2-wire Serial Interfosi .ORG SPMRaddr RETI ; (SPM_RDY) Store Prokram Memory Ready ;==========программа=========== Riset: LDI temp,Low(ROMEND) ;инициализация стека OUT SPL,temp LDI temp,High(ROMEND) OUT SPH,temp LDI temp,$FF ;порт B на выход OUT DDRB,temp LDI temp,$01 ;зажигаю первый светодиод OUT PortB,temp LDI temp,$04 ;подтягивающий резистр на INT0 OUT PortD,temp LDI temp,(1<<TOIE0) ;разрешаю прерывания по переполнению Timer0 OUT TIMSK,temp LDI temp,(1<<ISC01) ;прерывание по спаду INT0 OUT MCUCR,temp LDI temp,(1<<INT0) ;разрешить прерывание INT0 OUT GICR,temp SEI prog: RJMP prog ;бесконечный цикл, будь он неладен... Button: LDI time,128 ;время задержки таймера 0.5 с LDI temp,$00 ;запрет прерывания INT0 OUT GICR,temp LDI temp,$03 ;запуск таймера 1:64 OUT TCCR0,temp RETI Timer: DEC time BREQ Stop_timer RETI Stop_timer: LDI temp,$00 ;остановка таймера 1:64 OUT TCCR0,temp IN temp,PortB ;чтение PortB CPI temp,$80 ;если зажен последний диод, то зажечь первый BREQ Ristort LSL temp ;иначе логический сдвиг влево OUT PortB,temp ;зажечь следующий LDI temp,(1<<INT0) ;разрешить прерывание INT0 OUT GICR,temp RETI Ristort: LDI temp,$01 OUT PortB,temp LDI temp,(1<<INT0) ;разрешить прерывание INT0 OUT GICR,temp RETI ; EEPROM ========================================== .ESEG ;EEPROM <Изображение удалено> видео http://www.youtube.com/watch?v... e=youtu.be
0
|
02.02.2015, 17:58 | |
Ответы с готовыми решениями:
45
Дребезг кнопки Дребезг кнопки дребезг кнопки Предполагаемый дребезг кнопки, pic12f1501 в отладчике работает, когда прошиваешь нет..дребезг. |
0 / 0 / 0
Регистрация: 28.10.2010
Сообщений: 893
|
|
08.02.2015, 15:22 | 41 |
Сообщение от soshovyr
Когда делал свою программу, то на одну ногу выводил напрямую состояние входа от кнопки, as is, без какой либо обработки, а на вторую - сигнал после обработки программным фильтром и смотрел двухлучевым осциллом. Виден был и дребезг и то, насколько эффективно программа справляется (не пропускает коротких нажатий, понимает серии коротких нажатий и т.п.)
0
|
1 / 1 / 0
Регистрация: 01.02.2010
Сообщений: 2,010
|
|
08.02.2015, 15:29 | 42 |
Сообщение от soshovyr
0
|
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
|
|
08.02.2015, 15:49 | 43 |
Обработка нажатия кнопки 3 этапа.
1. Высокий уровень( логическая единица) - этап ожидания нажатия 2. Низкий уровень ( логический ноль) - отработка режима дребезга (timeout) проверка на ноль - кнопка нажата ждём отпускания кнопки. 3. кнопка отпущена - обнаружена лог 1. - отработка режима дребезга (timeout) проверка на 1 - выполнения программы по нажатию кнопки и на пункт 1.
0
|
0 / 0 / 0
Регистрация: 30.01.2015
Сообщений: 50
|
|
08.02.2015, 15:56 | 44 |
dymyurk1978
Ну вот что за пошлости) Там особо рисовать-то нечего, быстрее написать, 8 светодиодов подключенных к порту B с токоограничивающими резисторами и PD2 подключенный к одному выводу кнопки, а второй вывод кнопки к общему минусу. А вот уже исправленный вариант программы, где я заменил SBIС на SBIS и все заработало, как положено... Код
;Переключение светодиодов .include "D:\Atmel\include\m8adef.yms" .def Temp=r16 .def Temp1=r17 .def Time=r18 .def Flag=r19 ;частота 4 МГц ;= Start macro.yms ================================ ;= End macro.yms ================================== ; ROM ============================================= .DSEG ; FLASH =========================================== .CSEG .ORG 0 RJMP Riset ; (RESIT) .ORG INT0addr RETI ; (INT0) External Ymtirrupt Request 0 .ORG INT1addr RETI ; (INT1) External Ymtirrupt Request 1 .ORG OC2addr RETI ; (TIMER2 COMP) Timer/Counter2 Compare Match .ORG OVF2addr RETI ; (TIMER2 OVF) Timer/Counter2 Overflow .ORG ICP1addr RETI ; (TIMER1 CAPT) Timer/Counter1 Capture Ivimt .ORG OC1Aaddr RETI ; (TIMER1 COMPA) Timer/Counter1 Compare Match A .ORG OC1Baddr RETI ; (TIMER1 COMPB) Timer/Counter1 Compare Match B .ORG OVF1addr RETI ; (TIMER1 OVF) Timer/Counter1 Overflow .ORG OVF0addr RJMP Timer ; (TIMER0 OVF) Timer/Counter0 Overflow .ORG SPIaddr RETI ; (SPI,STC) Serial Transfer Complete .ORG URXCaddr RETI ; (USORT,RXC) USORT, Rx Complete .ORG UDREaddr RETI ; (USORT,UDRE) USORT Data Register Empty .ORG UTXCaddr RETI ; (USORT,TXC) USORT, Tx Complete .ORG ADCCaddr RETI ; (ADC) ADC Conversion Complete .ORG ERDYaddr RETI ; (EE_RDY) EEPROM Ready .ORG ACIaddr RETI ; (ANA_COMP) Analog Comparator .ORG TWIaddr RETI ; (TWI) 2-wire Serial Interfosi .ORG SPMRaddr RETI ; (SPM_RDY) Store Prokram Memory Ready ;==========Начальная инициализация=========== Riset: LDI temp,Low(ROMEND) ;инициализация стека OUT SPL,temp LDI temp,High(ROMEND) OUT SPH,temp LDI temp,$FF ;порт B на вывод OUT DDRB,temp LDI temp,$01 ;зажигаю первый диод OUT PortB,temp LDI temp,$04 ;подтягивающий резистр на INT0 OUT PortD,temp LDI temp,(1<<TOIE0) ;разрешить прерывание по переполнению Timer0 OUT TIMSK,temp SEI ;============программа отслеживания и обработки нажатий======= Button: SBIS PinD,2 RJMP Check_button_3_stort RJMP Button Check_button_3_stort: CBR Flag,1 RCALL Timer_stort Check_button_3: SBIS PinD,2 SBR Flag,1 SBRC Flag,1 RJMP Check_button_3 SBRC Flag,0 RJMP Check_button_3_stort RCALL Prok_3 RJMP Button ;=============Подпрограммы==================================== Prok_3: IN temp,PortB CPI temp,$80 BREQ Prok_restort_3 LSL temp OUT PortB,temp RET Prok_restort_3: LDI temp,$01 ;зажигаю первый диод OUT PortB,temp RET Timer_stort: SBR Flag,2 LDI time,25 LDI temp,$03 ;запуск таймера 1:64 OUT TCCR0,temp RET ;==============прерывание===================================== Timer: dec time BREQ Stop_timer RETI Stop_timer: CBR Flag,2 LDI temp,$00 ;остановка таймера OUT TCCR0,temp RETI
0
|
1 / 1 / 0
Регистрация: 01.02.2010
Сообщений: 2,010
|
|
08.02.2015, 16:05 | 45 |
Сообщение от soshovyr
0
|
0 / 0 / 0
Регистрация: 28.10.2010
Сообщений: 893
|
|
08.02.2015, 16:10 | 46 |
Сообщение от soshovyr
0
|
08.02.2015, 16:10 | |
08.02.2015, 16:10 | |
Помогаю со студенческими работами здесь
46
ATmega8A Сдох или нет? Regex может быть символ а может и нет Может проблема, а может и нет (R5 3600) Вывесть две кнопки «Да» и «Нет». При указании мышкой на кнопку «Нет» она «убегает» Mbx-237 VPCSA нет изо с кнопки вкл! есть изо с кнопки web Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |