running smt160

Discussion in 'The Projects Forum' started by BorealDude, Aug 24, 2013.

  1. BorealDude

    Thread Starter New Member

    May 20, 2013
    9
    0
    Hi there,
    in a project i want use 4 smt160 sensors and get the average temperature in a place.
    i used a 4:1 MUX and one ex_int0 and TIMER1.(with atmega16)
    it starts well but after couple of cycles the program sticks and does not get the data and hangs.and i've to reset it.
    can any one detect the problem?
    this is the program:

    Code ( (Unknown Language)):
    1.  
    2. /////////////////////////////////////////////////////////////////////
    3.  
    4. #include <mega16.h>
    5.  
    6. #include <alcd.h>
    7.  
    8. #include <delay.h>
    9.  
    10. #include <stdio.h>
    11.  
    12.  
    13.  
    14. bit  control_1=0;
    15. bit  control_2=0;
    16. bit  control_3=0;
    17. bit  control_4=0;
    18.  
    19.  
    20.  
    21. float tup_1=0.0 ;
    22. float tup_2=0.0 ;
    23. float tup_3=0.0 ;
    24. float tup_4=0.0 ;
    25.  
    26.  
    27.  
    28. float tdn_1=0.0;
    29. float tdn_2=0.0;
    30. float tdn_3=0.0;
    31. float tdn_4=0.0;
    32.  
    33.  
    34.  
    35. float temperature_1  ;
    36. float temperature_2  ;
    37. float temperature_3  ;
    38. float temperature_4  ;
    39.  
    40. float temp_ave;
    41.  
    42.  
    43.  
    44.  
    45.  
    46. /////////////////////////////////////////  DISPLAY   ///////////////////////////
    47.  
    48. void display()
    49. {
    50. char ave [16];
    51.  
    52. lcd_clear();
    53.  
    54. sprintf(ave,"Ave=%.1f",temp_ave);
    55. lcd_puts(ave);
    56.  
    57. delay_ms(700);
    58.      
    59. }
    60.  
    61.  
    62. ///////////////////////////////////////////////////////////////////////////
    63. interrupt [EXT_INT0] void ext_int0_isr(void)
    64.  
    65. {
    66.  
    67. TCCR1B=0x00;
    68.    
    69.  
    70.  //#######################  first sensor  ###############
    71.      
    72. if (PORTB==0)
    73.  {    
    74.  
    75.  
    76.      
    77.       if (control_1)
    78.       {
    79.  
    80.      
    81.       tdn_1=TCNT1;
    82.       TCNT1=0;
    83.      
    84.      
    85.       MCUCR=0x02;
    86.      
    87.      
    88.      
    89.       control_1=0;
    90.      
    91.      
    92.        
    93.            }
    94.      
    95.      
    96.     else
    97.      
    98.      {  
    99.      tup_1 =TCNT1;                                                  
    100.      TCNT1=0;
    101.      MCUCR=0x03;
    102.      
    103.      
    104.      control_1=1;
    105.      }
    106.    
    107.      
    108.   }  
    109.      
    110.  //#######################  second sensor  ###############
    111.    
    112.  
    113. else if (PORTB==1)
    114. {
    115.  
    116.      
    117.       if (control_2)
    118.       {
    119.  
    120.      
    121.       tdn_2=TCNT1;
    122.       TCNT1=0;
    123.      
    124.      
    125.       MCUCR=0x02;
    126.      
    127.      
    128.      
    129.       control_2=0;
    130.      
    131.      
    132.    
    133.            }
    134.      
    135.      
    136.     else
    137.      
    138.      {  
    139.      tup_2=TCNT1;                                                  
    140.      TCNT1=0;
    141.      MCUCR=0x03;
    142.      
    143.      
    144.      control_2=1;
    145.      }
    146.      
    147.      
    148.      
    149.    }
    150.      
    151.    
    152.  //#######################  third sensor  ###############
    153.  
    154.      
    155. else if (PORTB==2)
    156. {
    157.       if (control_3)
    158.       {
    159.  
    160.      
    161.       tdn_3=TCNT1;
    162.       TCNT1=0;
    163.      
    164.      
    165.       MCUCR=0x02;
    166.      
    167.      
    168.      
    169.       control_3=0;
    170.      
    171.            
    172.  
    173.            }
    174.      
    175.      
    176.     else
    177.      
    178.      {  
    179.      tup_3=TCNT1;                                                  
    180.      TCNT1=0;
    181.      MCUCR=0x03;
    182.      
    183.      
    184.      control_3=1;
    185.      }  
    186.      
    187.      
    188. }    
    189.    
    190.  
    191.      
    192.  //#######################  forth sensor  ###############
    193.  
    194.  
    195.        
    196. else if (PORTB==3)
    197.  
    198. {
    199.  
    200.  
    201.  
    202.       if (control_4)
    203.       {
    204.  
    205.      
    206.       tdn_4=TCNT1;
    207.       TCNT1=0;
    208.      
    209.      
    210.       MCUCR=0x02;
    211.      
    212.      
    213.      
    214.       control_4=0;  
    215.          
    216.        
    217.            }
    218.      
    219.      
    220.     else
    221.      
    222.      {  
    223.      tup_4=TCNT1;                                                  
    224.      TCNT1=0;
    225.      MCUCR=0x03;
    226.      
    227.      
    228.      control_4=1;
    229.      }  
    230.      
    231.      
    232. }
    233.  
    234. ////////////////end///////////////
    235.    
    236.       TCCR1B=0x02;
    237.      
    238. }
    239.  
    240. //////@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@//////////
    241.  
    242. void main (void)
    243.  
    244. {
    245.  
    246. float dutyCycle_1=0.0  ;
    247. float dutyCycle_2=0.0  ;
    248. float dutyCycle_3=0.0  ;
    249. float dutyCycle_4=0.0  ;
    250.  
    251.  
    252.  
    253.  
    254. TCCR1A=0x00;
    255. TCCR1B=0x02;
    256. TCNT1H=0x00;
    257. TCNT1L=0x00;
    258.  
    259. GICR|=0x40;    
    260. MCUCR=0x02;
    261. MCUCSR=0x00;
    262. GIFR=0x40;  
    263.  
    264.  
    265. DDRB=0x03;
    266. PORTB=0x00;
    267.  
    268.  
    269. lcd_init(16);
    270.  
    271. #asm("sei")
    272.  
    273. while (1)
    274.  
    275.       {    
    276.        
    277.      
    278.      
    279.       dutyCycle_1 = (tup_1/(tup_1+tdn_1));
    280.       dutyCycle_1 +=0.018;
    281.       temperature_1 =(dutyCycle_1-0.32);
    282.       temperature_1 =temperature_1/0.0047;
    283.      
    284.      
    285.      
    286.       dutyCycle_2 = (tup_2/(tup_2+tdn_2));
    287.       dutyCycle_2 +=0.018;
    288.       temperature_2 =(dutyCycle_2-0.32);
    289.       temperature_2 =temperature_2/0.0047;
    290.                      
    291.      
    292.      
    293.      
    294.       dutyCycle_3 = (tup_3/(tup_3+tdn_3));
    295.       dutyCycle_3 +=0.018;
    296.       temperature_3 =(dutyCycle_3-0.32);
    297.       temperature_3 =temperature_3/0.0047;
    298.      
    299.      
    300.      
    301.       dutyCycle_4 = (tup_4/(tup_4+tdn_4));
    302.       dutyCycle_4 +=0.018;
    303.       temperature_4 =(dutyCycle_4-0.32);
    304.       temperature_4 =temperature_4/0.0047;  
    305.      
    306.      
    307.       temp_ave=(temperature_1+temperature_2+temperature_3+temperature_4)/4;  
    308.      
    309.      
    310.      
    311.      
    312.        if   ((control_1==0) && (control_2==0)   && (control_3==0)   && (control_4==0))
    313.        
    314.       {                    
    315.      
    316.          if ( PORTB<=2)
    317.          {
    318.           PORTB =PORTB+1;
    319.          }
    320.          
    321.          
    322.          else
    323.         {
    324.            display();
    325.  
    326.            PORTB =0;  
    327.        }  
    328.          
    329.        
    330.        
    331.          
    332.       }
    333.      
    334.      
    335.      
    336.      }
    337. }
    338.  
     
    Last edited by a moderator: Aug 24, 2013
Loading...