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 1047 12
REKLAMA
  • #1 14502463
    ergovision
    Poziom 11  
    Posty: 38
    Pomógł: 1
    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  
    Posty: 158
    Pomógł: 4
    Ocena: 110
    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  
    Posty: 38
    Pomógł: 1
    "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  
    Posty: 1418
    Pomógł: 195
    Ocena: 260
    A są rezystory przy przyciskach? Bo programowego podciągania nie widzę.
  • REKLAMA
  • #5 14504300
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #6 14504547
    ergovision
    Poziom 11  
    Posty: 38
    Pomógł: 1
    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"?
  • #7 14504589
    kisoft
    Poziom 14  
    Posty: 158
    Pomógł: 4
    Ocena: 110
    Napisz do czego to potrzebujesz a może znajdzie się inne rozwiązanie.
  • #8 14504656
    ergovision
    Poziom 11  
    Posty: 38
    Pomógł: 1
    :) 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  
    Posty: 38
    Pomógł: 1
    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%.
  • #11 14505359
    kisoft
    Poziom 14  
    Posty: 158
    Pomógł: 4
    Ocena: 110
    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  
    Posty: 158
    Pomógł: 4
    Ocena: 110
    Niestety bascom to czasem zgadywanka. On powinien operować na zmiennych a nie na rejestrach

Podsumowanie tematu

✨ Użytkownik stworzył program na mikrokontrolerze ATtiny2313, który zmienia wartość rejestru PWM w odpowiedzi na naciśnięcie przycisków, co ma na celu generowanie rampy częstotliwości. Zgłasza jednak problemy z niestabilnością działania głównej pętli, co objawia się zacinaniem się programu. Uczestnicy dyskusji sugerują różne rozwiązania, takie jak dodanie opóźnień (waitms), sprawdzenie podciągania przycisków, oraz operowanie na zmiennych zamiast rejestrach. Wskazują również na możliwość użycia przerwań do zarządzania zmianą wartości rejestru porównawczego. Użytkownik podkreśla, że potrzebuje generować zmienną częstotliwość dla silnika krokowego, a nie tylko czas trwania impulsu.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA