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

[atmega8][C] jak włączyć PWM i korzystanie z zew. kwarca?

esnow 13 Sty 2009 12:10 1871 10
REKLAMA
  • #1 5992009
    esnow
    Poziom 14  
    Posty: 138
    Ocena: 3
    tak jak w temacie:

    TCCR1A =  (1<<WGM10) | (1<<COM1A1) | (1<<COM1A0) |(1<<COM1B1) | (1<<COM1B0); //8bit PWM, phase correct
    TCCR1B = (1<<CS11) | (1<<WGM12);            //MCU clock / 8 


    1. czy to jest dobry sposób?

    2. jak zmusić atmege do korzystania z zew. kwarcu 8 lub 16 MHz?

    Moderowany przez McRancor:

    Przeniosłem z robotyka amatorska

  • REKLAMA
  • Pomocny post
    #2 5992045
    OldSkull
    Poziom 28  
    Posty: 1159
    Pomógł: 61
    Ocena: 184
    ad.1. o ile przepisałeś z dokumentacji, to dobrze

    ad. 2. za pomocą fuse bitów. Ustawiasz kwarc zewnętrzny wysokiej częstotliwości.
  • REKLAMA
  • #3 5992057
    esnow
    Poziom 14  
    Posty: 138
    Ocena: 3
    1. przepisałem z dokumentacji ale chciałbym, żeby ktoś to sprawdził.

    2. wczoraj próbowałem ustawić te fusebity przy pomocy fuse calculator, ale chyba uwaliłem atmege bo przestała odpowiadać;/
  • REKLAMA
  • #4 5992151
    PabloL
    Poziom 12  
    Posty: 8
    Pomógł: 1
    Prawdopodobnie przestawiłeś fusebity na "external clock".
    Teraz masz dwa wyjścia, albo programator równoległy, albo zbudowanie zewnetrznego generatora i doprowadzenie sygnału zegarowego do pinu XTAL1.
  • #5 5992187
    esnow
    Poziom 14  
    Posty: 138
    Ocena: 3
    pewnie przestawiłem na external clock...

    1. mam jeszcze drugą atmege8, mógłby ktoś sprawdzić poprawność inicjalizacji PWM'a ?

    2. jakie konkretnie fuse bity muszę ustawić aby korzystalo z zew. kwarcu 8 lub 16 MHz?
  • #6 5992269
    OldSkull
    Poziom 28  
    Posty: 1159
    Pomógł: 61
    Ocena: 184
    lfuse: 0xCD

    jesteś pewien, że uwaliłeś? pamiętaj, że jeśli ustawiłeś korzystanie z kwarcu, ale nie jest on podpięty, to ATmega nie będzie się dała zaprogramować ponownie.

    I na początek ustaw sobie w drugiej atmedze kwarc wewnętrzny 8MHz, albo zostaw domyślny 1MHz - do sprawdzenia czy dobrze ustawiasz pwm wystarczy.
  • REKLAMA
  • #7 5992305
    esnow
    Poziom 14  
    Posty: 138
    Ocena: 3
    kwarc jest podpięty.

    lfuse: 0xCD
    a hfuse bez zmian?
  • Pomocny post
    #8 5992414
    dawid512
    Poziom 32  
    Posty: 1439
    Pomógł: 229
    Ocena: 6
    Fuse bity:
    dla 8MHz Link
    dla 16MHz Link
  • #9 5992691
    esnow
    Poziom 14  
    Posty: 138
    Ocena: 3
    czyli dla 8MHz:
    lFuse:0xCF
    hFuse: 0x99 ?

     TCCR1A =  (1<<WGM10) | (1<<COM1A1) | (1<<COM1A0) |(1<<COM1B1) | (1<<COM1B0); //8bit PWM, phase correct
    TCCR1B = (1<<CS11) | (1<<WGM12);            //MCU clock / 8 

    wystarczy tylko to do PWM'a? i potem już mogę korzystać w ten sposób z napisanych przez siebie funkcji?
    void prawy_on(unsigned char predkosc){
    	 //PORTB |= _BV(1);
    	 OCR1A = predkosc;
    	 PORTD |= _BV(5);
    	 PORTD &= ~(_BV(6));}
    void lewy_on(unsigned char predkosc){
    	 //PORTB |= _BV(2);
    	 OCR1B = predkosc;
    	 PORTD |= _BV(7);
    	 PORTB &= ~(_BV(0));}


    układ L298, enable_a i enable_b podłączone pod PB1 i PB2.
  • #11 6000715
    esnow
    Poziom 14  
    Posty: 138
    Ocena: 3
    już wszystko jasne, źle odczytałem z noty katalogowej i dziwiłem się czemu nie działa jak podaje na OCR1A/B=255, miałem na odwrót ustawione.

    teraz mam:
    
    TCCR1A =  (1<<WGM10) | (1<<COM1A1) |(1<<COM1B1); //8bit PWM, phase correct
    TCCR1B = (1<<CS11) | (1<<WGM12) | (1<<CS10); 
    


    0-min
    255-max
    wszystko pięknie działa.

    dzięki za pomoc!

Podsumowanie tematu

✨ Dyskusja dotyczy konfiguracji PWM na mikrokontrolerze ATmega8 oraz ustawienia fuse bitów do pracy z zewnętrznym kwarcem 8 lub 16 MHz. Inicjalizacja PWM została oparta na rejestrach TCCR1A i TCCR1B, wykorzystując tryb 8-bitowego PWM fazowo-korektowego z preskalerem 8. Potwierdzono, że konfiguracja rejestrów jest poprawna, jeśli jest zgodna z dokumentacją. Aby wymusić korzystanie z zewnętrznego kwarcu, należy odpowiednio ustawić fuse bity, co można zrobić za pomocą kalkulatora fuse bitów. Ustawienie fuse bitów na "external clock" bez podłączonego kwarcu uniemożliwia ponowne programowanie mikrokontrolera. Zalecane wartości fuse bitów dla kwarcu 8 MHz to lFuse: 0xCF i hFuse: 0x99. Przykładowe funkcje sterujące PWM wykorzystują rejestry OCR1A i OCR1B oraz porty PORTD i PORTB do kontroli sygnałów dla układu L298, gdzie sygnały enable_a i enable_b są podłączone do PB1 i PB2. Po poprawnym ustawieniu rejestrów i fuse bitów PWM działa prawidłowo, umożliwiając sterowanie prędkością w zakresie 0-255.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA