Autor Tema: comunicación rs232 en pic 12F1822  (Leído 4374 veces)

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

Desconectado zidfrid23

  • PIC10
  • *
  • Mensajes: 27
comunicación rs232 en pic 12F1822
« en: 04 de Diciembre de 2013, 14:18:45 »
Hola amigos, quisiera saber si alguno de ustedes a podido llevar a cabo la comunicación rs232 en un pic 12F18022, pues me esta dando problemas y no se por que si ya lo he echo antes en otros pic.
Estoy programando en picc ver 4.130 y programo con mplab V 8.92 que la que incluye este pic.
Este es mi .h
Código: [Seleccionar]
#include <12F1822.h>
#device adc=16

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC_IO                 //Internal RC Osc, no CLKOUT
#FUSES NOCPD                    //No EE protection
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES BROWNOUT                 //Reset when brownout detected
#FUSES NOIESO                   //Internal External Switch Over mode disabled
#FUSES WDT_SW                   //No Watch Dog Timer, enabled in Software
#FUSES NOWRT                    //Program memory not write protected
#FUSES PLL_SW                   //4X HW PLL disabled, 4X PLL enabled/disabled in software
#FUSES NOSTVREN                 //Stack full/underflow will not cause reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOPUT                    //No Power Up Timer

#use delay(int=4000000)

#use FIXED_IO( A_outputs=PIN_A5,PIN_A4,PIN_A3,PIN_A2)
#use rs232(baud=9600,parity=N,xmit=PIN_A0,rcv=PIN_A1,bits=8,stream=PORT1)

y este el codigo C.

Código: [Seleccionar]
#include <Puerto.h>
#int_RDA

#define verde pin_a5
#define rojo  pin_a2

#define verde_on  output_high(verde);
#define verde_off output_low(verde);
#define rojo_on   output_high(rojo);
#define rojo_off  output_low(rojo);

char dato;

void  RDA_isr(void)
{
  dato = getc();
  switch(dato)
   {
     case 'a': verde_on;
     break;
     
     case 'b':verde_off;
     break;
   }
 
}

void main()
{
   setup_oscillator(OSC_4MHZ|OSC_TIMER1|OSC_PLL_OFF,0);
   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF);
   setup_spi(SPI_SS_DISABLED);
   setup_ccp1(CCP_OFF);
   setup_comparator(NC_NC);
   setup_vref(FALSE);
   
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
   
   port_a_pullups(FALSE);
  // output_a(0x00);
   //SET_TRIS_A(0x02);//RA1 como entrada
   
   
   
   while(TRUE)
   {
     ;
   }

}

lo que hago es que envio un par de letras por el puerto del pc para encender o apagar un led, tambien me gustaria tratar de recivir un arreglo de x posiciones y leer cada posicion por separado pero no se como hacerlo.  Alguien sabe?

Bueno eso por el momento, muchas gracias amigos por el tiempo dedicado a mis inquietudes.

Desconectado zidfrid23

  • PIC10
  • *
  • Mensajes: 27
Re: comunicación rs232 en pic 12F1822
« Respuesta #1 en: 04 de Diciembre de 2013, 17:09:40 »
Bueno despues de hacer unas cuantas pruebas, me doy cuenta de que el micro nunca me entra en la interrupción por dato recivido (void  RDA_isr(void)) ya que con cualquier dato que llegue al micro, este deberia entrar en esta interrupción y no es asi por que realizé el siguiente ensayo y el led no se encendio:

Código: [Seleccionar]
void  RDA_isr(void)
{
   verde_on;
}

ahora el interrogante es: por que no ingresa en la interrupción de dato recivido? alguien tiene idea de por que se podria presentar esto?

Desconectado thegame

  • PIC18
  • ****
  • Mensajes: 441
    • Mcu Tronics
Re: comunicación rs232 en pic 12F1822
« Respuesta #2 en: 04 de Diciembre de 2013, 20:44:10 »
Hola

Pues mira, hace unos momentos realice este codigo muy basico:

Código: [Seleccionar]
#include<12f1822.h>
#fuses INTRC_IO,NOWDT,NOMCLR,PUT,PLL_SW
#use delay(clock=1Mhz)

#use rs232(baud=9600,xmit=PIN_A0,rcv=PIN_A1,bits=8,parity=n,stop=1,errors)

void main(void)
{
   printf("Hola mundo");
   while(true)
   {
     
   }
}

Y funciona, porque no pruebas eso primero

Te dejo el resultado simulado en proteus:

« Última modificación: 04 de Diciembre de 2013, 20:48:09 por thegame »
Nunca se deja de aprender

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: comunicación rs232 en pic 12F1822
« Respuesta #3 en: 06 de Diciembre de 2013, 14:00:53 »
Podrías intentar haciendo un kbhit dentro de tu while del main, puede que no entre a la interrupción porque esta realizando la comunicación por software en vez de usar el hardware de rs232
"Nada es imposible, no si puedes imaginarlo"

Desconectado zidfrid23

  • PIC10
  • *
  • Mensajes: 27
Re: comunicación rs232 en pic 12F1822
« Respuesta #4 en: 06 de Diciembre de 2013, 15:58:31 »
Hola thegame. bueno pues ya intente lo que me muestras y no me funciona. ya me temo que debe haber algo mal en el picc de ccs ya que una cosa que noto es que cuando voy al picwizard y busco el 12F1822, este me aparece en un grupo con otros pic de color rosa y no en color negro como los demas pic podria ser que falte algo, no lo se. Pero lo intente con lo que tu me dices y nada.

Tambien trate con la idea de rivale con el kbhit() pero tampoco mola el asunto.

Me gustaria provar ese mismo codigo pero con otro compilador a ver si el problema es el picc pero no se como se puede hacer eso en el mplab, se puede programar en c en mplab?

Saludos,

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: comunicación rs232 en pic 12F1822
« Respuesta #5 en: 06 de Diciembre de 2013, 17:08:43 »
intenta quitando las lineas de
#fuses wdt_sw
#fuses pll_sw
"Nada es imposible, no si puedes imaginarlo"

Desconectado thegame

  • PIC18
  • ****
  • Mensajes: 441
    • Mcu Tronics
Re: comunicación rs232 en pic 12F1822
« Respuesta #6 en: 09 de Diciembre de 2013, 13:17:15 »
Hola

Una pregunta, has intentado cambiar de versión de compilador de CCS???

Tus conexiones fisicas estan correctas??? recuerda que van cruzados los cables.

No tienes otro PIC de esos para descartar que ese sea el problema??

Y pues con respecto a lo de programar en C en MPLAB, claro que se puede pero con otro compilador, por ejemplo los propios de Microchip, tambien podrias intentar por ahi

Saludos

Edito: creo que si estas usando CCS, te falta esto antes de la funcion de interrupcion, pero justo antes de la funcion de interrupcion no hasta arriba, digo talves sea una tontada pero yo no lo pongo hasta arriba:

#INT_RDA

Prueba con eso
« Última modificación: 09 de Diciembre de 2013, 13:31:03 por thegame »
Nunca se deja de aprender

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: comunicación rs232 en pic 12F1822
« Respuesta #7 en: 09 de Diciembre de 2013, 15:39:37 »
Hola a mi me ocurrió algo muy extraño con este PIC, no sé si fue problema de CCS o que pasó, lo cierto es que hasta que se enviara cualquier dato por el puerto este no recibía, incluí en le programa una línea donde al iniciar el programa enviaba un caracter al puerto, luego todo funcionaba perfecto.

Saludos.

Desconectado zidfrid23

  • PIC10
  • *
  • Mensajes: 27
Re: comunicación rs232 en pic 12F1822
« Respuesta #8 en: 09 de Diciembre de 2013, 16:51:40 »
Hola amigos,
Continuando con este caso raro, puedo decir que: ya intente lo me decia rivale quitando las lineas de los fuses wdt_sw y pll_sw sin resultado satisfactorio. lo que dice thegame es muy cierto aveces el ccs molesta deacuerdo a la version pero ya no tengo como cambiar mas la version ya que la cambie al comienzo por que la version que tenia no me soportaba este pic 12F1822 en el pic wizard, con la version que tengo ahora si aparece este pic pero esta en color rosa y no negro como los otros ( no se que significa eso). La parte del max232 ya la revise por todo lado y esta bien y de hecho tengo dos de estos pic para hacer las pruebas y con ambos se me presenta la situacion problematica. Tambien mire lo de #INT_RDA pero pueden ver que en el codigo original que postee esta linea existe es decir no me falta.

lo raro es que teste el pic (con otros programas) aver si los puertos estan dañados o algo pero en todos los pines el pic me da la salida bien y todo.

Que mas podria ensayar?

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: comunicación rs232 en pic 12F1822
« Respuesta #9 en: 09 de Diciembre de 2013, 17:08:39 »
no me había percatado de la posición de tu linea de #int_rda

esta debe ir justo arriba de tu función, es decir así:

Código: [Seleccionar]
#int_rda
void funcion()
{
         //lo que quieras que haga
}


en tu código la linea de int_rda esta separada de tu función, intenta con eso a ver si se soluciona
"Nada es imposible, no si puedes imaginarlo"

Desconectado zidfrid23

  • PIC10
  • *
  • Mensajes: 27
Re: comunicación rs232 en pic 12F1822
« Respuesta #10 en: 10 de Diciembre de 2013, 19:24:30 »
bueno despues de mucho girarle al asunto encontre como hacer funcionar la comunicación serial con este pic, y es que resulta que el ccs le pone por defecto algunas lineas a nuestro codigo y no se si es problema de la version o que, pero lo que me toco hacer fue quitar las siguientes lineas de codigo de mi archivo .c

   setup_oscillator(OSC_4MHZ|OSC_TIMER1|OSC_PLL_OFF,0);
   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF);
   setup_spi(SPI_SS_DISABLED);
   setup_ccp1(CCP_OFF);
   setup_comparator(NC_NC);
   setup_vref(FALSE);

Quitando esto ya me funciono la comunicacion serial, pero ahora no me funciona el pin_a3. Ya veremos que hago para que me funcione esta salida.
Atodos muchas gracias por sus aportes, la ayuda y el interes prestado en mi problema.

Saludos,

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: comunicación rs232 en pic 12F1822
« Respuesta #11 en: 13 de Diciembre de 2013, 19:39:09 »
Ojala te sirva esto: http://www.todopic.com.ar/foros/index.php?topic=36893.0

Por ahi tambien hice funcionar la comunicaion serial, saludos.


 

anything