logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Konfiguracja przerwań TIMER0 na ATmega16

rudykrzych 21 Kwi 2024 16:24 432 9
REKLAMA
  • #1 21054298
    rudykrzych
    Poziom 8  

    Mam problem z uruchomieniem przerwania, kombinowałem wiele razy z różnymi ustawieniami jednak nie obserwuję zmian na porcie PD7, PWM na porcie PB3 działa (przebiegi obserwowane na oscyloskopie). Mikroprocesor to ATmega 16 taktowana z kwarcu 16 MHz. Może ktoś zerknie świeżym okiem i doradzi.

    
    #define F_CPU 16000000
    #include <avr/io.h>
    #include <util/delay.h>
    #include <math.h>
    #include <avr/interrupt.h>
    ISR(TIMER0_OVF_vect)
    {
    	
    	PORTD ^= (1 << PD7); // Zaneguj stan pinu PD7
    }
    int main(void)
    {
    	
    TCCR0 |= (1<<WGM00) | (1<<WGM01) | (1<<COM01)| (1<<COM00)   | (1<<CS01); // ustawienie fast PWM prescaler 8
    DDRD |= (1<<PD7);
    DDRB |= (1<<PB3);  
    OCR0 = 124;
    TCNT0 = 0;
    TIMSK = (1 << TOIE0);  
    sei();
    	while (1)
    	{
    	}
    }
    

  • REKLAMA
  • #2 21054439
    jony
    Specjalista elektronik
    A podłączyłeś oscyloskop pod PD7? Przecież przerwanie będzie co 16MHz/8/256 = 7.8125kHz (128µs). To jak ty chciałeś zobaczyć miganie diody?
    Jak ona będzie migać z częstotliwością 1/(2 * 128µs) ≈ 3.9kHz?
  • REKLAMA
  • #3 21054459
    rudykrzych
    Poziom 8  
    Przebiegi na obu portach obserwowane oscyloskopem. Tak jak wyżej napisałem.
  • #4 21054481
    jony
    Specjalista elektronik
    Program wygląda na poprawny. A więc, szukaj winy w sprzęcie lub w sposobie pomiaru.
  • #5 21054486
    rudykrzych
    Poziom 8  
    Przy odpaleniu pwm od timera2 czyli na pd7, oba porty dają poprawny sygnał. A brakuje pomysłów, już nawet atmegi podmieniłem
  • REKLAMA
  • REKLAMA
  • #7 21054517
    jony
    Specjalista elektronik
    A jak dasz inny port?
  • #8 21054519
    rudykrzych
    Poziom 8  
    Nic się nie zmienia
  • #9 21054527
    jony
    Specjalista elektronik
    kulmar napisał:
    A czy nie powinna być skasowana flaga przerwania? Bo być może Ty z tego przerwania nigdy nie wychodzisz.

    W "starych" AVR flaga kasuje się automatycznie:

    Cytat:
    The bit TOV0 is set (one) when an overflow occurs in Timer/Counter0. TOV0 is cleared by hardware when executing the corresponding interrupt handling vector
  • #10 21054754
    rudykrzych
    Poziom 8  

    Problem rozwiązany, wystarczyło stworzyć plik całkiem na nowo....
REKLAMA