Advertisement
Guest User

VladIsLove

a guest
Oct 17th, 2018
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.19 KB | None | 0 0
  1. /*
  2.  * ADC_C.c
  3.  *
  4.  * Created: 25/03/2015 11:19:54
  5.  *  Author: Francisco Cardoso e Carla Faria
  6.  */
  7. #include <avr/io.h>
  8. #include <avr/interrupt.h>
  9. #include <stdio.h>
  10.  
  11. #define F_CPU 1000000UL;
  12.  
  13. volatile unsigned char cont_500 = 0;
  14. volatile unsigned char flag_500 = 0;
  15. int temp=0;
  16.  
  17. void inic(void)
  18. {
  19.    
  20.     //led blink
  21.    
  22.     //DDRB=0b0000001;   //configurar bit 0 do PORTB como saida
  23.     //PORTB=0b00000001; //Bit 0 do PORTB ligado(led ligado)
  24.     DDRD=0b00011000;
  25.  
  26.    
  27.    
  28.     TCCR0A = 0b00000010; //CTC mode
  29.     TCCR0B = 0b00000101; // Prescaler 1024
  30.     TIMSK0 = 0b00000010; // Ativa interrupção TC0
  31.     OCR0A = 243; // Valor OCRA para timer de 500ms
  32.  
  33.     //led luminosidade
  34.    
  35.     TCCR2A=0b00100011;  //TC2 modo fast pwm,  Clear OC2B on compare match, set OC2B at BOTTOM
  36.     TCCR2B=0b00000011;  //prescaler 32
  37.     ADMUX= (1<<ADLAR) | (1<<MUX1);          //ADLAR=1, ADCL com 2 bits, ADCH com os 8 bits mais significativos; ADC 2
  38.     ADCSRA=  (1<<ADEN) | (1<< ADPS1) | (1<<ADPS0);          //ativa AD, Fator de divisao de 8 (125kHz)
  39.     OCR2B=0; //inicialmente o OCR2B estará a 0
  40.  
  41.     sei();  //enable global das interrupcoes
  42. }
  43.  
  44.  
  45. // inicializar timer led blink
  46.  
  47. ISR(TIMER0_COMPA_vect){
  48.    
  49.     cont_500++;
  50.     if (cont_500==2){ //espera que o timer chega a 1s
  51.         cont_500 = 0; //reset ao timer
  52.         if (flag_500==0){ //se a flag estiver a 0 irá para 1
  53.             flag_500=1;
  54.         }
  55.         else{ //se a flag estiver a 1 ira para 0
  56.             flag_500=0;
  57.         }
  58.     }
  59. }
  60.  
  61.  
  62. ISR(ADC_vect)   //rotina de interrupcao do ADC
  63. {
  64.     ADCSRA|=0b01000000; //condição pra verificar visualização
  65.     OCR2B=ADCH; //8 bits mais significativos correspondem ao valor de OCR2B
  66.     temp=OCR2B;
  67. }
  68.  
  69.  
  70. int main(void)
  71. {
  72.     inic();             //inicialização   das configurações
  73.    
  74.     ADCSRA|=0b01000000; //ATIVA leitura de dados
  75.    
  76.     while(1)
  77.     {
  78.         if (flag_500==1) // se a flag estiver a 1 acende led
  79.             PORTD=0b00000100;
  80.        
  81.         if (flag_500==0) // se a flag estiver a 1 apaga led
  82.             PORTD=0b00000000;
  83.        
  84.         // criação de um genero de escada de intensidade luminosa do led
  85.        
  86.         if( (100 < temp) & (temp < 150)) //luminosidade estagna no intervalo de 100 a 150
  87.             OCR2B = 100;
  88.            
  89.         if((200 < temp) & (temp < 255)) // //luminosidade será constante e irá baixar no intervalo de 200 a 255
  90.             OCR2B = 50;
  91.     }
  92.    
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement