Calibracion del acelerometro MMA7455L

Hola amigos, estoy trabajando con el MMA7455L mi duda es en la calibración del acelerómetro ya que tengo poco Conocimientos en la programación me he encontrado Algunos códigos que vienen en la hoja de aplicaciones de Freescale

Por lo que leido que tengo que grabar este código en un microcontrolador para que cada vez que encienda el sensor se autocalibre pero creo que este código está en lenguaje C para grabarlo y según yo necesito pasarlo un lenguaje emsamblador para el PIC
Alguien ha tenido la oportunidad de trajar Con este acelerómetro que Pudiera orientarme para su calibración



1 .- Encontre este primer codigo
/************************************************* *************
* Función: AutoCalibration_Ion
* Parámetros: Ninguno
* Retorno: Calibración
*
* Nota: no hay retención de datos en Ion MMA7455L es apagado
* Requiere volver a calibrar o volver a cargar de calibración
* Información
************************************************** ************/
Byte AutoCalibration_Ion (void)
(
** firmado tmpcalib int [3];
** firmado tmpaccel int [3];
char ** tmpbuff firmado [3];
** cnt_runs byte = 0;
** res byte = 0;
** byte i, j;

** for (i = 0; i <3; i + +)
** (
**** tmpcalib = 0;
**)
**
** SetUp_GselectIon (ION_G2);

** while ((cnt_runs + + <MAX_CNT_RUNS) & & (res == 0))
** (
**** for (i = 0; i <3; i + +) tmpaccel = 0; / / Borrar
****
**** for (i = 0; i <4; i + +)
****(
******
****** while (! (INT1)) / / A que esperar nuevos datos válidos
****** tmpbuff [0] = p_Ion_ReadByte (XOUT8);
*****
****** while (! (INT1)) / / A que esperar nuevos datos válidos
****** tmpbuff [1] = p_Ion_ReadByte (YOUT8);
******
****** while (! (INT1)) / / A que esperar nuevos datos válidos
****** tmpbuff [2] = p_Ion_ReadByte (ZOUT8);

****** for (j = 0; j <3; j + +) tmpaccel [j] + = tmpbuff [j];
****)
****
**** for (i = 0; i <3; i + +) tmpaccel / = 4;
****
**** tmpaccel [2] -= 0x3F / / Sensibilidad eje Z de iones de Ajuste
***************************/ / 0x3F es 1g un 2G Gama
**** for (i = 0; i <3; i + +)
****(
****** if (tmpaccel == 0) res + +;
****)
****
**** if (res> = 3)
****(
****** res = 1;
****** for (j = 0; j <3; j + +)
******** tmpaccel [j] + = 1;
****)
**** otra res = 0;
********
**** for (i = 0; i <3; i + +) tmpcalib -= tmpaccel ;
****
**** for (i = 0; i <3; i + +)
****(
****** p_Ion_WriteByte (XOFFL + i * 2, (byte) (((palabra) tmpcalib )% 256));
****** p_Ion_WriteByte (XOFFH + i * 2, (byte) (((palabra) tmpcalib ) / 256));
****** CALIB = tmpcalib ;
****)
*****************
**)
**
* FlashErase1 ((byte *) calib_eeprom) / / Borrar bloque de 512 bytes - EEPROM serie de Sesiones
* CopyRam2FlashBurst ((byte *) calib_eeprom, (byte *) tmpcalib, 6); / / dirección de destino, dirección de origen, la duración es de 6 (importante)
*
* return res ();
)


2 .- es este el segundo CODIGO PARA LA AUTOCALIBRACION


El siguiente es un ejemplo de código para hacer una rutina de calibración automática.
Firmado Xdata char, yData, zdata;
Firmado xcal corto, Xcalp, Ycal, Ycalp, Zcal, Zcalp;
Byte Xcal_L, Xcal_H, Ycal_L, Ycal_H, Zcal_L, Zcal_H;
void main (void) (
/ / Código de Inicialización de las conexiones MCU acelerómetro y el
MCU_and_MMA745xL_demo_Init ();
/ / Poner el dispositivo en 2G Modo de Medición
IIC_ByteWrite (0x16, 0x05);
/ / Asegurarse de que se borran los registros de calibración (no es necesario)
IIC_ByteWrite (0x10, 0);
IIC_ByteWrite (0x11, 0);
Xcal = 0;
for (;)
(
Xdata = IIC_ByteRead (0x06) / / Leer X, Y, Z
YData = IIC_ByteRead (0x07);
Zdata = IIC_ByteRead (0x08);
Xcal + = -2 * Xdata / / Calcular el valor de calibración Basada en datos actuales
Ycal + = -2 * yData;
if (zdata> 65) (Zcal + = (zdata-64) * 2;)
else (Zcal + = (64-zdata) * 2;)
Xcalp xcal = / / Si es Calp "positivo" que se le Asigna a la variable de cal
if (Xcalp <0) Xcalp + = 2048; / / Si el valor negativo A continuación, Convertir a complemento a 2
Ycalp = Ycal;
if (Ycalp <0) Ycalp + = 2048;
Zcalp = Zcal;
if (Zcalp <0) Zcalp + = 2048;
Xcal_L = (byte) (Xcalp & 0x00FF); / / byte bajo a cambio de 8 bits inferiores
Xcal_H = (byte) ((Xcalp & 0xFF00)>> 8); / / byte alto a cambio de 8 bits superiores
Ycal_L = (byte) (Ycalp & 0x00FF); / / byte bajo a cambio de 8 bits inferiores
Ycal_H = (byte) ((Ycalp & 0xFF00)>> 8); / / byte alto a cambio de 8 bits superiores
Zcal_L = (byte) (Zcalp & 0x00FF); / / byte bajo a cambio de 8 bits inferiores
Zcal_H = (byte) ((Zcalp & 0xFF00)>> 8); / / byte alto a cambio de 8 bits superiores
Xcal + = -2 * Xdata;
Delay (0xFF);
Xdata = RegisterRead (0x00);
)
IIC_ByteWrite (0x10, Xcal_L) / / Escribir el valor de calibración de baja en el registro de calibración de baja
IC_ByteWrite (0x11, Xcal_H) / / Escribir el valor de calibración de alta en el registro de calibración de alta
IIC_ByteWrite (0x12, Ycal_L) / / Escribir el valor de calibración de baja en el registro de calibración de baja
IIC_ByteWrite (0x13, Ycal_H) / / Escribir el valor de calibración de alta en el registro de calibración de alta
IIC_ByteWrite (0x14, Zcal_L) / / Escribir el valor de calibración de baja en el registro de calibración de baja
IIC_ByteWrite (0x15, Zcal_H) / / Escribir el valor de calibración de alta en el registro de calibración de alta
MCU_Delay100us (100); / / Retraso antes de volver a leer para asegurarse de que se escriben los valores de
)
)
 
Última edición:
Atrás
Arriba