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

[mega32][C/ASM] 3 PWMy 8 bitowe (skracanie timer1 do 8 bit)

15 Cze 2008 21:54 2442 20
REKLAMA
  • #1 5250102
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #2 5250347
    kamyczek
    Poziom 38  
    Zastosuj inny mikrokontroler np dedykowany AT90PWM3 lub inny mający więcej kanałów pwm. Atmel ma sporą rodzinę dedykowanych mikrokontrolerów AT90PWM zaprojektowanych pod kątem sterowania.
    A tak przy okazji można jeszcze zrobić jeden zabieg który może przynieść efekt użyć dzielnika /256 w liczniku 8 bitowym to powinno wyrównać czas miedzy przepełnieniami obu liczników. Trzeba będzie tylko przeliczyć PWM obu liczników...
  • REKLAMA
  • #3 5250388
    zumek
    Poziom 39  
    technics6 napisał:
    ..Zacząłem robić to programowo bo wyczytałem gdzieś, że nie da się zrobić 3 identycznych wyjść PWM w procesorze z 2 timerami 8 bit i jednym 16bit...

    A po co czytasz "gdzieś" :?: Przeczytaj dokumentacje swojego proca , a dowiesz się , że to co "gdzieś" napisali , to nieprawda. Poza tym , co rozumiesz przez PWM - Fast PWM , czy Phase Correct PWM :?:

    Piotrek
  • #4 5250402
    Konto nie istnieje
    Konto nie istnieje  
  • #5 5250430
    zumek
    Poziom 39  
    technics6 napisał:

    Pytanie:
    Co gdzie należy ustawić żeby timer1 pracował w tym trybie tak jak timer2 i jak ustawić timer2 żeby pracował jak timer1 (chodzi mi o jakiś wspólny mianownik...).

    Odpowiedź:
    technics6 napisał:
    ...Table 47. Waveform Generation Mode Bit Description
    .


    Lepszego źródła niż ta tabela , nie znam.

    Piotrek
  • #6 5250444
    Konto nie istnieje
    Konto nie istnieje  
  • #7 5250454
    zumek
    Poziom 39  
    technics6 napisał:
    Wykombinowałem tak:

    To kiepsko :(

    
    TCCR1B = _BV(CS12) | _BV(CS10);     // preskaler
    TCCR1B =  _BV(WGM10);               // PWM, Phase Correct, 8bit
    

    Zastanów się nad tym fragmentem.

    Piotrek
  • #8 5250498
    Konto nie istnieje
    Konto nie istnieje  
  • Pomocny post
    #9 5250552
    markosik20
    Poziom 33  
    technics6 napisał:

    Umieścić to w jednej linijce? O to chodzi?


    Niekoniecznie :wink:.

    TCCR1B = _BV(CS12) | _BV(CS10);     // preskaler 
    TCCR1B |=  _BV(WGM10);               // PWM, Phase Correct, 8bit
  • #10 5250570
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #11 5250803
    Ch.M.
    Poziom 27  
    A potrzebne do czegoś Ci to przerwania?
    M16/32 może generować 4kanały PWM, z czego te dwa na T1 będą miały tą samą częstotliwość. To w teorii czysto sprzętowej, ale jeśli nie interesuje Cię duża dokładność i sygnały na pewną mogą być o tej samej częstotliwości i ewentualnie o tym samym wypełnieniu (ale niekoniecznie) to korzystasz z jednego timera i softwarowo zmieniasz stan I/O (na przerwaniach jeśli program skomplikowany lub bez jeśli procek się nudzi).
    Zawsze zaczynaj posty od wyjaśnienia co chcesz uzyskać, a o wiele szybciej pomożemy ze znalezieniem najlepszego rozwiązania.

    Pozdrawiam
  • #12 5250942
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #13 5250952
    Ch.M.
    Poziom 27  
    nie napisałem, że będzie różna, tylko że może być inna :)
    Oczywiście schynchronizować T0 do T1 czy T1 do T2 da się, co do 1 cyklu zegarowego :)
  • #14 5250958
    Konto nie istnieje
    Konto nie istnieje  
  • #15 5250973
    Ch.M.
    Poziom 27  
    hmm to jednak wypadałoby właczyć przerwania, ale wg. mnie to tylko w przypadku C, bo w ASM widzisz czy się wyrabiasz i kiedy co możesz obsłużyć. Szczególnie, że wszystkie zadania będziesz pewnie robić cyklicznie, bo powtarzają się wciąż te same procedury
  • #16 5250981
    Konto nie istnieje
    Konto nie istnieje  
  • #17 5250992
    Ch.M.
    Poziom 27  
    Mogę go sprawdzić, ale równie dobrze też możesz odpalić symulator. AVRStudio (symulator) róznie obsługuje timery, ale dla najbardziej popularnych procków (czyli Twego) nie powinno być bugów. Też mi się nie podoba wpisywanie dwa razy do tego samego rejestru danych, skoro można zrobić to w jednej linii... to świadczy o jakości programisty :)
    Pozdrawiam
  • #18 5251080
    Konto nie istnieje
    Konto nie istnieje  
  • #19 5251194
    Ch.M.
    Poziom 27  
    i ja wciskam zapis binarny bo widać od razu w symulatorze na rejestrze taki zapis
  • #20 5265251
    Konto nie istnieje
    Konto nie istnieje  
  • Pomocny post
    #21 5265314
    ZbeeGin
    Poziom 39  
    technics6 napisał:
    2. Co to jest "dual-slope operation"?

    Licnzik liczy w górę i w dół, i w obu przypadkach wykonywane jest porównanie.
REKLAMA