How to store temperature data in eeprom of 16F684

Discussion in 'Programmer's Corner' started by lizzy, Apr 12, 2010.

  1. lizzy

    Thread Starter New Member

    Apr 12, 2010
    4
    0
    hello, i'm working on d same pic16f684 store data temperature into eeprom with time stamp. here is my code. how to store it?

    Code ( (Unknown Language)):
    1.  
    2. #include <pic.h>
    3.  
    4. #define    DIGIT1    RA0    
    5. #define    DIGIT2    RA1    
    6. #define     DIGIT3    RA2    
    7. #define    ON            0
    8. #define    OFF        1
    9.  
    10. /*
    11. RA5 - Segment a
    12. RC5 - Segment b
    13. RC4 - Segment c
    14. RC3 - Segment d
    15. RC2 - Segment e
    16. RC1 - Segment f
    17. RC0 - Segment g
    18.  
    19. RA4 - Thermistor
    20. */
    21.  
    22. __CONFIG(INTIO & WDTDIS & PWRTEN & MCLRDIS & UNPROTECT \
    23.   & UNPROTECT & BORDIS & IESODIS & FCMDIS);
    24.  
    25.  
    26. const char LEDDigit[10] = {
    27.     0b0000001,                  //  Digit Zero
    28.     0b1001111,                  //  Digit One
    29.     0b0010010,                  //  Digit Two
    30.     0b0000110,                  //  Digit Three
    31.     0b1001100,                  //  Digit Four
    32.     0b0100100,                  //  Digit Five
    33.     0b0100000,                  //  Digit Six
    34.     0b0001111,                  //  Digit Seven
    35.     0b0000000,                  //  Digit Eight
    36.     0b0000100};                 //  Digit Nine
    37.    
    38.  
    39. int Temperature, TempDigit, DisplayPos, D1, j;
    40. int ADCState;
    41.  
    42. int i, j, d, t, temp;
    43. main()
    44. {
    45.     ///////////  INIT  ////////////
    46.    
    47.     PORTA = 0;
    48.     PORTC = 0;
    49.     TRISA = 0b010000;              //  All Bits of PORTA are Outputs except RA4
    50.    TRISC = 0;                   //  All Bits of PORTC are Outputs
    51.    
    52.    CMCON0 = 7;                //  Turn off Comparators
    53.    ANSEL = 1 << 4;            //  RA4 is ADC input
    54.    ADCON0 = 0b00001101;            //  Left justify, Use Vdd, Channel 4 (AN3), Do not start, Turn on
    55.    ADCON1 = 0b00010000;            //  run oscillatr as 8 x prescalar
    56.    
    57.    DisplayPos = 0;
    58.    j = 0;
    59.    Temperature = 0;
    60.    ADCState = 0;
    61.  
    62.  
    63.    ////  MAIN LOOP  ////
    64.    
    65.    while(1)
    66.    {
    67.        ///////////  DISPLAY READOUT  ///////////
    68.        
    69.        DIGIT1 = OFF;
    70.        DIGIT2 = OFF;
    71.        DIGIT3 = OFF;
    72.        
    73.         if(DisplayPos == 0)                                    //Light 1st segment
    74.         {
    75.             TempDigit = Temperature % 10;                    //Just get "1"s place
    76.             RA5 = LEDDigit[TempDigit] >> 6;                //Turn on digit
    77.             PORTC = LEDDigit[TempDigit];
    78.             DIGIT3 = ON;
    79.             for(D1=0;D1<414;D1++);                            //Delay for 7ms
    80.            
    81.         }else if(DisplayPos == 1)                            //Light 2nd segment
    82.         {
    83.             TempDigit = Temperature % 100;                //Just get "10"s place (strip off "100"s place)
    84.             TempDigit = TempDigit / 10;                    //   and convert to "1"s place
    85.             RA5 = LEDDigit[TempDigit] >> 6;                //Turn on digit
    86.             PORTC = LEDDigit[TempDigit];
    87.             DIGIT2 = ON;
    88.             for(D1=0;D1<400;D1++);                            //Delay for 7ms
    89.         }else                                                        //Light 3rd segment
    90.         {    
    91.             TempDigit = Temperature / 100;                //Just get "100"s place
    92.             RA5 = LEDDigit[TempDigit] >> 6;                //Turn on digit
    93.             PORTC = LEDDigit[TempDigit];
    94.             DIGIT1 = ON;
    95.             for(D1=0;D1<400;D1++);                            //Delay for 7ms
    96.         }
    97.  
    98.         DisplayPos = (DisplayPos + 1) % 3;                //Next segment
    99.        
    100.        
    101.         j++;
    102.         if(j == 50)                                                //Time to update temp?
    103.         {
    104.             j = 0;
    105.        
    106.             switch(ADCState)
    107.             {
    108.                 case 0:                        //Start ADC operation
    109.                     GODONE = 1;
    110.                     ADCState = 1;
    111.                     break;
    112.                 case 1:
    113.                     ADCState = 0;
    114.                     Temperature = ADRESH - 82;
    115.                     break;
    116.             }
    117.         }
    118.     }
    119. }
    120.  
    121.  
     
    Last edited by a moderator: Apr 13, 2010
  2. bertus

    Administrator

    Apr 5, 2008
    15,648
    2,346
Loading...