TODOPIC
FORO TÉCNICO => Telefonía, GPS y Microcontroladores => Mensaje iniciado por: mario_pastor en 04 de Enero de 2006, 13:05:00
-
Hola amigos, este espacio estará dedicado al uso del los transceiver MT8889 y similares como el MT8888, MT8880. Entre todos podremos sacarle el máximo rendimiento a estos IC.
Aquí les dejo un diagrama y código para el uso del MT8889 y con algunas modificaciones se pueden usar para el MT888X. Básicamente este programa relaiza una llamada a un número y espera que se presione la tecla "*" (asterisco) para finalizar la llamada.
Espero que les sea de mucha utilidad <img src="http://pics.miarroba.com/caretos/wink.gif" alt="Giño" title="Giño" />
PD: Grrr.... alguién sabe cómo hago para subir los archivos? me dice que no hay espacio.
; ###########################################################################
; NOMBRE : DEMO_DTMF.ASM
; FECHA : 04/01/06
; XTAL : 4MHZ
; DESCRIPCION : REALIZA UNA LLAMADA TELEFONICA Y ESPERA QUE SE PRESIONE
; LA TECLA * (ASTERISCO) PARA FINALIZAR LA LLAMADA
; DISEÑADO POR : MARIO PASTOR PARA LOS AMIGOTES DEL FORO TODOPIC
; ###########################################################################
LIST P=16F877A
RADIX DEC
ERRORLEVEL -302
INCLUDE "P16F877A.INC"
__CONFIG 0X3F71
; ###########################################################################
; DEFINICION DE LA MEMORIA RAM
; ###########################################################################
CBLOCK 0X20
DEMO_1,DEMO_2,DEMO_CONT
DTMF_TX,DTMF_RX
ENDC
; ####################################################################
; DEFINICION DE IGUALDADES
; ####################################################################
; SE DEFINEN PINES DE PORTA
#DEFINE TELF PORTA,3
#DEFINE DTMF_D3 PORTA,5
#DEFINE DTMF_TRIS3 TRISA,5
; SE DEFINEN PINES DE PORTC
#DEFINE DTMF_IRQ PORTC,1
#DEFINE DTMF_DS PORTC,2
#DEFINE DTMF_RS0 PORTC,3
; SE DEFINEN PINES DE PORTD
#DEFINE DTMF_RW PORTD,0
#DEFINE DTMF_CS PORTD,1
; SE DEFINEN PINES DE PORTE
#DEFINE DTMF_D2 PORTE,0
#DEFINE DTMF_TRIS2 TRISE,0
#DEFINE DTMF_D1 PORTE,1
#DEFINE DTMF_TRIS1 TRISE,1
#DEFINE DTMF_D0 PORTE,2
#DEFINE DTMF_TRIS0 TRISE,2
; ####################################################################
; DEFINICION DE MACROS
; ####################################################################
BANK_0 MACRO
BCF STATUS,RP0
BCF STATUS,RP1
ENDM
BANK_1 MACRO
BSF STATUS,RP0
BCF STATUS,RP1
ENDM
BANK_2 MACRO
BCF STATUS,RP0
BSF STATUS,RP1
ENDM
BANK_3 MACRO
BSF STATUS,RP0
BSF STATUS,RP1
ENDM
PAGE_0 MACRO
BCF PCLATH,3
BCF PCLATH,4
ENDM
PAGE_1 MACRO
BSF PCLATH,3
BCF PCLATH,4
ENDM
; ###########################################################################
ORG 0X00
NOP
GOTO INICIO
ORG 0X05
; ###########################################################################
; RUTINA DE CONFIGURACION
; ###########################################################################
; CONFIGURACIONES INICIALES DEL PIC
CONFIGURACION
BANK_0
MOVLW B"00000000" ;TELF=0 (COLGADO),X,X,X
MOVWF PORTA
MOVLW B"00000000" ;DTMF_RS0=0,DTMF_DS=0,X,X
MOVWF PORTC
MOVLW B"00000011" ;DTMF_CS=1,DTMF_RW=1
MOVWF PORTD
BSF OPTION_REG,NOT_RBPU ;NO PULL UP
BANK_1
MOVLW B"00000111" ;PORTA COMO E/S DIGITALES
MOVWF ADCON1
MOVLW B"00000000" ;TODOS COMO SALIDA
MOVWF TRISA
MOVLW B"00000010" ;RC1=ENTRADA PARA EL DTMF_IRQ
MOVWF TRISC
MOVLW B"00000000" ;TODOS COMO SALIDA
MOVWF TRISD
MOVLW B"00000111" ;TODOS COMO ENTRADA
MOVWF TRISE
BANK_0
RETURN
; ###########################################################################
; RUTINAS DE RETARDO
; ###########################################################################
; EL RETARDO GENERADO ES DE APROXIMADAMENTE 5 MS PARA UN XTAL DE 4MHZ
; REGISTROS USADOS: DEMO_1,DEMO_2
DEMO_5MS
MOVLW .10
MOVWF DEMO_1
MOVLW .165
MOVWF DEMO_2
DECFSZ DEMO_2,F
GOTO $-1
DECFSZ DEMO_1,F
GOTO $-5
RETURN
; ###########################################################################
; RUTINA QUE GENERA RETARDOS MULTIPLOS A 5MS DEPENDIENDO DEL VALOR QUE SE
; PONGA EN EL REGISTRO W.
; REGISTROS USADOS: DEMO_CONT
DEMO_VMS
MOVWF DEMO_CONT
CALL DEMO_5MS
DECFSZ DEMO_CONT,F
GOTO $-2
RETURN
; ###########################################################################
; RUTINAS PARA EL MT8889
; ###########################################################################
;
; | | | | | | | | | |
; ----------------------------------------------------------
; | VDD ST/ EST D3 D2 D1 D0 /IRQ DS RS0 |
; | GT CP |
; | |
; | MT8889 |
; | |
; | |
; | IN+ IN- GS VREF VSS OSC1 OSC2 TONE R/W /CS |
; ----------------------------------------------------------
; | | | | | | | | | |
;
; ###########################################################################
; SE DEFINEN LOS TONOS DTMF
TONO_1 EQU B"00000001"
TONO_2 EQU B"00000010"
TONO_3 EQU B"00000011"
TONO_4 EQU B"00000100"
TONO_5 EQU B"00000101"
TONO_6 EQU B"00000110"
TONO_7 EQU B"00000111"
TONO_8 EQU B"00001000"
TONO_9 EQU B"00001001"
TONO_0 EQU B"00001010"
TONO_AST EQU B"00001011"
TONO_# EQU B"00001100"
TONO_A EQU B"00001101"
TONO_B EQU B"00001110"
TONO_C EQU B"00001111"
TONO_D EQU B"00000000"
#DEFINE DTMF_COMD_MODE BSF DTMF_RS0
#DEFINE DTMF_DATO_MODE BCF DTMF_RS0
; ###########################################################################
; INICIALIZACION DEL MT8889 SEGUN DATASHEET
UP_MT8889
; ESTA SECUENCIA ES LA QUE SE ENCUENTRAN EN EL DATASHEET
MOVLW 20 ;SECUENCIA ESTABLECIDA POR FABRICANTE
CALL DEMO_VMS ;RETARDO PARA ESTABILIZACION (100MS)
DTMF_COMD_MODE
CALL READ_MT8889 ;1° LECTURA DE STATUS REGISTER
MOVLW B"00000000" ;2° ESCRITURA DE CONTROL REGISTER
CALL WRITE_MT8889
MOVLW B"00000000" ;3° ESCRITURA DE CONTROL REGISTER
CALL WRITE_MT8889
MOVLW B"00001000" ;4° ESCRITURA DE CONTROL REGISTER
CALL WRITE_MT8889
MOVLW B"00000000" ;5° ESCRITURA DE CONTROL REGISTER
CALL WRITE_MT8889
CALL READ_MT8889 ;6° LECTURA DE STATUS REGISTER
; AQUI REALIZAMOS LA CONFIGURACION QUE DESEAMOS
MOVLW B"00001000" ;ESCRITURA EN CRA
CALL WRITE_MT8889 ;SELEC CRB, NO_IRQ, DTMF_MODE, NO_TONO
MOVLW B"00000000" ;ESCRITURA EN CRB
CALL WRITE_MT8889 ;DUAL_TONE, NO_TEST, BURST MODE
CALL READ_MT8889 ;LECTURA DE STATUS REGISTER
RETURN
; ###########################################################################
; PERMITE LA LECTURA DEL MT8889
; REGISTROS USADOS: DTMF_RX
READ_MT8889
BANK_1
BSF DTMF_TRIS3 ;CONFIGURA PUERTO COMO ENTRADA
BSF DTMF_TRIS2
BSF DTMF_TRIS1
BSF DTMF_TRIS0
BANK_0
BSF DTMF_RW ;MODO LECTURA
BCF DTMF_CS ;ACTIVA IC
BSF DTMF_DS ;CLOCK
CLRF DTMF_RX ;BORRAMOS REGISTRO PARA RECEPCION
BTFSC DTMF_D0
BSF DTMF_RX,0
BTFSC DTMF_D1
BSF DTMF_RX,1
BTFSC DTMF_D2
BSF DTMF_RX,2
BTFSC DTMF_D3
BSF DTMF_RX,3
NOP
BCF DTMF_DS ;CLOCK
BSF DTMF_CS ;DESACTIVAMOS IC
RETURN
; ###########################################################################
; PERMITE LA ESCRITURA DEL MT8889
; REGISTROS USADOS: DTMF_TX
WRITE_MT8889
MOVWF DTMF_TX
BANK_1
BCF DTMF_TRIS3 ;CONFIGURA PUERTO COMO SALIDA
BCF DTMF_TRIS2
BCF DTMF_TRIS1
BCF DTMF_TRIS0
BANK_0
BCF DTMF_D0 ;POR DEFECTO TODOS A CERO
BCF DTMF_D1
BCF DTMF_D2
BCF DTMF_D3
BTFSC DTMF_TX,0
BSF DTMF_D0
BTFSC DTMF_TX,1
BSF DTMF_D1
BTFSC DTMF_TX,2
BSF DTMF_D2
BTFSC DTMF_TX,3
BSF DTMF_D3
NOP
BCF DTMF_RW ;MODO ESCRITURA
BCF DTMF_CS ;ACTIVA IC
BSF DTMF_DS ;CLOCK
NOP
BCF DTMF_DS ;CLOCK
BSF DTMF_CS ;DESACTIVAMOS IC
BSF DTMF_RW ;MODO LECTURA
BANK_1
BSF DTMF_TRIS3 ;CONFIGURA PUERTO COMO ENTRADA
BSF DTMF_TRIS2
BSF DTMF_TRIS1
BSF DTMF_TRIS0
BANK_0
RETURN
; ###########################################################################
; TRASMITE EL EQUIVALENTE DTMF DE UN NUMERO CON DURACION ESTANDAR
MARCA_DTMF
DTMF_DATO_MODE
CALL WRITE_MT8889 ;TX SU EQUIVALENTE EN DTMF
DTMF_COMD_MODE
BSF DTMF_RW ;MODO LECTURA
MARCA_DTMF_A
BCF DTMF_CS ;ACTIVA IC
BSF DTMF_DS ;CLOCK
BTFSC DTMF_D1 ;BUFFER LIBRE PARA SIGUIENTE TX?
GOTO MARCA_DTMF_B ;SI
BCF DTMF_DS ;NO
BSF DTMF_CS ;DESACTIVAMOS IC
GOTO MARCA_DTMF_A ;SEGUIMOS CON LA ESPERA
MARCA_DTMF_B
BCF DTMF_DS ;CLOCK
BSF DTMF_CS ;DESACTIVAMOS IC
BSF DTMF_RW ;MODO LECTURA
RETURN
; ###########################################################################
; INICIO DEL PROGRAMA
; ###########################################################################
INICIO
CALL CONFIGURACION ;CONFIGURAMOS EL PIC
CALL UP_MT8889 ;INICIALIZAMOS EL MT8889
MOVLW 200 ;ESPERAMOS 2 SEGUNDOS O LO QUE SE DESEE
CALL DEMO_VMS
MOVLW 200
CALL DEMO_VMS
LLAMADA
BSF TELF ;DESCOLGAMOS TELEFONO
MOVLW 200 ;ESPERAMOS 2 SEGUNDOS PARA CONEXION
CALL DEMO_VMS ;ESTO PUEDE VARIAR SEGUN EL PROOVEDOR
MOVLW 200
CALL DEMO_VMS
; AQUI HABILITAMOS LA GENERACION DE TONO DTMF (CRA,B0)
DTMF_COMD_MODE
MOVLW B"00000001" ;NO_SELEC CRB, NO_IRQ, DTMF_MODE, TONO
CALL WRITE_MT8889
CALL READ_MT8889 ;LECTURA DEL STATUS PARA BORRAR FLAGS
; REALIZAMOS LA LLAMADA AL NUMERO DESEADO, EN MI CASO LLAMO A MI CELULAR.
; PUEDES AGREGAR O QUITAR NUMEROS, TAMBIEN SE PUEDE HACER UNA RUTINA PARA
; REDUCIR CODIGO... ESO TE LO DEJO COMO TAREA Giño
MOVLW TONO_9
CALL MARCA_DTMF ;TX SU EQUIVALENTE EN DTMF
MOVLW TONO_7
CALL MARCA_DTMF ;TX SU EQUIVALENTE EN DTMF
MOVLW TONO_8
CALL MARCA_DTMF ;TX SU EQUIVALENTE EN DTMF
MOVLW TONO_4
CALL MARCA_DTMF ;TX SU EQUIVALENTE EN DTMF
MOVLW TONO_8
CALL MARCA_DTMF ;TX SU EQUIVALENTE EN DTMF
MOVLW TONO_3
CALL MARCA_DTMF ;TX SU EQUIVALENTE EN DTMF
MOVLW TONO_2
CALL MARCA_DTMF ;TX SU EQUIVALENTE EN DTMF
MOVLW TONO_8
CALL MARCA_DTMF ;TX SU EQUIVALENTE EN DTMF
; AQUI HABILITAMOS LA INTERRUPCION DEL MT8889 (NIVEL LOGICO 0) CUANDO SE
; DETECTE UN TONO DTMF.
DTMF_COMD_MODE
MOVLW B"00000100" ;NO_SELEC CRB, IRQ, DTMF_MODE, NO_TONO
CALL WRITE_MT8889
CALL READ_MT8889 ;LECTURA DEL STATUS PARA BORRAR FLAGS
ESPERA
BTFSC DTMF_IRQ ;INTERRUPCION POR RX DE TONO DTMF?
GOTO ESPERA ;NO
DTMF_DATO_MODE ;SI
CALL READ_MT8889 ;LECTURA DE TONO RECIBIDO
MOVLW TONO_AST
XORWF DTMF_RX,W
BTFSS STATUS,Z ;EL DATO RECIBIDO ES *?
GOTO ESPERA ;NO
FIN_LLAMADA
MOVLW 200 ;ESPERAMOS 1 SEGUNDO
CALL DEMO_VMS
BCF TELF ;COLGAMOS TELEFONO
GOTO $ ;LAZO INFINITO
END
-
Les dejo el link del primer ejemplo
http://miarroba.com/foros/ver.php?foroid=348538&temaid=4042481
-
El siguiente ejemplo muestra como trabajar con los MT8880. El diagrama muestra como se debe de conectar a la línea telefónica, en comparación con el MT8889, este lleva un transistor en la salida del tono. Esta misma técnica se puede usar para el MT8889, adjunto el diagrama.
Este es el link para descargar los archivos
http://miarroba.com/foros/ver.php?foroid=348538&temaid=4043220
-
Gracias !!!!!!
Bien explicado todo.

-
disculpe pero es que estoy confundido el mt8888 funciona igual que mt8889 y si no es asi que cambios requeriria pa lograr que funcione..
-
Hola diegouny, disculpa la demora en la respuesta pero no se que está pasando con Mi @ que ya no me está enviando los emails cuando alguien responde.... en fin. Respondiendo a tu pregunta, los 2 trabajan igual sólo que difieren en cómo le envias los pulsos de control... en los ejemplo que deje podrás ver exactamente a lo que me refiero.
-
Hola a todos, ya que muchos están interesados en este tema y me solicitan el código y diagrama... pues los dejo aquí.
EJEMPLO PARA EL MT8880
; ###########################################################################
; NOMBRE : DEMO_MT8880.ASM
; FECHA : 04/01/06
; XTAL : 4MHZ
; DESCRIPCION : REALIZA UNA LLAMADA TELEFONICA Y ESPERA QUE SE PRESIONE
; LA TECLA * (ASTERISCO) PARA FINALIZAR LA LLAMADA
; DISEÑADO POR : MARIO PASTOR PARA LOS AMIGOTES DEL FORO TODOPIC
; ###########################################################################
LIST P=16F877A
RADIX DEC
ERRORLEVEL -302
INCLUDE "P16F877A.INC"
__CONFIG 0X3F71
; ###########################################################################
; DEFINICION DE LA MEMORIA RAM
; ###########################################################################
CBLOCK 0X20
DEMO_1,DEMO_2,DEMO_CONT
DTMF_TX,DTMF_RX
ENDC
; ####################################################################
; DEFINICION DE IGUALDADES
; ####################################################################
; SE DEFINEN PINES DE PORTA
#DEFINE TELF PORTA,3
#DEFINE DTMF_D3 PORTA,5
#DEFINE DTMF_TRIS3 TRISA,5
; SE DEFINEN PINES DE PORTC
#DEFINE DTMF_IRQ PORTC,1
#DEFINE DTMF_f2 PORTC,2
#DEFINE DTMF_RS0 PORTC,3
; SE DEFINEN PINES DE PORTD
#DEFINE DTMF_RW PORTD,0
; SE DEFINEN PINES DE PORTE
#DEFINE DTMF_D2 PORTE,0
#DEFINE DTMF_TRIS2 TRISE,0
#DEFINE DTMF_D1 PORTE,1
#DEFINE DTMF_TRIS1 TRISE,1
#DEFINE DTMF_D0 PORTE,2
#DEFINE DTMF_TRIS0 TRISE,2
; ####################################################################
; DEFINICION DE MACROS
; ####################################################################
BANK_0 MACRO
BCF STATUS,RP0
BCF STATUS,RP1
ENDM
BANK_1 MACRO
BSF STATUS,RP0
BCF STATUS,RP1
ENDM
BANK_2 MACRO
BCF STATUS,RP0
BSF STATUS,RP1
ENDM
BANK_3 MACRO
BSF STATUS,RP0
BSF STATUS,RP1
ENDM
PAGE_0 MACRO
BCF PCLATH,3
BCF PCLATH,4
ENDM
PAGE_1 MACRO
BSF PCLATH,3
BCF PCLATH,4
ENDM
; ###########################################################################
ORG 0X00
NOP
GOTO INICIO
ORG 0X05
; ###########################################################################
; RUTINA DE CONFIGURACION
; ###########################################################################
; CONFIGURACIONES INICIALES DEL PIC
CONFIGURACION
BANK_0
MOVLW B'00000000' ;TELF=0 (COLGADO),X,X,X
MOVWF PORTA
MOVLW B'00000000' ;DTMF_RS0=0,DTMF_f2=0,X,X
MOVWF PORTC
MOVLW B'00000001' ;DTMF_RW=1
MOVWF PORTD
BSF OPTION_REG,NOT_RBPU ;NO PULL UP
BANK_1
MOVLW B'00000111' ;PORTA COMO E/S DIGITALES
MOVWF ADCON1
MOVLW B'00000000' ;TODOS COMO SALIDA
MOVWF TRISA
MOVLW B'00000010' ;RC1=ENTRADA PARA EL DTMF_IRQ
MOVWF TRISC
MOVLW B'00000000' ;TODOS COMO SALIDA
MOVWF TRISD
MOVLW B'00000111' ;TODOS COMO ENTRADA
MOVWF TRISE
BANK_0
RETURN
; ###########################################################################
; RUTINAS DE RETARDO
; ###########################################################################
; EL RETARDO GENERADO ES DE APROXIMADAMENTE 5 MS PARA UN XTAL DE 4MHZ
; REGISTROS USADOS: DEMO_1,DEMO_2
DEMO_5MS
MOVLW .10
MOVWF DEMO_1
MOVLW .165
MOVWF DEMO_2
DECFSZ DEMO_2,F
GOTO $-1
DECFSZ DEMO_1,F
GOTO $-5
RETURN
; ###########################################################################
; RUTINA QUE GENERA RETARDOS MULTIPLOS A 5MS DEPENDIENDO DEL VALOR QUE SE
; PONGA EN EL REGISTRO W.
; REGISTROS USADOS: DEMO_CONT
DEMO_VMS
MOVWF DEMO_CONT
CALL DEMO_5MS
DECFSZ DEMO_CONT,F
GOTO $-2
RETURN
; ###########################################################################
; RUTINAS PARA EL MT8880
; ###########################################################################
;
; | | | | | | | | | |
; ----------------------------------------------------------
; | VDD ST/ EST D3 D2 D1 D0 /IRQ f2 RS0 |
; | GT CP |
; | |
; | MT8880 |
; | |
; | |
; | IN+ IN- GS VREF VSS OSC1 OSC2 TONE R/W /CS |
; ----------------------------------------------------------
; | | | | | | | | | |
;
; ###########################################################################
; SE DEFINEN LOS TONOS DTMF
TONO_1 EQU B'00000001'
TONO_2 EQU B'00000010'
TONO_3 EQU B'00000011'
TONO_4 EQU B'00000100'
TONO_5 EQU B'00000101'
TONO_6 EQU B'00000110'
TONO_7 EQU B'00000111'
TONO_8 EQU B'00001000'
TONO_9 EQU B'00001001'
TONO_0 EQU B'00001010'
TONO_AST EQU B'00001011'
TONO_# EQU B'00001100'
TONO_A EQU B'00001101'
TONO_B EQU B'00001110'
TONO_C EQU B'00001111'
TONO_D EQU B'00000000'
#DEFINE DTMF_COMD_MODE BSF DTMF_RS0
#DEFINE DTMF_DATO_MODE BCF DTMF_RS0
; ###########################################################################
; INICIALIZACION DEL MT8880 SEGUN DATASHEET
UP_MT8880
; ESTA SECUENCIA ES LA QUE SE ENCUENTRAN EN EL DATASHEET
MOVLW 20 ;SECUENCIA ESTABLECIDA POR FABRICANTE
CALL DEMO_VMS ;RETARDO PARA ESTABILIZACION (100MS)
DTMF_COMD_MODE
CALL READ_MT8880 ;1° LECTURA DE STATUS REGISTER
MOVLW B'00000000' ;2° ESCRITURA DE CONTROL REGISTER
CALL WRITE_MT8880
MOVLW B'00000000' ;3° ESCRITURA DE CONTROL REGISTER
CALL WRITE_MT8880
MOVLW B'00001000' ;4° ESCRITURA DE CONTROL REGISTER
CALL WRITE_MT8880
MOVLW B'00000000' ;5° ESCRITURA DE CONTROL REGISTER
CALL WRITE_MT8880
CALL READ_MT8880 ;6° LECTURA DE STATUS REGISTER
; AQUI REALIZAMOS LA CONFIGURACION QUE DESEAMOS
MOVLW B'00001000' ;ESCRITURA EN CRA
CALL WRITE_MT8880 ;SELEC CRB, NO_IRQ, DTMF_MODE, NO_TONO
MOVLW B'00000000' ;ESCRITURA EN CRB
CALL WRITE_MT8880 ;DUAL_TONE, NO_TEST, BURST MODE
CALL READ_MT8880 ;LECTURA DE STATUS REGISTER
RETURN
; ###########################################################################
; PERMITE LA LECTURA DEL MT8880
; REGISTROS USADOS: DTMF_RX
READ_MT8880
BANK_1
BSF DTMF_TRIS3 ;CONFIGURA PUERTO COMO ENTRADA
BSF DTMF_TRIS2
BSF DTMF_TRIS1
BSF DTMF_TRIS0
BANK_0
BSF DTMF_RW ;MODO LECTURA
BSF DTMF_f2 ;CLOCK
CLRF DTMF_RX ;BORRAMOS REGISTRO PARA RECEPCION
BTFSC DTMF_D0
BSF DTMF_RX,0
BTFSC DTMF_D1
BSF DTMF_RX,1
BTFSC DTMF_D2
BSF DTMF_RX,2
BTFSC DTMF_D3
BSF DTMF_RX,3
NOP
BCF DTMF_f2 ;CLOCK
RETURN
; ###########################################################################
; PERMITE LA ESCRITURA DEL MT8880
; REGISTROS USADOS: DTMF_TX
WRITE_MT8880
MOVWF DTMF_TX
BANK_1
BCF DTMF_TRIS3 ;CONFIGURA PUERTO COMO SALIDA
BCF DTMF_TRIS2
BCF DTMF_TRIS1
BCF DTMF_TRIS0
BANK_0
BCF DTMF_D0 ;POR DEFECTO TODOS A CERO
BCF DTMF_D1
BCF DTMF_D2
BCF DTMF_D3
BTFSC DTMF_TX,0
BSF DTMF_D0
BTFSC DTMF_TX,1
BSF DTMF_D1
BTFSC DTMF_TX,2
BSF DTMF_D2
BTFSC DTMF_TX,3
BSF DTMF_D3
NOP
BCF DTMF_RW ;MODO ESCRITURA
BSF DTMF_f2 ;CLOCK
NOP
BCF DTMF_f2 ;CLOCK
BSF DTMF_RW ;MODO LECTURA
BANK_1
BSF DTMF_TRIS3 ;CONFIGURA PUERTO COMO ENTRADA
BSF DTMF_TRIS2
BSF DTMF_TRIS1
BSF DTMF_TRIS0
BANK_0
RETURN
; ###########################################################################
; TRASMITE EL EQUIVALENTE DTMF DE UN NUMERO CON DURACION ESTANDAR
MARCA_DTMF
DTMF_DATO_MODE
CALL WRITE_MT8880 ;TX SU EQUIVALENTE EN DTMF
DTMF_COMD_MODE
BSF DTMF_RW ;MODO LECTURA
MARCA_DTMF_A
BSF DTMF_f2 ;CLOCK
NOP
BTFSC DTMF_D1 ;BUFFER LIBRE PARA SIGUIENTE TX?
GOTO MARCA_DTMF_B ;SI
BCF DTMF_f2 ;NO
GOTO MARCA_DTMF_A ;SEGUIMOS CON LA ESPERA
MARCA_DTMF_B
BCF DTMF_f2 ;CLOCK
BSF DTMF_RW ;MODO LECTURA
RETURN
; ###########################################################################
; INICIO DEL PROGRAMA
; ###########################################################################
INICIO
CALL CONFIGURACION ;CONFIGURAMOS EL PIC
CALL UP_MT8880 ;INICIALIZAMOS EL MT8880
MOVLW 200 ;ESPERAMOS 2 SEGUNDOS O LO QUE SE DESEE
CALL DEMO_VMS
MOVLW 200
CALL DEMO_VMS
LLAMADA
BSF TELF ;DESCOLGAMOS TELEFONO
MOVLW 200 ;ESPERAMOS 2 SEGUNDOS PARA CONEXION
CALL DEMO_VMS ;ESTO PUEDE VARIAR SEGUN EL PROOVEDOR
MOVLW 200
CALL DEMO_VMS
; AQUI HABILITAMOS LA GENERACION DE TONO DTMF (CRA,B0)
DTMF_COMD_MODE
MOVLW B'00000001' ;NO_SELEC CRB, NO_IRQ, DTMF_MODE, TONO
CALL WRITE_MT8880
CALL READ_MT8880 ;LECTURA DEL STATUS PARA BORRAR FLAGS
; REALIZAMOS LA LLAMADA AL NUMERO DESEADO, EN MI CASO LLAMO A MI CELULAR.
; PUEDES AGREGAR O QUITAR NUMEROS, TAMBIEN SE PUEDE HACER UNA RUTINA PARA
; REDUCIR CODIGO... ESO TE LO DEJO COMO TAREA ;)
MOVLW TONO_2
CALL MARCA_DTMF ;TX SU EQUIVALENTE EN DTMF
MOVLW TONO_2
CALL MARCA_DTMF ;TX SU EQUIVALENTE EN DTMF
MOVLW TONO_6
CALL MARCA_DTMF ;TX SU EQUIVALENTE EN DTMF
MOVLW TONO_4
CALL MARCA_DTMF ;TX SU EQUIVALENTE EN DTMF
MOVLW TONO_3
CALL MARCA_DTMF ;TX SU EQUIVALENTE EN DTMF
MOVLW TONO_0
CALL MARCA_DTMF ;TX SU EQUIVALENTE EN DTMF
MOVLW TONO_6
CALL MARCA_DTMF ;TX SU EQUIVALENTE EN DTMF
; MOVLW TONO_8
; CALL MARCA_DTMF ;TX SU EQUIVALENTE EN DTMF
; AQUI HABILITAMOS LA INTERRUPCION DEL MT8880 (NIVEL LOGICO 0) CUANDO SE
; DETECTE UN TONO DTMF.
DTMF_COMD_MODE
MOVLW B'00000100' ;NO_SELEC CRB, IRQ, DTMF_MODE, NO_TONO
CALL WRITE_MT8880
CALL READ_MT8880 ;LECTURA DEL STATUS PARA BORRAR FLAGS
ESPERA
BTFSC DTMF_IRQ ;INTERRUPCION POR RX DE TONO DTMF?
GOTO ESPERA ;NO
DTMF_DATO_MODE ;SI
CALL READ_MT8880 ;LECTURA DE TONO RECIBIDO
MOVLW TONO_AST
XORWF DTMF_RX,W
BTFSS STATUS,Z ;EL DATO RECIBIDO ES *?
GOTO ESPERA ;NO
FIN_LLAMADA
MOVLW 200 ;ESPERAMOS 1 SEGUNDO
CALL DEMO_VMS
BCF TELF ;COLGAMOS TELEFONO
GOTO $ ;LAZO INFINITO
END
-
EJEMPLO PARA EL MT8889
; ###########################################################################
; NOMBRE : DEMO_DTMF.ASM
; FECHA : 04/01/06
; XTAL : 4MHZ
; DESCRIPCION : REALIZA UNA LLAMADA TELEFONICA Y ESPERA QUE SE PRESIONE
; LA TECLA * (ASTERISCO) PARA FINALIZAR LA LLAMADA
; DISEÑADO POR : MARIO PASTOR PARA LOS AMIGOTES DEL FORO TODOPIC
; ###########################################################################
LIST P=16F877A
RADIX DEC
ERRORLEVEL -302
INCLUDE "P16F877A.INC"
__CONFIG 0X3F71
; ###########################################################################
; DEFINICION DE LA MEMORIA RAM
; ###########################################################################
CBLOCK 0X20
DEMO_1,DEMO_2,DEMO_CONT
DTMF_TX,DTMF_RX
ENDC
; ####################################################################
; DEFINICION DE IGUALDADES
; ####################################################################
; SE DEFINEN PINES DE PORTA
#DEFINE TELF PORTA,3
#DEFINE DTMF_D3 PORTA,5
#DEFINE DTMF_TRIS3 TRISA,5
; SE DEFINEN PINES DE PORTC
#DEFINE DTMF_IRQ PORTC,1
#DEFINE DTMF_DS PORTC,2
#DEFINE DTMF_RS0 PORTC,3
; SE DEFINEN PINES DE PORTD
#DEFINE DTMF_RW PORTD,0
#DEFINE DTMF_CS PORTD,1
; SE DEFINEN PINES DE PORTE
#DEFINE DTMF_D2 PORTE,0
#DEFINE DTMF_TRIS2 TRISE,0
#DEFINE DTMF_D1 PORTE,1
#DEFINE DTMF_TRIS1 TRISE,1
#DEFINE DTMF_D0 PORTE,2
#DEFINE DTMF_TRIS0 TRISE,2
; ####################################################################
; DEFINICION DE MACROS
; ####################################################################
BANK_0 MACRO
BCF STATUS,RP0
BCF STATUS,RP1
ENDM
BANK_1 MACRO
BSF STATUS,RP0
BCF STATUS,RP1
ENDM
BANK_2 MACRO
BCF STATUS,RP0
BSF STATUS,RP1
ENDM
BANK_3 MACRO
BSF STATUS,RP0
BSF STATUS,RP1
ENDM
PAGE_0 MACRO
BCF PCLATH,3
BCF PCLATH,4
ENDM
PAGE_1 MACRO
BSF PCLATH,3
BCF PCLATH,4
ENDM
; ###########################################################################
ORG 0X00
NOP
GOTO INICIO
ORG 0X05
; ###########################################################################
; RUTINA DE CONFIGURACION
; ###########################################################################
; CONFIGURACIONES INICIALES DEL PIC
CONFIGURACION
BANK_0
MOVLW B'00000000' ;TELF=0 (COLGADO),X,X,X
MOVWF PORTA
MOVLW B'00000000' ;DTMF_RS0=0,DTMF_DS=0,X,X
MOVWF PORTC
MOVLW B'00000011' ;DTMF_CS=1,DTMF_RW=1
MOVWF PORTD
BSF OPTION_REG,NOT_RBPU ;NO PULL UP
BANK_1
MOVLW B'00000111' ;PORTA COMO E/S DIGITALES
MOVWF ADCON1
MOVLW B'00000000' ;TODOS COMO SALIDA
MOVWF TRISA
MOVLW B'00000010' ;RC1=ENTRADA PARA EL DTMF_IRQ
MOVWF TRISC
MOVLW B'00000000' ;TODOS COMO SALIDA
MOVWF TRISD
MOVLW B'00000111' ;TODOS COMO ENTRADA
MOVWF TRISE
BANK_0
RETURN
; ###########################################################################
; RUTINAS DE RETARDO
; ###########################################################################
; EL RETARDO GENERADO ES DE APROXIMADAMENTE 5 MS PARA UN XTAL DE 4MHZ
; REGISTROS USADOS: DEMO_1,DEMO_2
DEMO_5MS
MOVLW .10
MOVWF DEMO_1
MOVLW .165
MOVWF DEMO_2
DECFSZ DEMO_2,F
GOTO $-1
DECFSZ DEMO_1,F
GOTO $-5
RETURN
; ###########################################################################
; RUTINA QUE GENERA RETARDOS MULTIPLOS A 5MS DEPENDIENDO DEL VALOR QUE SE
; PONGA EN EL REGISTRO W.
; REGISTROS USADOS: DEMO_CONT
DEMO_VMS
MOVWF DEMO_CONT
CALL DEMO_5MS
DECFSZ DEMO_CONT,F
GOTO $-2
RETURN
; ###########################################################################
; RUTINAS PARA EL MT8889
; ###########################################################################
;
; | | | | | | | | | |
; ----------------------------------------------------------
; | VDD ST/ EST D3 D2 D1 D0 /IRQ DS RS0 |
; | GT CP |
; | |
; | MT8889 |
; | |
; | |
; | IN+ IN- GS VREF VSS OSC1 OSC2 TONE R/W /CS |
; ----------------------------------------------------------
; | | | | | | | | | |
;
; ###########################################################################
; SE DEFINEN LOS TONOS DTMF
TONO_1 EQU B'00000001'
TONO_2 EQU B'00000010'
TONO_3 EQU B'00000011'
TONO_4 EQU B'00000100'
TONO_5 EQU B'00000101'
TONO_6 EQU B'00000110'
TONO_7 EQU B'00000111'
TONO_8 EQU B'00001000'
TONO_9 EQU B'00001001'
TONO_0 EQU B'00001010'
TONO_AST EQU B'00001011'
TONO_# EQU B'00001100'
TONO_A EQU B'00001101'
TONO_B EQU B'00001110'
TONO_C EQU B'00001111'
TONO_D EQU B'00000000'
#DEFINE DTMF_COMD_MODE BSF DTMF_RS0
#DEFINE DTMF_DATO_MODE BCF DTMF_RS0
; ###########################################################################
; INICIALIZACION DEL MT8889 SEGUN DATASHEET
UP_MT8889
; ESTA SECUENCIA ES LA QUE SE ENCUENTRAN EN EL DATASHEET
MOVLW 20 ;SECUENCIA ESTABLECIDA POR FABRICANTE
CALL DEMO_VMS ;RETARDO PARA ESTABILIZACION (100MS)
DTMF_COMD_MODE
CALL READ_MT8889 ;1° LECTURA DE STATUS REGISTER
MOVLW B'00000000' ;2° ESCRITURA DE CONTROL REGISTER
CALL WRITE_MT8889
MOVLW B'00000000' ;3° ESCRITURA DE CONTROL REGISTER
CALL WRITE_MT8889
MOVLW B'00001000' ;4° ESCRITURA DE CONTROL REGISTER
CALL WRITE_MT8889
MOVLW B'00000000' ;5° ESCRITURA DE CONTROL REGISTER
CALL WRITE_MT8889
CALL READ_MT8889 ;6° LECTURA DE STATUS REGISTER
; AQUI REALIZAMOS LA CONFIGURACION QUE DESEAMOS
MOVLW B'00001000' ;ESCRITURA EN CRA
CALL WRITE_MT8889 ;SELEC CRB, NO_IRQ, DTMF_MODE, NO_TONO
MOVLW B'00000000' ;ESCRITURA EN CRB
CALL WRITE_MT8889 ;DUAL_TONE, NO_TEST, BURST MODE
CALL READ_MT8889 ;LECTURA DE STATUS REGISTER
RETURN
; ###########################################################################
; PERMITE LA LECTURA DEL MT8889
; REGISTROS USADOS: DTMF_RX
READ_MT8889
BANK_1
BSF DTMF_TRIS3 ;CONFIGURA PUERTO COMO ENTRADA
BSF DTMF_TRIS2
BSF DTMF_TRIS1
BSF DTMF_TRIS0
BANK_0
BSF DTMF_RW ;MODO LECTURA
BCF DTMF_CS ;ACTIVA IC
BSF DTMF_DS ;CLOCK
CLRF DTMF_RX ;BORRAMOS REGISTRO PARA RECEPCION
BTFSC DTMF_D0
BSF DTMF_RX,0
BTFSC DTMF_D1
BSF DTMF_RX,1
BTFSC DTMF_D2
BSF DTMF_RX,2
BTFSC DTMF_D3
BSF DTMF_RX,3
NOP
BCF DTMF_DS ;CLOCK
BSF DTMF_CS ;DESACTIVAMOS IC
RETURN
; ###########################################################################
; PERMITE LA ESCRITURA DEL MT8889
; REGISTROS USADOS: DTMF_TX
WRITE_MT8889
MOVWF DTMF_TX
BANK_1
BCF DTMF_TRIS3 ;CONFIGURA PUERTO COMO SALIDA
BCF DTMF_TRIS2
BCF DTMF_TRIS1
BCF DTMF_TRIS0
BANK_0
BCF DTMF_D0 ;POR DEFECTO TODOS A CERO
BCF DTMF_D1
BCF DTMF_D2
BCF DTMF_D3
BTFSC DTMF_TX,0
BSF DTMF_D0
BTFSC DTMF_TX,1
BSF DTMF_D1
BTFSC DTMF_TX,2
BSF DTMF_D2
BTFSC DTMF_TX,3
BSF DTMF_D3
NOP
BCF DTMF_RW ;MODO ESCRITURA
BCF DTMF_CS ;ACTIVA IC
BSF DTMF_DS ;CLOCK
NOP
BCF DTMF_DS ;CLOCK
BSF DTMF_CS ;DESACTIVAMOS IC
BSF DTMF_RW ;MODO LECTURA
BANK_1
BSF DTMF_TRIS3 ;CONFIGURA PUERTO COMO ENTRADA
BSF DTMF_TRIS2
BSF DTMF_TRIS1
BSF DTMF_TRIS0
BANK_0
RETURN
; ###########################################################################
; TRASMITE EL EQUIVALENTE DTMF DE UN NUMERO CON DURACION ESTANDAR
MARCA_DTMF
DTMF_DATO_MODE
CALL WRITE_MT8889 ;TX SU EQUIVALENTE EN DTMF
DTMF_COMD_MODE
BSF DTMF_RW ;MODO LECTURA
MARCA_DTMF_A
BCF DTMF_CS ;ACTIVA IC
BSF DTMF_DS ;CLOCK
BTFSC DTMF_D1 ;BUFFER LIBRE PARA SIGUIENTE TX?
GOTO MARCA_DTMF_B ;SI
BCF DTMF_DS ;NO
BSF DTMF_CS ;DESACTIVAMOS IC
GOTO MARCA_DTMF_A ;SEGUIMOS CON LA ESPERA
MARCA_DTMF_B
BCF DTMF_DS ;CLOCK
BSF DTMF_CS ;DESACTIVAMOS IC
BSF DTMF_RW ;MODO LECTURA
RETURN
; ###########################################################################
; INICIO DEL PROGRAMA
; ###########################################################################
INICIO
CALL CONFIGURACION ;CONFIGURAMOS EL PIC
CALL UP_MT8889 ;INICIALIZAMOS EL MT8889
MOVLW 200 ;ESPERAMOS 2 SEGUNDOS O LO QUE SE DESEE
CALL DEMO_VMS
MOVLW 200
CALL DEMO_VMS
LLAMADA
BSF TELF ;DESCOLGAMOS TELEFONO
MOVLW 200 ;ESPERAMOS 2 SEGUNDOS PARA CONEXION
CALL DEMO_VMS ;ESTO PUEDE VARIAR SEGUN EL PROOVEDOR
MOVLW 200
CALL DEMO_VMS
; AQUI HABILITAMOS LA GENERACION DE TONO DTMF (CRA,B0)
DTMF_COMD_MODE
MOVLW B'00000001' ;NO_SELEC CRB, NO_IRQ, DTMF_MODE, TONO
CALL WRITE_MT8889
CALL READ_MT8889 ;LECTURA DEL STATUS PARA BORRAR FLAGS
; REALIZAMOS LA LLAMADA AL NUMERO DESEADO, EN MI CASO LLAMO A MI CELULAR.
; PUEDES AGREGAR O QUITAR NUMEROS, TAMBIEN SE PUEDE HACER UNA RUTINA PARA
; REDUCIR CODIGO... ESO TE LO DEJO COMO TAREA ;)
MOVLW TONO_9
CALL MARCA_DTMF ;TX SU EQUIVALENTE EN DTMF
MOVLW TONO_7
CALL MARCA_DTMF ;TX SU EQUIVALENTE EN DTMF
MOVLW TONO_8
CALL MARCA_DTMF ;TX SU EQUIVALENTE EN DTMF
MOVLW TONO_4
CALL MARCA_DTMF ;TX SU EQUIVALENTE EN DTMF
MOVLW TONO_8
CALL MARCA_DTMF ;TX SU EQUIVALENTE EN DTMF
MOVLW TONO_3
CALL MARCA_DTMF ;TX SU EQUIVALENTE EN DTMF
MOVLW TONO_2
CALL MARCA_DTMF ;TX SU EQUIVALENTE EN DTMF
MOVLW TONO_8
CALL MARCA_DTMF ;TX SU EQUIVALENTE EN DTMF
; AQUI HABILITAMOS LA INTERRUPCION DEL MT8889 (NIVEL LOGICO 0) CUANDO SE
; DETECTE UN TONO DTMF.
DTMF_COMD_MODE
MOVLW B'00000100' ;NO_SELEC CRB, IRQ, DTMF_MODE, NO_TONO
CALL WRITE_MT8889
CALL READ_MT8889 ;LECTURA DEL STATUS PARA BORRAR FLAGS
ESPERA
BTFSC DTMF_IRQ ;INTERRUPCION POR RX DE TONO DTMF?
GOTO ESPERA ;NO
DTMF_DATO_MODE ;SI
CALL READ_MT8889 ;LECTURA DE TONO RECIBIDO
MOVLW TONO_AST
XORWF DTMF_RX,W
BTFSS STATUS,Z ;EL DATO RECIBIDO ES *?
GOTO ESPERA ;NO
FIN_LLAMADA
MOVLW 200 ;ESPERAMOS 1 SEGUNDO
CALL DEMO_VMS
BCF TELF ;COLGAMOS TELEFONO
GOTO $ ;LAZO INFINITO
END
-
Le pido a nuestro moderador Sisco, que por favor le coloque una chincheta a este post para que sea más facil de encontrar :mrgreen:
-
Muy buen aporte Mario_Pastor, me van a ser de mucha utilidad :-), voy a utilizar tu codigo a ver que me resulta, luego pongo comentarios. Saludos. :mrgreen:
-
yo estoy realizando la libreria para usar el cm8888 con mikrobasic ya la termine y la estoy probando y ps hasta el momento funciona como deberia, si quieren pueden ver los avances aki
mikrobasic y el CM8888 (http://www.todopic.com.ar/foros/index.php?topic=25129.msg205760#msg205760)
-
Para k depronto no se confunda cual libreria es cual dejo el codigo de la funcion que contola el cm8888
module CM8888
'*******************************************************************************
'*******************************************************************************
' LIBRERIA PARA CONTROLAR EL CM8888 CREADA POR MATEO DUQUE - ekud_87@hotmail.com -
' 9 DE ABRIL DEL 2009
'*******************************************************************************
'*******************************************************************************
'Pines de datos
Symbol D3 = 3
Symbol D2 = 2
Symbol D1 = 1
Symbol D0 = 0
Symbol PDATA = PORTC
Symbol PCONF = TRISC
'Pines de control
Symbol CS = PORTB.4
Symbol RSO = PORTB.3
Symbol R_D = PORTB.2
Symbol W_R = PORTB.1
Symbol IRQ = PORTB.0
'funciones
Symbol LEER = 0
Symbol ESCRIBIR = 1
'Bancos
Symbol DATOS = 0
Symbol ESTADO = 1
Symbol CONTROL = 1
'*******************************************************************************
'*******************************************************************************
' PROCEDIMIENTOS Y FUNCIONES
'*******************************************************************************
'*******************************************************************************
Sub Function CM8888(Dim Funcion as Boolean, Dim Banco as Boolean, Dim Tono as Byte) as Byte
'Variable Auxiliar
Dim BUF as byte
PDATA.D0 = 0
PDATA.D1 = 0
PDATA.D2 = 0
PDATA.D3 = 0
if FUNCION = LEER then
PCONF.D0 = 1
PCONF.D1 = 1
PCONF.D2 = 1
PCONF.D3 = 1
'Direcciono hacia los registros status o control
RSO = Banco
'Habilito la lectura
R_D = 0
'Desabilito la escritura
W_R = 1
'Habilito el cm8888
CS = 0
BUF = 0
'Leo los datos
BUF.0 = PDATA.D0
BUF.1 = PDATA.D1
BUF.2 = PDATA.D2
BUF.3 = PDATA.D3
'Finalizo el cm8888
CS = 1
'Retorno el valor
CM8888 = BUF
else
'Configuro el puerto como salida
PCONF.D0 = 0
PCONF.D1 = 0
PCONF.D2 = 0
PCONF.D3 = 0
'Selecciono transmicion/recepcion de datos
RSO = Banco
'Desabilito la lectura
R_D = 1
'Habilito la escritura
W_R = 0
'Habilito el cm8888
CS = 0
'Escribo el dato
PDATA.D0 = Tono.0
PDATA.D1 = Tono.1
PDATA.D2 = Tono.2
PDATA.D3 = Tono.3
'"Finalizo" el cm8888
CS = 1
CM8888 = 255
end if
End sub
'Procedimiento para configurar el CM8888 e inicializar el mt8888
Sub Procedure CM8888_INIT()
Dim aux as byte
CS = 0
aux = CM8888(LEER,ESTADO,0)
aux = CM8888(ESCRIBIR,CONTROL,0)
aux = CM8888(ESCRIBIR,CONTROL,0)
aux = CM8888(ESCRIBIR,CONTROL,8)
aux = CM8888(ESCRIBIR,CONTROL,0)
aux = CM8888(LEER,ESTADO,0)
CS = 1
end sub
end.
y para usarla seria algo como
CM8888(ESCRIBIR,DATOS,7)
esta linea generaria el tono dtmf 7
un saludo! :mrgreen:
-
Hola amigos, como estan... saben estoy realizando el mismo proyecto; pero tengo problemas para conseguir ese transformador, diganme es indispensable???