Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.95/77: Рейтинг темы: голосов - 77, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 30.01.2015
Сообщений: 50
1

Дребезг кнопки (а может и нет) ATmega8a

02.02.2015, 17:58. Показов 15792. Ответов 45
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Хоть плачь, не могу понять, то ли в программе неправильно что-то делаю, то ли дребезг виноват, помогите, пожалуйста! Люди добрые! В отладчике все работает идеально...

Сам код

Код
;Переключение светодиодов

.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
Схема, только там указанно 5 светодиодов, на самом деле их 8, просто схематично показано подключение

<Изображение удалено>

видео
http://www.youtube.com/watch?v... e=youtu.be
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.02.2015, 17:58
Ответы с готовыми решениями:

Дребезг кнопки
Добрый день, использую чип EPM3032ALC44, пишу на Verilog. Сильно не пинайте это мой третий проект...

Дребезг кнопки
Начал писать скетч для автоматизации запуска некоторого электрооборудования (это пока что только...

дребезг кнопки
как сделать в протеусе дребезг кнопки?

Предполагаемый дребезг кнопки, pic12f1501
RA0-вход RA2-выход Обработка срабатывания при нажатии в функции interrupt isr. Проблема в...

в отладчике работает, когда прошиваешь нет..дребезг.
Здравствуйте. Написал прогу для устранения дребезга от кнопки смысл ее таков. Каждые 100Гц...

45
0 / 0 / 0
Регистрация: 28.10.2010
Сообщений: 893
08.02.2015, 15:22 41
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от soshovyr
Да, тарабарщина получилась, извиняюсь...
Блин, это разработчики, так прикалываются или опять я чего недопонимаю, ну логичней же низкий уровень напряжения принять за 0, а высокий за 1, а не наоборот...
Оно так и есть.

Когда делал свою программу, то на одну ногу выводил напрямую состояние входа от кнопки,
as is, без какой либо обработки, а на вторую - сигнал после обработки программным фильтром и смотрел двухлучевым осциллом. Виден был и дребезг и то, насколько эффективно программа справляется (не пропускает коротких нажатий, понимает серии коротких нажатий и т.п.)
0
1 / 1 / 0
Регистрация: 01.02.2010
Сообщений: 2,010
08.02.2015, 15:29 42
Цитата Сообщение от soshovyr
логичней же низкий уровень напряжения принять за 0, а высокий за 1, а не наоборот...
Верной дорогой идете товарисчь...
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
ShodS, инкер,YTYOUT Спасибо! Чтоб уж точно понимать, т.е. когда PD2 подключен к общему минусу, то в PinD,2 мы получается имеем ноль?
0
1 / 1 / 0
Регистрация: 01.02.2010
Сообщений: 2,010
08.02.2015, 16:05 45
Цитата Сообщение от soshovyr
т.е. когда PD2 подключен к общему минусу, то в PinD,2 мы получается имеем ноль?
Верной дорогой идете товарисчь...
0
0 / 0 / 0
Регистрация: 28.10.2010
Сообщений: 893
08.02.2015, 16:10 46
Цитата Сообщение от soshovyr
Чтоб уж точно понимать, т.е. когда PD2 подключен к общему минусу, то в PinD,2 мы получается имеем ноль?
Да, если совсем дотошно, то Clear - очищен=0. Zero в обозначениях команд имеет немного другой смысл.
0
08.02.2015, 16:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.02.2015, 16:10
Помогаю со студенческими работами здесь

ATmega8A Сдох или нет?
Странно сдох мк... К нему подключен был экран n5110 и программатор usbtiny. Более ничего. Ничего...

Regex может быть символ а может и нет
var matches = Regex.Matches(page, @&quot;\S&quot;); Например есть строки &quot;жрать&quot; и &quot;нежрать&quot;, 4 символа...

Может проблема, а может и нет (R5 3600)
Добрый день господа, вчера собрал пекарню, поскольку это первая моя пекарня со времён Athlon 2 x4...

Вывесть две кнопки «Да» и «Нет». При указании мышкой на кнопку «Нет» она «убегает»
3. Создать HTML файл. Используя HTML тэги и язык JavaScript написать код, который выводит на экран...

Mbx-237 VPCSA нет изо с кнопки вкл! есть изо с кнопки web
принесли сей аппарат при включении с кнопки вкл включаться но нет изо пост код 17!выключаю и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
46
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru