Hello forum i need some help, i developed a simple code to acquire an analog input from PTB1 and display the result of this mesurement to SCI port (i use the SCI2D), so when i run the program i cant see the value of the measurement, some times the SCI port show me some values but they are wrong because some times i never put an analog signal into the port.
The range of the analog signal is from a AA battery (1.5 v)
When i put an analog signal i connect the PTB1(pin 34) to the baterry's positive and the ground goes to the card's ground, may i correct?
Please tell me where is my error i attach the code who i developed
#include <hidef.h> /* for EnableInterrupts macro */#include <MC9S08GB60.h> /* include peripheral declarations */#define initSOPT 0b01110011 //COP and STOP enable controls// ||| ||// ||| |+-RSTPE --- Reset pin enabled// ||| +--BKGDPE -- BKGD pin enabled// ||+------STOPE --- STOP allowed// |+-------COPT ---- long timeout 2^18// +--------COPE ---- COP off#define initICGC2 0b01110000 //Clock Generator Control 2// |||||||| should write MFDx before ICGC1// |||||||+-RFD0 \// ||||||+--RFD1 --- post-PLL divider (div by 1)// |||||+---RFD2 /// ||||+----LOCRE --- loss of clock doesn't reset// |||+-----MFD0 \// ||+------MFD1 --- FLL loop multiplier N = 18x// |+-------MFD2 /// +--------LOLRE --- loss of lock doesn't reset// after FLL init, LOCRE will be set to force reset on clock loss#define initICGC1 0b00111000 //Clock Generator Control 1// 0|||||xx this setting for 32kHz// ||||+---OSCSTEN - don't keep osc on in stop mode// |||+----CLKS0 \ - select FLL engaged external// ||+-----CLKS1 / (FEE) mode// |+------REFS ---- enable oscillator amplifier// +-------RANGE --- 32kHz crystal//////The following values has been test through communication with a PC//except Baudrate230400 because usually PC doesn't support such high baud rate#define Baudrate9600 0x007b; // actually 9590.634#define Baudrate19200 0x003d; // actually 19338.492#define Baudrate38400 0x001f; // actually 38053.161#define Baudrate57600 0x0014; // actually 58982.400#define Baudrate115200 0x000a; // actually 117964.800#define Baudrate230400 0x0005; // actually 235929.600//******************************************************************************************************************************************void delay(void){ uint i,j,k; for(i=0;i<1000;i++) for(j=0;j<500;j++) k++;}//******************************************************************************************************************************************//Variables declarationvoid Transmit (unsigned char *sMessage);unsigned char result;unsigned char buffer [19] = "Voltage: . \n\r"; /* 16 char PC Buffer *///*****************************************************************************************************************************************/* -------------------------------------------------------------- Convert ATC CH1 conversion to a fractional number with two decimal precision. ------------------------------------------------------------ */ void Bin2Frac(unsigned char value){ //volatile unsigned int DecResult; volatile unsigned int temp; //volatile unsigned char remainder; temp = (value*100)/51; buffer[12]= (unsigned char)(temp % 10); temp = temp / 10; buffer[11]= (unsigned char)(temp % 10); buffer[9]= (unsigned char)temp / 10; buffer[9] += 0x30; buffer[11] += 0x30; buffer[12] += 0x30;}//******************************************************************************************************************************************void InitSCI1(void){ SCI2C1 = 0x00; //Initializing SCI2C1 SCI2C3 = 0x00; //Initializing SCI2C3 SCI2C2 = 0x00; //Initializing SCI2C2 SCI2BD = Baudrate9600; //Baudrate SCI2C1_M = 0x00; // eight bits SCI2C1_PE = 0x00; // hardware parity disable SCI2C2_TE = 0x01; //Transmition Enable SCI2C2_RE = 0x00; //Reception Disable //SCI2C2_RIE = 0x00; //Receiver Interrupt Enable}//*****************************************************************************************************************************************void InitATD(void){ATD1C=0x80; //Control Register configuration 10 bits.ATD1PE=0x02; //Enable the ATP pin PTB1ATD1SC=0xA2; //Select CCF=1,ATDCO=1 and CH1}//*****************************************************************************************************************************************void main(void) { PTBSE = 0x00; SOPT = initSOPT; ICGC2 = initICGC2; ICGC1 = initICGC1; //32kHz -> 18.874368MHz bus rate while(!ICGS1_LOCK); //loop until FLL locks ICGC2_LOCRE = 1; //enable reset if ref clock fails InitSCI1(); //Function to initialize the SCI port InitATD(); //Function to initialize the ATD port EnableInterrupts; /* enable interrupts */ /* include your code here */ for(;;) { result= ATD1RL; //read channel //__RESET_WATCHDOG(); /* feeds the dog */ //Transmit ("Hello PC\n\r"); Bin2Frac(result); //Transform the ATD1RL(read channel and convert to format #.##) Transmit(&buffer[0]); //Send to SCI port the measurement of CH1 ATD1SC = ATD1SC; //Re-start the conversion delay(); } /* loop forever */ /* please make sure that you never leave this function */}//******************************************************************************************************************************************//This function allow to transmit data via RS232void Transmit (unsigned char *sMessage){ unsigned char k=0; while(sMessage[k] != 0){ SCI2D = sMessage[k]; k++; while(!SCI2S1_TDRE); /* Polling for transmitter to be empty */ }/* END while(sMessage) */}
And this is some values who i get on hyperterminal, please see the attach