Hello , this is professor Ismael Sanchez from the University of Puerto Rico at Bayamon . If
what you say is a program in C releted to the analog to digital converter, i have this sample
program that we wrote for codewarrior for coldfire. We used the m5282lite board. There is some
spanish in the code:
Here is the source code:
#include <stdio.h>
#include "mcf5282.h"
int andea, i,QADC_Channel;
float resan0,resan1,resan2,resan3,resan4,resan5,resan6,resan7; //inicializa la variable resanN//
int main()//Comienza la rutina principal//
{//Rutina principal//
MCF5282_WTM_WCR = 0x000E; //Watchdog timer disabled writing to Watchdog Control Register
MCF5282_GPIO_PTCPAR = 0x00;//Investigar esto
MCF5282_GPIO_DDRTC = 0xFF;//La direccion del puerto PortTC es `de salida
MCF5282_GPIO_PORTTC = 0xFF;// Se activan todos los bits del puerto PortTC
MCF5282_QADC_QADCMCR = 0x0000;//Se inicializa el Module Configuration Register
MCF5282_QADC_DDRQA = 0x0000;//Se inicializa DDRQA como entrada para abrir canales análogos(AN[56:55,53:52])
MCF5282_QADC_DDRQB = 0x0000;//Se inicializa DDRQB como entrada para abrir canales análogos(AN[3:0])
MCF5282_QADC_QACR0 = 0x003F;//Mux=0(internal multiplexing),TRG=0,Prescaler Clock divider=128
MCF5282_QADC_QACR1 = 0x2100;//Dis queue1 interrupt,Dis pause interrup,SSE,software single scan
MCF5282_QADC_QACR2 = 0x0000;// 0x1100;//CIE2 disabled, PIE2 disabled,SSE2 disabled, Disable Queue2, 0x113F;
MCF5282_QADC_CCW(0) = 0x0000;//Código para cada palabra de comando de conversión
MCF5282_QADC_CCW(1) = 0x0001;
MCF5282_QADC_CCW(2) = 0x0002;
MCF5282_QADC_CCW(3) = 0x0003;
MCF5282_QADC_CCW(4) = 0x0034;
MCF5282_QADC_CCW(5) = 0x0035;
MCF5282_QADC_CCW(6) = 0x0037;
MCF5282_QADC_CCW(7) = 0x0038;
MCF5282_QADC_CCW(8) = 0x003F;
printf("Prueba para el analogo a digital con ocho canales\n");
printf("Hola Presiona una tecla para continuar\n");
while(1)//Lazo continuo//
{//comienza lazo continuo
QADC_CONVERTER(); //LLama la rutina de Conversión de análogo a digital//
for (i=0;i<100000;i++); //Retrazo
printf(" Can 0 = %1.3f \n", resan0);//Imprime valor canal 0//
printf(" Can 1 = %1.3f \n", resan1);//Imprime valor canal 1//
printf(" Can 2 = %1.3f \n", resan2);//Imprime valor canal 2//
printf(" Can 3 = %1.3f \n", resan3);//Imprime valor canal 3//
printf(" Can 4 = %1.3f \n", resan4);//Imprime valor canal 4//
printf(" Can 5 = %1.3f \n", resan5);//Imprime valor canal 5//
printf(" Can 6 = %1.3f \n", resan6);//Imprime valor canal 6//
printf(" Can 7 = %1.3f \n", resan7);//Imprime valor canal 7//
}//Termina lazo continuo//
return 0;
}//Termina rutina principal
//--------------------------------------------------------------------
int QADC_CONVERTER()//Rutina de conversión//
{
printf("Comienza Rutina de Conversion\n");
MCF5282_QADC_QACR1 == 0x2100;//Inicializamos QACR1//
Channel_Detect:
atras:
for (i=0;i<100000;i++);
printf("Esta entrando al lazo del queue\n");
printf("El valor de MCF5282_QADC_QASR0 es %X \n",MCF5282_QADC_QASR0);
// printf("El valor de CF1 es %X \n",MCF5282_QADC_QASR0_CF1 );
andea=MCF5282_QADC_QASR0 & 0x8000;
printf("andea %x\n",andea);
if (andea = 0x8000 )
{
//MCF5282_QADC_QACR1 = 0x8000;
resan0 = (3.3/1023)*MCF5282_QADC_RJURR(0);
resan1 = (3.3/1023)*MCF5282_QADC_RJURR(1);
resan2 = (3.3/1023)*MCF5282_QADC_RJURR(2);
resan3 = (3.3/1023)*MCF5282_QADC_RJURR(3);
resan4 = (3.3/1023)*MCF5282_QADC_RJURR(4);
resan5 = (3.3/1023)*MCF5282_QADC_RJURR(5);
resan6 = (3.3/1023)*MCF5282_QADC_RJURR(6);
resan7 = (3.3/1023)*MCF5282_QADC_RJURR(7);
printf("Computa\n");
// QADC_Result0 = (3.3/1023)*QADC_Result0;
// QADC_Result1 = (3.3/1023)*QADC_Result1;
}
else
{
printf("Hizo el ELSE, no ha terminado la conversión\n");
goto atras;
}
{
// printf("queue %X \n",MCF5282_QADC_RJURR(x));
//Channel_Detect
}
// printf("QACR1 = %X \n",MCF5282_QADC_QACR1);
printf("Sale de la rutina********************\n");
return 0;
}
//---------------------------------------------------------------------*/
ANOTHER VERSION IS with an application to measure some physical variables:
//float QADC_Result, resan0;
int anadig();
#include "src/common/m5282evb.h"
int andea, j, QADC_Channel;
extern float x;
float T,TC,H,R;
float resan0,resan1,resan2,resan3,resan4;
float resan5,resan6,resan7; //inicializa la variable resanN//
int anadig()
{
MCF5282_QADC_QADCMCR = 0x0000; //Se inicializa el Module Configuration Register
MCF5282_QADC_DDRQA = 0x0000; //Se inicializa DDRQA como entrada para abrir canales análogos(AN[56:55,53:52])
MCF5282_QADC_DDRQB = 0x0000; //Se inicializa DDRQB como entrada para abrir canales análogos(AN[3:0])
MCF5282_QADC_QACR0 = 0x003F; //Mux=0(internal multiplexing),TRG=0,Prescaler Clock divider=128
MCF5282_QADC_QACR1 = 0x3100; //2100 Dis queue1 interrupt,Dis pause interrup,SSE,software continuous scan
MCF5282_QADC_QACR2 = 0x1100; //CIE2 disabled, PIE2 disabled,SSE2 disabled, Queue2 in software continuous scan,posible 0x113F;
MCF5282_QADC_CCW(0) = 0x0000; //Códigos para cada palabra de comando de conversión
MCF5282_QADC_CCW(1) = 0x0001;
MCF5282_QADC_CCW(2) = 0x0002;
MCF5282_QADC_CCW(3) = 0x0003;
MCF5282_QADC_CCW(4) = 0x0034;
MCF5282_QADC_CCW(5) = 0x0035;
MCF5282_QADC_CCW(6) = 0x0037;
MCF5282_QADC_CCW(7) = 0x0038;
MCF5282_QADC_CCW(8) = 0x003F;
//printf("Todas las inicializaciones hasta aqui listas\n");
QADC_CONVERTER();
for (j=0; j<100; j++); //Retraso
T= 99.96*resan5*1.8 + 32;
TC= resan5*100;
H= 100*resan2;
R= resan1;
x=T;// Canal 5 (resan5) para Temperatura
//Convertir_Ascii();
}
//*********************************************************************************************
//********************* SUB-RUTINA DE CONVERSION ANALOGO/DIGITAL ***********************
int QADC_CONVERTER() // Sub-Rutina de conversión análogo/digital
{
printf(" \n");
printf("*********** COMIENZA SUB-RUTINA DE CONVERSION ****************** \n");
printf(" \n");
MCF5282_QADC_QACR1 == 0x2100;//Inicializamos QACR1//
Channel_Detect:
atras:
for (j=0; j<100; j++);
printf("ESTA ENTRANDO AL LAZO DEL QUEUE \n");
printf("EL VALOR DE MCF5282_QADC_QASR0 ES %X \n",MCF5282_QADC_QASR0);
// printf("El valor de CF1 es %X \n",MCF5282_QADC_QASR0_CF1 );
andea=MCF5282_QADC_QASR0 & 0x8000;
printf("ANDEA %x \n",andea);
printf(" \n");
if (andea = 0x8000 )
{
//MCF5282_QADC_QACR1 = 0x8000;
resan0 = (3.3/1023)*MCF5282_QADC_RJURR(0);
resan1 = (3.3/1023)*MCF5282_QADC_RJURR(1);
resan2 = (3.3/1023)*MCF5282_QADC_RJURR(2);
resan3 = (3.3/1023)*MCF5282_QADC_RJURR(3);
resan4 = (3.3/1023)*MCF5282_QADC_RJURR(4);
resan5 = (3.3/1023)*MCF5282_QADC_RJURR(5);
resan6 = (3.3/1023)*MCF5282_QADC_RJURR(6);
resan7 = (3.3/1023)*MCF5282_QADC_RJURR(7);
printf("%4.1f\n",resan0);
printf("%4.1f\n",resan1);
printf("%4.1f\n",resan2);
printf("%4.1f\n",resan3);
printf("%4.1f\n",resan4);
printf("%4.1f\n",resan5);
printf("%4.1f\n",resan6);
printf("%4.1f\n",resan7);
printf("Computa\n");
printf(" \n");
// QADC_Result0 = (3.3/1023)*QADC_Result0;
// QADC_Result1 = (3.3/1023)*QADC_Result1;
}
else
{
printf("HIZO EL ELSE PERO NO HA TERMINADO LA CONVERSION \n");
// goto atras;
}
{
// printf("queue %X \n",MCF5282_QADC_RJURR(x));
// Channel_Detect
}
// printf("QACR1 = %X \n",MCF5282_QADC_QACR1);
printf("*********** SALE DE LA SUB-RUTINA ******************** \n");
printf(" \n");
return 0;
}// Termina Sub-Rutina de conversión análogo/digital
//***************************************************************************************************
//***************************************************************************************************
send me your email and i will send you all the files of this project