Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[attiny13][avr-gcc] Timer0 i PWM

sieger 22 Feb 2010 17:00 2714 6
  • #1
    sieger
    Level 24  
    Witam

    Chcę uruchomić PWM na ATTiny13. Podpierając się https://www.elektroda.pl/rtvforum/topic1174523.html i notą procesora stworzyłem program
    Code:

    #include <avr/io.h>

    void SetPWMOutput(uint8_t dutyA, uint8_t dutyB)
    {
       OCR0A=dutyA;
       OCR0B=dutyB;
    }

    void main()
    {
       TCCR0A|=(1<<WGM00)|(1<<WGM01)|(1<<COM0A0);
       TCCR0B|=(1<<CS00);
       DDRB|=(1<<PB0) | (1<<PB1);

       SetPWMOutput(0x7F,63);

       while(1) {}
       
    }



    Niestety nóżki procesora ani drgną.
    Poczytałem wątki na forum, przeczytałem cały rozdział w nocie o Timer0 i 0 pomysłu na dalsze próby.
  • Helpful post
    #2
    zumek
    Level 39  
    sieger wrote:
    ..Niestety nóżki procesora ani drgną.
    Poczytałem wątki na forum, przeczytałem cały rozdział w nocie o Timer0 i 0 pomysłu na dalsze próby.

    Nie "drgają" :D , bo obie (OC0A i OC0B) są ustawione w tryb normal port operation - patrz tabela 27 i tabela 30 dokumentacji ATTiny13.
    Spróbuj np.:
    Code:
       TCCR0A=(1<<WGM00)|(1<<WGM01)|(1<<COM0A1)|(1<<COM0B1);
    
  • #4
    zumek
    Level 39  
    sieger wrote:
    ...Tabele są numerowane inaczej.

    No to 11-3 i 11-6.
  • #5
    sieger
    Level 24  
    Sprawdziłem oscyloskopem procesor, zaprogramowałem program, który rusza piny PB0 i PB1. Wszystko chodzi bez zarzutu.

    Natomiast przy:

    Code:

    #include <avr/io.h>

    void main()
    {
       TCCR0A=0xF3;
       TCCR0B|=(1<<CS00);
       DDRB|=(1<<PB0) | (1<<PB1);

       OCR0A = 63;
       OCR0B = 0x7F;

       while(1) {}
       
    }


    ani ruszy.
  • Helpful post
    #6
    grysek
    Level 19  
    Wszystko wygląda na ok. Może spróbuj ustawić Timer na zwykłe PWM bo teraz masz FAST PWM, a do OCR wpisz 128 wtedy uzyszkasz prostokąta o wypełnieniu 50%, włącz wiekszy preskaler i wtedy sprawdź czy są wogóle jakieś efekty
  • #7
    sieger
    Level 24  
    Ostatni program działa prawidłowo.
    Musiało mi się coś namieszać z AVR Studio przy kompilacji zgłaszał jakiś błąd dostępu do pliku, ale kompilacja pozornie przebiegała prawidłowo. Najprawdopodobniej uC programował się ciągle jedną z wcześniejszych niepoprawnych wersji.