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

Czy AVR studio debugger poprawnie symuluje Fast PWM?

filipPWr 13 Paź 2008 19:32 2355 9
  • #1 5627982
    filipPWr
    Poziom 10  
    Witam.
    Próbuję zrobić symulację trybu Fast PWM na liczniku T1 w AVR Studio, ale nie wychodzi mi to. Tryb Fast PWM różni się od innych głównie tym , że po dojściu wartości licznika do szczytu , licznik nie powinien zliczać w dół. U mnie właśnie zlicza w dół , chociaż skonfigurowałem go wg instrukcji.

    Oto program poniżej:
    
    .INCLUDE "m32def.inc"
    
    
    
    
    sbi DDRD, PD4; to są tryby wyjścia lini OC1A i OC1B
    sbi DDRD, PD5
    

    Na początek wpisałem wartość do rejestrów granicznych:
    
    ldi R16, 0
    ldi R17, 50
    out OCR1AH, r16
    OUT OCR1AL, R17
    out OCR1bH, r16
    OUT OCR1BL, R17
    

    i ustawiłem tryb Fast PWM, oraz wypełnianie od zera do zgodnego porównania:
    
    clr R16
    sbr R16, (1<<COM1A1)|(1<<COM1B1)|(1<<WGM10)
    out TCCR1A, r16
    
    CLR r16
    sbr R16, (1<<WGM12)|(1<<CS10)
    OUT tCCR1b, r16
    
    
    Petla:
    jmp Petla
    


    Niestety w symulatorze nie wyszło z licznikiem. Po dojściu do 255 zlicza do zera. A powinien się wyzerować. Proszę o rady;)

    Poprawiłem tytuł - regulamin p.11.1
    Dodałem znaczniki [code].
    Proszę o tym pamiętać , przy zakładaniu kolejnego tematu.
    [zumek]
  • #2 5628180
    Samuraj
    Poziom 35  
    Dokładnie jak piszesz. Sam kiedyś budowałem mały generator oparty na pwm'e. Ustawialem wszystko w/g pdf'a i za chiny ludowe nie chciało chodzić. Jak się zdziwilem gdy wgrałem ten sam program do mikroprocesora i wszystko chodzilo jak trzeba.
  • #3 5628242
    filipPWr
    Poziom 10  
    Mi chodzi ten program, ale muszę się upewnić, czy gdy zmienię szerokość impulsu, to nie zmieni mi się okres;). Ściągam jeszcze najnowszy AVR Studio - może będzie lepiej symulacja chodzić.
  • #4 5631434
    ZbeeGin
    Poziom 39  
    W nowym symulacja chodzi lepiej. Okres się nie zmieni, zawsze narastające/opadające (w zależności od konfiguracji bitów COM) zbocze końcowe będzie w tym samym miejscu.
  • #5 5881574
    zajczyk
    Poziom 13  
    Panowie mam ten sam problem. Przez ostatnie 2 dni wyrwałem sobie prawie wszystkie włosy z głowy. Symulacja FAST PWM dla ośmiobitowego licznika 0 działa w porządku, dla 16-sto bitowego licznika 1 totalna porażka, powiedzcie co zrobić bo jeszcze dzisiaj rozwalę klawiaturę
  • #7 5889892
    zajczyk
    Poziom 13  
    Odnośnie najnowszej wersji AVR studio astudio4b623.exe to w moim wypadku tez nie działa symulacja dla licznika 1. Objawy są takie jak w powszednich edycjach. Rozwiązanie problemu okazało się natomiast podłączenie JTAG ICE i symulacja w działającym układzie
  • #8 5918405
    wdogli
    Poziom 18  
    Wita.
    Ja te wersje programu testuje na symulacji przerwań. Program symuluje wszystko poprawnie do momentu gdy ma wejść w bezczynność czyli do momentu gdy powinien rozpocząć oczekiwanie na przerwanie w pętli:

    
    int main (void) 
    {
    .
    .
    .
    .
    
    while(1)
    {
    
    
    }
    
    }
    
    


    Efekt jest taki że się zawiesza i dopiero reset programu symulowanego wyrywa go z błędnego koła.
    Pozdrawiam
  • #9 5919416
    ZbeeGin
    Poziom 39  
    A co ma niby pokazać, że wchodzi w pusty blok? Po co? Przełącz się na Disassembler a tam zobaczysz, że program działa i wykonywane jest w tym czasie RJMP.
  • #10 5920389
    wdogli
    Poziom 18  
    No tak tylko że jeśli chce za symulować wywołanie przerwania zewnętrznego na przykład na INT0 to program nie działa po prostu wisi. Nie ma możliwości zmusić go do dalszego działania. Problem rozwiązałem dodając do pętli while(1) komendy czekaj 1 [ms]. dzięki temu program po wykonaniu konfiguracji przeskakuje do bloku odliczania czasu i gdy za symuluję zbocze opadające na INT0 przerwanie zostaje wywołane :). Oczywiście w rzeczywistości nie będzie tego zapisu bo zdaje sobie z tego sprawę iż program pójdzie dalej jeśli wywołam przerwanie.
    Poza tym zauważę jeszcze iż w wersji aStudio4b528 nie miałem takiego problemu po dokonaniu konfiguracji strzałeczka przeskakiwała na początek pętli while(1) i była tam tak długo aż nie zostało za symulowane przerwanie. Jednak miałem tam inne problemy :)
    Pozdrawiam

    po 2 min :)

    :arrow: ZbeeGin
    Po przełączeniu się do Disassembler wszystko działa poprawnie :)
    Dzięki wielkie za pomoc :)
REKLAMA