Hola
Por mas que trato no lo he logrado y es que necesito mandar a través del puerto serie datos de 10 bits y que el pic los reciba, y éste a su vez me envíe datos de 10 bits del convertidor. Hice un programa pero en ocasiones me manda datos hasta de 16 bits, es decir, me da valores de mas de 1024.
Codigo:
#include <16f874A.h>
#fuses HS,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOLVP,NOCPD,WRT
#device ADC=10
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
main()
{
int temp,datolow,datohigh;
long dato;
dato=0;
temp=0;
datolow=0;
datohigh=0;
set_tris_b(0x00);
setup_adc_ports( ALL_ANALOG );
setup_adc( ADC_CLOCK_INTERNAL );
set_adc_channel( 0 );
while (TRUE)
{
output_high(PIN_B7);
delay_us(100);
dato = read_adc();
datolow=dato;
temp=(dato>>8);
datohigh=temp&3;
printf("%u ",datohigh);
printf("%u ",datolow);
}
}
Es la última parte que me falta de mi código para graficar, si alguien me puede ayudar se lo agradecería mucho.
Hola, de hecho ya corregí mi código y ya incluyo la parte de recepción. Ahora mi problema es que para ciertos valores que guardo en la variable muestras, pues no llega el correcto, es decir, si yo desde visual basic mando un 150, al momento de desplegar en el lcd el valor guardado en la variable muestras pues no es 150 sino 406, en fin, yo creo que solo es un error de declaración de variables pero no estoy seguro. El código es el siguiente:
Codigo:
#include <16f874A.h>
#fuses HS,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOLVP,NOCPD,WRT
#device ADC=10
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#include<lcd.c>
main()
{
long i,dato;
char valor, datohigh, datolow, temp;
int periodohigh, periodolow, muestrashigh, muestraslow, tmuestreo;
long periodo, muestras;
setup_adc_ports( ALL_ANALOG );
setup_adc( ADC_CLOCK_INTERNAL );
set_adc_channel( 0 );
lcd_init();
while (TRUE)
{
while(!kbhit()); //Espera la recepcion de un caracter
valor=getc();
if (valor=="j")
{
output_high(PIN_B7);
putc("8");
while(!kbhit());
muestrashigh=getc();
while(!kbhit());
muestraslow=getc();
while (!kbhit());
periodohigh=getc();
while(!kbhit());
periodolow=getc();
muestras=muestrashigh*256+muestraslow;
periodo=periodohigh*256+periodolow;
tmuestreo=periodo/muestras;
lcd_putc("f");
lcd_gotoxy(1,1);
printf(lcd_putc,"p=%4lu",periodo);
lcd_gotoxy(9,1);
printf(lcd_putc,"m=%4lu",muestras);
lcd_gotoxy(1,2);
printf lcd_putc,"tm=3u",tmuestreo);
output_high(PIN_B6);
for (i=1;i<=muestras;i++)
{
delay_us(tmuestreo);
dato = read_adc();
datolow=dato;
temp=(dato>>8);
datohigh=temp&3;
putc(datohigh);
putc(datolow);
}
}
}
}
De antemano gracias por la ayuda.