00001
00047 #include <ioavr.h>
00048 #include <inavr.h>
00049 #include <stdint.h>
00050 #include "ccadc.h"
00051 #include "main.h"
00052
00053 #define REGULAR_CURRENT_LEVEL 10
00054
00055
00056
00057
00058
00059 #define ICC_TEST
00060
00061
00062
00063
00064 #define SLEEP_MODE_IDLE 0
00065 #define SLEEP_MODE_ADC 1
00066 #define SLEEP_MODE_POWER_SAVE 2
00067 #define SLEEP_MODE_POWER_OFF 3
00068
00069
00077 void CCADC_select_sleep_mode(uint8_t sleep_mode)
00078 {
00079 switch(sleep_mode){
00080 case SLEEP_MODE_IDLE:
00081
00082
00083 SMCR &= ~((1<<SM2)|(1<<SM1)|(1<<SM0));
00084
00085
00086 SMCR |= (1<<SE);
00087 break;
00088
00089 case SLEEP_MODE_ADC:
00090
00091 SMCR &= ~((1<<SM2)|(1<<SM1));
00092 SMCR |= (1<<SM0);
00093
00094
00095 SMCR |= (1<<SE);
00096 break;
00097
00098 case SLEEP_MODE_POWER_SAVE:
00099
00100 SMCR &= ~(1<<SM2);
00101 SMCR |= ((1<<SM0)|(1<<SM0));
00102
00103
00104 SMCR |= (1<<SE);
00105 break;
00106
00107 case SLEEP_MODE_POWER_OFF:
00108
00109 SMCR &= ~((1<<SM1)|(1<<SM0));
00110 SMCR |= (1<<SM2);
00111
00112
00113 SMCR |= (1<<SE);
00114 break;
00115
00116 default:
00117
00118 SMCR &= ~(1<<SE);
00119 break;
00120 }
00121 }
00122
00123
00137 void main( void )
00138 {
00140 int16_t lastCurrentReading;
00141
00144 CCADC_Init( ACCT_1024, RCCI_2048, REGULAR_CURRENT_LEVEL );
00145
00146 #ifdef ICC_TEST
00147 CCADC_SetMode( CCADC_ICC );
00148 #endif
00149
00150 #ifdef ACC_TEST
00151 CCADC_SetMode( CCADC_ACC );
00152 #endif
00153
00154 #ifdef RCC_TEST
00155 CCADC_SetMode( CCADC_RCC );
00156 #endif
00157
00158 __enable_interrupt();
00159
00160 CCADC_select_sleep_mode(SLEEP_MODE_IDLE);
00161
00162 while(1)
00163 {
00164 #ifdef ICC_TEST
00165 lastCurrentReading = CCADC_GetIccResult();
00166 #endif
00167
00168 #ifdef ACC_TEST
00169 lastCurrentReading = CCADC_GetAccResult();
00170 #endif
00171
00172 if (lastCurrentReading > REGULAR_CURRENT_LEVEL)
00173 {
00174 #ifndef RCC_TEST
00175 __sleep();
00176 #endif
00177 }
00178 }
00179 }