Autor Tema: libreria para conversor A/D (ADC101S021) por SPI  (Leído 5849 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado Pchuqui_1

  • PIC16
  • ***
  • Mensajes: 187
Re: libreria para conversor A/D (ADC101S021) por SPI
« Respuesta #15 en: 09 de Agosto de 2010, 14:48:20 »
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);
 

}

}

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: libreria para conversor A/D (ADC101S021) por SPI
« Respuesta #16 en: 09 de Agosto de 2010, 15:20:48 »
Esta bien, por la imagen de uno de los mensajes anteriores envía 3 ceros y luego los 10-bits de la conversión.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Pchuqui_1

  • PIC16
  • ***
  • Mensajes: 187
Re: libreria para conversor A/D (ADC101S021) por SPI
« Respuesta #17 en: 09 de Agosto de 2010, 15:43:29 »
O sea que debo usar result >>= 3?
Gracias suky.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: libreria para conversor A/D (ADC101S021) por SPI
« Respuesta #18 en: 09 de Agosto de 2010, 19:47:48 »
O sea que debo usar result >>= 3?
Gracias suky.

Exactamente!

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Pchuqui_1

  • PIC16
  • ***
  • Mensajes: 187
Re: libreria para conversor A/D (ADC101S021) por SPI
« Respuesta #19 en: 10 de Diciembre de 2010, 00:04:49 »
Hola a todos. Sigo con el tema del giróscopo. Tengo que pasar el dato que me entrega "velocidad angular" a grados, para poder obtener los grados de inclinación. Alguien alguna vez realizó algo parecido. Conoces algun trabajo donde pueda esutdiar un poco el tema?
Muchas Gracias.


 

anything