TODOPIC

FORO TÉCNICO => Telefonía, GPS y Microcontroladores => Mensaje iniciado por: LEONARDO_59 en 18 de Agosto de 2007, 18:29:04

Título: Problemas con MT8870
Publicado por: LEONARDO_59 en 18 de Agosto de 2007, 18:29:04
amigos, espero que alguien pueda ayudarme, tengo un circuito standard del decodificador de tonos dtmf mt8870de, he realizado multiples cambios al circuito, lo tengo con los cap de 100nf res de 390k 100k xtal de 3.57 y hasta el momento no decodifica los tonos que le estoy generando desde mi PC, la pregunta es ¿es necesario que los tonos vayan acompañados con voltage?...  en todo caso cual sería mi problema ya que con las diferentes variaciones no he logrado que los leds indicadores se enciendan mostrandome los binarios, el circuito es de modo de entrada única...... Gracias

LEONARDO
Título: Re: Problemas con MT8870
Publicado por: bikertron en 16 de Enero de 2008, 17:06:47
La puesta en marcha del mt8870 es muy sencilla si lo tienes bien conectado, el modo de conexión esta muy explicito en el datasheet
el resto es codigo

aca te dejo un codigo para que lo estudies

Código: [Seleccionar]

///////////////////////
//RECEPTOR DTMF//
///////////////////////

#define DTMF_Q4 PIN_B1
#define DTMF_Q3 PIN_B2
#define DTMF_Q2 PIN_B3
#define DTMF_Q1 PIN_B4  //el pin B0 lo tengo como interrupción externa del pic para cuando el integrado detecta un numero configurado de low to high

/*ext_int_edge(L_TO_H);
   enable_interrupts(INT_EXT);*/

//////////////////
//FUNCIONES//
/////////////////

// cuando se activa la interrupción levanto una bandera para luego en un loop infinito detecto la bandera y llamo la función y bajo la bandera

void almacenar_numero_linea()
   { 
     putc('A');
     delay_ms(10);
     Q1=input(DTMF_Q1);
     Q2=input(DTMF_Q2);
     Q3=input(DTMF_Q3);
     Q4=input(DTMF_Q4);
     
     if(Q1==1)
     bit_set(numero,0);
     if(Q1==0)
     bit_clear(numero,0);
     if(Q2==1)
     bit_set(numero,1);
     if(Q2==0)
     bit_clear(numero,1);
     if(Q3==1)
     bit_set(numero,2);
     if(Q3==0)
     bit_clear(numero,2);
     if(Q4==1)
     bit_set(numero,3);
     if(Q4==0)
     bit_clear(numero,3);
     printf(" %u ",numero);
     numerodis[i]=numero;  // numerodis[] es un vector de tamaño i de 8 bit donde se almacenan los numeros discados
     ++i;
    }