Changing the speed of blinking LED by using AVR (ATMEGA16)

Konu, 'Elektronik Mühendisliği' kısmında rombikkukurt tarafından paylaşıldı.

  1. rombikkukurt

    rombikkukurt MB Üyesi

    Kayıt:
    2 Mayıs 2017
    Mesajlar:
    1
    Beğeniler:
    0
    En İyi Cevap:
    0
    Değerlendiriler:
    +0 / 0 / -0
    Üniversite:
    Osmangazi Üniversitesi
    Merhaba arkadaşlar,

    Osmangazi üniversitesinde 2. sınıf öğrencisiyim. Şu an Litvanya'da Erasmus yapıyorum. Lablardan biri şu şekilde ve additional partsı tam anlamıyla yapamadım. Yardım edebilir misiniz? Yazdığım kod da şu şekildedir.
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <util/delay.h>

    volatile uint16_t overflow;
    volatile int i=61;

    ISR(TIMER1_OVF_vect){

    overflow++;

    }
    void timer1(){

    TCCR1A = 0x01 ;
    TCCR1B = 0b01001101;
    TCNT1 = 0; //Clear the value of timer/counter1 register
    TIMSK |= (1<<TOIE1); //Enable the interrupt of overflow
    sei();

    }
    int main(void){

    DDRD = 0xFF; //Set D as output
    DDRA = 0b00000011;
    PORTA = 255;
    timer1(); //Initialization of timer/counter1

    int b = 0;

    while(1){

    if(!(PINA&(1<<PA2))){ //when PA2 is pushed
    if(btns == 0){
    i+=61;
    b=1;
    }
    }
    else{
    b = 0;
    }

    if(!(PINA&(1<<PA3))){ //when PA3 is pushed
    if(btns == 0){
    i-=61;
    b=1;
    }
    }
    else{
    b = 0;
    }

    if(overflow==i){
    PORTD ^= (1<<PD4); //Toggle the level of voltage on pin PD4
    overflow=0;
    TCNT0=0;
    _delay_ms(3000);
    }
    }
    }
     

    Ekli Dosyalar: