Autor Tema: porqueria en la comunicacion rs232  (Leído 1639 veces)

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

Desconectado artgos1

  • PIC10
  • *
  • Mensajes: 4
porqueria en la comunicacion rs232
« en: 03 de Noviembre de 2010, 13:20:22 »
Hola a todos,

He hecho un potenciometro motorizado con un servo y controlado por el PC.

El pic te devuelve tanto el valor de la tension del potenciometro como la direccion del servo y si has hecho tope, por no destrozar el pote vamos.

El caso es que tanto en la simulacion como en la realidad me envia todos estos datos pero ademas guarreria que no se de donde sale.

La funcion que uso es printf, y el programa en C. Haber si sabeis algun truco para limpiar buffer o algo asi.

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: porqueria en la comunicacion rs232
« Respuesta #1 en: 03 de Noviembre de 2010, 15:51:57 »
Podrías colocar el código, para ver donde puede estar el problema.

Desconectado artgos1

  • PIC10
  • *
  • Mensajes: 4
Re: porqueria en la comunicacion rs232
« Respuesta #2 en: 03 de Noviembre de 2010, 19:46:09 »
Lo simulo en proteus 6 y claro el pot es un potenciometro motorizado normal que yo altero

Aqui esta el codigo:

/*Codigo de control de un potenciometro motorizado mediante un servo
y su lectura asi como la posicion en el pc por puerto serie*/

#include<16f873A.h>
#device adc=8
#use delay(clock=4000000)         //Declaración de frecuencia de trabajo
#use fast_io(B)
#use fast_io(A)
#use fast_io(C)
#byte port_a = 5                  //Declaración de puerto a
#byte port_b = 6                  //Declaración de puerto b
#byte port_c = 7                  //Declaración de puerto c
int b=1;
int c=0;
char respuesta;
#INT_RTCC

manejo_servo_1 ()
{
set_rtcc(100);
c=b;
bit_set(port_b,4);
for(b=0;b<=c;b++)
{
delay_us (130);//valor que en la practica te da la totalidad de movilidad del servo futaba 3003
}
bit_clear(port_b,4);
b=c;
}
main()

{

int resultado=0;
set_tris_c(0x00);
set_tris_a(0xFF);
set_tris_b(0x20);
port_a=0;
port_b=0;
port_c=0;
SETUP_COUNTERS(RTCC_INTERNAL,RTCC_DIV_128);
setup_adc(adc_clock_div_32);
#use rs232(baud=9600, xmit=PIN_B2, rcv=PIN_B5)
printf(" \n");
printf(" izquierda i   derecha d\n\n\r");
set_rtcc(100);//coneste reescaler y en simulación es lo necesario
inicio:
while(1)
{
enable_interrupts (GLOBAL);
enable_interrupts (int_RTCC);
setup_adc_ports(AN0);
   set_adc_channel(0);
   delay_us(10);
   resultado=read_adc();
inicio2:
#use rs232(baud=9600, xmit=PIN_B2, rcv=PIN_B5)
do {
respuesta=getch();
} while(respuesta!='i'&& respuesta!='d');

switch(respuesta)
{
case 'i':
{
printf(" direccion %C valor %X\n\r",respuesta,resultado);
 b++;
 if(b>=15)
{
b=15;
printf(" tope izquierdo\n\r");
goto inicio2;
}
break;
}
case 'd':
{
printf(" direccion %C\ valor %X \n\r",respuesta,resultado);
b--;
if(b<=1)
{
b=1;
printf(" tope derecho\n\r");
goto inicio2;
}
break;
}
break;
}
goto inicio;
}
}

La comunicacion con el PC imaginareis max 232

un saludo y gracias

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: porqueria en la comunicacion rs232
« Respuesta #3 en: 03 de Noviembre de 2010, 20:02:35 »
El problema tal vez se deba a que estás configurando el uso de rs232 cada vez que lees un valor del potenciómetro. Lo que debes hacer es configurarlo una sola vez al inicio del programa.
Con los pines que estás usando, el CCS crea un puerto serie por software, por lo tanto, pueden producirse errores en la velocidad de transmisión y por lo tanto aparecer caracteres inválidos cuando transmites.
Ya que el pic que estás usando posee un puerto serie por hardware, sería recomendable que lo aproveches. Los pines destinados al USART son RC6/TX y RC7/RX.
Por lo tanto la configuración del rs232 quedaría así:

#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

Algo que en C no se usa demasiado es el goto. En este caso es recomendable crear funciones y luego llamarlas. Con las funciones se puede entender mejor el flujo del programa

Desconectado artgos1

  • PIC10
  • *
  • Mensajes: 4
Re: porqueria en la comunicacion rs232
« Respuesta #4 en: 13 de Noviembre de 2010, 07:32:03 »
Muchas gracias compañero, tenias toda la razon, no crei que eso seria tan critico la verdad.

Y perdona por la tardanza pero me quede sin internet un tiempo.

Un saludo y muchas gracias


 

anything