Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Attiny2313 - Bascom- złe dzialanie przerwania

miswierz 24 Gru 2013 01:09 963 2
  • #1 24 Gru 2013 01:09
    miswierz
    Poziom 14  

    Witam.
    Jestem początkujący w programowaniu więc proszę o wyrozumiałość.
    Potrzebuje program sterowania klapą (otwieranie i zamykanie dwie krańcówki góra dół i silnik lewo prawo). Chce aby jazda w gore lub w dol odbywała się w momencie zmiany stanu pewnej zmiennej zewnętrznej konkretnie zboczem rosnącym. Wyczytałem, że w Bascomie można zrealizować t przerwaniem i tak też zrobiłem. Jednak program działa tak, że reaguje również przy zmianie stanu z 1 na 0, czyli zbocze opadające. Co źle zrobiłem?

    Tak na marginesie to Wesołych Świąt :) .


    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0 2
  • #2 24 Gru 2013 06:41
    emarcus
    Poziom 35  

    miswierz napisał:
    Witam.
    Jestem początkujący w programowaniu więc proszę o wyrozumiałość.
    Potrzebuje program sterowania klapą (otwieranie i zamykanie dwie krańcówki góra dół i silnik lewo prawo). Chce aby jazda w gore lub w dol odbywała się w momencie zmiany stanu pewnej zmiennej zewnętrznej konkretnie zboczem rosnącym. Wyczytałem, że w Bascomie można zrealizować t przerwaniem i tak też zrobiłem.


    Nie zrobiłeś tak jak zamierzałeś.
    W ATtiny 2313 przerwanie Int0 masz na wejściu/wyjściu PD.2. Jeżeli chcesz nim cokolwiek i jakkolwiek sterowac z zewnątrz, pin ten winien byc skonfigurowany jako Wejście, i pod jego transition winna byc przewidziana w programie odpowiednia akcja. Niby akcja jest 'teoretycznie' (w skrócie myślowym) kierowana do label 'Silnik', lecz nie poprzez impuls zewnętrzny na wejściu (bo go w zasadzie nie ma). Należy pamietac że interrupt reaguje również przy konfiguracji gdy jego pin/port jest wyjściem i wystąpią odpowiednie zmiany logiczne na tym porcie.
    Poza tym dla przycisków nie stosujesz procedury 'Debounce' przez co możesz miec rejestrowane wielokrotne naciśnięcie przełącznika.

    Myślę że powinieneś przerobic całkowicie koncept projektu, zakładając:
    Oba wyłączniki krańcowe powinny sterowac interruptem, w którego subrutynie jest umieszczona instrukcja wyłączenia napęd silnika.
    Do załączenia silnika nie ma konieczności stosowac interrupt, wystarczą zwykłe instrukcje warunkowe w subrutynach od 'Debounce' czytające piny sterujące (wejściowe S1 i S2, dla odpowiednio 'góra lub dół') oraz stan pinów wyjściowych do napędu silnika, jak również stany wyłączników krańcowych; po to aby uniknąc przypadkowego przełąłączenia napędu w kierunku przeciwnym podczas ruchu. Należy przewidziec w programie taką ewentualnośc i wtedy dopisac instrukcję lub subrytynę zatrzymującą napęd na pewien okres czasu (wyhamowania silnika i zredukowanie bezwładności elementów w ruchu) i po jego upływie kontynuowanie programu z włączonym kierunkiem napędu zgodnie z ostanią instrukcją, lub zignorowanie takiej akcji w ogóle (decyzja programisty).

    Posługując się odpowiednio dodatkowymi flagami lub drugim interruptem, można zredukowac sterowanie w obydwu kierunkach do jednego tylko przycisku, w ten sposób że tymsamym przyciskiem kolejne uruchomienia napędu są w kierunku przeciwnym od poprzedniego. Również niezależnie od tego winna byc przewidziana możliwośc zatrzymania napędu w dowolnym położeniu, nie koniecznie na końcu trasy, czyli na wyłączniku krańcowym.

    e marcus

    0
  • #3 24 Gru 2013 12:08
    miswierz
    Poziom 14  

    Widzę profesjonalna analiza:)Dziękuję.
    Jednak aż tak zaawansowany nie jestem by zastosować wszystkie Twoje wskazówki.Jednak niektóre pojęcia nie tyle, że są obce co nie do końca znam zasadę ich działania np.flagi.
    Układ chciałem by działał bez obsługi z zewnątrz czyli brak sterowania włącznikami góra dół jedynie impuls zewnętrzny a właściwie zmiana jego stanu (jest to pojawienie się napięcia na silniku czyli na przerwaniu pojawia się jedynka) ma wywoływać jazdę w górę lub w dół w zależności od zwartej krańcówki.Myślę że jutro powalczę z tym tematem biorąc pod uwagę Twoje instrukcję

    0