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

Integracja przycisku z USART na ATMEGA 16 w języku C - jak to zrobić?

Rethie 04 Maj 2017 14:19 867 5
REKLAMA
  • #1 16453949
    Rethie
    Poziom 7  
    Witam, mam problem w połączeniu funkcjonalności przycisku wraz z działaniem Seriala. Nie mogę sobie poradzić w tym, aby przycisk działał w każdej chwili, gdy tylko go nacisnę, w pętli głównej jest analizowane to co przychodzi na serial z urządzenia zewnętrznego, w zależności od tego jaki to będzie ciąg znaków uC ma wykonywać jakieś obliczenia (po sparsowaniu danych z ciągu przychodzącego) i odpowiadać na te "wymuszenia". Ale ten mechanizm mi akurat działa.Gorzej dzieje się jak mam pogodzić działanie przycisku z działaniem USART. Jak nie mam włączonego usarta to przycisk działa reaguje i jest super, tak samo jak mam zainicjowany sam usart i dzialanie co robic na poszczególne przychodzące ciągi znaków. Jak próbuję połączyć te dwie rzeczy to niestety albo nie działa przycisk albo nie działa usart. Siedzę nad tym już kilkanaście godzin i wychodzi na to, że jestem zbyt głupi, żebym to sam ogarnął, czy ktoś mógłby mi pomóc? Próbowałem przerwań to niestety po wciśnięciu przycisku brak reakcji, a Atmega jakby się resetowała bo ciągle wyświetlała wiadomość początkową na serialu.

    Generalnie ma być tak, że pętla główna sprawdza co przychodzi na serial, a gdy przycisnę button to na przykład buzzer zaczyna wyć albo coś na serial się wysyła. Dziękuję uprzejmie za wszelaką pomoc :)

    Oto mój kod.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 16453956
    excray
    Poziom 41  
    USART na przerwaniu od odbioru, a przycisk na przerwaniu zegarowym co 1/10s.
  • REKLAMA
  • #3 16453977
    Rethie
    Poziom 7  
    A mógłbyś to jakoś opisać kodem ?
  • REKLAMA
  • #4 16454047
    dondu
    Moderator na urlopie...
    Przykład USART na przerwaniach: http://mikrokontrolery.blogspot.com/2011/03/rs-232-atmega8-komputer-terminal.html

    Przycisk na przerwaniach - ustaw tiimer do pracy z przerwaniem przepełnienia i sprawdzaj w nim stan przycisku.
    Możesz oprzeć się o ten przykład: http://mikrokontrolery.blogspot.com/2011/03/led-sterowany-przez-timer.html

    Możesz także wykorzystać pin INT0 lub INT1 i przycisk zrobić na przerwaniach, pamiętając o drganiach styków: http://mikrokontrolery.blogspot.com/2011/04/przycisk-drgania-stykow-debouncing.html
    Jednakże nie polecam Ci tego rozwiązania jako, że jesteś bardzo początkującym.
  • REKLAMA
  • Pomocny post
    #5 16454068
    excray
    Poziom 41  
    Rethie napisał:
    A mógłbyś to jakoś opisać kodem ?

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #6 16455579
    Rethie
    Poziom 7  
    Dziękuję za naprowadzenie, po małych korektach efekt, którego oczekiwałem został osiągnięty. Pozdrawiam serdecznie i jestem na prawdę wdzięczny!
REKLAMA