Autor Tema: recepcion de datos rs232  (Leído 1818 veces)

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

Desconectado PICX

  • PIC10
  • *
  • Mensajes: 20
recepcion de datos rs232
« en: 08 de Septiembre de 2006, 02:15:16 »
hola de nuevo
sigo con la comunicacion entre los pics ,esta ves un poco mejor ,
estoy mandando de un pic al otro una conversion ,cuando hago la conversion a 8bits la comunicacion se hace perfecta ; se envia 255 y llega 255.

el problema esta cuando hago la conversion a 10bits en el otro pic llegan numeros erroneos y no entiendo porque , solo cambio #device adc=8 por #device adc=10 con el primero funciona perfecto y con el segundo no.

PROGRAMA DEL TRANSMISOR

#include <16F877A.h>   // Dispositivo a utilizar
#device adc=10
#fuses HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT  // Fusibles
#use delay(clock=4000000)
#use rs232(stream=maestro,baud=9600, xmit=PIN_c6,rcv=PIN_c7,force_sw)
#define use_portb_lcd TRUE
#include "lcd.c"



void borra_lcd()
{
 lcd_putc("\f");
}


/////////////////////////////////////// PRINCIPAL //////////////////////////////////////
void main()
{
int32 valor;

set_tris_B(0b00000000);           // Puerto B configurado como salida
port_b_pullups(FALSE);            // Desactivamos pull-ups del puerto B
setup_adc_ports(RA0_RA1_RA3_ANALOG); //Configura A0,A1 y A3 como entradas analógicas y Vdd como voltaje de referencia
setup_adc(ADC_CLOCK_INTERNAL);   // Reloj para el conversor
set_adc_channel(0);               // Seleccion del canal 0 (RA0)
lcd_init();

 do
{
valor = read_adc();
delay_us(10);

printf(lcd_putc,"Conversion ADC");
delay_ms(2000);
printf(lcd_putc,"\nTENSION:%LU",valor);
delay_ms(2000);
borra_lcd();

enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);

 if (kbhit()){
                printf(lcd_putc,"\fEnviando ~%LU",valor);
                delay_ms(1000);
                fputc(valor,maestro);
                delay_ms(400);
                };
 }
 WHILE(TRUE);
 }

PROGRAMA DEL RECEPTOR

#include <16F877a.h>
#use delay(clock=4000000)
#fuses HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT
#define use_portd_lcd TRUE
#byte CMCON=0x01F       /*Deshabilitamos Comparadores*/
#use rs232(stream=esclavo1,baud=9600, xmit=PIN_C1,rcv=PIN_C0,force_sw)
#include "lcd.c"
#use standard_io(A)


int32 c;
void main()
{
cmcon=7;
lcd_init();
//delay_ms(1000);
while(1){
            if(kbhit(esclavo1)) {
            c=getchar(esclavo1);
            if (c>255)
            output_high(PIN_A0);
            delay_ms(1000);
            lcd_putc("\f~ Esperando..\n");
            lcd_putc("\n~ ESCLAVO 1");
            delay_ms(2000);
            printf(lcd_putc,"\fTension recivida\n      ~%LU",c);
            delay_ms(2000);


}
}
}

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: recepcion de datos rs232
« Respuesta #1 en: 08 de Septiembre de 2006, 08:23:06 »
si fputc solo envía un char, tu estas definiendo una variable de 32 bits y lo más probable es que solo envíe el byte menos significativo.

Al cambiarte a modo 10 bits, seguirá mandandote los ultimos 8 bits, con lo cual no verás los bits mas significativos y esta tal vez sea la causa de tu problema.

En la recepción tambien haces que c sea un int32 pero le asignas el resultado de un getchar con lo cual, estas desperdiciando 24 bits ya que si getchar hace eso --> leer un char, entonces para qué asignarlo a 32 bits?

Por ende, el valor de c, nunca será 255 o bien lo será si al encender el pic se inició la variable con basura ya que no veo que tu la hagas 0 en tu código.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado PICX

  • PIC10
  • *
  • Mensajes: 20
Re: recepcion de datos rs232
« Respuesta #2 en: 08 de Septiembre de 2006, 17:56:28 »
gracias maunix por la respuesta te lo agradesco mucho ,
yo solo coloque int32 pensando que era espacio suficiente para la variable de la conversion
lo malo es que no entiendo muy bien lo que me quieres decir no se que cambiarle al programa ya q e hecho diferentes combinaciones con putc,putchar ,int16 ,getc ,puts y el programa sigue funcionando de la misma manera

gracias por la atencion prestada

Desconectado PICX

  • PIC10
  • *
  • Mensajes: 20
Re: recepcion de datos rs232
« Respuesta #3 en: 08 de Septiembre de 2006, 18:44:21 »
 hola me encuentro mirando la ayuda del compilador y me  encontre que
PUTC
PUTCHAR
FPUTC

SOLO MANDAN 8 BITS , lo mismo pasa con las funciones que lo reciben
GETC
FGETC
GETCHAR
CH

SOLO RECIBEN 8 BITS , con este pequeño problema como puedo mandar los 10 bits
1024 y de la misma forma recibirlos