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

[BASCOM] Przerwania od serwa spowalniają komendy wait

elektro155 12 Lut 2014 19:03 1920 13
  • #1 13294013
    elektro155
    Poziom 26  
    Witam
    Jak wyeliminować opóźnienia w instrukcji wait przy używaniu przerwań do obsługi serwa? Przy tym programie czas oczekiwania się niemal podwaja:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Potrzebuję wyeliminować ten efekt ze względu że serwo ma pracować w urządzeniu, gdzie w programie mikrokontrolera jest dość dużo instrukcji wait i nie może to spowalniać pracy programu.
  • #2 13294021
    tadzik85
    Poziom 38  
    Zastosować timer do odliczania czasu.
  • #3 13294056
    ASMnauka
    Poziom 12  
    Dodam jeszcze rezygnację z Bascom na rzecz ASM (przynajmniej wstawki).
    Kod: text
    Zaloguj się, aby zobaczyć kod

    W tej pętli Czekasz dwie sekundy !!!
    Proszę poczytać przynajmniej o
    Kod: text
    Zaloguj się, aby zobaczyć kod

    O ile dobrze pamiętam.
  • #4 13294061
    tadzik85
    Poziom 38  
    ASMnauka napisał:
    Dodam jeszcze rezygnację z Bascom na rzecz ASM (przynajmniej wstawki)


    To już lepiej zacząć poważnie i wziąć się za C.
  • #5 13294082
    elektro155
    Poziom 26  
    Są dwie sekundy, bo serwo ma zmieniać położenie co sekundę
  • #6 13294125
    ASMnauka
    Poziom 12  
    tadzik85, czy Wiesz, co dzieje się w rejestrach np. M16 pisząc w C.
    Niestety, pisząc w ASM wiem, co przysyłam\odbieram z danego rejestru.
    Owszem, uczę się w tej chwili.
    Jednak mym początkiem był Bascom, następnie C (aplikacje na PC).
    PC i AVR to dwie inne rzeczy.
    Tak, czy owak w C nie Piszesz bezpośrednio do i z rejestrów.

    Dodano po 5 [minuty]:

    Tak, jak napisał poprzednik.
    Wyłącznie Timer.
  • #7 13294164
    elektro155
    Poziom 26  
    no to nic, zastosuję dodatkowy mikrokontroler do obsługi serwa
  • #8 13294165
    tadzik85
    Poziom 38  
    ASMnauka napisał:
    Tak, czy owak w C nie Piszesz bezpośrednio do i z rejestrów.

    I doskonale. To kompilator pilnuje mi wykorzystanie rejestrów, pushki popki.
    A reszta niczym się nie różni.
    Gdy chce by procesor odczekał określony czas, to interesuje mnie to czy odczeka go właściwie, gdy chce by dodał to interesuje mnie czy wynik jest poprawny.
    Ogólnie "wisi" mi czy wykorzysta do tego celu r2 czy r8.
  • #9 13294436
    elektro155
    Poziom 26  
    A może w konfiguracji serwa da się tak ustawić, by je "aktualizowało" co sekundę?
  • #10 13294464
    Konto nie istnieje
    Poziom 1  
  • #11 13294552
    elektro155
    Poziom 26  
    Ten pierwszy steruje wyświetlaczem VFD szeregowo, gdzie nie mogą być opóźnienia, dodatkowo odczytuje stany 8 pinów, po za tym mam cały gotowy program do maszyny. Po za tym wyznaczone czasy w komendzie wait muszą sie zgadzać.

    Dodano po 6 [minuty]:

    Po za tym proszę o trochę wyrozumiałości, nie programowałem od dwóch lat, a jak to robiłem, to nie na za wysokim poziomie
  • #12 13294579
    Konto nie istnieje
    Poziom 1  
  • #13 13294634
    krru
    Poziom 33  
    Wystarczy zamienić funkcję wait na taką, która wykorzystuje timer - nawet niekoniecznie przerwania, po prostu czeka, aż stan timera zwiększy się o odpowiednią wartość (odczytujemy timer, obliczamy stan końcowy i czekamu w pętli aż timer tyle osiągnie) - taka pętla będzie w miarę niezależna od przerwań, no chyba że w tych przerwaniach spędzasz strasznie dużo czasu. Można też wykorzystać mechanizm do przerwań, ale bez ich odblokowywania - czekamy aż ustali się flaga zgłoszenia przerwania.
  • #14 13582463
    elektro155
    Poziom 26  
    Użyłem dwóch różnych mikroprocesorów ostatecznie
REKLAMA