I am doing a register retention gzll transmit code with ADC. But problem is that the ADC value transmitted is always 255, if I connect ground to ADC it would read 247. Why is there such a problem here. Here is my code:
#include"reg24le1.h" // I/O header file for NRF24LE1
//#include"hal_uart.h" // library containing serial communication functions
#include"hal_delay.h" // header file containing delay functions
#include"hal_clk.h"
#include <stdio.h>
#include "nrf24le1.h"
#include "gzll_mcu.h"
#include "gzll.h"
#include "hal_adc.h"
// Repeated putchar to print a string
/*void putstring(char *s)
{
while(*s != 0)
hal_uart_putchar(*s++);
}*/
int gzlinit=0,val=0;
uint8_t payload[3];
void wakeup_irq() interrupt INTERRUPT_WUOPIRQ
{
;//putstring("Hello Ranjan I woke up\n");
//gzlinit=1;
}
// main function
void main()
{
//hal_clklf_set_source(HAL_CLKLF_XOSC16M_SYNTH);
//hal_clk_set_input(HAL_CLK_XOSC16_OR_RCOSC16);
mcu_init();
gzll_init();
//hal_clk_set_freq(HAL_CLK_125KHZ); //if you put in 125Khz then uart wont work
WUOPC0 = 0x02;
P01 = 0x00;
P1 = 0x00;
P2 = 0x00;
P3 = 0x00;
P0DIR = 0x02;
//P0DIR = 0xf2;//0x02 only for pin wake up 0xF2 both for uart and pin wake up
P1DIR = 0x00;
P2DIR = 0x00;
P3DIR = 0x00;
// Initializes the UART
// hal_uart_init(UART_BAUD_9K6);
hal_adc_set_input_channel(HAL_ADC_INP_AIN6);
hal_adc_set_reference(HAL_ADC_REF_VDD);
hal_adc_set_input_mode(HAL_ADC_SINGLE);
hal_adc_set_conversion_mode(HAL_ADC_CONTINOUS);
//hal_adc_set_conversion_mode(HAL_ADC_SINGLE_STEP);
hal_adc_set_sampling_rate(HAL_ADC_2KSPS);
hal_adc_set_resolution(HAL_ADC_RES_8BIT);
hal_adc_set_data_just(HAL_ADC_JUST_RIGHT);
// Enable global interrupts
IEN1 = 0x08;
EA = 1;
//MISC=1;
hal_adc_start();
PWRDWN = 0x04;
// Clear power down
PWRDWN = 0x00;
//putstring("\r\nHello Init!!\r\n") ;
// delay_ms(2000);
//infinite loop
while(1)
{
// Print "Hello Everyone"
//putstring("\r\nHello Everyone!!\r\n") ;
//delay_ms(1000); // delay of 1sec
while(P01==1)
{
//if(gzlinit==0)
{
PWRDWN=0x07;
//gzll_init();
if(gzll_get_state() == GZLL_IDLE)
{
while( hal_adc_busy() ) // Wait for the ADC to finish a conversion
{
}
val = hal_adc_read_LSB();
payload[0] = val;
// Transmits payload[] to pipe 0 address
gzll_tx_data(payload, 3, 0);
//gzlinit=2;
}
gzll_goto_idle();
//putstring("\r\nHello Everyone!!\r\n") ;
//if(gzlinit==2)
//break;
}
}
gzlinit=0;
// Register retention mode
PWRDWN = 0x04;
// Clear power down
PWRDWN = 0x00;
}
}