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 1775 10
REKLAMA
  • #1 5992009
    esnow
    Poziom 14  
    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  
    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  
    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  
    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  
    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  
    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.
  • #7 5992305
    esnow
    Poziom 14  
    kwarc jest podpięty.

    lfuse: 0xCD
    a hfuse bez zmian?
  • REKLAMA
  • Pomocny post
    #8 5992414
    dawid512
    Poziom 32  
    Fuse bity:
    dla 8MHz Link
    dla 16MHz Link
  • #9 5992691
    esnow
    Poziom 14  
    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  
    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!
REKLAMA