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

[Atmega16][C] obsługa wyświetlacza w przerwaniu

svensonie 29 Gru 2010 20:34 1296 3
REKLAMA
  • #1 8931128
    svensonie
    Poziom 11  
    Witam, mój problem polega na tym, że chcę aby przerwanie zewnętrzne powodowało aby na wyświetlaczu LCD (2x16) została wyświetlana pewna dana. Niestety nie działa to poprawnie ponieważ wyświetlacz sprawia wrażenie jakby jakieś znaki były przemietane po nim, niestety częstotliwość jest na tyle duża, że jest to totalnie nieczytelne, nie mówiąc o tym, że chciałbym aby dany znak był w określonym stałym miejscu, a nie zapierdzielał po wszystkich możliwych komórkach.
    Oto fragment kodu przerwania:
    Cytat:

    ISR (INT1_vect)
    {
    LCDinit();
    LCDcursorOFF();
    LCDGotoXY(0,1);
    LCDstring(char1,1);
    }

    oraz konfiguracja przerwania
    Cytat:

    GICR = _BV(INT1);
    MCUCR = _BV(ISC11);


    Zastanawiające jest to, że gdy kod, dotyczący wyświetlacza LCD wstawię do środka funkcji main, a nie do przerwania, wtedy wyświetlacz wyświetla znaki poprawnie
    Cytat:

    int main (void) {
    LCDinit();
    LCDcursorOFF();
    LCDGotoXY(0,1);
    LCDstring(char1,1);

    Mógłby ktoś mi wyjaśnić dlaczego tak jest, i co mam zrobić, żeby było dobrze
    Dzięki z góry
  • REKLAMA
  • REKLAMA
  • #3 8931426
    tmf
    VIP Zasłużony dla elektroda
    A druga rzecz, że z pewnością nie chcesz tak wolnych funkcji, jak funkcje dostępu do LCD umieszczać w przerwaniu. A trzecia rzecz - zapewne te funkcje nie są re-entrant, więc jeśli jeszcze gdzieś oprócz tego przerwania je wykorzystujesz to będzie problem. Poważny problem.
  • #4 8932605
    LordBlick
    VIP Zasłużony dla elektroda
    W przerwaniu to tylko chwytasz wartość tego, co chcesz wyświetlić i ustawiasz odpowiednią flagę/bit/wartość w globalnej zmiennej volatile i wypad z tego baru.... ;) W main natomiast sprawdzasz, czy jest coś nowego, jak jest to wyświetlasz lub robisz z tym, co ci się podoba i zaznaczasz flagę/bit/wartość, że już obskoczyłeś temat i tak do następnego przerwania. W przerwaniu nie robi się nic ponadto, co jest minimalnie niezbędne.
REKLAMA