Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
26.12.2004, 00:28
|
|
li$ergin
Гость
|
Подскажите, как лучше всего бороться с дребезгом контактов
Расскажите, кто как справлялся с дребезгом контактов, а то совсем замаялся изобретать. За кусочек кода буду очень признателен, а еще больше за аппаратное решение проблемы, а то ресурсы надо. Контроллер PIC16f84A. заранее спавибки.
|
|
|
|
26.12.2004, 18:08
|
|
VIRGIS
Гость
|
антидребезг
Есть програма антидребезга для АТ89C2051,для обработки сигнала с датчика поварота антены,довольно
хитра по описанию (отстройка от ВЧ и НЧ помех),но вполне прилична програмно-45 слов (сколько получится
для ПИЦ-а - незнаю).Если что,пиши.
|
|
|
|
26.12.2004, 18:46
|
|
li$ergin
Гость
|
Если не сложно, вышли на genich78@mail.ru или выложи здесь, чтоб народ видел. Интересно ведь не просто код в програмулину втулить, а понять идею. Спасибо
|
|
|
|
26.12.2004, 20:58
|
|
Частый гость
Регистрация: 06.11.2004
Сообщений: 31
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Подскажите, как лучше всего бороться с дребезгом контакт
Сообщение от li$ergin
|
за аппаратное решение проблемы
|
Классический аппаратный вариант.
Триггер типа R-S. Переключается по первому импульсу при нажатию кнопки и сохраняет это состояние. Если кнопка с переключающим контактом, то возврат в исходное состояние за счет срабатывания от подключенного к другому входу триггера нормально замкнутого контакта при отпускании кнопки, в противном случае требуется переодический сброс. Недостаток - на каждую кнопку нужен триггер...
Сообщение от li$ergin
|
Интересно ведь не просто код в програмулину втулить, а понять идею
|
Идею можно так же посмотреть в описании компьютеров в журнале "Радио" начала девяностых. Вроде при описании "Радио-80" или "Радио-86" материал о программном опросе кнопок был изложен достаточно подробно.
Удачи!
|
|
|
|
27.12.2004, 01:33
|
|
VIRGIS
Гость
|
антидребезг на AT89C2051
Ввод и обработка сигналов с геркона
на AT89C2051
*********************************************
ingerk;setb iger
;----первый этап (от ВЧ помех)
mov r0,#10 ;иниц. счётчика принятых бит
mov a,#0 ;oбнуление акума
ing0; mov c,iger ;десятикратный ввод
addc a,#0 ;сумирование всех введённых
;битов
djnz r0,ing0
subb a,#5 ;сума больше или меньше 5?
;----второй этап (от НЧ помех)
jnc ing2
cjne sger,#0,ing1 :если значение дост-
clr flgis ;игло 0,сбросить
;флаг гистерезиза
ret
ing1: dec sger ;уменьшение значения
;интегратора
ret
ing2: mov a,#tger;сравнить с верхним пределом
subb a,sger
jc ing3
inc sger ;увеличение значения
;интегратора
ret
ing3: mov c,flgis;проверка флага гистерезиса
setb flgis
jc ing10
Далее следует обработка полученного сигнала для
управления направлением вращения мотора антены.
Програма взята из книги А.В.Белова "Самоучитель
по микропроцесорной технике"
|
|
|
|
27.12.2004, 13:49
|
|
Прохожий
Регистрация: 24.12.2004
Сообщений: 1
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Интегрирующая цепочка-›триггер Шмитта
|
|
|
|
27.12.2004, 21:34
|
|
Прохожий
Регистрация: 03.12.2004
Сообщений: 5
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
опрос клавиш с антидребезгом
include "p16f84.inc"
CBLOCK 0x20
Flags ; register to hold key flag bit
Debounce ; debounce counter
KeyVal ; value of key press
Columns ; columns monitor
Rows ; rows monitor
Count ; delay counter
ENDC
Key equ 0h ; flag for keypress
org 0000h
clrf PORTA
clrf PORTB
bsf STATUS,RP0 ; ram page 1
clrf TRISA ; portA = all outputs
movlw b'11110111' ; PortB 7 - 4 = inputs
movwf TRISB ; 3 - 0 = outputs
movlw b'11000010' ; set TMR0 internal clk
movwf OPTION_REG ; prescale 1:256
bcf STATUS,RP0 ; ram page 0
clrf Debounce ; these registers need to be
clrf Flags ; initialised to zero
MnLoop btfss INTCON,T0IF ; wait for TMR0 overflow
goto MnLoop ; approx 65mS @ 4MHz clock
bcf INTCON,T0IF
movf Debounce ; if Debounce = 0, test keypad
btfsc STATUS,Z
goto TestKP
decf Debounce ; else decrement it
goto MnLoop ; and ignore keypad
;
; TEST FOR A KEYPRESS ON THE KEYPAD
;
TestKP call KeyCheck ; check keypad
btfss KeyVal,7 ; if = 1 then no key pressed
goto KeyIsDown
btfss Flags,Key ; no key pressed
goto MnLoop ; and key is already released
bcf Flags,Key ; flag key is released
movlw 3h ; set debounce period
movwf Debounce
goto MnLoop
KeyIsDown btfsc Flags,Key ; if = 0 then key just pressed
goto MnLoop ; key is still pressed
bsf Flags,Key ; flag key is pressed
movlw 3h ; set debounce period
movwf Debounce
movf KeyVal,W ; service key
movwf PORTA ; write KeyVal to PORTA
goto MnLoop
;
; SUBROUTINE:
; Check the keypad for a keypress
; Enable each of the 4 rows one at a time (logic high)
; test each of the 4 columns to see if any are logic high
; If so, a key is pressed
;
; ON RETURN:
; KeyVal = value of keypress, bit 7 will be 0 (0xxx xxxx)
; If no keys are pressed, bit 7 of KeyVal = 1 (1xxx xxxx)
;
KeyCheck movlw b'00000001' ; make ready to set Row 1 high (RB0)
movwf Rows
clrf KeyVal ; initialise Key Value
RowLoop movf Rows,W ; set a Row high
movwf PORTB
movlw 4h ; small delay while PORTB stabilizes
movwf Count
DLoop decfsz Count
goto DLoop
movf PORTB,W ; read portB
andlw b'11110000'
movwf Columns ; save the data - only interested in upper 4 bits
btfss STATUS,Z
goto ChkColm ; Z = clear, key must be pressed
movlw 4h ; no bits set for this row
addwf KeyVal ; looking at next row
goto NextRow
ChkColm bcf STATUS,C ; clear the carry bit
rlf Columns ; if Carry = 1, key is pressed
btfsc STATUS,C
goto LowRow ; key is pressed, KeyVal = key
incf KeyVal ; on next column so increment Key Value
movf Columns ; if = 0, then all columns checked for this row
btfss STATUS,Z
goto ChkColm ; check value of next column
NextRow bcf STATUS,C ; clear the carry bit
rlf Rows ; make ready to set next Row = high
btfss Rows,4 ; test if all Rows have been set
goto RowLoop ; not yet, bit 4 will be set when all rows checked
movlw 0xFF ; no keys pressed
movwf KeyVal
LowRow clrf PORTB ; all rows = low
return ; no key was pressed, KeyVal bit 7 still = 1
end
|
|
|
|
08.01.2005, 22:27
|
|
li$ergin
Гость
|
Крыша хлопает в ладоши, всем спасибо, код хороший!!!!
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 06:57.
|
|