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

Obsluga przycisków [atmega8][bascom]

graffiti333 22 Sty 2009 11:39 3605 5
REKLAMA
  • #1 6036200
    graffiti333
    Poziom 10  
    Witam


    Zbudowałem układ do sterowania wentylatorami w układzie dystrybucji gorącego powietrza (DGP) z kominka.
    Mam 4 DS18B20, PWM steruje obrotami wentylatorów, dwoma przyciskami steruje obroty, dwoma kolejnymi temperaturę od której ma sie załączyć wentylator. Mam następujący problem jeżeli dla każdego DS-a ustwie czas na konwersje waitms 750 to program praktycznie nie reaguje na przyciski. Aktualnie ustawiony mam czas waitms 20 temperatura jest wyswietlana reakcja na przyciski jest prawidłowa. Moje pytanie jak fachowo powinno to być wykonane?. Na przerwaniu wejście do menu z opcjami? Nie bardzo wiem jak to programowo zrobić. Atmega chodzi na wewnętrznym oscylatorze 1 MHz.

    Pozdrawiam
  • REKLAMA
  • #2 6040538
    Freddy
    Poziom 43  
    Poczytaj kartę katalogową DS18B20 !
    W kominku potrzebujesz odczytu temperatury z dokładnością około 0.1°C , a nie wystarczyłoby do 1° C.
    Poza tym użyj obsługi klawiatury w przerwaniu.
  • REKLAMA
  • #3 6040893
    graffiti333
    Poziom 10  
    Witam ponownie

    Tak co do rozdzielczości pomiaru to wystarczy 9 bit, tylko nie za bardzo wiem jak wyzwolić zewnetrzne przerwanie, podlaczyć mikroswitcha do INT0 i do masy ? a jak oprogramować aby wywolać akcje w kazdym momencie dzialania programu?
  • REKLAMA
  • #4 6046356
    rpal
    Poziom 27  
    Chcesz wyzwalać przerwanie w chwili naciśnięcia klawisza ?
    Tak zrozumiałem, jeśli nie masz za wiele tych klawiszy w układzie np. 2 to możesz je po prostu podłączyć wprost na końcówkę odpowiedzialną za wyzwolenie przerwania INT0, INT1. Pamiętaj tylko o tym aby przełącznik spolaryzować do plusa zasilania opornikiem oraz równolegle do niego podłaczyć kondensator w celu eliminacji mikrodrgań. Taka para 1-2 k oporności i 470 nF - 1 uF myślę że spokojnie to załatwi, wartości można zmieniać w sumie w dość serokim zakresie.
    Jeśli zaś tych przycisków jest więcej to albo zrobisz sobie klawiaturę matrycową i przerwaniem któregość z liczników je obsłuzysz, albo uzyjesz gotowego scalaka (dla klawiatur 16 stykowych) potrzeba 4 linii danych i 1 linie na INT albo zrobisz sobie prosty układ np. z diodami albo bramkami który z jednej strony przyjmie sygnał z przełączników a z drugiej wygeneruje przerwanie. Jak napiszesz ile ma być tych przycisków to nie problem to rozwiązać.
    Piszesz o 4 przyciskach ale nie wiem czy to ostateczna ilość i żaden się tam gdzieś nie ukrywa ?
  • REKLAMA
  • #5 6046815
    graffiti333
    Poziom 10  
    Witam


    Chciałbym wogóle zmienić koncepcje zmiany wartości w sterowniku, są 4 ry przyciski i nie przewiduje więcej: Wejscie/Wyjscie z menu, Enter , + i -.
    I wlasnie Wejscie do menu chcialbym zrobić na przerwaniu żeby, w każdym momencie dzialajcego programu mozna bylo wejsc do menu.
    Potrzebuje przykładowego kodu jak wywolać procedure wejscia do menu. Z cala reszta sobie poradze.

    Pozdrawiam
  • #6 6046894
    rpal
    Poziom 27  
    NIe przerwanie wywołanie wybraniem Menu ale przerwanie wywołanie naduszeniem klawisza.
    Kodu Tobie nie napiszę ale poradzę tak:
    Podłącz sobie sprzętowo klawisze tak aby każde ich wciśnięcie generowało przerwanie t.j. każdy z 4 przeycisków ma być podłaczony do jakiegoś portu wejściowego ale dodatkowo wyzwalać przerwanie np. INT0, można użyć bramki 7420 wyzwalanie oczywiście zboczem, którym to Twój wybór.
    Zadeklaruj globalną zmienną która będzie przechowywać kod znaku czyli klawisza.
    Przerwanie wywołane z klawisza w swojej obsłudze musi być proste t.j. przepisuje wartość z portu We do zmiennej w której ma być ten kod zawarty i tyle tutułem przerwania.
    Dodatkowo potrzebna jest Tobie procedura pobrania znaku z tego mini bufora jakim jest zmienna w której zanjduej się kod klawisza. Procedura ta po prostu zwraca (sorry to już funkcja) kod znaku jednocześnie czyszcząc minibufor czyli zmienną. Jak zmienna ma coś w sobie zapisanego - było wciśniecie klawisza jeśli jest wyczyszczona klawisza nikt nie dotykał. Taka idea obsługi klawisza może być, reszte ma zrobić Twój program :)
    Jeśli sądziłeś że wejście w przerwanie ma spowodować obsługę Menu to właśnie na tej zasadzie. przerwanie nie może być traktowane jako kolejne odgałęzienie programu w jakimś celu ale jako maleńki kroczek na bok i powrót do zasadniczej części zwykle pętli, programu. Dopisałem to by chyba taki miałeś zamiar :)
REKLAMA