00001
00024
00025 #include "Main.h"
00026 #include "Temperature.h"
00027 #include "RTC.h"
00028 #include "UART.h"
00029 #include "Lcd_functions.h"
00030 #include "LCD_driver.h"
00031 #include "Buttons.h"
00032
00033
00036 void main(void)
00037 {
00038 Initialization();
00039
00040 while(1)
00041 {
00042 Time_update();
00043
00044 ADC_conversion();
00045
00046 Store_RX_data();
00047
00048 Send_TX_data();
00049
00050 CheckButtons();
00051
00052 LCD_update();
00053 }
00054 }
00055
00056
00059 void Initialization(void)
00060 {
00061 CLKPR = (1<<CLKPCE);
00062 CLKPR = (1<<CLKPS1) | (1<<CLKPS0);
00063
00064 OSCCAL_calibration();
00065
00066 CONTRAST = 0x0F;
00067
00068 DDRB = 0xF0;
00069
00070 DDRE = 0x00;
00071
00072 PWM_init();
00073
00074 RTC_init();
00075
00076
00077 ADC_init(SingleEnded);
00078
00079
00080 UART_init(12);
00081
00082 LCD_Init();
00083
00084 LCDsetupData();
00085
00086 __enable_interrupt();
00087 }
00088
00089
00093 void Delay(int i)
00094 {
00095 int j,k;
00096
00097 for(k=1;k<=i;k++)
00098 {
00099 for(j=1;j<=124;j++);
00100 }
00101 }
00102
00103
00107 void OSCCAL_calibration(void)
00108 {
00109 unsigned char calibrate = FALSE;
00110 int temp;
00111 unsigned char tempL;
00112
00113 CLKPR = (1<<CLKPCE);
00114
00115 CLKPR = (1<<CLKPS1) | (1<<CLKPS0);
00116
00117 TIMSK2 = 0;
00118
00119 ASSR = (1<<AS2);
00120
00121 OCR2A = 200;
00122
00123 TIMSK0 = 0;
00124
00125 TCCR1B = (1<<CS10);
00126 TCCR2A = (1<<CS20);
00127
00128 while(ASSR & (0x01 | 0x04));
00129
00130 Delay(1000);
00131
00132 while(!calibrate)
00133 {
00134 __disable_interrupt();
00135
00136 TIFR1 = 0xFF;
00137 TIFR2 = 0xFF;
00138
00139 TCNT1H = 0;
00140 TCNT1L = 0;
00141 TCNT2 = 0;
00142
00143 while ( !(TIFR2 && (1<<OCF2A)) );
00144
00145 TCCR1B = 0;
00146
00147 __enable_interrupt();
00148
00149 if ( (TIFR1 && (1<<TOV1)) )
00150 {
00151 temp = 0xFFFF;
00152 }
00153 else
00154 {
00155 tempL = TCNT1L;
00156 temp = TCNT1H;
00157 temp = (temp << 8);
00158 temp += tempL;
00159 }
00160
00161 if (temp > 6250)
00162 {
00163 OSCCAL--;
00164 }
00165 else if (temp < 6120)
00166 {
00167 OSCCAL++;
00168 }
00169 else
00170 calibrate = TRUE;
00171
00172 TCCR1B = (1<<CS10);
00173 }
00174 }
00175