TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: ppyote en 10 de Marzo de 2013, 08:28:55

Título: RS232 no funciona bien... alguna idea?
Publicado por: ppyote en 10 de Marzo de 2013, 08:28:55
bueno, pues la verdad es que me estoy ya mosqueando con el envio por RS232... tengo un pic18f2550 con un cristal de 12mhz, que junco con los pll activados consigo los 48mhz, este es el emisor...
despues tengo un pic16f628a trabajando con un oscilador externo de 4mhz.... para poderlo usar como generador de pwm de 4 canales por soft.... bueno pues el problema es que para probar la comunicacion estoy intentando enviad del emisor al receptor un valor int8... pero no hay manera que me llege el dato correcto.... ya que el pwm por hardware que es conforme lo tengo activado ahora para probar se vuelve loco....


este es el receptor.....

Código: CSS
  1. #include <16f628a.h> //pic a utilizar
  2. #fuses nomclr,xt,NOWDT,NOPROTECT,PUT,NOLVP //ordenes para el programador
  3. #use delay (clock=4000000) //Fosc=4Mhz
  4. #use fast_io(b)
  5.  
  6. #use rs232(uart1,baud=9200,bits=8,parity=n,stop=1,ERRORS, rcv=pin_b1)
  7.  
  8. int16 valor_recibido;
  9. int16 valor;
  10. int8 dato=0xff;
  11.  
  12.  
  13. #int_rda
  14. void recepcion()
  15. {
  16.    if(kbhit()){
  17.       valor_recibido=0;
  18.       valor_recibido=getc();
  19.       valor=valor_recibido;
  20.       dato=0xFF;
  21.    }
  22. }
  23.    
  24.  
  25.  
  26. void main(void){
  27.    set_tris_b(0xF7);
  28.    setup_ccp1(CCP_PWM); //ccp1 modo PWM
  29.    setup_timer_2(T2_DIV_BY_16, 255, 1);
  30.    disable_interrupts(int_timer2);
  31.    enable_interrupts(int_rda);
  32.    enable_interrupts(global);
  33.  
  34.    while(true){
  35.     if(dato=0xFF){dato=0x00;set_pwm1_duty (valor);}  
  36.    }
  37. }


y este el emisor.... pegare solo la parte del codigo que trabaja.... ya que el resto de momento no influye en nada....


Código: CSS
  1. #include <18f2550.h>
  2. #device adc=10;
  3. #fuses NOMCLR,hspll,pll3,cpudiv2,PUT,NOWDT,NOBROWNOUT
  4. #use delay(clock=48000000)
  5.  
  6. #use fast_io(a)
  7. #use fast_io(b)
  8. #use fast_io(c)
  9. #include <tft_st7735_spi.h>
  10. //#include <TLV5617.c>
  11. #include <imagenes.h>
  12. #use rs232(uart1,baud=9200,bits=8,parity=n,stop=1,errors, xmit=PIN_C6)
  13.  
  14. void main(){
  15.  
  16.    set_tris_a(0xFF);
  17.    set_tris_b(0xF0);
  18.    set_tris_c(0x0F);
  19.    port_b_pullups(PIN_B4|PIN_B5|PIN_B6|pin_b7);
  20.    setup_adc(ADC_CLOCK_DIV_64);
  21.    setup_adc_ports (AN0_TO_AN3_ANALOG|VSS_VDD);
  22.    setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
  23.    enable_interrupts(int_timer1);
  24.    enable_interrupts(int_rb);
  25.    disable_interrupts(global);
  26.    lcd_initial();
  27.    tft_color_simple(fondo);
  28.    pintar_texto(5,40,inicio,1,white,0);
  29.    pintar_texto(30,98,inicio_2,2,white,0);
  30.  
  31.    for(sub_menu=5;sub_menu<=1000;sub_menu+=5){
  32.       putc(sub_menu);
  33.       delay_ms(1000);
  34.    }
  35. ..... aqui continua con el programa... pero el resto es innecesario ya que aun no trasmite nada en el resto del programa....

decir que sub_menu es una variable de 8bits.....
a ver si me podeis echar una mano.... a ver de donde viene el dichoso problema.....

Título: Re: RS232 no funciona bien... alguna idea?
Publicado por: _LAB_ en 11 de Marzo de 2013, 01:37:27
Hola. No uso el CCS asi que mucha ayuda con el codigo no te puedo dar lo que si noto es que estas tratando de transmitir a 9200 baudio cuando deberías colocar 9600.
Saludos!.
Título: Re: RS232 no funciona bien... alguna idea?
Publicado por: ppyote en 11 de Marzo de 2013, 02:01:49
Hola. No uso el CCS asi que mucha ayuda con el codigo no te puedo dar lo que si noto es que estas tratando de transmitir a 9200 baudio cuando deberías colocar 9600.
Saludos!.

probé de igual forma sin resultado... Creo que probare otra versión del ccs por sí las moscas, ya que no sería de entrañar que tuviera algún bug
Título: Re: RS232 no funciona bien... alguna idea?
Publicado por: _LAB_ en 11 de Marzo de 2013, 13:39:11
Prueba primero cada pic con una comunicacion con el PC via serial para ir descartando posibles errores...
Además el mismo CCS en la ayuda tiene varios ejemplos que deberían funcionar sin problemas. Implementa estos y luego vas modificando, para ver como andas...
Saldos y suerte!!
Título: Re: RS232 no funciona bien... alguna idea?
Publicado por: MGLSOFT en 11 de Marzo de 2013, 15:15:22
Lee bien la ayuda del USE_Delay().
En vez de clock usa crystal y despues me cuentas si hubo cambios...

Y por supuesto, trata de usar velocidades estandar, como 9600, 4800, 19200.

Los 9200 solo complican a la rutina a hacer calculos, que en las demas ya estan hechos...
Título: Re: RS232 no funciona bien... alguna idea?
Publicado por: ppyote en 11 de Marzo de 2013, 19:32:55
Prueba primero cada pic con una comunicacion con el PC via serial para ir descartando posibles errores...
Además el mismo CCS en la ayuda tiene varios ejemplos que deberían funcionar sin problemas. Implementa estos y luego vas modificando, para ver como andas...
Saldos y suerte!!
mi pc ni tiene rs232.... :(
Título: Re: RS232 no funciona bien... alguna idea?
Publicado por: ppyote en 11 de Marzo de 2013, 19:40:26
Lee bien la ayuda del USE_Delay().
En vez de clock usa crystal y despues me cuentas si hubo cambios...

Y por supuesto, trata de usar velocidades estandar, como 9600, 4800, 19200.

Los 9200 solo complican a la rutina a hacer calculos, que en las demas ya estan hechos...

sigo con las mismas..... cambie el #use delay(clock=XXXXX) por use delay(crystal=XXXXX) y no me funciona..... lo de 9200 baudios fue a una desesperada.....
probe por probar.... al igual que probe los rates mas bajos y mas altos.....
al final me tocara pillar un pic con spi que seguro me resulta menos molesto....
me pillare un 16f1503 que ya lleva 4 pwm, aunque solo podre usar 3 por hardware, y lo probare por spi.... ya que la funcion del 16f628A es para poder modificar 4 pwm para las velocidades de mi controlador de ventiladores....
seguire probando.... a ver si me bajo otra version del ccs y pruebo que ya creo que es lo ultimo que me falta por probar....
Título: Re: RS232 no funciona bien... alguna idea?
Publicado por: RALF2 en 11 de Marzo de 2013, 20:25:59
ppyote
Quita esta linea
#use fast_io(b) y esta otra: set_tris_b(0xF7);

Y prueba la recepcion a ver como va, sino funciona haz lo siguiente: implementa el programa del blink para que el led parpadee cada 500ms o 1 seg, esto para ver si el oscilador realmente esta llendo a 4Mhz como lo indicas, ahora bien, si notas que el destello del led no cuadra con el tiempo fijado el problema esta en los fuses seguramente  :shock:
Y nos cuentas para ver como te fue  :mrgreen:
Título: Re: RS232 no funciona bien... alguna idea?
Publicado por: ppyote en 13 de Marzo de 2013, 09:39:05
ppyote
Quita esta linea
#use fast_io(b) y esta otra: set_tris_b(0xF7);

Y prueba la recepcion a ver como va, sino funciona haz lo siguiente: implementa el programa del blink para que el led parpadee cada 500ms o 1 seg, esto para ver si el oscilador realmente esta llendo a 4Mhz como lo indicas, ahora bien, si notas que el destello del led no cuadra con el tiempo fijado el problema esta en los fuses seguramente  :shock:
Y nos cuentas para ver como te fue  :mrgreen:

está noche probare a ver sí funciona... A ver sí me da us respiro mi hijo y mi mujer y pruebo
Título: Re: RS232 no funciona bien... alguna idea?
Publicado por: ppyote en 15 de Marzo de 2013, 19:34:59
bueno... ya esta solucionado el problema....
cual era? era fallo del ccs... en los fuses del emisor, el 18f2550 los tenia asi....#fuses NOMCLR,HSPLL,PLL3,CPUDIV2,PUT,NOWDT,NOBROWNOUT y poniendo un delay(clock=48mhz) y como en anteriores mensajes me habian recomendado... probe con un led.... y cual es mi sorpresa que el oscilador no funcionaba bien... realmente estaba trabajando a 32mhz.... asi que cambie los fuses #fuses NOMCLR,HSPLL,PLL3,CPUDIV,PUT,NOWDT,NOBROWNOUT

problema del postcaler.... que en vez de ponerle CPUDIV ponia CPUDIV2... lo malo que me guiaba por el datasheet y este no se equivocaba, si no que era el puñetero ccs....

por si a alguien le sirve de ayuda... ahi queda eso... CCS cuanto te quiero pero... como te odio ....

gracias a todos por la ayuda... un saludo....