Autor Tema: Problema al ejecutar el ejemplo de RedPic: comunicarse con RS-232 (SOLUCIONADO)  (Leído 3710 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado DarkVect

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 302
Utilizo un PIC16F648A con AUSART, con los pines B1 para recibir y B2 para enviar tal y como dice l Datasheet. Entre el PIC y el RS-232 tengo un MAX232 con los 4 condensadores de 1uF: uno entre 1 y 3, otro entre 4 y 5, otro de 2 a 5V y otro de 6 a GND. Además utilizo dos leds para monitorizar el estado de las líneas. Están conectados a a 12 (RX) y 11 (TX).

Lo que sucede es que nada más darle alimentación al MAX, sin tener el PIC conectado, los dos leds se encienden y quedan así.

Luego conecto el PIC a RX y TX y lo alimento y no sucede nada. El hyperterminal lo tengo bien configurado, como en el ejemplo... misma velocidad, bits, etc...

En el hyperterminal cuando pulso teclas no aparecen en pantalla y, por supuesto, tampoco veo lo que debería enviar el PIC...

El conector lo he puesto como en el ejemplo: la pata numerada con el 5 a masa, la 2 es la RX del PC y la 3 la TX del PC.

Este es el código del PIC:

///PROGRAMA PARA COMUNICACION RS-232

#include <16F648A.h>                               //pic a utilizar
#fuses XT, NOWDT, NOPROTECT, PUT, NOBROWNOUT, MCLR, NOLVP
#use delay (clock=3276800)                         //Fosc=3,2768Mhz
#use fast_io(a)
#use rs232(baud=9600, xmit=PIN_B2, rcv=PIN_B1)

#define LED PIN_A1
int nClocks=0;

#INT_TIMER0
void Interrupcion_Timer0()
{
   nClocks++;                                      //contar numero de interrupciones del timer0
   output_low(LED);
   
   if(nClocks==25)                                 //25 interrupciones -> ha pasado 1seg
   {
      nClocks=0;                                   //reiniciar contadores
      output_high(LED);
   }
}


void main(void)
{
   disable_interrupts(GLOBAL);                     //enmascarar interrupciones
   disable_interrupts(INT_EEPROM);                 //deshabilitar interrupcion EEPROM
   disable_interrupts(INT_RB);                     //deshabilitar interrupcion portb
   disable_interrupts(INT_EXT);                    //deshabilitar interrupcion RB0
   disable_interrupts(INT_TBE);                    //deshabilitar interrupcion transmision
   disable_interrupts(INT_RDA);                    //deshabilitar interrupcion recepcion
   disable_interrupts(INT_TIMER1);                 //deshabilitar interrupcion del timer1
   disable_interrupts(INT_TIMER2);                 //deshabilitar interrupcion del timer2
   disable_interrupts(INT_CCP1);                   //deshabilitar interrupcion del modulo CCP1
   disable_interrupts(INT_LCD);                    //deshabilitar interrupcion lcd
   disable_interrupts(INT_COMP);                   //deshabilitar interrupcion modulo comparador
   
   setup_CCP1(CCP_OFF);                            //deshabilitar modulo CCP1
   ext_int_edge(H_TO_L);                           //interrupcion en flanco de bajada
   port_b_pullups(TRUE);                           //pullups portb activadas
   setup_TIMER_0(RTCC_INTERNAL | RTCC_DIV_128);    //preescaler=128 para 1seg

   set_tris_a(0b00000000);                         //porta todo como salida
 
   enable_interrupts(INT_TIMER0);                  //habilitar interrupcion del timer0
                         
   output_high(LED);
   delay_ms(500);
   output_low(LED);
   enable_interrupts(GLOBAL);                      //desenmascarar interrupciones
   
   printf("PIC16F648A esperando para responder" );
         
   while(TRUE)
   {
      putc(getc());
   }
}

El PIC tiene un led que va parpadeando para ver que está vivo y debería ir repitiendo lo que envío desde el PC. Además he desactivado todo lo innnecesario del PIC para evitar problemas totnos, pero nada...

A ver si se os ocurren cosas del porque puede fallar...

Un saludo y mil gracias!!!
« Última modificación: 09 de Febrero de 2007, 06:30:55 por DarkVect »

Desconectado DarkVect

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 302
Re: Problema al ejecutar el ejemplo de RedPic: lo mínimo para comunicarse con RS-232
« Respuesta #1 en: 08 de Febrero de 2007, 09:37:53 »
Repasando e código he cambiado un par de cosas:

port_b_pullups(FALSE);   //por si acaso
enable_interrupts(INT_RDA);   //interrupciones de transmisión y recepción
enable_interrupts(TBE);

Pero la cosa sigue sin funcionar...

Desconectado dhmejia

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 260
Re: Problema al ejecutar el ejemplo de RedPic: lo mínimo para comunicarse con RS
« Respuesta #2 en: 08 de Febrero de 2007, 10:00:46 »
Seria mas facil ayudarte si nos dejas ver el esquema.

Respecto a la forma de ver los caracteres que envias desde el hiperterminal: (en la ventana del hiperterminal):
archivo -> propiedades -> configuracion -> configuracion ascci -> habilitar la opcion "eco de los caracteres escritos localmente"

de todas maneras para las pruebas del puerto serial recomiendo que uses mejor el siow.exe (utilidad para el com que traer el ccs), es mejor porque permite ver datos hexadecimales y no solo ascci como el hiperterminal.

saludos
Pereira - Colombia

Desconectado DarkVect

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 302
Re: Problema al ejecutar el ejemplo de RedPic: lo mínimo para comunicarse con RS-232
« Respuesta #3 en: 08 de Febrero de 2007, 11:02:18 »
El esquema es el segundo de la página donde está el ejemplo. Sólo cambia el PIC, un 16F648 en mi caso. El resto es igual. Además, como digo, tengo un led conectado a A1 que parpadea indicando que el PIC está vivo y dos leds más en las líneas RX y TX del PIC al MAX para monitorizarlas, como en el esquema. Estos dos leds siempre están ON.

Este es el ejemplo de donde he sacado toda la información:
http://www.todopic.com.ar/foros/index.php?PHPSESSID=18c8d54cfa013cbddd56684533f65b70&topic=4620.0

Gracias!!!
« Última modificación: 08 de Febrero de 2007, 11:06:15 por DarkVect »

Desconectado DarkVect

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 302
Re: Problema al ejecutar el ejemplo de RedPic: lo mínimo para comunicarse con RS-232
« Respuesta #4 en: 08 de Febrero de 2007, 12:32:22 »
Para tener más detalles físicos del sistema, he medido las tensiones que tiene el MAX:

Vcc=4,98
V+=8,76
V-=-8,39

Sin enviar nada en los terminales del RS-232 del PC tengo:
Pin 2 (RX)=7,35
Pin 3 (TX)=-9,98

EDITO:

He probado el monitor de CCS y os cuento lo que sale: Cuando le doy la alimentación al MAX, la luz verde de BREAK se ilumina y en la tabla de hexa me sale 00, apartir de ahí pulso teclas y las envía pero el PIC no se responde ni envía la "frase de saludo". Lo que no aprecio es ningún parpadeo de los leds al enviar los datos desde el terminal.

Supongo que el problema está en el PIC malprogramado, pero es que lo tengo igual que en el ejemplo y con todo desactivado pero nada.

EDITO DE NUEVO:

He cortocircuitado la salida hacia el PIC del MAX con la entrada a éste desde el PIC (echo por hardware) y todo funciona OK. En el terminal recibo el echo perfectamente. Así que el problema es del PIC.

Voy a repasar el código de configuración, a ver si veo algo!!
Un saludo y gracias!!
« Última modificación: 08 de Febrero de 2007, 13:59:34 por DarkVect »

Desconectado dhmejia

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 260
Re: Problema al ejecutar el ejemplo de RedPic: lo mínimo para comunicarse con RS
« Respuesta #5 en: 08 de Febrero de 2007, 16:39:26 »
Pues si ya verificaste el hardware y parece estar todo ok te recomiendo unos cambios en el código:

*Borrar todas las lineas de disable_interrupts(xxxx), no creo que cambie el funcionamiento pero no las veo necesarias.  Creo con dejar disable_interrupts(global) es mas que suficiente por si acaso.

*Agregar en el main la cofiguración del puerto B, creo que aca es donde esta el problema:

set_tris_b(0b00000010);

Para configurar todo el puerto como salida y solo B1 (RX) como entrada.

saludos,
Pereira - Colombia

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: Problema al ejecutar el ejemplo de RedPic: lo mínimo para comunicarse con RS
« Respuesta #6 en: 08 de Febrero de 2007, 19:01:18 »
Hola:

Lo primero, usa el programa más secillo, es decir este, y si este te envia al PC lo que has enviado al PIC (echo) pues puedes seguir añadiendo lineas de código, hay que ir de lo particulas a lo genera... :-) :-) :-) :-)

#include <16F876a.h>//PON EL PIC QUE ESTES USANDO
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use delay(clock=4000000)//PON EL CRISTAL QUE ESTES USANDO
#use rs232(baud=9600, xmit=pin_C6, rcv=pin_C7)//PON LAS PATILLAS QUE ESTES USANDO Y LA MISMA VELOCIDAD QUE EN EL COM DEL PC

main() {

    char c;
   printf("PIC16F876A a la espera" );  // Envío mensaje de "estoy vivo"
   while(true) {
      c=getc();//Ponemos en el char c lo que recibimos del PC
      putc(c);                          // eco de lo que recibo
   }
}

Lo segundo asegurate que pones en el programa el mismo reloj que tienes por hw en el pic.

Luego asegurate que la velocidad que pones en el hyperterminal ( com que utilizas ) es la misma que en el programa del PIC.

Más tarde espero que los leds los hayas puesto en paralelo a las lineas TX y RX y además con sus respectivas resistencias, pues si lo pones en serie está callendo Vumbral en la linea y si no pones las resistencias con los led en la conexión en paralelo entonces la intensidad se irá toda por losl led ya que un led es un diodo por tanto un cable si el led está en ON.

Si haces esto y no funciona tb asegurate de que el com que utilizas es el adecuado y si tampoco es eso pues mejor que pidas un padre nuestro.

P.D: Usa el programa del CCS en vez del hyperterminal es mucho mejor.

Estaré atento a tu respuesta.

Desconectado DarkVect

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 302
Re: Problema al ejecutar el ejemplo de RedPic: lo mínimo para comunicarse con RS-232
« Respuesta #7 en: 08 de Febrero de 2007, 20:00:21 »
Ahora no lo puedo probar porque estoy en casa pero os comento:

Toda la parte del MAX y el cableado al PC es correcta porque el echo simulado funciona. Por lo que, como digo, el problema está en el PIC.

Sobre el código, probaré quitando todo lo innecesario. Lo he añadido porque una vez ya me pasó una vez que no me iva otro proyecto por culpa de no deshabilitar cosas, y así me curaba en salud.

Una pregunta que no tengo muy clara:

Con la sentencia use rs-232(...) puedes asignar los pines que quieras? Es necesario que sean los de la USART? Es que tengo un pequeño lío con esto y puede que el problema venga por aquí.

EDITO: se me ha olvidado comentar que los leds están bien colocados. Cuando hago el echo se mantienen apagados y se van encendiendo cada vez que pulso una tecla.

Se me quedaban encendidos cuando conectaba las líneas al PIC.

En teoría con el use rs-232 y definiendo los pines de entrada y salida como toca debería funciona, verdad?

Gracias a todos!!
« Última modificación: 08 de Febrero de 2007, 20:03:14 por DarkVect »

Desconectado DarkVect

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 302
Re: Problema al ejecutar el ejemplo de RedPic: comunicarse con RS-232 (SOLUCIONADO)
« Respuesta #8 en: 09 de Febrero de 2007, 06:34:04 »
Bueno pués ya lo tengo funcionando.

c4_esp_VR  he puesto el código que me has dicho en un PIC16F84 y ha funcionado perfecto. Luego en el 16F648 y también. No ha sido necesario ni declarar el puerto B con set_tris.

Ahora iré añadiendo más cosas a ver si sigue igual. Muchas gracias a todos!!!

EDITO:

Un comentario: Resulta que si sólo conecto la masa de alimentación del PIC, éste empieza a funcionar!!! Sin el terminal positivo!! Se alimenta por el los cables de comunicación con el MAX. Cómo lo arreglo?? El problema es porque tengo cada cosa en una placa y los alimento desde la misma batería pero con cables individuales.
« Última modificación: 09 de Febrero de 2007, 07:12:39 por DarkVect »

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: Problema al ejecutar el ejemplo de RedPic: comunicarse con RS-232 (SOLUCIONA
« Respuesta #9 en: 09 de Febrero de 2007, 13:39:52 »
Por el max es imposible que se alimente, por lo menos por las señales TX y RX, será por las pérdidas o fugas de intensidad que se originan al no poner bobinados entre los distintos módulos para independidarlos. Tambien te recomiendo que en todos los integrados pongas un pequeño condensador de 100nf entre GND y Vcc para limpiar la alimentación, si no es por estas cosas se sale de mi conocimiento.

Enhorabuena DarkVect  por haber solucionado tu pequeño problema ya sabes comunicar un pic con un PC, por cierto si puedes usa el max203 pues ya tiene los condensadores incluidos y es menos engorroso para utilizar en una protoboard.

Un saludete

Desconectado DarkVect

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 302
Re: Problema al ejecutar el ejemplo de RedPic: comunicarse con RS-232 (SOLUCIONADO)
« Respuesta #10 en: 09 de Febrero de 2007, 15:16:21 »
Pués no tenía ni idea del MAX203. EL PIC lo tengo en una placa de pruebas y el MAX en una multiagujero con todos los condensadores y el DB9. Las placas las alimento con una batería de 12V y ambas tienen su 78L05 con sus condensadores de filtrado.

Gracias por la ayuda!!!

Sólo una pregunta más:

Los PIC con USART se diferencia de los que no tienen sólo porque si utilzas los pines RX/TX de la USART, éstos generan interrupciones o hay algo más?
« Última modificación: 09 de Febrero de 2007, 15:23:12 por DarkVect »

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Problema al ejecutar el ejemplo de RedPic: comunicarse con RS-232 (SOLUCIONADO)
« Respuesta #11 en: 09 de Febrero de 2007, 16:24:49 »
DarkVert, dale un vistazo a UART física o virtual
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado DarkVect

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 302
Re: Problema al ejecutar el ejemplo de RedPic: comunicarse con RS-232 (SOLUCIONADO)
« Respuesta #12 en: 09 de Febrero de 2007, 20:58:19 »
Mil gracias RedPIc. Creo que eso de "sólo se diferencia" debería haber sido un "la gran diferencia" :)

Una pregunta más: si utilizo la USART, como le digo al CCS que los pines tal y tal los quiero usar como RX y TX??

Gracias!!

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Problema al ejecutar el ejemplo de RedPic: comunicarse con RS-232 (SOLUCIONADO)
« Respuesta #13 en: 10 de Febrero de 2007, 04:24:10 »
Amigo DarkVert, no tiene que decirle que use específicamente la USART, sólo con que en el #use rs232 los pines xmit y rcv coincidan con los de la USART el compilador compila para que el compilado  use el use usando la USART

ja ja ja  :D :D :D (No puedo, es superior a mis fuerzas, hasta con la USART tengo la necesidad de bromear  :D)
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado tithanae

  • PIC16
  • ***
  • Mensajes: 109
Re: Problema al ejecutar el ejemplo de RedPic: comunicarse con RS-232 (SOLUCIONA
« Respuesta #14 en: 10 de Febrero de 2007, 23:18:37 »
DarkVert sera que nos podrias decir cual fue la solucion.
ya ley el post de redpic y sere bruto pero no me dicuenta cual era la solucion


 

anything