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

Atmega 16 i licznik impulsów na Timer1 [Bascom]

aro333 15 Kwi 2010 13:03 4376 2
  • #1 7963755
    aro333
    Poziom 15  
    Jestem początkujący w dziedzinie programowania Atmelków.
    Mam zamiar zrobić licznik impulsów , który w pierwszej linii wyświetlacza LCD 2*16 , będzie wyświetlał ilość impulsów , zaś w drugiej ma pokazywać ilość obrotów na minutę. Generalnie ma to rejestrować przebiegi wolnozmienne ok 1Hz nawet ciut mniej. Zaczerpnąłem kawałek kodu oczywiście z netu , standardowa obsługa Timer1 :
    
    Do
    
       Timer1 = 0
                                                  
                                                   
       Start Timer1                                          
       Wait  10 
                                                     
        Stop Timer1                                            
    
       Wynik = Timer1 * 6                                       'wynik zliczania w czasie 10s mnożymy przez 6 dla otrzymania wyniku w: obr/min
    
       Cls                                                      'czyścimy LCD
       Lcd "Takty:  " ; Wynik  
    End
    

    Oczywiście dochodzą do tego procedury obsługi wyświetlacza i konfiguracji Timer1 jako counter.
    I tu mam problem, gdyż albo potrafię wyświetlić wyniki jako częstotliwość w obr/min albo umiem delikatnie to zmodyfikować i zrobić z tego zwykły licznik impulsów . Czy trzeba do tego zaprzęgnąć następny Timer ? Czy da sie z jednego czujnika tak pokombinować aby w czasie rzeczywistym pokazywało non stop ilość cykli(ilość impulsów) a także co 10 sekund pokazywało mniej więcej częstotliwość pracy? Cały ten układzik ma posłużyć do kontroli maszyny zmęczeniowej , w której ważna jest właśnie ilość wykonanych cykli i częstotliwość z jaką maszyna jest ustawiona. Oczywiście dojdzie do tego kilka innych następnych procedur , może jakaś klawiatura do ustawiania nastaw ale to dalszy temat. Najpierw chcę uporać sie z tym problemem. Nie wiem czy jest to możliwe ale podczas tego Wait 10, najprawdopodobniej nie da sie w tym samym momencie pokazywać na 2 linii LCD faktycznego dynamicznego przyrost impulsów , gdyż program sie zatrzyma aby licznik złapał przedział do obliczenia obrotów. Może całkiem inaczej należy podejść do samego zliczania impulsów wykonanych cykli a zostawić ta procedurę co powyżej , dla wyliczania częstotliwości? Może to co piszę jest masło maślane , więc przepraszam z góry.
    Dodam tylko , że na Port A2 podawany jest sygnał z czujnika optycznego , w skrócie następuje tam zmiana stanu z niskiego na wysoki. W wersji testowej użyłem Atmega16, pewnie przerost formy nad treścią ale traktuje ta płytkę jako ćwiczebną i w końcowej fazie nie powinienem mieć problemów przeniesienia tego na innego mniejszego procka . Tyle już potrafię.

    Proszę kod umieszczać w znacznikach code!
    Robak
  • #2 7966773
    Konto nie istnieje
    Poziom 1  
  • #3 7967300
    aro333
    Poziom 15  
    Dziekuję za odpowiedz. Z tymi portami to była mała literówka z mojej strony pisząc tego posta. Generalnie jak widzę należy całkiem inaczej podejść do tych TIMERÓW, tego się spodziewałem.Jestem naprawdę mocno początkujący w programowaniu tych procków, ale Twój post pozwolił mi inaczej spojrzeć na ten problem i już pewne info znalazłem tutaj na elektrodzie, plus oczywiście książka w rękę . Co do samej próby zmęczeniowej - ta maszyna działa już parę lat , licznik cykli ma typowo mechaniczny a ustawianie częstotliwości odbywa się na "zegarek". Wiem wiem śmieszne to jest no ale cóż , dlatego próbuję to w miarę ulepszyć. Na pewno moje umiejętności w tym momencie nie są wystarczające ale być może ten problem pozwoli mi na doświadczalne zrozumienie Bascoma (moje styczność z programowaniem sięga zamierzchłych czasów i pracy z Basicem na ZX Spectrum). Same urządzenie pracuje z nie dużą częstotliwością a ilość cykli jaką dane części mają "wytrzymać " przeważnie nie przekracza 50 tyś cykli.
REKLAMA