Guest User

Untitled

a guest
Jun 20th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.85 KB | None | 0 0
  1. #include <avr/io.h>
  2. #include <avr/interrupt.h>
  3. #include <util/delay.h>
  4. #include <avr/eeprom.h>
  5. #define IRF_ALARM_BATTERY 890
  6. #define IRF_ALARM_OUTPUT 890
  7. #define WAIT(time) for(uint16_t i=0;i<2000;i++)_delay_loop_2(time);
  8. int adc_data;
  9. ISR(ADC_vect)
  10. {
  11. // muutos globaaliksi //int adc_data;
  12. adc_data = ADCW;
  13. /*if(adc_data<=IRF_ALARM)
  14. {
  15. PORTC &= ~(1<<4);
  16.  
  17. }*/
  18. }
  19.  
  20. void ADC_init(void)
  21. {
  22. ADMUX |= 1<<REFS0; //(1<<REFS0) AVCC=5V with external capacitor at AREF pin
  23.  
  24. ADMUX |= (1<<MUX1); // valitaan ADC2
  25. ADCSRA |= (1<<ADPS0) | (1<<ADPS1); // jakoluku 8
  26. // 1000000/8 = 125 kHz
  27. // oltava välillä 50 kHz ... 200 kHz
  28. ADCSRA |= (1<<ADIE)|(1<< ADEN); // adc ON ja keskeytys ON
  29.  
  30. }
  31.  
  32. int main (void)
  33. {
  34. unsigned long ElapsedSeconds = 0;
  35. int irflippu;
  36. int counter;
  37. uint16_t ka;
  38.  
  39. DDRB |=0xFF;
  40.  
  41. DDRC |=(1<<4);
  42. PORTC |=(1<<4);
  43.  
  44. DDRD &=~(1<<0);
  45.  
  46. TCCR1B |= ((1 << CS10) | (1 << CS11)); // Set up timer1 at Fcpu/64
  47. TCCR0 |= ((1 << CS01) | (1 << CS00)); // Set up timer at Fcpu/64
  48.  
  49. ADC_init();
  50.  
  51. sei(); // globaali keskeytys sallittu
  52.  
  53. while(1)
  54. {
  55.  
  56. PORTB = (1 << 1);
  57.  
  58. if (TCNT1 >= 15624)
  59. {
  60. TCNT1 = 0; // Reset timer value
  61. ElapsedSeconds++;
  62.  
  63. if (ElapsedSeconds >= 30) // Check if a minute has elapsed
  64. {
  65. counter=0;
  66. ElapsedSeconds = 0; // Reset ElapsedSeconds variable
  67. /* KANAVAN VAIHTO */
  68. ADCSRA &=~(1<<ADEN);
  69. ADCSRA &=~(1<<ADATE);
  70. ADMUX|=0x00;
  71. ADMUX |= (1<<MUX1); // valitaan ADC2
  72. WAIT(1);
  73.  
  74. PORTB = (1 << 0); // Start the test
  75. /*-----------------------------------------------------*/
  76.  
  77. while(counter<=1000)
  78. {
  79. if(TCNT0 >= 0xFF)
  80. {
  81. counter++;
  82. ADCSRA |= (1<< ADEN) | (1<<ADSC);
  83.  
  84. if(ADCW<=IRF_ALARM_BATTERY)
  85. {
  86. irflippu=1;
  87. WAIT(10);
  88. ADCSRA |= (1<< ADEN) | (1<<ADSC);
  89. }
  90. else if(irflippu==1&&ADCW<=IRF_ALARM_BATTERY)
  91. {
  92. PORTC &= ~(1<<4);
  93. }
  94.  
  95.  
  96. }
  97.  
  98. }//end of while counter!=1000
  99. PORTB &=~(1<<0); //done
  100.  
  101.  
  102. }
  103. }
  104. /*tuotantotestaus*/
  105. if((PIND&0x01)==0x01)
  106. {
  107. ElapsedSeconds = 29;
  108. }
  109. /*---------------------------------------------------*/
  110.  
  111. /* KANAVAN VAIHTO */
  112. ADCSRA &=~(1<<ADEN);
  113. ADCSRA &=~(1<<ADATE);
  114. ADMUX |= ((1<<MUX0)|(1<<MUX1)); // valitaan ADC3
  115. WAIT(1);
  116. /*----------------------------------------------------*/
  117.  
  118. ADCSRA |= (1<< ADEN) | (1<<ADSC);
  119. if(ADCW<=IRF_ALARM_OUTPUT)
  120. {
  121. irflippu=1;
  122. WAIT(10);
  123. ADCSRA |= (1<< ADEN) | (1<<ADSC);
  124. }
  125. else if(irflippu==1&&ADCW<=IRF_ALARM_OUTPUT)
  126. {
  127. PORTC &= ~(1<<4);
  128. }
  129.  
  130. };
  131. }
Add Comment
Please, Sign In to add comment