Autor Tema: Problemas al conectar dos pics  (Leído 4103 veces)

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

Desconectado fcomeba

  • PIC10
  • *
  • Mensajes: 13
Problemas al conectar dos pics
« en: 21 de Mayo de 2009, 23:03:26 »
Estuve buscando en el foro, pero no encontre un problema similar.

Soy nuevo en esto de los pics, aunque tengo experiencia con circuitos integrados, siendo ya casi un ingeniero en electronica...
Es la primera ves que me decido a utilizarlos en un proyecto.

Realize el siguiente proyecto:

Cuento con dos pics 18f2620, un OPAMP MCP6274, un electret, resistencias, capacitores, bocina y cables, 3 pilas AAA.

Utilize uno de los pics para recibir por el canal AN0 una señal que proviene del Opamp que aplifica el electret. El pic cuenta los pulsos que me da pasando cierto nivel de voltaje definido por mi en el programa. y pone el resultado de la cuenta en el puerto B.
El otro pic lee el puerto B (su propio puerto B) y genera pulsos a frecuencias distintas dependiendo de el numero que tenga el el puerto.

Los dos circuitos funcionan bien por separado, pero cuando paso las salidas de un pic al otro el voltaje que mido es exageradamente bajo, no los 5volts que deberian salir de un pic para entrar al otro.
Intente aislar las salidas de un pic antes de meterlas al otro, utilizando opamps en forma de seguidores y pasa lo mismo.
Me parece que un error potencial podria ser la demanda de corriente (que no sea suficiente) pues alimento el circuito con 3 pilas AAA que me dan 4.5 volts, utilize tambien una fuente de corriente directa pero pasa lo mismo, me da miendo incrementar demaciado la corriente pues no quiero quemar los circuitos.
Espero que si alguien ha tenido este problema y lo ha solucionado, me haga una recomendacion.
« Última modificación: 22 de Mayo de 2009, 15:03:27 por MGLSOFT »

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Probleas al conectar dos pics
« Respuesta #1 en: 21 de Mayo de 2009, 23:15:18 »
Hola

Parece un problema de configuración de entrada/salida del puerto B. ¿Configuraste el puerto B del segundo pic como entrada?

Si está como salida y sus terminales en 0V, crearás un corto circuito entre entre ambos puertos B.

Otro detalle son los 4.5V. El voltaje determina la velocidad máxima a la que puedes correr el pic. Checa en su hoja de características si la velocidad de tu cristal es apropiada para 4.5V.

Cuando dices que funcionan bien por separado, ¿cómo probaste el segundo pic?

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Re: Probleas al conectar dos pics
« Respuesta #2 en: 21 de Mayo de 2009, 23:23:26 »
Ademas de la configuracion no estaria mal que usaras unas resistencias de pull up

Desconectado fcomeba

  • PIC10
  • *
  • Mensajes: 13
Re: Probleas al conectar dos pics
« Respuesta #3 en: 21 de Mayo de 2009, 23:57:11 »
Si estan bien configurados los puertos.

Para probar el segundo PIC lo tenia aislado del circuito y utilize un dip switch, para meter el voltaje logico en el puerto B de mi segundo PIC y la respuesta es correctan funciona perfectamente...

Si pruebo el primer PIC, las salidas son las deseadas de acuerdo a mis entradas...

El segundo PIC tambien tiene salidas deseadas, de acuerdo a las entradas, (simuladondo con un dipswitch las salidas del primer PIC), el problema es cuando los junto, parecen no funcionar el voltaje de las salidas del PIC uno se cae drasticamente, segun el osciloscopio.
Yo le hecho la culpa a la corriente, pues tambien le meti  un opamp como seguidor para que no demande energia del PIC uno, si no de la fuente.

Desconosco el uso de resistencias pull up, gracias por la recomendacion, voy a investigar. talvez eso resuelva mi problema.

# Estoy usando logica positiva, por lo cual las resistencias pull up, no me sirven, en todo caso necesitaria una resistencia pull down.

Estoy utilizando el oscilador interno que tiene el 18F2620

La verdad se hace algo extraño.
« Última modificación: 22 de Mayo de 2009, 00:46:07 por fcomeba »

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Probleas al conectar dos pics
« Respuesta #4 en: 22 de Mayo de 2009, 12:54:11 »
Por ahora no hemos encontrado problemas con el hardware, por favor sube tus programas para ver si hay algo raro.

Otra cosa, ¿los dos pics funcionan con los mismos 4.5V?

Desconectado fcomeba

  • PIC10
  • *
  • Mensajes: 13
Re: Problemas al conectar dos pics
« Respuesta #5 en: 24 de Mayo de 2009, 03:23:52 »
Si, estan jalando los dos de la misma fuente, que son las 3 pilas AAA.

aqui dejo programas:

Este es para contar pulsos de un microfono electret.

unsigned int mic; //resultado de la conversion A-D
unsigned int ref = 0b1000000000; //nivel de referencia fijado a 2.25volts
unsigned short int cta = 0; //Conteo de pulsos
unsigned short int sta = 0; //Estado anterior de pulso
unsigned short int stb = 0; //estado actual de pulso
void main() {
     TRISB = 0; // configuración de PORTB Salida
     TRISC = 0; // configuración de PORTC salida
     TRISA = 0b11111111; // Puerto A es entrada
     ADCON1 = 0b00001110; // AN0 es una entrada analógica, el resto del puerto A es digital
     mic = ADC_Read(0);   // mete el resultado de la conversion AD a la variable mic
     OSCCON = 0b11110011;  //Configuracion del reloj interno
     OSCTUNE = 0b11011111; //reloj interno puesto a 8MHz
    
    do //programacion de un ciclo infinito
 {
    mic = ADC_Read(0);   // Leer el canal AN0
    if (sta == 0 && stb == 0 && mic > ref) //Se detecta el primer flanco ascendente
       {
       sta=0; //se configuran las variables de estado
       stb=1;
       PORTB = cta; //actualizar el resultado en puerto B
       }
    mic = ADC_Read(0);   // Leer el canal AN0
    if (sta == 0 && stb == 1 && mic < ref) //Se detecta flanco descentente
       {
              cta = cta + 1; //se incrementa la cuenta en 1
              sta = 1; //se configuran las variables de estado
              stb = 0;
              PORTB = cta;  //actualizar cuenta al puerto b
       }
    mic = ADC_Read(0);   // Leer el canal AN0
    if (sta == 1 && stb == 0 && mic > ref)  //Se repite el proceso de conteo
       {
               sta = 0; //se configuran las variables de estado
               stb = 1;
               PORTB = cta;  //actualizar cuenta en puertoB
       }
    if (cta > 15){cta == 0;} //ciclo para 15 diferentes configuraciones de salida
  }while(1);
}

Este otro es para generar sonidos.

void Tono1() {
  Sound_Play(659, 250);   // Frecuencia = 659Hz, duracion = 250 ms
}

void Tono2() {
  Sound_Play(698, 250);
}

void Tono3() {
  Sound_Play(784, 250);
}

void Musica() {           // Composicion de una cancion
  Tono1(); Tono2(); Tono3(); Tono3();
  Tono1(); Tono2(); Tono3(); Tono3();
  Tono1(); Tono2(); Tono3();
  Tono1(); Tono2(); Tono3(); Tono3();
  Tono1(); Tono2(); Tono3();
  Tono3(); Tono3(); Tono2(); Tono2(); Tono1();
}

void TonoA() {
  Sound_Play( 880, 50);
}
void TonoC() {
  Sound_Play(1046, 50);
}
void TonoE() {
  Sound_Play(1318, 50);
}

void Tonotelefono() {
  unsigned short i;
  for (i = 9; i > 0; i--) { //se repite la secuencia 9 veces
    TonoA(); TonoC(); TonoE();
  }
}

void main() {
  OSCCON = 0b11110011;  //configuracion del reloj interno
  OSCTUNE = 0b11011111; //frecuencia del reloj interno 8MHz
  ADCON1= 0b00001111;   //configuracion de los puertos Analogicos
  TRISB  = 0xFF;        // Configuracion del puerto B como entrada

  Sound_Init(&PORTC, 7);
  Sound_Play(1000, 1000);

  while (1) {
    if (PORTB == 1)        //Si el puerto B es 1 toca tono1
      Tono1();
    while (PORTB == 1);           //Tocaer mientras sea 1

    if (PORTB == 2)        //Si el puerto B es 2 toca tono2
      Tono2();
    while (PORTB == 2);           //Tocaer mientras sea 2

    if (PORTB == 3)        //Si el puerto B es 3 toca tono1
      Tono3();
    while (PORTB == 3);           //Tocaer mientras sea 3

    if (PORTB == 4)        //Si el puerto B es 5 toca tono4
      Tonotelefono();
    while (PORTB == 4);           //Tocaer mientras sea 4

    if (PORTB == 5)        //Si el puerto B es 5 toca Musica
      Musica();
    while (PORTB == 5);           //Tocaer mientras sea 5
  }
}


Gracias por el interes, de verdad me importa mucho resolver este problema, aunque creo que es mas electrico que nada. Espero encontrar solucion a esto.
« Última modificación: 24 de Mayo de 2009, 03:25:58 por fcomeba »

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Problemas al conectar dos pics
« Respuesta #6 en: 24 de Mayo de 2009, 10:46:02 »
¿Qué compilador usas? Por lo que veo es uno diferente a CCS.

Según entiendo la variable cta cuenta los pulsos que el micrófono generó. Encontré un error de software en donde en vez de borrar cuenta, haces una comparación errónea, ponle un solo =.

Código: [Seleccionar]
if (cta > 15){cta == 0;}
También otro detalle, desconozco cuántos pulsos por segundo puede entregar el micrófono, pero si son muchos entonces la salida del puerto B cambiará muy rápidamente... tan rápido que el pic músico no tocará nada después de que cta sea mayor a 5. Tu código no incluye qué acción tomar si hay más de 5 pulsos.

El voltaje que mides en los pines al cambiar tan rápido puede que se muestre como un voltaje bajo, pero en realidad es probable que tengas un tren de pulsos de entre 0 y 5V que tu voltímetro no mostrará. Ponle unos leds en paralelo con sus respectivas resistencias para que veas cómo cambian de estado las terminales.

No parece problema eléctrico.

Desconectado fcomeba

  • PIC10
  • *
  • Mensajes: 13
Re: Problemas al conectar dos pics
« Respuesta #7 en: 24 de Mayo de 2009, 20:15:55 »
Esa linea de codigo que me mensionas es nueva, no estaba, voy a corregir ese error de completes para mas de cinco pulsos que mensionas, es un error muy grave, jaja... sera que soy nuevo programando...

Lo de los leds que me dices fue lo primero que hize, eso es lo que me preocupa, hize lo siguiente... mucho antes de poner este post...

En el primer pic, el pic que cuenta pulsos, le puse unos leds a la salida, y van perfecto cuentan muy bien... en el osciloscopio puedo ver tambien los pulsos del microfono y son uno de subida y uno de bajada, con cada aplauso, que es lo que cuento. esta bien siempre o cuando no tenga corrientes negativas, para eso añadi un diodo entre el microfono y el pic, el resultado fue bueno, a la salida de este pic cuento una salida binaria, muy buena...

Al segundo tambien lo probe, poniendo un dip switch y tamebien, los sonidos van muy bien.
el problema es que cuando paso las salidas del primer pic, que cuenta, al segundo que hace sonidos, la salida del primer pic me da un pulsito de unos 500milivolts mas o menos y no la mantiene, aunque deberia ser un 1 logico que se mantuviera constante.
Es por eso que yo lo veo como electrico, aun no se que este pasando.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Problemas al conectar dos pics
« Respuesta #8 en: 24 de Mayo de 2009, 21:05:04 »
A ver qué pasa si haces esto:

- Conecta ambos pics como siempre.
- Da un aplauso, lo que deberá generar el 0b00000001 en el puerto B.
- Mide el voltaje, seguramente tendrás 500mV como tú dices.
- Sin apagar los pics, desconecta RB0 y mídelo, ¿cuánto da?

Otra prueba es intercambiar los pics, grabarle el programa de música al del micrófono y viceversa.

Otra idea... ¿están bien definidos los TRISX de tu programa?


 

anything