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

[Bascom] - Jak generować różne alarmy piezo z atmegą32 i timerem0?

pier 09 Paź 2013 06:50 1374 6
  • #1 12824260
    pier
    Poziom 24  
    Witam.
    Koledzy mam błachy problem którego nie mogę mogę sam rozwiązać (taki tam że mnie programista...)

    Otóż do atmegi32 mam podłączony poprzez mosfeta alarm (piezo z generatorem 110dB) atmega po prostu załącza zasilanie.

    I teraz potrzebuję za pomocą tego wygenerować dwa lub trzy różne alarmy.
    W atmedze dostępny jest timer0.
    Pewnie za jego pomocą trzeba wygenerować różne czasy piknięć piezo i to jest jasne. Ale jak podczas takiego alarmu zmieniać długość tego czasu tak aby wyglądało to mniej więcej tak:
    pik
    przerwa 200ms
    pik
    przerwa 200ms
    pik
    przerwa 200ms
    pik
    przerwa 1s
    i od nowa

    Żadne przerwy typu wait nie wchodzą w grę bo program musi podczas generowania alarmu reagować na przyciski.

    Jakieś pomysły?

    Pozdrawiam
  • #2 12824365
    mickpr
    Poziom 39  
    Możesz zrobić tak:
    W tabelce zdefiniowana długość poszczególnych elementów (piknięć i przerw).
    W timerze zdefiniowana maszyna stanów - na podstawie jej stanu aktualnego (wartości timer'a) wybierasz określony "punkt programu" - czyli przerwę lub "piknięcie".

    Co się tyczy przycisków, to możesz zdefiniować albo przerwanie zewnętrzne, albo w przerwaniu timera sprawdzać ich stan.
    W ten sposób masz pewność, że zareagujesz na ich wciśnięcie.
    Co to za Atmega?
  • #3 12824385
    pier
    Poziom 24  
    A gdybym tak zrobił te piknięcia i przerwy między nimi za pomocą tych zwykłych waitmsów, tak aby było mega prosto a stan przycisków odczytywał po prostu w przerwaniu od timer-a czy dało by radę takie rozwiązanie?
  • #4 12824390
    mickpr
    Poziom 39  
    Tak. Da radę, ale przecież sam napisałeś, że to zły pomysł.
    Co zrobisz, jak będziesz chciał dołożyć inną funkcjonalność?
  • #5 12824412
    pier
    Poziom 24  
    Tak tylko że wcześniej nie pomyślałem aby stan przycisków odczytać w przerwaniu timer-a tylko w pętli głównej.

    W momencie wystąpienia alarmu układ nic innego nie musi robić tylko odczytać stan przycisków i jeśli któryś zostanie wciśnięty wyłączyć alarm i przejść do stanu normalnej pracy.
  • #6 12824597
    BlueDraco
    Specjalista - Mikrokontrolery
    Zacznij od przerwania timera. Na waitms i innych delay daleko nie zajedziesz - to ślepy zaułek, tak się nie da napisać żadnego sensownego programu.
  • #7 12825175
    Konto nie istnieje
    Poziom 1  
REKLAMA