Autor Tema: Funcionamiento de RS232 en PIC 12F629  (Leído 2531 veces)

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

Desconectado marcoscab1166

  • PIC12
  • **
  • Mensajes: 57
Funcionamiento de RS232 en PIC 12F629
« en: 14 de Diciembre de 2015, 12:07:59 »
 hola muchachos, tengo una duda con un circuito con el pic mencionado, la cosa es que yo tengo un programa q envia un string al pulsarse un boton y para ahorrar pines le mande un led en paralelo al pin tx, mi intencion era que se prendiera solo cuando el pic mandara los datos, asi q lo conecte como se muestra en la imagen adjunta.

 en proteus funcionaba perfecto ya q el pin se mantiene en alto cuando no envia y baja al enviar datos. pero en la practica no me funciona xq baja apenas 0.2 volts. existe alguna configuracion para el rs232 como para hacer q funcione? xq ya hice la placa y sino voy a tener q hacerla de vuelta.

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re:Funcionamiento de RS232 en PIC 12F629
« Respuesta #1 en: 14 de Diciembre de 2015, 13:03:35 »
Que tal marcos,

No ve ningun problema en la forma en que conectaste el led. No deberia haber problema, mas bien seria ver si hay algo en tu codigo. Pero si no, deberia funcionar.

Saludos,

Elreypic.

Desconectado marcoscab1166

  • PIC12
  • **
  • Mensajes: 57
Re:Funcionamiento de RS232 en PIC 12F629
« Respuesta #2 en: 14 de Diciembre de 2015, 18:29:39 »
aca esta el codigo
Código: [Seleccionar]
#include <12F629.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC_IO                    //External clock
#FUSES NOCPD                    //No EE protection
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOPUT                    //No Power Up Timer
#FUSES BROWNOUT                 //Reset when brownout detected
#FUSES BANDGAP_HIGH         
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_A0,bits=8)

char c1[10]="000000001";
char c2[10]="000000010";
char c3[10]="000000100";

void main()
{

   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_comparator(NC_NC);
   setup_vref(FALSE);

   while(1){
   if(input(pin_a1)){
    puts(codigo3);}
   if(input(pin_a4)){
    puts(codigo1);}
   if(input(pin_a5)){
    puts(codigo2);}
}
}

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Funcionamiento de RS232 en PIC 12F629
« Respuesta #3 en: 14 de Diciembre de 2015, 18:36:52 »
char c1[10]="000000001";
char c2[10]="000000010";
char c3[10]="000000100";

Imagino que eso es codigo1, codigo2 y codigo3.
No voy a preguntar el por que se parecen tanto a numeros binarios y voy a suponer que solamente es para prueba.

Realmente no se puede ver nada en el codigo, CCS esta generando una UART por software, asi que si suponemos que CCS genero correctamente el codigo eso lo pone a 0 o 1 segun se necesite.
Algo que me parece que esta mal es esto:

#use rs232( baud=9600,parity=N,xmit=PIN_A0,bits=8 )

En ese PIC no hay PORTA B C etc, solo un puerto llamado GPIO, aunque bueno no se si es correcto por que no uso CCS, solo que me parecio raro definirlo asi cuando no existe un PORTA, o un pin RA0.

Tambien otra cosa que habria que ver, si como decis en la simulacion funciona, es lo que esta conectado a esa salida. Estamos hablando de la UART no de RS232 por ahora.
« Última modificación: 14 de Diciembre de 2015, 18:47:55 por KILLERJC »

Desconectado marcoscab1166

  • PIC12
  • **
  • Mensajes: 57
Re:Funcionamiento de RS232 en PIC 12F629
« Respuesta #4 en: 14 de Diciembre de 2015, 20:48:01 »
hola gracias por responder. 1ro, en CCS los pic q tienen un solo puerto se programan como si fuera el puerto A. 2do, si, los arrays c1,c2 y c3 son los codigos, es q antes de subirlo lo modifique un poco y se me paso esa parte. y 3ro, en el 1er mensaje adjunte la imagen del circuito donde ahi se ve como esta conectado. mi problema es que cuando el pic no manda nada el pin transmisor esta en "1", y yo necesitaria q el voltaje que entrega baje lo suficiente como para q encienda el led.

otra solucion que se me ocurrio es ponerle un reset_cpu() a la funcion asi todos los pines bajan a cero. pero no se si resetear tantas veces el cpu no le hara mal al pìc.

if(input(pin_a1)){
 puts(codigo1);
 reset_cpu();}

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Funcionamiento de RS232 en PIC 12F629
« Respuesta #5 en: 14 de Diciembre de 2015, 21:54:09 »
Citar
mi problema es que cuando el pic no manda nada el pin transmisor esta en "1", y yo necesitaria q el voltaje que entrega baje lo suficiente como para q encienda el led.

otra solucion que se me ocurrio es ponerle un reset_cpu() a la funcion asi todos los pines bajan a cero. pero no se si resetear tantas veces el cpu no le hara mal al pìc.

No entiendo ahora cual es el problema.

O es que este en 0 cuando no transmite, o es que no llega a 0 cuando transmite ?

Si deseas que este en 0 cuando no transmite entonces podrias poner INVERT en el #use RS232, asi cambia la polaridad de las señales.
Si tu problema es por que no llega a 0, es por que seguro hay algo mas. el arreglo diodo resistencia no tiene problemas. el tema es que si el diagrama donde esta la flecha que continua a lo que queres comunicarte mantiene una tension vas a tener problemas. Por eso te preguntaba a que lo conectabas.


 

anything