Hola a todos. Sigo probando con la librería, bueno estuve investigando y preguntando y algo armé. El problema es que ahora no me responde como debería.
Bueno el asunto es que cuando el giróscopo está quieto se obtiene una tensión de 1.6 V aproximadamente. Eso representa (3.3V/1024)= 0.003222 V por paso del adc. Entonces (1.6V/0.003222V)=496 pasos del adc aproximadamente cuando el giróscopo no se mueve. Bueno el problema que yo veo 30 y no puedo encontrar el problema.
Sin embargo, después de hacer tantas pruebas cambie la línea donde se rota la cadena de bits (result >>= 2) a result >>= 3 y ahí si obtengo 496 pasos aprox. Pero yo se que está mal, por lo que dice la hojas de datos, pero no encuentro otra explicación.
Gracias si alguien puede ayudarme.
#include <16F887.h>
#device adc=10
#fuses HS, NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, ERRORS)
#FUSES DEBUG
#include <HDM64GS12.c>
#include <graphics.c>
#define ADC101S0121_CS PIN_A5
// SPI mode definitions.
#define SPI_MODE_0 (SPI_L_TO_H | SPI_XMIT_L_TO_H)
#define SPI_MODE_1 (SPI_L_TO_H)
#define SPI_MODE_2 (SPI_H_TO_L)
#define SPI_MODE_3 (SPI_H_TO_L | SPI_XMIT_L_TO_H)
//---------------------------------------------
//Rutina para manejar el ADC101S0121
int16 read_adc101s021(void)
{
int8 lsb;
int8 msb;
int16 result;
output_low(ADC101S0121_CS);
msb = spi_read(0);
lsb = spi_read(0);
output_high(ADC101S0121_CS);
result = make16(msb, lsb);
result >>= 2;
result &= 0x3FF;
return(result);
}
//==========================================
void main()
{
int16 adc_result;
output_high(ADC101S0121_CS);
setup_spi(SPI_MASTER | SPI_MODE_3 | SPI_CLK_DIV_16);
delay_ms(10);
while(1)
{
adc_result =read_adc101s021();
printf("%lu \n\r", adc_result);
delay_ms(500);
}
}