{"id":5515,"date":"2012-08-02T21:14:25","date_gmt":"2012-08-03T01:14:25","guid":{"rendered":"http:\/\/embedded-lab.com\/blog\/?p=5515"},"modified":"2012-11-06T13:36:07","modified_gmt":"2012-11-06T18:36:07","slug":"intelligent-temperature-monitoring-and-control-system-using-avr-microcontroller","status":"publish","type":"post","link":"https:\/\/embedded-lab.com\/blog\/intelligent-temperature-monitoring-and-control-system-using-avr-microcontroller\/","title":{"rendered":"Intelligent temperature monitoring and control system using AVR microcontroller"},"content":{"rendered":"<p>Controlling temperature has been a prime objective in various applications including refrigerators, air conditioners, air coolers, heaters, industrial temperature conditioning and so on. Temperature controllers vary in their complexities and algorithms. Some of these use simple control techniques like simple on-off control while others use complex Proportional Integral Derivative (PID) or fuzzy logic algorithms. In this project I\u2019m going to discuss about a simple control algorithm and utilize it intelligently unlike analogue controllers. Here are the features of our controller:<\/p>\n<ol>\n<li>Audio-visual setup for setting temperature limits.<\/li>\n<li>Fault detection and evasive action.<\/li>\n<li>Temperature monitoring and display.<\/li>\n<li>Audio-visual warning.<\/li>\n<li>System status.<\/li>\n<li>Settable time frame.<\/li>\n<li>Data retention with internal EEPROM memory.<\/li>\n<\/ol>\n<div>\n<div id=\"attachment_5890\" style=\"width: 575px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/08\/ATMega32TempController.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5890\" class=\"size-full wp-image-5890\" title=\"ATMega32TempController\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/08\/ATMega32TempController.jpg\" alt=\"\" width=\"565\" height=\"481\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/08\/ATMega32TempController.jpg 565w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/08\/ATMega32TempController-550x468.jpg 550w\" sizes=\"auto, (max-width: 565px) 100vw, 565px\" \/><\/a><p id=\"caption-attachment-5890\" class=\"wp-caption-text\">Intelligent temperature controller<\/p><\/div>\n<p><!--more--><\/p>\n<\/div>\n<p>For this design I used an ATMega32L AVR microcontroller with an internal clock frequency of 8MHz, a 4&#215;20 LCD for presenting data visually, a 4-button input interface, a tiny piezo sounder for audible indications and some LEDs for showing faults and simulating real-life devices like heater and coolers. I used MikroC for AVR compiler from Mikroelektronika to develop the firmware for this controller.<\/p>\n<p><strong>Hardware<\/strong><\/p>\n<p>The hardware consists of a four-button interface, four LEDs, a piezo tweeter or sounder, a 4&#215;20 LCD, a LM35 temperature sensor, an AVR ATMega32L microcontroller and some other passive parts. Two LEDs connected to PORTD0 and PORTD1 pins simulate on and off operation of relay switches that are actually present in actual applications to control a heater and an air conditioner. The hardware is powered by a 5V source preferably with a 5V regulator like 7805. If relays are used then a 12\/24V source will also be needed to power the relays. The AVR micro\u2019s AVREF and AVCC pins should be both connected to the 5V source. The distance between the LM35 sensor and the AVRs ADC pin must not be greater than 10-12cm for proper temperature reading. Though I did this project in a prototyping board made with a strip board, a PCB version is more preferred.\u00a0Two additional LEDs connected to PD2 and PD3 indicates the failure or malfunctioning status of the air conditioner and the heater.<\/p>\n<div id=\"attachment_5901\" style=\"width: 575px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/08\/MicrocontrollerCkt11.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5901\" class=\"size-full wp-image-5901\" title=\"MicrocontrollerCkt1\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/08\/MicrocontrollerCkt11.png\" alt=\"\" width=\"565\" height=\"458\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/08\/MicrocontrollerCkt11.png 565w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/08\/MicrocontrollerCkt11-550x445.png 550w\" sizes=\"auto, (max-width: 565px) 100vw, 565px\" \/><\/a><p id=\"caption-attachment-5901\" class=\"wp-caption-text\">Microcontroller and display circuit<\/p><\/div>\n<div id=\"attachment_5886\" style=\"width: 560px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/08\/IOpart.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5886\" class=\"size-full wp-image-5886\" title=\"IOpart\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/08\/IOpart.png\" alt=\"\" width=\"550\" height=\"585\" \/><\/a><p id=\"caption-attachment-5886\" class=\"wp-caption-text\">Input\/Output circuit<\/p><\/div>\n<p><strong>Firmware<\/strong><\/p>\n<p>The entire firmware relies on logical decisions at every step. I wrote the code in a way that the complete code is divided into understandable small functional blocks or functions. Each of these functions is doing specific tasks.<\/p>\n<p>Starting from the top of the code, I declared some definitions of port pins, LCD pins and EEPROM locations. Next I declared global variables and function prototypes.<\/p>\n<p>I\u2019m now going to explain the tasks each functions do. The first function that\u2019s called in the main() function is the <em>setup_mcu()<\/em> function. It configures the I\/O ports for general tasks, LCD and audio output pin. It also sets flags <em>\u201cc\u201d<\/em> and <em>\u201ch\u201d<\/em> zero. These flags are set whenever the system faces an alarm. <em>\u201ch\u201d<\/em> means heater fault flag and <em>\u201cc\u201d<\/em> means cooler fault flag. \u00a0Next to the <em>setup_mcu()<\/em> function is the <em>scan_keys()<\/em> function which simple reads the buttons and a generate specific tone for the key pressed and return a specific value for that particular key. Thus key press, key debouncing delays and tone generation accompanied with key press is made universal throughout the entire code. The\u00a0 <em>adc_avg()<\/em> function takes 64 samples of channel 0 of the AVR\u2019s built-in ADC and makes the average of these samples to reduce noise and ensure accuracy. This function returns an unsigned long value since 10-bit ADC resolution is used. Following the <em>adc_avg() <\/em>function is the temperature display function <em>temp_display()<\/em>. All it does is simply show the current value of the temperature on the LCD display. The <em>settings()<\/em> function is the most important part of the program. When entered this function has two menus. The first one according to the program is the reset fault service request and the second allows the user to setup the high and low temperature values along with the number of passes that will be allowed for the temperature to reach the nominal value. Whenever these values are exceeded an alarm goes high and a particular temperature control device (heater or cooler) is set. Thus setting the right values ensure proper system operation and avoid false alarms. The <em>inc_dec<\/em> function is used for the menu operations whenever when we need to change a value. It is called to setup temperature values and pass values. The <em>display_common <\/em>function is used for common display purposes as needed in the <em>inc_dec<\/em> function. Next the <em>compare_temp()<\/em> routine compares temperature and shows a message in the LCD if the temperature is within limit or beyond limit. Another important part of the program is the function called <em>controller_state<\/em>. It is here the controller sets on or off the temperature control devices and also generates alarm in the event of any error. Associated with this routine is the <em>check_fault<\/em> routine when the conditions for fault are checked. The <em>read_memory<\/em> routine reads the stored data for temperature limits and others in the AVR internal EEPROM. Finally the last three functions of the code <em>are fault_messages()<\/em> which shows the fault type, light the specific LED the specific fault and generate a warning tone for all faults; <em>settings_demanded() <\/em>calls for settings menu and <em>all_tasks()<\/em> is the collection of all the tasks done in the main function.<\/p>\n<p>Here&#8217;s the complete mikroC AVR code:<\/p>\n\n<div class=\"wp_syntax\"><table><tr><td class=\"code\"><pre class=\"c\" style=\"font-family:monospace;\"><span style=\"color: #339933;\">#define setup     PINB0_bit<\/span>\n<span style=\"color: #339933;\">#define up        PINB1_bit<\/span>\n<span style=\"color: #339933;\">#define down      PINB2_bit<\/span>\n<span style=\"color: #339933;\">#define save      PINB3_bit<\/span>\n&nbsp;\n<span style=\"color: #339933;\">#define heater    PORTD0_bit<\/span>\n<span style=\"color: #339933;\">#define cooler    PORTD1_bit<\/span>\n<span style=\"color: #339933;\">#define Fault_H   PORTD2_bit<\/span>\n<span style=\"color: #339933;\">#define Fault_C   PORTD3_bit<\/span>\n&nbsp;\n<span style=\"color: #339933;\">#define ee_t_high        0x0<\/span>\n<span style=\"color: #339933;\">#define ee_t_low         0x4<\/span>\n<span style=\"color: #339933;\">#define ee_t_delta       0x8<\/span>\n<span style=\"color: #339933;\">#define ee_pass_times    0xE<\/span>\n&nbsp;\nsbit LCD_RS at PORTC2_bit<span style=\"color: #339933;\">;<\/span>\nsbit LCD_EN at PORTC3_bit<span style=\"color: #339933;\">;<\/span>\nsbit LCD_D4 at PORTC4_bit<span style=\"color: #339933;\">;<\/span>\nsbit LCD_D5 at PORTC5_bit<span style=\"color: #339933;\">;<\/span>\nsbit LCD_D6 at PORTC6_bit<span style=\"color: #339933;\">;<\/span>\nsbit LCD_D7 at PORTC7_bit<span style=\"color: #339933;\">;<\/span>\n&nbsp;\nsbit LCD_RS_Direction at DDC2_bit<span style=\"color: #339933;\">;<\/span>\nsbit LCD_EN_Direction at DDC3_bit<span style=\"color: #339933;\">;<\/span>\nsbit LCD_D4_Direction at DDC4_bit<span style=\"color: #339933;\">;<\/span>\nsbit LCD_D5_Direction at DDC5_bit<span style=\"color: #339933;\">;<\/span>\nsbit LCD_D6_Direction at DDC6_bit<span style=\"color: #339933;\">;<\/span>\nsbit LCD_D7_Direction at DDC7_bit<span style=\"color: #339933;\">;<\/span>\n&nbsp;\nbit h<span style=\"color: #339933;\">;<\/span>\nbit c<span style=\"color: #339933;\">;<\/span>\n<span style=\"color: #993333;\">float<\/span> t<span style=\"color: #339933;\">=<\/span><span style=\"color:#800080;\">0.0<\/span><span style=\"color: #339933;\">;<\/span>\n<span style=\"color: #993333;\">float<\/span> temp<span style=\"color: #339933;\">=<\/span><span style=\"color:#800080;\">0.0<\/span><span style=\"color: #339933;\">;<\/span>\n&nbsp;\n<span style=\"color: #993333;\">unsigned<\/span> <span style=\"color: #993333;\">long<\/span> pass<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n<span style=\"color: #993333;\">unsigned<\/span> <span style=\"color: #993333;\">int<\/span> t_low<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n<span style=\"color: #993333;\">unsigned<\/span> <span style=\"color: #993333;\">int<\/span> t_high<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n<span style=\"color: #993333;\">unsigned<\/span> <span style=\"color: #993333;\">int<\/span> t_delta<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n<span style=\"color: #993333;\">unsigned<\/span> <span style=\"color: #993333;\">char<\/span> pass_times<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n&nbsp;\n<span style=\"color: #993333;\">void<\/span> setup_mcu<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n<span style=\"color: #993333;\">unsigned<\/span> <span style=\"color: #993333;\">char<\/span> scan_keys<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n<span style=\"color: #993333;\">unsigned<\/span> <span style=\"color: #993333;\">long<\/span> adc_avg<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n<span style=\"color: #993333;\">void<\/span> temp_display<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n<span style=\"color: #993333;\">void<\/span> settings<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n<span style=\"color: #993333;\">signed<\/span> <span style=\"color: #993333;\">int<\/span> inc_dec<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #993333;\">signed<\/span> <span style=\"color: #993333;\">int<\/span> variable<span style=\"color: #339933;\">,<\/span><span style=\"color: #993333;\">signed<\/span> <span style=\"color: #993333;\">int<\/span> max<span style=\"color: #339933;\">,<\/span><span style=\"color: #993333;\">signed<\/span> <span style=\"color: #993333;\">int<\/span> min<span style=\"color: #339933;\">,<\/span><span style=\"color: #993333;\">unsigned<\/span> <span style=\"color: #993333;\">char<\/span> x<span style=\"color: #339933;\">,<\/span><span style=\"color: #993333;\">unsigned<\/span> <span style=\"color: #993333;\">char<\/span> y<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n<span style=\"color: #993333;\">void<\/span> display_common<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #993333;\">unsigned<\/span> <span style=\"color: #993333;\">char<\/span> x<span style=\"color: #339933;\">,<\/span><span style=\"color: #993333;\">unsigned<\/span> <span style=\"color: #993333;\">char<\/span> y<span style=\"color: #339933;\">,<\/span><span style=\"color: #993333;\">unsigned<\/span> <span style=\"color: #993333;\">char<\/span> convert<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n<span style=\"color: #993333;\">void<\/span> compare_temp<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n<span style=\"color: #993333;\">void<\/span> controller_state<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #993333;\">unsigned<\/span> <span style=\"color: #993333;\">short<\/span> state<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n<span style=\"color: #993333;\">void<\/span> check_fault<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #993333;\">unsigned<\/span> <span style=\"color: #993333;\">short<\/span> stat<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n<span style=\"color: #993333;\">void<\/span> read_memory<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n<span style=\"color: #993333;\">void<\/span> fault_messages<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n<span style=\"color: #993333;\">void<\/span> settings_demanded<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n<span style=\"color: #993333;\">void<\/span> all_tasks<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n&nbsp;\n<span style=\"color: #993333;\">void<\/span> main<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span>\n<span style=\"color: #009900;\">&#123;<\/span>\n     setup_mcu<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     read_memory<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     <span style=\"color: #b1b100;\">while<\/span><span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #009900;\">&#41;<\/span>\n     <span style=\"color: #009900;\">&#123;<\/span>\n          all_tasks<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     <span style=\"color: #009900;\">&#125;<\/span><span style=\"color: #339933;\">;<\/span>\n<span style=\"color: #009900;\">&#125;<\/span>\n&nbsp;\n<span style=\"color: #993333;\">void<\/span> setup_mcu<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span>\n<span style=\"color: #009900;\">&#123;<\/span>\n     Lcd_Init<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     Sound_Init<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #339933;\">&amp;<\/span>amp<span style=\"color: #339933;\">;<\/span>PORTD<span style=\"color: #339933;\">,<\/span><span style=\"color: #0000dd;\">4<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     Lcd_Cmd<span style=\"color: #009900;\">&#40;<\/span>_LCD_CLEAR<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     Lcd_Cmd<span style=\"color: #009900;\">&#40;<\/span>_LCD_CURSOR_OFF<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     DDRD<span style=\"color: #339933;\">=<\/span><span style=\"color: #208080;\">0xFF<\/span><span style=\"color: #339933;\">;<\/span>\n     PORTD<span style=\"color: #339933;\">=<\/span><span style=\"color: #208080;\">0x00<\/span><span style=\"color: #339933;\">;<\/span>\n     DDRB<span style=\"color: #339933;\">=<\/span><span style=\"color: #208080;\">0x00<\/span><span style=\"color: #339933;\">;<\/span>\n     c<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n     h<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n<span style=\"color: #009900;\">&#125;<\/span>\n&nbsp;\n<span style=\"color: #993333;\">unsigned<\/span> <span style=\"color: #993333;\">char<\/span> scan_keys<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span>\n<span style=\"color: #009900;\">&#123;<\/span>\n     <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span>setup<span style=\"color: #009900;\">&#41;<\/span>\n     <span style=\"color: #009900;\">&#123;<\/span>\n              Sound_Play<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">888<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000dd;\">99<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n              <span style=\"color: #b1b100;\">return<\/span> <span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">;<\/span>\n     <span style=\"color: #009900;\">&#125;<\/span>\n     <span style=\"color: #b1b100;\">else<\/span> <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span>up<span style=\"color: #009900;\">&#41;<\/span>\n     <span style=\"color: #009900;\">&#123;<\/span>\n              Sound_Play<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">900<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000dd;\">9<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n              <span style=\"color: #b1b100;\">return<\/span> <span style=\"color: #0000dd;\">2<\/span><span style=\"color: #339933;\">;<\/span>\n     <span style=\"color: #009900;\">&#125;<\/span>\n     <span style=\"color: #b1b100;\">else<\/span> <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span>down<span style=\"color: #009900;\">&#41;<\/span>\n     <span style=\"color: #009900;\">&#123;<\/span>\n              Sound_Play<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">700<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000dd;\">9<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n              <span style=\"color: #b1b100;\">return<\/span> <span style=\"color: #0000dd;\">3<\/span><span style=\"color: #339933;\">;<\/span>\n     <span style=\"color: #009900;\">&#125;<\/span>\n     <span style=\"color: #b1b100;\">else<\/span> <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span>save<span style=\"color: #009900;\">&#41;<\/span>\n     <span style=\"color: #009900;\">&#123;<\/span>\n              Sound_Play<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">800<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000dd;\">99<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n              <span style=\"color: #b1b100;\">return<\/span> <span style=\"color: #0000dd;\">4<\/span><span style=\"color: #339933;\">;<\/span>\n     <span style=\"color: #009900;\">&#125;<\/span>\n     <span style=\"color: #b1b100;\">else<\/span>\n     <span style=\"color: #009900;\">&#123;<\/span>\n              <span style=\"color: #b1b100;\">return<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n     <span style=\"color: #009900;\">&#125;<\/span>\n<span style=\"color: #009900;\">&#125;<\/span>\n&nbsp;\n<span style=\"color: #993333;\">unsigned<\/span> <span style=\"color: #993333;\">long<\/span> adc_avg<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span>\n<span style=\"color: #009900;\">&#123;<\/span>\n    <span style=\"color: #993333;\">unsigned<\/span> <span style=\"color: #993333;\">char<\/span> sample<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n    <span style=\"color: #993333;\">register<\/span> <span style=\"color: #993333;\">unsigned<\/span> <span style=\"color: #993333;\">int<\/span> adc<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n    <span style=\"color: #b1b100;\">for<\/span><span style=\"color: #009900;\">&#40;<\/span>sample<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>sample<span style=\"color: #339933;\">&amp;<\/span>lt<span style=\"color: #339933;\">;<\/span><span style=\"color: #0000dd;\">64<\/span><span style=\"color: #339933;\">;<\/span>sample<span style=\"color: #339933;\">++<\/span><span style=\"color: #009900;\">&#41;<\/span>\n    <span style=\"color: #009900;\">&#123;<\/span>\n         adc<span style=\"color: #339933;\">+=<\/span><span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #993333;\">float<\/span><span style=\"color: #009900;\">&#41;<\/span>ADC_Read<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n         delay_us<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">20<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n    <span style=\"color: #009900;\">&#125;<\/span>\n    adc<span style=\"color: #339933;\">=<\/span>adc<span style=\"color: #339933;\">&amp;<\/span>gt<span style=\"color: #339933;\">;&amp;<\/span>gt<span style=\"color: #339933;\">;<\/span><span style=\"color: #0000dd;\">6<\/span><span style=\"color: #339933;\">;<\/span>\n    <span style=\"color: #b1b100;\">return<\/span> adc<span style=\"color: #339933;\">;<\/span>\n<span style=\"color: #009900;\">&#125;<\/span>\n&nbsp;\n<span style=\"color: #993333;\">void<\/span> temp_display<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span>\n<span style=\"color: #009900;\">&#123;<\/span>\n    <span style=\"color: #993333;\">register<\/span> <span style=\"color: #993333;\">unsigned<\/span> <span style=\"color: #993333;\">long<\/span> conv<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n    <span style=\"color: #993333;\">unsigned<\/span> <span style=\"color: #993333;\">char<\/span> ch<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n    t<span style=\"color: #339933;\">=<\/span><span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#40;<\/span>adc_avg<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">*<\/span><span style=\"color:#800080;\">48.9<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n    temp<span style=\"color: #339933;\">=<\/span><span style=\"color: #009900;\">&#40;<\/span>t<span style=\"color: #339933;\">*<\/span><span style=\"color:#800080;\">0.01<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n    conv<span style=\"color: #339933;\">=<\/span>t<span style=\"color: #339933;\">;<\/span>\n    ch<span style=\"color: #339933;\">=<\/span><span style=\"color: #009900;\">&#40;<\/span>conv<span style=\"color: #339933;\">\/<\/span><span style=\"color: #0000dd;\">1000<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n    Lcd_Chr<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">2<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">48<\/span><span style=\"color: #339933;\">+<\/span>ch<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n    ch<span style=\"color: #339933;\">=<\/span><span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#40;<\/span>conv<span style=\"color: #339933;\">\/<\/span><span style=\"color: #0000dd;\">100<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">%<\/span><span style=\"color:#800080;\">10<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n    Lcd_Chr_CP<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">48<\/span><span style=\"color: #339933;\">+<\/span>ch<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n    Lcd_Chr_CP<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">46<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n    ch<span style=\"color: #339933;\">=<\/span><span style=\"color: #009900;\">&#40;<\/span>conv<span style=\"color: #339933;\">\/<\/span><span style=\"color: #0000dd;\">10<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">%<\/span><span style=\"color:#800080;\">10<\/span><span style=\"color: #339933;\">;<\/span>\n    Lcd_Chr_CP<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">48<\/span><span style=\"color: #339933;\">+<\/span>ch<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n    ch<span style=\"color: #339933;\">=<\/span><span style=\"color: #009900;\">&#40;<\/span>conv<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">%<\/span><span style=\"color:#800080;\">10<\/span><span style=\"color: #339933;\">;<\/span>\n    Lcd_Chr_CP<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">48<\/span><span style=\"color: #339933;\">+<\/span>ch<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n    Lcd_Out_CP<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #ff0000;\">&quot;'C&quot;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n    Delay_ms<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">100<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n<span style=\"color: #009900;\">&#125;<\/span>\n&nbsp;\n<span style=\"color: #993333;\">void<\/span> settings<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span>\n<span style=\"color: #009900;\">&#123;<\/span>\n     Lcd_Cmd<span style=\"color: #009900;\">&#40;<\/span>_LCD_CLEAR<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     read_memory<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n&nbsp;\n     <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span>h<span style=\"color: #339933;\">||<\/span>c<span style=\"color: #009900;\">&#41;<\/span>\n     <span style=\"color: #009900;\">&#123;<\/span>\n             lcd_out<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #ff0000;\">&quot;Reset Alarm?      &quot;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n             lcd_out<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">2<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #ff0000;\">&quot;Up=Yes   Down=No&quot;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n             <span style=\"color: #b1b100;\">do<\/span>\n             <span style=\"color: #009900;\">&#123;<\/span>\n                 <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span>scan_keys<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">==<\/span><span style=\"color: #0000dd;\">2<\/span><span style=\"color: #009900;\">&#41;<\/span>\n                 <span style=\"color: #009900;\">&#123;<\/span>\n                     c<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n                     h<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n                     <span style=\"color: #000000; font-weight: bold;\">break<\/span><span style=\"color: #339933;\">;<\/span>\n                 <span style=\"color: #009900;\">&#125;<\/span>\n                 <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span>scan_keys<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">==<\/span><span style=\"color: #0000dd;\">3<\/span><span style=\"color: #009900;\">&#41;<\/span>\n                 <span style=\"color: #009900;\">&#123;<\/span>\n                     <span style=\"color: #000000; font-weight: bold;\">break<\/span><span style=\"color: #339933;\">;<\/span>\n                 <span style=\"color: #009900;\">&#125;<\/span>\n             <span style=\"color: #009900;\">&#125;<\/span><span style=\"color: #b1b100;\">while<\/span><span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     <span style=\"color: #009900;\">&#125;<\/span>\n     Lcd_Cmd<span style=\"color: #009900;\">&#40;<\/span>_LCD_CLEAR<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     delay_ms<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">500<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n&nbsp;\n     lcd_out<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #ff0000;\">&quot;Settings Step 1\/3     &quot;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     lcd_out<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">2<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #ff0000;\">&quot;High Temp. Limit:&quot;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     lcd_out<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">3<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000dd;\">4<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #ff0000;\">&quot;'C&quot;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     t_high <span style=\"color: #339933;\">=<\/span> inc_dec<span style=\"color: #009900;\">&#40;<\/span>t_high<span style=\"color: #339933;\">,<\/span><span style=\"color: #0000dd;\">99<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000dd;\">3<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#40;<\/span>t_high<span style=\"color: #339933;\">&amp;<\/span>gt<span style=\"color: #339933;\">;=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">&amp;<\/span>amp<span style=\"color: #339933;\">;&amp;<\/span>amp<span style=\"color: #339933;\">;<\/span><span style=\"color: #009900;\">&#40;<\/span>t_high<span style=\"color: #339933;\">&amp;<\/span>lt<span style=\"color: #339933;\">;=<\/span><span style=\"color: #0000dd;\">99<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#41;<\/span>\n     <span style=\"color: #009900;\">&#123;<\/span>\n           eeprom_write<span style=\"color: #009900;\">&#40;<\/span>ee_t_high<span style=\"color: #339933;\">,<\/span>t_high<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n           Lcd_Cmd<span style=\"color: #009900;\">&#40;<\/span>_LCD_CLEAR<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     <span style=\"color: #009900;\">&#125;<\/span>\n     delay_ms<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">500<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     lcd_out<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #ff0000;\">&quot;Settings Step 2\/3&quot;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     lcd_out<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">2<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #ff0000;\">&quot;Low Temp. Limit:&quot;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     lcd_out<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">3<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000dd;\">4<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #ff0000;\">&quot;'C&quot;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     t_low<span style=\"color: #339933;\">=<\/span>inc_dec<span style=\"color: #009900;\">&#40;<\/span>t_low<span style=\"color: #339933;\">,<\/span><span style=\"color: #0000dd;\">99<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000dd;\">3<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span>t_low<span style=\"color: #339933;\">&amp;<\/span>gt<span style=\"color: #339933;\">;=<\/span><span style=\"color: #0000dd;\">0<\/span> <span style=\"color: #339933;\">&amp;<\/span>amp<span style=\"color: #339933;\">;&amp;<\/span>amp<span style=\"color: #339933;\">;<\/span> t_low<span style=\"color: #339933;\">&amp;<\/span>lt<span style=\"color: #339933;\">;=<\/span><span style=\"color: #0000dd;\">99<\/span><span style=\"color: #009900;\">&#41;<\/span>\n     <span style=\"color: #009900;\">&#123;<\/span>\n           eeprom_write<span style=\"color: #009900;\">&#40;<\/span>ee_t_low<span style=\"color: #339933;\">,<\/span>t_low<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n           Lcd_Cmd<span style=\"color: #009900;\">&#40;<\/span>_LCD_CLEAR<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     <span style=\"color: #009900;\">&#125;<\/span>\n     delay_ms<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">500<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     lcd_out<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #ff0000;\">&quot;Settings Step 3\/3&quot;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     lcd_out<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">2<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #ff0000;\">&quot;No. of passes:  &quot;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     pass_times<span style=\"color: #339933;\">=<\/span>inc_dec<span style=\"color: #009900;\">&#40;<\/span>pass_times<span style=\"color: #339933;\">,<\/span><span style=\"color: #0000dd;\">99<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000dd;\">3<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span>pass_times<span style=\"color: #339933;\">&amp;<\/span>gt<span style=\"color: #339933;\">;=<\/span><span style=\"color: #0000dd;\">0<\/span> <span style=\"color: #339933;\">&amp;<\/span>amp<span style=\"color: #339933;\">;&amp;<\/span>amp<span style=\"color: #339933;\">;<\/span> pass_times<span style=\"color: #339933;\">&amp;<\/span>lt<span style=\"color: #339933;\">;=<\/span><span style=\"color: #0000dd;\">99<\/span><span style=\"color: #009900;\">&#41;<\/span>\n     <span style=\"color: #009900;\">&#123;<\/span>\n           eeprom_write<span style=\"color: #009900;\">&#40;<\/span>ee_pass_times<span style=\"color: #339933;\">,<\/span>pass_times<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n           Lcd_Cmd<span style=\"color: #009900;\">&#40;<\/span>_LCD_CLEAR<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     <span style=\"color: #009900;\">&#125;<\/span>\n     delay_ms<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">500<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     pass_times<span style=\"color: #339933;\">=<\/span><span style=\"color: #009900;\">&#40;<\/span>eeprom_read<span style=\"color: #009900;\">&#40;<\/span>ee_pass_times<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     t_high<span style=\"color: #339933;\">=<\/span><span style=\"color: #009900;\">&#40;<\/span>eeprom_read<span style=\"color: #009900;\">&#40;<\/span>ee_t_high<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     t_low<span style=\"color: #339933;\">=<\/span><span style=\"color: #009900;\">&#40;<\/span>eeprom_read<span style=\"color: #009900;\">&#40;<\/span>ee_t_low<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     t_delta<span style=\"color: #339933;\">=<\/span><span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#40;<\/span>t_high<span style=\"color: #339933;\">-<\/span>t_low<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">\/<\/span><span style=\"color: #0000dd;\">2<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     eeprom_write<span style=\"color: #009900;\">&#40;<\/span>ee_t_delta<span style=\"color: #339933;\">,<\/span>t_delta<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     delay_ms<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">100<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n<span style=\"color: #009900;\">&#125;<\/span>\n&nbsp;\n<span style=\"color: #993333;\">signed<\/span> <span style=\"color: #993333;\">int<\/span> inc_dec<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #993333;\">signed<\/span> <span style=\"color: #993333;\">int<\/span> variable<span style=\"color: #339933;\">,<\/span><span style=\"color: #993333;\">signed<\/span> <span style=\"color: #993333;\">int<\/span> max<span style=\"color: #339933;\">,<\/span><span style=\"color: #993333;\">signed<\/span> <span style=\"color: #993333;\">int<\/span> min<span style=\"color: #339933;\">,<\/span><span style=\"color: #993333;\">unsigned<\/span> <span style=\"color: #993333;\">char<\/span> x<span style=\"color: #339933;\">,<\/span><span style=\"color: #993333;\">unsigned<\/span> <span style=\"color: #993333;\">char<\/span> y<span style=\"color: #009900;\">&#41;<\/span>\n<span style=\"color: #009900;\">&#123;<\/span>\n     <span style=\"color: #b1b100;\">do<\/span>\n     <span style=\"color: #009900;\">&#123;<\/span>\n         display_common<span style=\"color: #009900;\">&#40;<\/span>x<span style=\"color: #339933;\">,<\/span>y<span style=\"color: #339933;\">,<\/span>variable<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n         <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span>scan_keys<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">==<\/span><span style=\"color: #0000dd;\">2<\/span><span style=\"color: #009900;\">&#41;<\/span>\n         <span style=\"color: #009900;\">&#123;<\/span>\n               variable<span style=\"color: #339933;\">+=<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">;<\/span>\n         <span style=\"color: #009900;\">&#125;<\/span>\n         <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span>scan_keys<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">==<\/span><span style=\"color: #0000dd;\">3<\/span><span style=\"color: #009900;\">&#41;<\/span>\n         <span style=\"color: #009900;\">&#123;<\/span>\n                variable<span style=\"color: #339933;\">-=<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">;<\/span>\n         <span style=\"color: #009900;\">&#125;<\/span>\n         <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span>variable<span style=\"color: #339933;\">&amp;<\/span>gt<span style=\"color: #339933;\">;<\/span>max<span style=\"color: #009900;\">&#41;<\/span>\n         <span style=\"color: #009900;\">&#123;<\/span>\n                 variable<span style=\"color: #339933;\">=<\/span>min<span style=\"color: #339933;\">;<\/span>\n         <span style=\"color: #009900;\">&#125;<\/span>\n         <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span>variable<span style=\"color: #339933;\">&amp;<\/span>lt<span style=\"color: #339933;\">;<\/span>min<span style=\"color: #009900;\">&#41;<\/span>\n         <span style=\"color: #009900;\">&#123;<\/span>\n                 variable<span style=\"color: #339933;\">=<\/span>max<span style=\"color: #339933;\">;<\/span>\n         <span style=\"color: #009900;\">&#125;<\/span>\n         <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span>scan_keys<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">==<\/span><span style=\"color: #0000dd;\">4<\/span><span style=\"color: #009900;\">&#41;<\/span>\n         <span style=\"color: #009900;\">&#123;<\/span>\n                  <span style=\"color: #b1b100;\">return<\/span> variable<span style=\"color: #339933;\">;<\/span>\n         <span style=\"color: #009900;\">&#125;<\/span>\n         <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span>scan_keys<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">==<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #009900;\">&#41;<\/span>\n         <span style=\"color: #009900;\">&#123;<\/span>\n                  <span style=\"color: #b1b100;\">return<\/span> <span style=\"color: #009900;\">&#40;<\/span>max<span style=\"color: #339933;\">+<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n         <span style=\"color: #009900;\">&#125;<\/span>\n     <span style=\"color: #009900;\">&#125;<\/span><span style=\"color: #b1b100;\">while<\/span><span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n<span style=\"color: #009900;\">&#125;<\/span>\n&nbsp;\n<span style=\"color: #993333;\">void<\/span> display_common<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #993333;\">unsigned<\/span> <span style=\"color: #993333;\">char<\/span> x<span style=\"color: #339933;\">,<\/span><span style=\"color: #993333;\">unsigned<\/span> <span style=\"color: #993333;\">char<\/span> y<span style=\"color: #339933;\">,<\/span><span style=\"color: #993333;\">unsigned<\/span> <span style=\"color: #993333;\">char<\/span> convert<span style=\"color: #009900;\">&#41;<\/span>\n<span style=\"color: #009900;\">&#123;<\/span>\n    <span style=\"color: #993333;\">unsigned<\/span> <span style=\"color: #993333;\">char<\/span> t <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n    t<span style=\"color: #339933;\">=<\/span><span style=\"color: #009900;\">&#40;<\/span>convert<span style=\"color: #339933;\">\/<\/span><span style=\"color: #0000dd;\">10<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n    Lcd_Chr<span style=\"color: #009900;\">&#40;<\/span>y<span style=\"color: #339933;\">,<\/span>x<span style=\"color: #339933;\">,<\/span><span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">48<\/span><span style=\"color: #339933;\">+<\/span>t<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n    t<span style=\"color: #339933;\">=<\/span><span style=\"color: #009900;\">&#40;<\/span>convert<span style=\"color: #339933;\">%<\/span><span style=\"color:#800080;\">10<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n    Lcd_Chr<span style=\"color: #009900;\">&#40;<\/span>y<span style=\"color: #339933;\">,<\/span><span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #339933;\">++<\/span>x<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">48<\/span><span style=\"color: #339933;\">+<\/span>t<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n<span style=\"color: #009900;\">&#125;<\/span>\n&nbsp;\n<span style=\"color: #993333;\">void<\/span> compare_temp<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span>\n<span style=\"color: #009900;\">&#123;<\/span>\n     <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span>temp<span style=\"color: #339933;\">&amp;<\/span>gt<span style=\"color: #339933;\">;=<\/span>t_high<span style=\"color: #009900;\">&#41;<\/span>\n     <span style=\"color: #009900;\">&#123;<\/span>\n         Lcd_Out<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">3<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #ff0000;\">&quot;High Temperature!&quot;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n         controller_state<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     <span style=\"color: #009900;\">&#125;<\/span>\n     <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span>temp<span style=\"color: #339933;\">&amp;<\/span>lt<span style=\"color: #339933;\">;=<\/span>t_low<span style=\"color: #009900;\">&#41;<\/span>\n     <span style=\"color: #009900;\">&#123;<\/span>\n         Lcd_Out<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">3<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #ff0000;\">&quot;Low Temperature! &quot;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n         controller_state<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">2<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     <span style=\"color: #009900;\">&#125;<\/span>\n     <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#40;<\/span>temp<span style=\"color: #339933;\">&amp;<\/span>lt<span style=\"color: #339933;\">;<\/span>t_high<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">&amp;<\/span>amp<span style=\"color: #339933;\">;&amp;<\/span>amp<span style=\"color: #339933;\">;<\/span>temp<span style=\"color: #339933;\">&amp;<\/span>gt<span style=\"color: #339933;\">;=<\/span><span style=\"color: #009900;\">&#40;<\/span>t_high<span style=\"color: #339933;\">-<\/span>t_delta<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">||<\/span><span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#40;<\/span>temp<span style=\"color: #339933;\">&amp;<\/span>gt<span style=\"color: #339933;\">;<\/span>t_low<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">&amp;<\/span>amp<span style=\"color: #339933;\">;&amp;<\/span>amp<span style=\"color: #339933;\">;<\/span>temp<span style=\"color: #339933;\">&amp;<\/span>lt<span style=\"color: #339933;\">;<\/span><span style=\"color: #009900;\">&#40;<\/span>t_delta<span style=\"color: #339933;\">+<\/span>t_low<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#41;<\/span>\n     <span style=\"color: #009900;\">&#123;<\/span>\n         Lcd_Out<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">3<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #ff0000;\">&quot;Within Limit.    &quot;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n         controller_state<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     <span style=\"color: #009900;\">&#125;<\/span>\n<span style=\"color: #009900;\">&#125;<\/span>\n&nbsp;\n<span style=\"color: #993333;\">void<\/span> controller_state<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #993333;\">unsigned<\/span> <span style=\"color: #993333;\">short<\/span> state<span style=\"color: #009900;\">&#41;<\/span>\n<span style=\"color: #009900;\">&#123;<\/span>\n     <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span>state<span style=\"color: #339933;\">==<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #009900;\">&#41;<\/span>\n     <span style=\"color: #009900;\">&#123;<\/span>\n         <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span>c<span style=\"color: #339933;\">==<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #009900;\">&#41;<\/span>\n         <span style=\"color: #009900;\">&#123;<\/span>\n                  heater<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n                  cooler<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">;<\/span>\n                  check_fault<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n         <span style=\"color: #009900;\">&#125;<\/span>\n     <span style=\"color: #009900;\">&#125;<\/span>\n     <span style=\"color: #b1b100;\">else<\/span> <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span>state<span style=\"color: #339933;\">==<\/span><span style=\"color: #0000dd;\">2<\/span><span style=\"color: #009900;\">&#41;<\/span>\n     <span style=\"color: #009900;\">&#123;<\/span>\n         <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span>h<span style=\"color: #339933;\">==<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #009900;\">&#41;<\/span>\n         <span style=\"color: #009900;\">&#123;<\/span>\n                 heater<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">;<\/span>\n                 cooler<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n                 check_fault<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">2<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n         <span style=\"color: #009900;\">&#125;<\/span>\n     <span style=\"color: #009900;\">&#125;<\/span>\n     <span style=\"color: #b1b100;\">else<\/span>\n     <span style=\"color: #009900;\">&#123;<\/span>\n         heater<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n         cooler<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n     <span style=\"color: #009900;\">&#125;<\/span>\n<span style=\"color: #009900;\">&#125;<\/span>\n&nbsp;\n<span style=\"color: #993333;\">void<\/span> check_fault<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #993333;\">unsigned<\/span> <span style=\"color: #993333;\">short<\/span> stat<span style=\"color: #009900;\">&#41;<\/span>\n<span style=\"color: #009900;\">&#123;<\/span>\n     <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span>stat<span style=\"color: #339933;\">==<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #009900;\">&#41;<\/span>\n     <span style=\"color: #009900;\">&#123;<\/span>\n          pass<span style=\"color: #339933;\">++;<\/span>\n          <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#40;<\/span>temp<span style=\"color: #339933;\">&amp;<\/span>gt<span style=\"color: #339933;\">;=<\/span>t_high<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">&amp;<\/span>amp<span style=\"color: #339933;\">;&amp;<\/span>amp<span style=\"color: #339933;\">;<\/span><span style=\"color: #009900;\">&#40;<\/span>pass<span style=\"color: #339933;\">==<\/span><span style=\"color: #009900;\">&#40;<\/span>pass_times<span style=\"color: #339933;\">*<\/span><span style=\"color: #0000dd;\">10<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#41;<\/span>\n          <span style=\"color: #009900;\">&#123;<\/span>\n              Fault_C<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">;<\/span>\n              c<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">;<\/span>\n              heater<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n              cooler<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n              pass<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n          <span style=\"color: #009900;\">&#125;<\/span>\n          <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#40;<\/span>temp<span style=\"color: #339933;\">&amp;<\/span>lt<span style=\"color: #339933;\">;=<\/span><span style=\"color: #009900;\">&#40;<\/span>t_high<span style=\"color: #339933;\">-<\/span>t_delta<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">&amp;<\/span>amp<span style=\"color: #339933;\">;&amp;<\/span>amp<span style=\"color: #339933;\">;<\/span><span style=\"color: #009900;\">&#40;<\/span>pass<span style=\"color: #339933;\">==<\/span><span style=\"color: #009900;\">&#40;<\/span>pass_times<span style=\"color: #339933;\">*<\/span><span style=\"color: #0000dd;\">10<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#41;<\/span>\n          <span style=\"color: #009900;\">&#123;<\/span>\n             heater<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n             cooler<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n             c<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n             pass<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n          <span style=\"color: #009900;\">&#125;<\/span>\n     <span style=\"color: #009900;\">&#125;<\/span>\n     <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span>stat<span style=\"color: #339933;\">==<\/span><span style=\"color: #0000dd;\">2<\/span><span style=\"color: #009900;\">&#41;<\/span>\n     <span style=\"color: #009900;\">&#123;<\/span>\n          pass<span style=\"color: #339933;\">++;<\/span>\n          <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#40;<\/span>temp<span style=\"color: #339933;\">&amp;<\/span>lt<span style=\"color: #339933;\">;=<\/span>t_low<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">&amp;<\/span>amp<span style=\"color: #339933;\">;&amp;<\/span>amp<span style=\"color: #339933;\">;<\/span><span style=\"color: #009900;\">&#40;<\/span>pass<span style=\"color: #339933;\">==<\/span><span style=\"color: #009900;\">&#40;<\/span>pass_times<span style=\"color: #339933;\">*<\/span><span style=\"color: #0000dd;\">10<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#41;<\/span>\n          <span style=\"color: #009900;\">&#123;<\/span>\n              Fault_H<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">;<\/span>\n              h<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">;<\/span>\n              heater<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n              cooler<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n              pass<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n          <span style=\"color: #009900;\">&#125;<\/span>\n          <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#40;<\/span>temp<span style=\"color: #339933;\">&amp;<\/span>gt<span style=\"color: #339933;\">;<\/span><span style=\"color: #009900;\">&#40;<\/span>t_low<span style=\"color: #339933;\">+<\/span>t_delta<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">&amp;<\/span>amp<span style=\"color: #339933;\">;&amp;<\/span>amp<span style=\"color: #339933;\">;<\/span><span style=\"color: #009900;\">&#40;<\/span>pass<span style=\"color: #339933;\">==<\/span><span style=\"color: #009900;\">&#40;<\/span>pass_times<span style=\"color: #339933;\">*<\/span><span style=\"color: #0000dd;\">10<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#41;<\/span>\n          <span style=\"color: #009900;\">&#123;<\/span>\n             heater<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n             cooler<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n             h<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n             pass<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n          <span style=\"color: #009900;\">&#125;<\/span>\n     <span style=\"color: #009900;\">&#125;<\/span>\n     delay_ms<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">100<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n<span style=\"color: #009900;\">&#125;<\/span>\n&nbsp;\n<span style=\"color: #993333;\">void<\/span> read_memory<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span>\n<span style=\"color: #009900;\">&#123;<\/span>\n     pass_times<span style=\"color: #339933;\">=<\/span><span style=\"color: #009900;\">&#40;<\/span>eeprom_read<span style=\"color: #009900;\">&#40;<\/span>ee_pass_times<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     delay_ms<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">30<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     t_high<span style=\"color: #339933;\">=<\/span><span style=\"color: #009900;\">&#40;<\/span>eeprom_read<span style=\"color: #009900;\">&#40;<\/span>ee_t_high<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     delay_ms<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">30<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     t_low<span style=\"color: #339933;\">=<\/span><span style=\"color: #009900;\">&#40;<\/span>eeprom_read<span style=\"color: #009900;\">&#40;<\/span>ee_t_low<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     delay_ms<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">30<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span>pass_times<span style=\"color: #339933;\">&amp;<\/span>gt<span style=\"color: #339933;\">;<\/span><span style=\"color: #0000dd;\">99<\/span><span style=\"color: #009900;\">&#41;<\/span>\n     <span style=\"color: #009900;\">&#123;<\/span>\n          eeprom_write<span style=\"color: #009900;\">&#40;<\/span>ee_pass_times<span style=\"color: #339933;\">,<\/span> <span style=\"color: #0000dd;\">45<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n          delay_ms<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">30<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n          pass_times<span style=\"color: #339933;\">=<\/span><span style=\"color: #009900;\">&#40;<\/span>eeprom_read<span style=\"color: #009900;\">&#40;<\/span>ee_pass_times<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n          delay_ms<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">30<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     <span style=\"color: #009900;\">&#125;<\/span>\n     <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span>t_high<span style=\"color: #339933;\">&amp;<\/span>gt<span style=\"color: #339933;\">;<\/span><span style=\"color: #0000dd;\">99<\/span><span style=\"color: #009900;\">&#41;<\/span>\n     <span style=\"color: #009900;\">&#123;<\/span>\n          eeprom_write<span style=\"color: #009900;\">&#40;<\/span>ee_t_high<span style=\"color: #339933;\">,<\/span> <span style=\"color: #0000dd;\">40<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n          delay_ms<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">30<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n          t_high<span style=\"color: #339933;\">=<\/span><span style=\"color: #009900;\">&#40;<\/span>eeprom_read<span style=\"color: #009900;\">&#40;<\/span>ee_t_high<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n          delay_ms<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">30<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     <span style=\"color: #009900;\">&#125;<\/span>\n     <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span>t_low<span style=\"color: #339933;\">&amp;<\/span>gt<span style=\"color: #339933;\">;<\/span><span style=\"color: #0000dd;\">99<\/span><span style=\"color: #009900;\">&#41;<\/span>\n     <span style=\"color: #009900;\">&#123;<\/span>\n          eeprom_write<span style=\"color: #009900;\">&#40;<\/span>ee_t_low<span style=\"color: #339933;\">,<\/span> <span style=\"color: #0000dd;\">20<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n          delay_ms<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">30<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n          t_low<span style=\"color: #339933;\">=<\/span><span style=\"color: #009900;\">&#40;<\/span>eeprom_read<span style=\"color: #009900;\">&#40;<\/span>ee_t_low<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n          delay_ms<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">30<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     <span style=\"color: #009900;\">&#125;<\/span>\n     t_delta<span style=\"color: #339933;\">=<\/span><span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#40;<\/span>t_high<span style=\"color: #339933;\">-<\/span>t_low<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">\/<\/span><span style=\"color: #0000dd;\">2<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     eeprom_write<span style=\"color: #009900;\">&#40;<\/span>ee_t_delta<span style=\"color: #339933;\">,<\/span>t_delta<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     delay_ms<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">30<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n<span style=\"color: #009900;\">&#125;<\/span>\n&nbsp;\n<span style=\"color: #993333;\">void<\/span> fault_messages<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span>\n<span style=\"color: #009900;\">&#123;<\/span>\n          <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#40;<\/span>h<span style=\"color: #339933;\">==<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #009900;\">&#41;<\/span> <span style=\"color: #339933;\">&amp;<\/span>amp<span style=\"color: #339933;\">;&amp;<\/span>amp<span style=\"color: #339933;\">;<\/span> <span style=\"color: #009900;\">&#40;<\/span>c<span style=\"color: #339933;\">==<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#41;<\/span>\n          <span style=\"color: #009900;\">&#123;<\/span>\n                   Lcd_Out<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">4<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #ff0000;\">&quot;System Okay.             &quot;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n                   Fault_C<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n                   Fault_H<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n          <span style=\"color: #009900;\">&#125;<\/span>\n          <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#40;<\/span>h<span style=\"color: #339933;\">==<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #009900;\">&#41;<\/span> <span style=\"color: #339933;\">||<\/span> <span style=\"color: #009900;\">&#40;<\/span>c<span style=\"color: #339933;\">==<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#41;<\/span>\n          <span style=\"color: #009900;\">&#123;<\/span>\n                   Sound_Play<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">550<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000dd;\">150<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n                   <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#40;<\/span>h<span style=\"color: #339933;\">==<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #009900;\">&#41;<\/span> <span style=\"color: #339933;\">&amp;<\/span>amp<span style=\"color: #339933;\">;&amp;<\/span>amp<span style=\"color: #339933;\">;<\/span> <span style=\"color: #009900;\">&#40;<\/span>c<span style=\"color: #339933;\">==<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#41;<\/span>\n                   <span style=\"color: #009900;\">&#123;<\/span>\n                           Lcd_Out<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">4<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #ff0000;\">&quot;Alarm! Heater Fault.&quot;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n                           delay_ms<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">600<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n                   <span style=\"color: #009900;\">&#125;<\/span>\n                   <span style=\"color: #b1b100;\">else<\/span> <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#40;<\/span>h<span style=\"color: #339933;\">==<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #009900;\">&#41;<\/span> <span style=\"color: #339933;\">&amp;<\/span>amp<span style=\"color: #339933;\">;&amp;<\/span>amp<span style=\"color: #339933;\">;<\/span> <span style=\"color: #009900;\">&#40;<\/span>c<span style=\"color: #339933;\">==<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#41;<\/span>\n                   <span style=\"color: #009900;\">&#123;<\/span>\n                           Lcd_Out<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">4<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #ff0000;\">&quot;Alarm! Cooler Fault.&quot;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n                           delay_ms<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">600<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n                   <span style=\"color: #009900;\">&#125;<\/span>\n                   <span style=\"color: #b1b100;\">else<\/span> <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#40;<\/span>h<span style=\"color: #339933;\">==<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #009900;\">&#41;<\/span> <span style=\"color: #339933;\">&amp;<\/span>amp<span style=\"color: #339933;\">;&amp;<\/span>amp<span style=\"color: #339933;\">;<\/span> <span style=\"color: #009900;\">&#40;<\/span>c<span style=\"color: #339933;\">==<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#41;<\/span>\n                   <span style=\"color: #009900;\">&#123;<\/span>\n                            Lcd_Out<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">4<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #ff0000;\">&quot;System Failed.      &quot;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n                            delay_ms<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">600<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n                   <span style=\"color: #009900;\">&#125;<\/span>\n          <span style=\"color: #009900;\">&#125;<\/span>\n<span style=\"color: #009900;\">&#125;<\/span>\n&nbsp;\n<span style=\"color: #993333;\">void<\/span> settings_demanded<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span>\n<span style=\"color: #009900;\">&#123;<\/span>\n          <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span>scan_keys<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">==<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #009900;\">&#41;<\/span>\n          <span style=\"color: #009900;\">&#123;<\/span>\n              delay_ms<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">9<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n              <span style=\"color: #b1b100;\">while<\/span><span style=\"color: #009900;\">&#40;<\/span>scan_keys<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">==<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n              settings<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n          <span style=\"color: #009900;\">&#125;<\/span><span style=\"color: #339933;\">;<\/span>\n<span style=\"color: #009900;\">&#125;<\/span>\n&nbsp;\n<span style=\"color: #993333;\">void<\/span> all_tasks<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span>\n<span style=\"color: #009900;\">&#123;<\/span>\n          Lcd_Out<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #ff0000;\">&quot;Active Temperature: &quot;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n          temp_display<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n          fault_messages<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n          settings_demanded<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n          compare_temp<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n<span style=\"color: #009900;\">&#125;<\/span><\/pre><\/td><\/tr><\/table><\/div>\n\n<p><a href=\"http:\/\/embedded-lab.com\/uploads\/HexFiles\/ShawonS\/TCcode.zip\"><strong>Download source and HEX files\u00a0<\/strong><\/a><\/p>\n<p><strong>Operation<\/strong><\/p>\n<p>The system works as described here. Upon start-up the system sets up the required internal hardware of the AVR micro and then read the EEPROM memory. If the EEPROM locations contain garbage values then they are set with default values otherwise the previously stored values are read. After reading the EEPROM, the system starts to monitor temperature and waits for actions if any temperature limit is exceeded. The system at this point shows current temperature and system status. If the user wishes to set parameters then he\/she has to press the setup button and enter the settings menu. In the settings menu there are three settings and these are high and low temperature limits and the number of passes the system will make prior to issuing a fault message. If, for example, the high temperature limit is set to 40?C, the low temperature limit is set to 20?C and the number of system passes is set to 45, and the current temperature gradually rises to 41?C from 30?C, the system will trip high temperature alarm and start the cooler. The LCD display will show high temperature alarm. Now if the temperature starts to decline and reach a value in between (40?C &#8211; (40?C -20?C)\/2) =30?C [i.e t_delta] and 20?C within the 45 system passes then the cooler is turned off and no fault message is generated. The system resumes to normal state. If the temperature didn\u2019t decline to the range mentioned as above then it is assumed that the cooler is either faulty or some other thing is causing too much heat generation which is exceeding the cooler\u2019s capacity. Thus a fault warning is issued for the cooler and it is shut down until the fault has been cleared. In this way both the hardware and the cooler is protected from damage. The same scenario happens during the low temperature alarm. If both the cooler and the heater fail then the system goes in a complete halt state until reset or given attention.<\/p>\n<p><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/08\/TC-1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-5894\" title=\"TC (1)\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/08\/TC-1.jpg\" alt=\"\" width=\"565\" height=\"413\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/08\/TC-1.jpg 565w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/08\/TC-1-550x402.jpg 550w\" sizes=\"auto, (max-width: 565px) 100vw, 565px\" \/><\/a><\/p>\n<p><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/08\/TC-2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-5895\" title=\"TC (2)\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/08\/TC-2.jpg\" alt=\"\" width=\"565\" height=\"406\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/08\/TC-2.jpg 565w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/08\/TC-2-550x395.jpg 550w\" sizes=\"auto, (max-width: 565px) 100vw, 565px\" \/><\/a><\/p>\n<p><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/08\/TC-3.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-5896\" title=\"TC (3)\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/08\/TC-3.jpg\" alt=\"\" width=\"565\" height=\"397\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/08\/TC-3.jpg 565w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/08\/TC-3-550x386.jpg 550w\" sizes=\"auto, (max-width: 565px) 100vw, 565px\" \/><\/a><\/p>\n<p><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/08\/TC-6.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-5897\" title=\"TC (6)\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/08\/TC-6.jpg\" alt=\"\" width=\"565\" height=\"408\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/08\/TC-6.jpg 565w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/08\/TC-6-550x397.jpg 550w\" sizes=\"auto, (max-width: 565px) 100vw, 565px\" \/><\/a><\/p>\n<p><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/08\/TC-8.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-5898\" title=\"TC (8)\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/08\/TC-8.jpg\" alt=\"\" width=\"565\" height=\"424\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/08\/TC-8.jpg 565w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/08\/TC-8-550x412.jpg 550w\" sizes=\"auto, (max-width: 565px) 100vw, 565px\" \/><\/a><\/p>\n<table style=\"width: 560px;\" border=\"0\" cellspacing=\"5\" cellpadding=\"2\" align=\"center\">\n<tbody>\n<tr>\n<td style=\"border-color: #cccccc; background-color: #fdfdfd;\"><span style=\"font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: x-small;\"><span style=\"line-height: 19px;\"><span>This project was written by Shawon Shahryiar from Bangladesh. He works as an Engineer in the Research and Development Cell at ELECTRO Group in Dhaka. If you have any questions or concerns regarding this project, you can contact him at:<\/span><br \/>\n<img decoding=\"async\" src=\"http:\/\/embedded-lab.com\/uploads\/images\/ShawonEmail.png\" alt=\"\" \/><\/span><\/span><\/td>\n<td style=\"border-color: #cccccc; background-color: #fdfdfd;\"><span style=\"font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: x-small;\"><span style=\"line-height: 19px;\"><img decoding=\"async\" src=\"http:\/\/embedded-lab.com\/uploads\/images\/Shawon.jpg\" alt=\"\" \/><\/span><\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n","protected":false},"excerpt":{"rendered":"<p>Controlling temperature has been a prime objective in various applications including refrigerators, air conditioners, air coolers, heaters, industrial temperature conditioning and so on. Temperature controllers vary in their complexities and algorithms. Some of these use simple control techniques like simple on-off control while others use complex Proportional Integral Derivative (PID) or fuzzy logic algorithms. In this project I\u2019m going to discuss about a simple control algorithm and utilize it intelligently unlike analogue controllers. Here are the features of our controller: Audio-visual setup for setting temperature limits. Fault detection and evasive action. Temperature monitoring and display. Audio-visual warning. System status. Settable<\/p>\n","protected":false},"author":1,"featured_media":5886,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[15,245],"tags":[464,9,463],"class_list":["post-5515","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-avr-projects","category-embedded-lab-projects","tag-avr-micro","tag-mikroc","tag-temperature-controller"],"_links":{"self":[{"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/posts\/5515","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/comments?post=5515"}],"version-history":[{"count":12,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/posts\/5515\/revisions"}],"predecessor-version":[{"id":6250,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/posts\/5515\/revisions\/6250"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/media\/5886"}],"wp:attachment":[{"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/media?parent=5515"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/categories?post=5515"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/tags?post=5515"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}