TODOPIC
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?
31 de Octubre de 2014, 17:34:01

Ingresar con nombre de usuario, contraseña y duración de la sesión
Buscar:     Búsqueda Avanzada
350567 Mensajes en 39336 Temas por 41081 Usuarios
Último usuario: dfranco
* Inicio Ayuda Buscar Calendario Ingresar Registrarse
Buscar en TodoPIC
+  TODOPIC
|-+  FORO TÉCNICO
| |-+  Telefonía, GPS y Microcontroladores (Moderadores: J1M, Sispic, Marioguillote)
| | |-+  marcador por tono DTMF (novato)
0 Usuarios y 1 Visitante están viendo este tema. « anterior próximo »
Páginas: [1] 2 Marcar como favorito Imprimir
Autor Tema: marcador por tono DTMF (novato)  (Leído 13096 veces)
japifer_22
PIC18
****
Desconectado Desconectado

Chile Chile

Mensajes: 390


« : 21 de Octubre de 2009, 02:59:54 »

hola compañeros foreros, quiero hacer un llamador por telefono por tono, esto puede ser utilisando algun CI de la spesialidad como el HT9200B, pero el problema es que en mi país segun yo no esta, y queria ver si alguien save de algun otro integrado que m permita generar los tonos DTMF. o acerlo mediante un pic, e visto que hay una libreria  EX_DTMF.C  que genera estos tonos, pero tengo 2 inconvenientes con esto:
1- se nesesita un trnasformador para suavisar la señal
2- esta pensada para trabajarla con un teclado 3x4.
bueno no puedo trabajar con teclado ya que quiero conectarlo al PC.
bueno mi pregunta es:
alguien tiene o save de algun CI que aga estó osea generar tonos DTMF ???
alguien save o me puede ayudar a modificar la libreria para poder trabajarla con el pc y no con un teclado?????

bueno la libreria es esta;
Código:
/////////////////////////////////////////////////////////////////////////
////                           EX_DTMF.C                             ////
////                                                                 ////
////  This program simulates a touch-tone telephone.  The user can   ////
////  push keys on the keypad and the dtmf tones will be heard over  ////
////  the speaker.  If the user places the receiver of a telephone   ////
////  over the speaker, and then dials a number on the keypad, the   ////
////  telephone will recognize the dtmf tones and place the call.    ////
////                                                                 ////
////  Configure the CCS prototype card as follows:                   ////
////     Plug in the KEYPAD.                                         ////
////     Connect a R-2R ladder to Port D as shown below.             ////
////     Connect the negative wire of the speaker to ground.         ////
////     Connect the positive wire of the speaker to the output of   ////
////        the R-2R ladder.                                         ////
////                                                                 ////
////  PIN 32  PIN 33  PIN 34  PIN 35  PIN 36  PIN 37  PIN 38  PIN 39 ////
////    |       |       |       |       |       |       |       |    ////
////   2R      2R      2R      2R      2R      2R      2R      2R    ////
////    |       |       |       |       |       |       |       |    ////
////    *---R---*---R---*---R---*---R---*---R---*---R---*---R---*    ////
////    |                                                       |    ////
////   2R                                                       |    ////
////    |                R = 100 ohms                         OUTPUT ////
////   GND PIN 27       2R = 200 ohms                                ////
////                                                                 ////
////  This example will work with the PCB, PCM and PCH compilers.    ////
////  The following conditional compilation lines are used to        ////
////  include a valid device for each compiler.  Change the device,  ////
////  clock and RS232 pins for your hardware if needed.              ////
/////////////////////////////////////////////////////////////////////////
////        (C) Copyright 1996,2003 Custom Computer Services         ////
//// This source code may only be used by licensed users of the CCS  ////
//// C compiler.  This source code may only be distributed to other  ////
//// licensed users of the CCS C compiler.  No other use,            ////
//// reproduction or distribution is permitted without written       ////
//// permission.  Derivative programs created using this software    ////
//// in object code form are not restricted in any way.              ////
/////////////////////////////////////////////////////////////////////////


#if defined(__PCB__)
#include <16c56.h>
#fuses HS,NOWDT,NOPROTECT
#use delay(clock=20000000)    // must be 20 MHz

#elif defined(__PCM__)
#include <16F877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)    // must be 20 MHz

#elif defined(__PCH__)
#include <18F452.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)    // must be 20 MHz
#endif

#include <kbd.c>

CONST unsigned int SINE_WAVE[200] = {
128,132,136,139,143,147,150,154,158,161,165,169,172,176,179,
182,186,189,192,195,199,202,204,207,210,213,215,218,220,223,
225,227,229,231,233,235,237,238,240,241,242,243,244,245,246,
247,247,247,248,248,248,248,248,247,247,247,246,245,244,243,
242,241,240,238,237,235,233,231,229,227,225,223,220,218,215,
213,210,207,204,202,199,195,192,189,186,182,179,176,172,169,
165,161,158,154,150,147,143,139,136,132,128,124,120,117,113,
109,106,102, 98, 95, 91, 87, 84, 80, 77, 74, 70, 67, 64, 61,
 57, 54, 52, 49, 46, 43, 41, 38, 36, 33, 31, 29, 27, 25, 23,
 21, 19, 18, 16, 15, 14, 13, 12, 11, 10,  9,  9,  9,  8,  8,
  8,  8,  8,  9,  9,  9, 10, 11, 12, 13, 14, 15, 16, 18, 19,
 21, 23, 25, 27, 29, 31, 33, 36, 38, 41, 43, 46, 49, 52, 54,
 57, 61, 64, 67, 70, 74, 77, 80, 84, 87, 91, 95, 98,102,106,
109,113,117,120,124};

int index1,index2,inc1,inc2;


#INT_RTCC
void wave_generator() {
   int wave = 0;

   set_rtcc(25);           // when clock is 20MHz, interrupts every 100us

   wave = ((long)SINE_WAVE[index1]+(long)SINE_WAVE[index2])/2;
   output_d(wave);

   index1 += inc1;
   index2 += inc2;

   if(index1 >= 200)
      index1 -= 200;

   if(index2 >= 200)
      index2 -= 200;
}

#define DTMF_ROW1   14  // for 700 Hz, increment this many times every 100us
#define DTMF_ROW2   15  // for 750 Hz, increment this many times every 100us
#define DTMF_ROW3   17  // for 850 Hz, increment this many times every 100us
#define DTMF_ROW4   19  // for 950 Hz, increment this many times every 100us
#define DTMF_COLA   24  // for 1200 Hz, increment this many times every 100us
#define DTMF_COLB   27  // for 1350 Hz, increment this many times every 100us
#define DTMF_COLC   30  // for 1500 Hz, increment this many times every 100us

void generate_dtmf_tone(char keypad, long duration)  {

   index1=0;
   index2=0;
   inc1=0;
   inc2=0;
   if((keypad=="1")||(keypad=="2")||(keypad=="3"))
      inc1=DTMF_ROW1;
   else if((keypad=="4")||(keypad=="5")||(keypad=="6"))
      inc1=DTMF_ROW2;
   else if((keypad=="7")||(keypad=="8")||(keypad=="9"))
      inc1=DTMF_ROW3;
   else if((keypad=="*")||(keypad=="0")||(keypad=="#"))
      inc1=DTMF_ROW4;

   if((keypad=="1")||(keypad=="4")||(keypad=="7")||(keypad=="*"))
      inc2=DTMF_COLA;
   else if((keypad=="2")||(keypad=="5")||(keypad=="8")||(keypad=="0"))
      inc2=DTMF_COLB;
   else if((keypad=="3")||(keypad=="6")||(keypad=="9")||(keypad=="#"))
      inc2=DTMF_COLC;

   setup_counters(RTCC_INTERNAL,RTCC_DIV_2);
   enable_interrupts(INT_RTCC);
   enable_interrupts(GLOBAL);

   while(duration-- > 0)
   {
      delay_ms(1);
   }
   disable_interrupts(INT_RTCC);
   output_d(0);
}


void main()  {
   char k;

   kbd_init();

   while(TRUE)
   {
      k=kbd_getc();
      if(k!=0)
         generate_dtmf_tone(k, 100);
   }
}
espero que me puedan ayudar o orientar en lo que ando buscando.
saludos
En línea
jhozate
Colaborador
PIC24H
*****
Desconectado Desconectado

Sexo: Masculino
Colombia Colombia

Mensajes: 1601



« Respuesta #1 : 21 de Octubre de 2009, 13:42:28 »

el MT8888 es codificador-decodificador DTMF
saludos
En línea

Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA
japifer_22
PIC18
****
Desconectado Desconectado

Chile Chile

Mensajes: 390


« Respuesta #2 : 21 de Octubre de 2009, 21:54:36 »

hola gracias vamos a ver si lo encuentro
En línea
krostby
PIC10
*
Desconectado Desconectado

Chile Chile

Mensajes: 30


« Respuesta #3 : 25 de Octubre de 2009, 00:09:53 »

puedes usar el mt8880 con entrada hex, salida tono dtmf bastante estable. lo consigues en casa Keim, Santiago.Suerte
En línea
japifer_22
PIC18
****
Desconectado Desconectado

Chile Chile

Mensajes: 390


« Respuesta #4 : 02 de Noviembre de 2009, 21:04:41 »

hola bueno les coment oque e conseguido el CM8870 y el HT9200A los cuales son decodificador de DTMF y codificador de DTMF, pero en los dos estoy teniendo problemas, les comento que en el CM8870 cuando lo conecto a la linea telefonica me empiesa a generar ruido y esta vastantes molestos, le adjunto el diagrama que estoy usando. en cuanto al generador de DTMF no se como ingresarle los numeros ya qu e este solo se hace mediante su entrada DATA de forma serie, lo unico que entiendo es que la forma de ingresar es de D0 a D4, pero nada mas. en esto alguien me puede ayudar por favor.
En línea
jhozate
Colaborador
PIC24H
*****
Desconectado Desconectado

Sexo: Masculino
Colombia Colombia

Mensajes: 1601



« Respuesta #5 : 02 de Noviembre de 2009, 21:15:00 »

hace un tiempo utilicé este diagrama para el 8870 y funciona

para el otro habria q mirar bien el datasheet para inicializarlo y poder generar el DTMF
En línea

Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA
japifer_22
PIC18
****
Desconectado Desconectado

Chile Chile

Mensajes: 390


« Respuesta #6 : 02 de Noviembre de 2009, 21:33:00 »

hola jhozate  pero no que son distintos el MT8870 y el CM8870 ???? en cuanto a los voltajes ?????
En línea
krostby
PIC10
*
Desconectado Desconectado

Chile Chile

Mensajes: 30


« Respuesta #7 : 02 de Noviembre de 2009, 21:43:24 »

Hola Japifer 22.  No entiendo porque estas utilizando un amp de bajo ruido,  no es necesario que pases los tonos dtmf de la línea por un 386 hacia el 8870.  lo puedes utilizar directamente si usas un buen acoplador de linea con un trafo 600:600.
En línea
jhozate
Colaborador
PIC24H
*****
Desconectado Desconectado

Sexo: Masculino
Colombia Colombia

Mensajes: 1601



« Respuesta #8 : 02 de Noviembre de 2009, 21:48:20 »

no entiendo a q te refieres con los voltajes ..pero es un decodificador DTMF y hace lo mismo que el CM
En línea

Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA
japifer_22
PIC18
****
Desconectado Desconectado

Chile Chile

Mensajes: 390


« Respuesta #9 : 02 de Noviembre de 2009, 22:03:04 »

olvidenlo esque en este tema soy demasiado novato no entiendo nada de esto  Confused , pero en fin mmm estava pensandon en lo que me dijiste en el primer post de utilisar el MT8880, ya que krostby me dijo donde encontrarlos, por que de todas formas nesesito codificar y decodificar estas señales, pero alguien de ustedes tiene el circuito para montar el MT8880 ?? tanto para generas las señales como para decifrar estas mismas ????? que me puedan facilitar por favor.
En línea
Cryn
Colaborador
DsPIC33
*****
Desconectado Desconectado

Sexo: Masculino
Bolivia Bolivia

Mensajes: 4170


ya no te extraño =p


« Respuesta #10 : 03 de Noviembre de 2009, 12:01:31 »

Hola jhozate, tienes algún esquema para enviar DTMF's a la red telefónica? de preferencia sin trafo? se puede mediante rectifiador?

saludos.
En línea

.
jhozate
Colaborador
PIC24H
*****
Desconectado Desconectado

Sexo: Masculino
Colombia Colombia

Mensajes: 1601



« Respuesta #11 : 03 de Noviembre de 2009, 13:51:02 »

no cryn no tengo ese esquema (en el momento, pero creo poder conseguirlo con alguien) pero supongo que el esquema tipico que viene en el datasheet del MT8880 serviria para empezar...y si japifer con el 8880 pueder codificar y decodificar...ahi la espinita seria mirar bien la hoja de datos por que hay que hacer una rutina de inicializacion que tambien esta en la hoja de datos.
En línea

Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA
jhozate
Colaborador
PIC24H
*****
Desconectado Desconectado

Sexo: Masculino
Colombia Colombia

Mensajes: 1601



« Respuesta #12 : 03 de Noviembre de 2009, 14:31:21 »

viendo la hoja de datos del 8880...tal parece que es mas sencillo utilizar el HT9200 que segun parece solo es seleccionar el modo en que se ingresaran los bits correspondientes(5 bits) al tono a generar y esto se hace poniedo a 0 al pin S/P (modo serial) o poniendo a 1 (modo paralelo) y luego enviar los 5 bits
En línea

Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA
Cryn
Colaborador
DsPIC33
*****
Desconectado Desconectado

Sexo: Masculino
Bolivia Bolivia

Mensajes: 4170


ya no te extraño =p


« Respuesta #13 : 03 de Noviembre de 2009, 14:41:01 »

no cryn no tengo ese esquema (en el momento, pero creo poder conseguirlo con alguien) pero supongo que el esquema tipico que viene en el datasheet del MT8880 serviria para empezar...
En la hoja de datos solo están el circuito recomendado para su funcionamiento, pero no dice como conectarlo a una linea telefónica por ejemplo ya sea para recibir o enviar DTMF's.

Saludos, gracias por responder
En línea

.
japifer_22
PIC18
****
Desconectado Desconectado

Chile Chile

Mensajes: 390


« Respuesta #14 : 03 de Noviembre de 2009, 16:18:06 »

hola buen oacavo de comprar los zrner que me falaba para armar el cto que me propusiste, ahora a provar a ver como anda, en aunto al HT9200 yo tengo el A osea los datos se le ingresa meniante su entrada serie la pregunta del millon es como le envio los datos a este ?? es que no entiendo como enviar los datos por un solo pin del pic. bueno ahora a empesar a esperimentar con todo y ir dejando los resultados en este post. (por el momento con el CM8870 ya que no se como mandat los datos al HT9200A  Mr. Green)
En línea
Suky
Moderadores
DsPIC33
*****
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 6774


Con Qt...


WWW
« Respuesta #15 : 03 de Noviembre de 2009, 16:29:00 »

japifer_22 coloca puntos, comas, etc para que se pueda entender tu redacción, si??? Luego el tema de el envío de datos ya intentamos explicarte el tema en otro foro! Que duda tenes??? Creo que fuimos claros de como se puede mandar  Confused
En línea

japifer_22
PIC18
****
Desconectado Desconectado

Chile Chile

Mensajes: 390


« Respuesta #16 : 03 de Noviembre de 2009, 23:15:43 »

hola suky, bueno primero que todo, disculpen mi mal escrivir es que de flojo no arreglo las cosas con respecto artografia y puntuaciones, pero ahora si que empieso a darle bien OK Mr. Green.
bueno con respecto a como mandar los datos entendi parte de ello, como bien tu mensionas devido a mi publicacion del tema en otro foro, pero el punto es el siguiente, y el cual sigo sin entender;
se que se tiene que enviar por un solo pin los datos, pero lo que no entiendo es como hacerlo, osea cuant otiempo tengo que esperar para enviar el segundo dato y demaces, por que se save que tengo que envierle desde el D0 al D4 y de esa misma manera, pero lo que no se es como representar el 1 y el 0 para envierle esto al HT9200A.
En línea
Suky
Moderadores
DsPIC33
*****
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 6774


Con Qt...


WWW
« Respuesta #17 : 03 de Noviembre de 2009, 23:34:47 »

La forma de enviar puede ser la siguiente:

Código
GeSHi (c):
  1. #define DATA PIN_B4
  2. #define SCLK PIN_B2
  3. #define CE PIN_B1
  4.  
  5.   output_low(SCLK);
  6.   output_low(CE);
  7.  
  8.   for(i=1;i<=5;++i) {
  9.      output_high(SCLK);
  10.      output_bit(DATA, shift_left(Control,1,0));
  11.      delay_us(xx);
  12.      output_low(SCLK);
  13.      delay_us(xx);
  14.   }
  15.   output_high(CE);

En el datasheet dice a que frecuencia máxima trabaja así que ya esta!
En línea

japifer_22
PIC18
****
Desconectado Desconectado

Chile Chile

Mensajes: 390


« Respuesta #18 : 04 de Noviembre de 2009, 00:14:55 »

jajaja hola suky, saves que me da risa esta situaciòn, por que ahora lo que no entiendo es tu codigo, osea entiendo partes pero no todo. ahora bien, lo que no entiendo es la linea

Citar
output_bit(DATA, shift_left(Control,1,0));

bueno esto en parte por que nunca e usado esta función, pero se que hace esta función desplaza a la izquierda un bit de un array o de una estructura, pero no se como se maneja ni nada por el estilo.
me puedes explicar plissss. Mr. Green
« Última modificación: 04 de Noviembre de 2009, 00:19:33 por japifer_22 » En línea
Suky
Moderadores
DsPIC33
*****
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 6774


Con Qt...


WWW
« Respuesta #19 : 04 de Noviembre de 2009, 00:29:13 »

Vamos por partes:  undecided

output_bit (pin, value)
Setea el pin con el valor de value, que en este caso vendrá dado del shift_left.

Syntax:
 shift_left (address, bytes, value) o shift_right (address, bytes, value)
 
Parametros:
 address es una variable, bytes es el numero de bytes a trabajar, value es 0 o 1, valor del carry.
 
Returns:
 0 o 1 del bit que salga al rotar.

Más detalles en la ayuda del CCS  Mr. Green

Ahora tu determinarás que usar, left o right.

Saludos!
 

« Última modificación: 04 de Noviembre de 2009, 00:31:36 por Suky » En línea

TODOPIC
   

 En línea
Páginas: [1] 2 Imprimir 
« anterior próximo »
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.20 | SMF © 2006-2008, Simple Machines XHTML 1.0 válido! CSS válido!
Página creada en 0.078 segundos con 23 consultas.
anything