Pour faire suite à ma chronique d'hier voici une version à 7 boutons de la télécommande sur entrée microphone avec le code source associé. Resterais à écrire le programme pour PC hote qui doit décoder les tonalités et les traduire en commandes. Un controle activeX dans ce genre là.
shéma électronique
code source
#include
__CONFIG _WDTE_OFF & _MCLRE_OFF & _CP_OFF
;;; constantes ;;;;;;;;;;;;;;;;;
OPTION_INI EQU 0x01
TRIS_INI EQU B'1011' ; GP2 en mode sortie
; fréquences tonalités
FR1 EQU .697
FR2 EQU .770
FR3 EQU .852
FR4 EQU .941
FR5 EQU .1209
FR6 EQU .1336
FR7 EQU .1477
FR8 EQU .1633
; demi-péridodes
HPT1 EQU ~(.125000/FR1)
HPT2 EQU ~(.125000/FR2)
HPT3 EQU ~(.125000/FR3)
HPT4 EQU ~(.125000/FR4)
HPT5 EQU ~(.125000/FR5)
HPT6 EQU ~(.125000/FR6)
HPT7 EQU ~(.125000/FR7)
HPT8 EQU ~(.125000/FR8)
; comptes pour une durée de 20msec
LAPSE1 EQU ~(FR1*.20/.1000)
LAPSE2 EQU ~(FR2*.20/.1000)
LAPSE3 EQU ~(FR3*.20/.1000)
LAPSE4 EQU ~(FR4*.20/.1000)
LAPSE5 EQU ~(FR5*.20/.1000)
LAPSE6 EQU ~(FR6*.20/.1000)
LAPSE7 EQU ~(FR7*.20/.1000)
LAPSE8 EQU ~(FR8*.20/.1000)
;;; macros ;;;;;;;;;;;;;;;;;;
#define SW1 GPIO, GP0
#define SW2 GPIO, GP1
#define SW3 GPIO, GP3
#define SW4 GPIO, GP1
#define SW5 GPIO, GP3
#define SW6 GPIO, GP0
#define SW7 GPIO, GP3
#define TONE_OUT GPIO, GP2
delay_half_period macro
movfw half_period
movwf TMR0
movfw TMR0
skpz
goto $-2
endm
;;; variables ;;;;;;;;;;;;;;
cblock 8
delay_cntr : 1
button : 1
half_period : 1
endc
;;; code ;;;;;;;;
org 0
init
movwf OSCCAL
movlw OPTION_INI
option
movlw TRIS_INI
tris GPIO
main
call read_buttons
movf button, F
skpnz
goto main
call tone
; movlw .30
; movwf delay_cntr
; call delay_ms
goto main
delay_ms
movlw 5
movwf TMR0
movfw TMR0
skpz
goto $-2
decfsz delay_cntr
goto delay_ms
retlw 0
tone
movfw button
call lapse_table
movwf delay_cntr
movfw button
call tones_table
movwf half_period
tone01
bcf TONE_OUT
delay_half_period
bsf TONE_OUT
delay_half_period
incfsz delay_cntr
goto tone01
retlw 0
read_buttons
movfw GPIO
movwf button
comf button, F
movlw 0xB
andwf button, F
movlw 4
subwf button, F
skpc
addwf button, F
return
tones_table
addwf PCL, F
dt 0
dt HPT1
dt HPT2
dt HPT3
dt HPT4
dt HPT5
dt HPT6
dt HPT7
dt HPT8
lapse_table
addwf PCL, F
dt 0
dt LAPSE1
dt LAPSE2
dt LAPSE3
dt LAPSE4
dt LAPSE5
dt LAPSE6
dt LAPSE7
dt LAPSE8
end
Aucun commentaire:
Publier un commentaire
Remarque : Seuls les membres de ce blogue sont autorisés à publier des commentaires.