Autor Tema: Envio de tonos DTMF usando pic 16F84  (Leído 5361 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado fzurita

  • PIC10
  • *
  • Mensajes: 33
Envio de tonos DTMF usando pic 16F84
« en: 12 de Febrero de 2008, 13:36:40 »
Hola! Necesito que un PIC 16F84 reciba un dato serial y en la salida vaya poniendo cada digito en binario, con un tiempo intermedio ajustable. Es decir, si por ejemplo en el PortA recibo el dato "123", en PortB tenga lo siguiente

           1   2   3
RB0     0   0   0
RB1     0   0   0
RB2     0   1   1
Rb3     1   0   1

Estos numeros binarios deben ir a un generador de tonos DTMF (TP5088), el cual al recibir la secuencia binaria, vaya generando los tonos.

He estado estudiando  algunos ejemplos de programacion, asi que me imagino que no debiera ser dificil, lo que no se es como el PIC recibe los datos seriales (RS-232 por ejemplo), para almacenarlos y hacer la conbversion a binario.

Ufff ojala haya sido claro para explicar....les acradezco su pronta ayuda..

 




Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Envio de tonos DTMF usando pic 16F84
« Respuesta #1 en: 12 de Febrero de 2008, 13:47:29 »
¿En qué lenguaje programas?

Saludos
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado fzurita

  • PIC10
  • *
  • Mensajes: 33
Re: Envio de tonos DTMF usando pic 16F84
« Respuesta #2 en: 12 de Febrero de 2008, 15:58:28 »
Hola jfh, te aclaro que esta es mi primera incursion en este tema, los codigos assembly que he estado estudiando provienen de los ejemplos de programacion del siguiente link, estan bien claros...

http://www.eici.ucm.cl/Academicos/lpavesi/archivos/Apuntes/Apuntes%20Circuitos%20Digitales/Tema6.pdf


Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Envio de tonos DTMF usando pic 16F84
« Respuesta #3 en: 12 de Febrero de 2008, 16:27:06 »
Muy bien. Yo programo en "C" y ocasionalmente en "ASM". Puedes utilizar el buscador del foro dentro del foro del "Almacen de  Assambler" para localizar esta información. Aquí tienes un ejemplo de uso del RS232:

http://www.todopic.com.ar/foros/index.php?topic=14100.msg84436#msg84436

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: Envio de tonos DTMF usando pic 16F84
« Respuesta #4 en: 12 de Febrero de 2008, 16:38:35 »
Hola, como el 16F84 no tiene puerto de comunicacion implementado por hard, tienes que hacerlo por soft, asi que aqui te paso uno, esta para 1200
Empleas 2 retardos, uno del tiempo de 1/2 bit, para justamente, al detectar la comunicacion, leer justo en la mitad del bit

Código: ASM
  1. ;---------------------------------------------------------------------------
  2. ;****************** RETARDOS PARA LA COMUNICACION RS232 ********************
  3. ;---------------------------------------------------------------------------
  4. DELAYME movlw   .82      ;82 ES PARA retardo de 416 ms aproximadamente (VEL=1200)
  5.         movwf   R16        ;llevar valor de Carga al retardo
  6. repe2   nop                       ;
  7.         clrwdt
  8.         decfsz  R16,1      ;deCrementar retardo, saltar si Cero
  9.         goto    repe2      ;repetir hasta terminar
  10.         retlw   0          ;retornar
  11. ;---------------------retardo PARA TRANSMITIR EN 1200 ----------------------
  12. delay1  movlw   .166       ;166 ES PARA retardo de 833 æs aproximadamente (VEL=1200)
  13.         movwf   R16        ;llevar valor de Carga al retardo
  14. repe    nop                      ;
  15.         clrwdt
  16.         decfsz  R16,1      ;deCrementar retardo, saltar si Cero
  17.         goto    repe       ;repetir hasta terminar
  18.         retlw   0          ;retornar
  19.  
  20. ;**************************************************************************

Y este seria el programa

Código: ASM
  1. RECIBIR
  2.         BTFSS   RX      ;COMPRUEBA EL ARRANQUE DE LA COMUNICACION (DEFINIR RX COMO PIN DE RECEPCION)
  3.         GOTO    SALIR (NO HAY COMUNICACION, CONTINUA CON EL PROGRAMA)
  4.  
  5.         CALL    DELAYME         ;RETARDO DE MEDIO BIT PARA CONFIRMAR
  6.         BTFSS   RX      ;COMPRUEBA EL ARRANQUE, VERIFICA QUE NO SEA RUIDO
  7.         GOTO    SALIR  (FUE RUIDO)
  8.  
  9.         CALL    delay1               ;RETARDO DE UN BIT
  10. RCVR1   MOVLW   .8              ;CARGAR EL CONTADOR DE BITS
  11.         MOVWF   CONTABIT                ;PARA 8 BITS
  12. RNEXT1  BCF     STATUS,C        ;BORRAR CARRY+
  13.         BTFSS   RX                  ;rx;PREGUNTAR POR EL ESTADO DE LINEA
  14.         BSF     STATUS,C        ;ACTIVAR CARRY SI ESTA ALTO
  15.         RRF     RECEP,1          ;ROTAR REGISTRO DE RECEPCION
  16.         CALL    delay1           ;LLAMAR DEMORA NORMAL DE UN BIT
  17.         DECFSZ  CONTABIT,1              ;DECREMENTAR CONTADOR,SALTA SI ES CERO
  18.         GOTO    RNEXT1          ;REPETIR HASTA COMPLETAR EL DATO
  19.  
  20.         MOVLW   .48         ;<------ ESTO ES PARA PASAR DEL VALOR ASCII AL VALOR DECIMAL
  21.         SUBWF   RECEP,W

Ahora solo te quedaria mover el valor recibido al puerto para activar en generador


Suerte!

Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: Envio de tonos DTMF usando pic 16F84
« Respuesta #5 en: 12 de Febrero de 2008, 16:45:07 »
upss Jesus, estabamos contestando juntos, asi que luego vi tu post, de cualquier manera vale mi aclaracion  :-)

Un abrazo

Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Meta

  • Visitante
Re: Envio de tonos DTMF usando pic 16F84
« Respuesta #6 en: 12 de Febrero de 2008, 22:39:20 »
Para saber los retardos, la frecuencia del PIC se cuenta.

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Envio de tonos DTMF usando pic 16F84
« Respuesta #7 en: 12 de Febrero de 2008, 23:05:04 »
upss Jesus, estabamos contestando juntos, asi que luego vi tu post, de cualquier manera vale mi aclaracion  :-)

Un abrazo

Norberto

Claro que vale Norberto, como no va a valer y mucho, si le has dado el código, ¿que más va a pedir?  :-)

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: Envio de tonos DTMF usando pic 16F84
« Respuesta #8 en: 12 de Febrero de 2008, 23:17:56 »
Si, correcto Meta, esos cálculos están en base a un cristal de 4 MHz.
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado fzurita

  • PIC10
  • *
  • Mensajes: 33
Re: Envio de tonos DTMF usando pic 16F84
« Respuesta #9 en: 13 de Febrero de 2008, 10:15:09 »
Compañeros, muchas gracias por su interes en responder mis dudas...
Norberto, mencionas que el 16F84 no tiene puerto serie, entonces como esto es un diseño, no tengo restricciones en utilizar un modelo especifico, eso si que no sea excesivamente costoso, podrias recomensarme un micro que sí traiga el puerto serial incorporado? Pienso que la tarea seria mas sencilla...



Meta

  • Visitante
Re: Envio de tonos DTMF usando pic 16F84
« Respuesta #10 en: 13 de Febrero de 2008, 11:27:43 »
16F876A/F77A, si quieres con gama alta son 18F2250 y 18F4550.

EDIT:
Que sepas que con el 16F84A puedes perfectamente usar un puerto serie utilizando un driver llamado MAX232.
http://xt-hardware.com/smf/index.php?topic=29.msg3484

A partir del capítulo 20
http://www.pic16f84a.com/Proteus.htm
« Última modificación: 13 de Febrero de 2008, 11:48:27 por Meta »

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: Envio de tonos DTMF usando pic 16F84
« Respuesta #11 en: 17 de Febrero de 2008, 21:27:30 »
Puedes usar el 16F628, que tiene la misma cantidad de pines (en compatible pin a pin con el 16f84) y además posee usart. Espero que te sirva

Desconectado HJG

  • PIC12
  • **
  • Mensajes: 77
Re: Envio de tonos DTMF usando pic 16F84
« Respuesta #12 en: 23 de Marzo de 2008, 12:42:43 »
Si utilizas el PIC16F628A ten cuidado con la utilización del oscilador interno al mismo tiempo que la usart, tuve algunos dolores de cabeza y opté por colocarle un cristal externo

Puedes usar el 16F628, que tiene la misma cantidad de pines (en compatible pin a pin con el 16f84) y además posee usart. Espero que te sirva


 

anything