Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * ADC_C.c
- *
- * Created: 25/03/2015 11:19:54
- * Author: Francisco Cardoso e Carla Faria
- */
- #include <avr/io.h>
- #include <avr/interrupt.h>
- #include <stdio.h>
- #define F_CPU 1000000UL;
- volatile unsigned char cont_500 = 0;
- volatile unsigned char flag_500 = 0;
- int temp=0;
- void inic(void)
- {
- //led blink
- //DDRB=0b0000001; //configurar bit 0 do PORTB como saida
- //PORTB=0b00000001; //Bit 0 do PORTB ligado(led ligado)
- DDRD=0b00011000;
- TCCR0A = 0b00000010; //CTC mode
- TCCR0B = 0b00000101; // Prescaler 1024
- TIMSK0 = 0b00000010; // Ativa interrupção TC0
- OCR0A = 243; // Valor OCRA para timer de 500ms
- //led luminosidade
- TCCR2A=0b00100011; //TC2 modo fast pwm, Clear OC2B on compare match, set OC2B at BOTTOM
- TCCR2B=0b00000011; //prescaler 32
- ADMUX= (1<<ADLAR) | (1<<MUX1); //ADLAR=1, ADCL com 2 bits, ADCH com os 8 bits mais significativos; ADC 2
- ADCSRA= (1<<ADEN) | (1<< ADPS1) | (1<<ADPS0); //ativa AD, Fator de divisao de 8 (125kHz)
- OCR2B=0; //inicialmente o OCR2B estará a 0
- sei(); //enable global das interrupcoes
- }
- // inicializar timer led blink
- ISR(TIMER0_COMPA_vect){
- cont_500++;
- if (cont_500==2){ //espera que o timer chega a 1s
- cont_500 = 0; //reset ao timer
- if (flag_500==0){ //se a flag estiver a 0 irá para 1
- flag_500=1;
- }
- else{ //se a flag estiver a 1 ira para 0
- flag_500=0;
- }
- }
- }
- ISR(ADC_vect) //rotina de interrupcao do ADC
- {
- ADCSRA|=0b01000000; //condição pra verificar visualização
- OCR2B=ADCH; //8 bits mais significativos correspondem ao valor de OCR2B
- temp=OCR2B;
- }
- int main(void)
- {
- inic(); //inicialização das configurações
- ADCSRA|=0b01000000; //ATIVA leitura de dados
- while(1)
- {
- if (flag_500==1) // se a flag estiver a 1 acende led
- PORTD=0b00000100;
- if (flag_500==0) // se a flag estiver a 1 apaga led
- PORTD=0b00000000;
- // criação de um genero de escada de intensidade luminosa do led
- if( (100 < temp) & (temp < 150)) //luminosidade estagna no intervalo de 100 a 150
- OCR2B = 100;
- if((200 < temp) & (temp < 255)) // //luminosidade será constante e irá baixar no intervalo de 200 a 255
- OCR2B = 50;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement