mardi 29 mai 2012

télécommande sur entrée microphone suite

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 .

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