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

[attiny13][avr-gcc] Timer0 i PWM

sieger 22 Lut 2010 17:00 2870 6
REKLAMA
  • #1 7734243
    sieger
    Poziom 24  
    Witam

    Chcę uruchomić PWM na ATTiny13. Podpierając się https://www.elektroda.pl/rtvforum/topic1174523.html i notą procesora stworzyłem program
    
    #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.
  • REKLAMA
  • Pomocny post
    #2 7734532
    zumek
    Poziom 39  
    sieger napisał:
    ..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.:
       TCCR0A=(1<<WGM00)|(1<<WGM01)|(1<<COM0A1)|(1<<COM0B1);
    
  • REKLAMA
  • #4 7734734
    zumek
    Poziom 39  
    sieger napisał:
    ...Tabele są numerowane inaczej.

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

    Natomiast przy:

    
    #include <avr/io.h>
    
    void main()
    {
    	TCCR0A=0xF3;
    	TCCR0B|=(1<<CS00);
    	DDRB|=(1<<PB0) | (1<<PB1);
    
    	OCR0A = 63;
    	OCR0B = 0x7F;
    
    	while(1) {}
       
    }
    


    ani ruszy.
  • Pomocny post
    #6 7735034
    grysek
    Poziom 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
  • REKLAMA
  • #7 7739498
    sieger
    Poziom 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.
REKLAMA