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

AVR - BASCOM - ATtiny2313 - niestabilna praca głównej pętli przy zmianie PWM

ergovision 05 Mar 2015 13:17 969 12
REKLAMA
  • #1 14502463
    ergovision
    Poziom 11  
    Dzień dobry,

    Popełniłem prosty programik na ATtiny2313. Przy naciśnięciu któregoś z guzików (Pind.0 lub Pind.1), zmienia się wartość rejestru Pwm1a - porównywanie ze stanem timera1. Dzięki temu uzyskujemy efekt rampy i rosnącą częstotliwość na wyjściu.

    Niestety program działa o tyle dziwnie, że czasami się zacina - tzn czasami zmiana częstotliwości przebiega płynnie, a czasami się zacina, jednak odejmowanie Pwm1a = Pwm1a -1 jest realizowane i nie ma efektu liczenia "od zera"
    Co może być powodem niestabilnej pracy głównej pętli ?
    drgania styków wykluczone.

    Pozdrawiam

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 14503240
    kisoft
    Poziom 14  
    Może zaraz na początku pętli dodaj waitms 200 lub 300 lub nawet 500 albo pozwiększaj te waitmsy np na 10 albo 20
  • REKLAMA
  • #3 14504119
    ergovision
    Poziom 11  
    "kombinowałem" podobnie ale wiąże się to z brakiem płynności generacji rampy,
    Wówczas trzeba zwiększyć wartość dekrementacji pwm1a i zaczyna się taka mała szarpanina.

    Mój Attiny2313 sporo już przeszedł, czy możliwe jest że układ "szwankuje" ?
  • #4 14504290
    landy13
    Poziom 31  
    A są rezystory przy przyciskach? Bo programowego podciągania nie widzę.
  • #5 14504300
    Konto nie istnieje
    Konto nie istnieje  
  • #6 14504547
    ergovision
    Poziom 11  
    jest podciągnięcie, zwyczajnie za dużo usunąłem wklejając kod:

    Portd = 127,

    Korzystam z płytki startowej ZL11AVR, guziki nie są podłączane przez rezystory.
    Obecnie nie mam dostępu do "zabawki",
    spróbuje działać na pwm1a poprzez rejestr. Dam znać czy pomogło.

    Pwm nie wchodzi w grę, potrzebuje generować zmienną częstotliwość, nie zaś czas trwania impulsu. Chyba że jest jakaś "sztuczka"?
  • REKLAMA
  • #7 14504589
    kisoft
    Poziom 14  
    Napisz do czego to potrzebujesz a może znajdzie się inne rozwiązanie.
  • #8 14504656
    ergovision
    Poziom 11  
    :) no więc tak...
    mikrokontroler ma sterować: kierunek + krok (stąd generacja częstotliwości) driverem silnika krokowego,
    ...no i steruje - wszytko działa kręci się, zmienia kierunek obrotów , tylko ta generacja rampy - brzydko się zacina.

    Docelowo sam mikrokontroler będzie sterowany poprzez UART i będzie realizował kilka innych funkcji.
    Na tę chwilę problem stanowi płynne generowanie rampy.
    Dzięki rampie sinik krokowy ma miękki start.
  • #9 14504686
    Konto nie istnieje
    Konto nie istnieje  
  • #10 14504784
    ergovision
    Poziom 11  
    w sumie nie chodzi nawet o przerwanie, zwyczajnie wymuszam zmianę stanu wyjścia

    (Compare A = toggle)

    kiedy wartość timera się zrówna z rejestrem porównywania i dodatkowo zeruje timer:

    Clear Timer = 1

    W efekcie mam generowany sygnał o zmiennej częstotliwości zawsze z wypełnieniem 50%.
  • REKLAMA
  • #11 14505359
    kisoft
    Poziom 14  
    Może ten zapis Compare A = toggle wstaw w innym miejscu np w pętli głównej i sprawdź (tylko czy bascom łyknie coś takiego).
  • #12 14505491
    Konto nie istnieje
    Konto nie istnieje  
  • #13 14506255
    kisoft
    Poziom 14  
    Niestety bascom to czasem zgadywanka. On powinien operować na zmiennych a nie na rejestrach
REKLAMA