Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

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

15 Jun 2008 21:55 2379 20
  • #1
    User removed account
    User removed account  
  • #2
    kamyczek
    Level 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...
  • #3
    zumek
    Level 39  
    technics6 wrote:
    ..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
    User removed account
    User removed account  
  • #5
    zumek
    Level 39  
    technics6 wrote:

    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 wrote:
    ...Table 47. Waveform Generation Mode Bit Description
    .


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

    Piotrek
  • #6
    User removed account
    User removed account  
  • #7
    zumek
    Level 39  
    technics6 wrote:
    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
    User removed account
    User removed account  
  • Helpful post
    #9
    markosik20
    Level 33  
    technics6 wrote:

    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
    User removed account
    User removed account  
  • #11
    Ch.M.
    Level 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
    User removed account
    User removed account  
  • #13
    Ch.M.
    Level 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
    User removed account
    User removed account  
  • #15
    Ch.M.
    Level 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
    User removed account
    User removed account  
  • #17
    Ch.M.
    Level 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
    User removed account
    User removed account  
  • #19
    Ch.M.
    Level 27  
    i ja wciskam zapis binarny bo widać od razu w symulatorze na rejestrze taki zapis
  • #20
    User removed account
    User removed account  
  • Helpful post
    #21
    ZbeeGin
    Level 39  
    technics6 wrote:
    2. Co to jest "dual-slope operation"?

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