Autor Tema: Problema PIC UART  (Leído 2889 veces)

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

Desconectado rasengan04

  • PIC10
  • *
  • Mensajes: 11
Problema PIC UART
« en: 28 de Noviembre de 2019, 19:26:49 »
Hola:
estoy trabajando con un PIC 18F4580 y tengo que comunicarlo con un modulo que tiene ya establecido un baudaje de 115200
y manda cadenas de 10 bytes minimo cada 100ms.
yo con el PIC le mando cada 200ms una cadena para verificar la conexión y aparte los comandos para el intercambio de datos.
ya logre mantener la comunicación pero cuando el PIC tiene que recibir datos se queda colgado.

Código: [Seleccionar]
#include <18F4580.h>
#device ADC=16

#FUSES NOWDT                 
#FUSES WDT128                   
#FUSES NOBROWNOUT             
#FUSES NOLVP                   
#FUSES NOXINST               
#use delay(crystal=20000000)
#use RS232(BAUD=115200,BITS=8,PARITY=N,XMIT=PIN_C6,RCV=PIN_C7)
int contador;
#int_RDA
void RDA_isr()
{
 contador++;
   in=getc();
}
void main()
{
 
   enable_interrupts(int_RDA);
   enable_interrupts(GLOBAL);
while(1){
if(contador>=150){
contador=0;
output_toggle(pin_b7);
}

}
}
al quitar el comando getc() vi que el pic si detectaba los datos.
cual podría ser la causa??
 
« Última modificación: 28 de Noviembre de 2019, 19:41:14 por rasengan04 »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Problema PIC UART
« Respuesta #1 en: 29 de Noviembre de 2019, 10:04:06 »
Proba agregandole el ERRORS al USE RS232

#use RS232(BAUD=115200,BITS=8,PARITY=N,XMIT=PIN_C6,RCV=PIN_C7, ERRORS)


Asi si detecta un error, lo limpia y lo guarda en la variable RS232_ERRORS

Desconectado rasengan04

  • PIC10
  • *
  • Mensajes: 11
Re:Problema PIC UART
« Respuesta #2 en: 02 de Diciembre de 2019, 13:34:10 »
Proba agregandole el ERRORS al USE RS232

#use RS232(BAUD=115200,BITS=8,PARITY=N,XMIT=PIN_C6,RCV=PIN_C7, ERRORS)


Asi si detecta un error, lo limpia y lo guarda en la variable RS232_ERRORS

Muchas gracias, ya pude recibir los datos.

Desconectado FerxdmexAlv

  • PIC10
  • *
  • Mensajes: 1
Re:Problema PIC UART
« Respuesta #3 en: 29 de Diciembre de 2020, 16:22:35 »
Quiero enviar un dato a mi PC por el protocolo rs232 , al momento de querer enviar el valor de una variable flotante mi PC recive una serie de caracteres sin sentido cuando debería de recibir un número con dos decimales, para ver los datos que recibía la PC de mi pic fue el Hércules
Use un modulo rs232 a ttl y un cable db9 a USB para poder conectar los pines rx y tx a mi PC espero alguien me pueda asesorar.
Dejo mi código abajo por si alguien puede ayudar


# include <16f877a.h>           
# device adc=16
# fuses xt, wdt, brownout,NOWDT
# use delay (clock = 4M)     
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8)
# use standard_io (a,b,c,d)
# include <lcd.c>

float  bits_analog;
float xvalu;


void main (){
lcd_init();

     LCD_PUTC("\f");
 
setup_adc_ports (AN0_AN1_AN3); 
setup_adc(adc_clock_div_16); 
setup_ccp1(CCP_PWM);         
setup_timer_2(T2_DIV_BY_16, 255,1);
      while (true){
 
      set_adc_channel(0);   
      delay_ms (2);                 
      bits_analog = read_adc();     
       delay_ms (300);
      set_pwm1_duty (bits_analog); 
       delay_ms (2);
       
       xvalu=(bits_analog*100/65528);
     putc(xvalu);
       
      LCD_PUTC("\f");
      LCD_gotoxy(1,1);
     
      printf(lcd_putc,"valor: %f ",xvalu);
      lcd_gotoxy(12,1);
      lcd_putc("%");
     
   
     
     
      }
     
      }

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Problema PIC UART
« Respuesta #4 en: 31 de Diciembre de 2020, 18:16:24 »
     putc(xvalu);


El putc no tiene formato, por lo tanto te va a imprimir cualquier cosa, te va a enviar los primeros 8 bits seguramente del float...
Respecto al printf si te deberia funcionar

      printf(lcd_putc,"valor: %f ",xvalu);

Pero el printf por lo que veo lo envias al LCD, y no a la UART.

Si queres enviar el float a la UART

te sugiero que:
- Crees un array de char para que contenga todo el float
Código: C
  1. char txt[8]
- Uses sprintf, no se si tenes que agregar string.h
Código: C
  1. sprintf(txt,"%f",xvalu);
- Y ahora envies el texto por la UART
Código: C
  1. puts(txt);
« Última modificación: 31 de Diciembre de 2020, 18:20:13 por KILLERJC »


 

anything