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; } }