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

Potrzebuje przykład wykorzystania przerwania zewnętrznego

kopernik8 29 Mar 2005 15:02 1763 13
REKLAMA
  • #1 1358373
    kopernik8
    Poziom 21  
    Posty: 631
    Pomógł: 10
    Ocena: 18
    Chodzi mi o jakiś przykladowy kod źródłowy,
    By kontroler np 2313 reagował przerwanem na przycisk.
    Wiem że to dyletancka postawa ale nie wiem czy symulator dobrze odzwierciedla przerwania...
  • REKLAMA
  • #2 1358601
    GienekS
    Poziom 32  
    Posty: 1971
    Pomógł: 139
    Ocena: 15
    Jeżeli chodzi o AvrStudio to jest to różnie i raczej nie polecam polegać na tym. Lepiej sprawdzić to na żywca.
  • #3 1358940
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    GienekS napisał:
    Jeżeli chodzi o AvrStudio to jest to różnie i raczej nie polecam polegać na tym. Lepiej sprawdzić to na żywca.

    No, no, bez kryptoreklamy tego bezalkoholowego... ;)
    Z tym symulatorem można się nauczyć żyć... serio... jedyne, czego nie zasymulujesz to czas rzeczywisty, od tego są symulatory sprzętowe, oraz wbudowana w niektóre procesorki AVR funkcja DebugWire lub JTAGICE (z rozkazem break w roli głównej), również obsługiwana przez AVRStudio.
    :arrow: kopernik8 : Najczęstszy przypadek wykorzystania zewnętrznego to detekcja przejścia przez zero w regulacji fazowej mocy napięcia przemiennego, jest tego trochę na elektrodzie oraz w notach aplikacyjnych Atmela... Z własnego doświadczenia nie polecałbym zastosowania przerwań zewnętrznych do obsługi klawiatury itp., bo to elementy mechaniczne, z których ilość impulsów jest losowa, chociaż mogłoby się wydawać, że wcisneliśmy tylko raz klawisz. Możesz wykorzystać ten wektor przerwania do własnych zastosowań, np. bariera podczerwieni oraz wszędzie tam, gdzie jesteś pewien, że liczba wywołań/impulsów będzie stabilna w czasie.
    Light-I
  • #4 1359269
    kopernik8
    Poziom 21  
    Posty: 631
    Pomógł: 10
    Ocena: 18
    Nie nie...INT0 potrzebuje do obsługi układu CMX612.
    Z tym że nie wiem czy dobrze to robie, bo w książkach konkretnie tego przerwania nie opisali.
  • REKLAMA
  • #5 1359699
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    kopernik8 napisał:
    Nie nie...INT0 potrzebuje do obsługi układu CMX612.
    Z tym że nie wiem czy dobrze to robie, bo w książkach konkretnie tego przerwania nie opisali.

    No to człowieku się zdecyduj, w pierwszym poście pisałeś coś o 2313... ;)
    Light-I
  • #6 1359757
    kopernik8
    Poziom 21  
    Posty: 631
    Pomógł: 10
    Ocena: 18
    Stary....
    Chyba normalne że układ CMX612 podłączam do mikrokontroletra at90s2313 i potrzbuje przerwanie bo układ CMX ma wybudzić kontroler z uspienia i wyswietlić dane na LCD proste....
    Tyle że ja musze obejżeć na jakims przykłądzie uzycie przerwania INT0 lub INT1
  • #7 1359943
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    Jak prosisz o przykłady, to podaj w jakim języku... ;)
    W asm na początku procedury przerwania zachowujesz rejestr stanu, potem te rejestry, które używasz podczas normalnej pracy procesorka (poza przerwaniem) obsługujesz przerwanie, potem odtwarzasz stan rejestrów i rejestru stanu no i na koniec reti... ;)
    Sama procedurka obsługi przerwania nie musi wykonywać się długo, wystarczy, że zmieni jakąś zmienną w pamięci RAM, co ędzie sygnałem dla programu głównego, ze ma zacząć coś robić...
    Light-I
  • REKLAMA
  • #8 1360023
    kopernik8
    Poziom 21  
    Posty: 631
    Pomógł: 10
    Ocena: 18
    Ah w tym pośpiechu zapomniałem...pisze w C.
    W sumie to chodzi mi o konfigurację rejestrów...
    GIMSK,MCUCR itd....bo w symulatorze jakoś to nie dziala...
    aha a czy to norma że symulator nie reaguje na polecenie sleep ??
  • REKLAMA
  • #9 1360077
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    kopernik8 napisał:
    Ah w tym pośpiechu zapomniałem...pisze w C.
    W sumie to chodzi mi o konfigurację rejestrów...
    GIMSK,MCUCR itd....bo w symulatorze jakoś to nie dziala...

    normalnie ustawiasz je tak, jak powinny być ustawione dla twojej konfiguracji sprzętowe, wszystko jest w nocie katalogowej i aplikacyjnej na stronie Atmela. Jak potrzebujesz notke do starszego procka, to podaj email i nie ma problemu.
    kopernik8 napisał:
    aha a czy to norma że symulator nie reaguje na polecenie sleep ??

    Ma wyłączyć komputer ? ;) Jakiej oczekujesz reakcji ?
    Pozdr, Light-I
  • #10 1360102
    kopernik8
    Poziom 21  
    Posty: 631
    Pomógł: 10
    Ocena: 18
    Light_I napisał:

    Ma wyłączyć komputer ? ;) Jakiej oczekujesz reakcji ?
    Pozdr, Light-I

    Hehe nie nie kompa....ale chyba mikrokomp powinien przerwać wykonywanie kodu...az do wystapienia przerwania... :roll:
  • #11 1360116
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    kopernik8 napisał:
    Light_I napisał:

    Ma wyłączyć komputer ? ;) Jakiej oczekujesz reakcji ?

    Hehe nie nie kompa....ale chyba mikrokomp powinien przerwać wykonywanie kodu...az do wystapienia przerwania... :roll:

    A ustawiasz wczesniej odpowiednie bity konfiguracyjne od Sleep mode ?
    Light-I
  • #12 1360168
    kopernik8
    Poziom 21  
    Posty: 631
    Pomógł: 10
    Ocena: 18
    Ma sie rozumieć ... MCUCR bit 5 na "1" zaraz przed wywołaniem
    sbi(MCUCR,5);
    asm("sleep");
    4 bit zostawiam "0" co znaczy stan Idle.
  • #13 1360192
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    A przypadkiem nie włącza go przerwanie Timer-a ?
    Cytat:
    When the SM bit is cleared (zero), the SLEEP instruction forces the MCU into the Idle
    mode, stopping the CPU but allowing Timer/Counters, Watchdog and the interrupt system
    to continue operating. This enables the MCU to wake up from external triggered
    interrupts as well as internal ones like Timer Overflow interrupt and Watchdog Reset.

    To z notki katalogowej AT90S2313... ;)
    P.S. Posługuj się proszę nomenklaturą oznaczeń not katalogowych(zamiast pisać bitX, pisz bit <tutaj jego nazwa>), to ułatwia zarówno programowanie, jak i wzajemne zrozumienie... ;) Nazwy powinny występować w pliku nagłówkowym... (w twoim przypadku chyba "io_2313.h" lub podobnie).
    Light-I
  • #14 1361988
    kopernik8
    Poziom 21  
    Posty: 631
    Pomógł: 10
    Ocena: 18
    Wszystkie liczniki stoją. ich bity PRESCALE są wyzerowane.
    Może poprostu symulator nie potrafi tego zasymulować.

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy przykładowego wykorzystania przerwania zewnętrznego INT0 lub INT1 w mikrokontrolerze AT90S2313, szczególnie w kontekście obsługi układu CMX612, który ma wybudzać kontroler ze stanu uśpienia i wyświetlać dane na LCD. Poruszono kwestie konfiguracji rejestrów takich jak GIMSK, MCUCR oraz prawidłowego ustawienia bitów trybu uśpienia (sleep mode) i obsługi przerwań w języku C. Zwrócono uwagę, że symulatory, w tym AvrStudio, mogą nie w pełni odzwierciedlać działanie przerwań i trybu uśpienia, dlatego lepiej testować na rzeczywistym sprzęcie. Omówiono także praktyczne zastosowania przerwań zewnętrznych, wskazując, że nie są one idealne do obsługi klawiatur mechanicznych ze względu na niestabilność impulsów, ale sprawdzają się w stabilnych sygnałach, np. barierach podczerwieni lub detekcji przejścia przez zero w regulacji fazowej. Podkreślono konieczność zachowania rejestrów i rejestru stanu w procedurze obsługi przerwania oraz stosowanie nomenklatury zgodnej z notą katalogową Atmela dla lepszej czytelności kodu.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA