Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Program do licznika impulsu BASCOM

tesla44 15 Kwi 2010 11:42 2334 4
  • #1 15 Kwi 2010 11:42
    tesla44
    Poziom 9  

    Witam czy ktoś mi zmodernizuje ten program tak aby liczył mi same impulsy i je aktualizował na bieżąco a po przekroczeniu liczby 999 się resetował i liczył od nowa

    Code:
    $crystal = 4000000
    

    $regfile "attiny2313.dat"


    Dim Wynik As Long
    Config Timer1 = Counter , Edge = Rising                   
    Cls : Lcd "Obrotomierz" : Wait 1                         

    Do                                                         
       Timer1 = 0                                             
       Start Timer1                                         
       Wait 1                                                 
       Stop Timer1         

       Wynik = Timer1 * 60                                   

       Cls                                                   
       Lcd "+ Obrotomierz +"                               
       Lowerline                                             

       Lcd "P: " ; Wynik ; " obr/min"                         
       Cursor Off                                             
    Loop                                                       
    End   


    Program pochodzi z http://www.portalnaukowy.edu.pl/ jestem początkujący i proszę o wyrozumiałość
    Z góry dziękuję pomoc

    0 4
  • #2 15 Kwi 2010 19:44
    aro333
    Poziom 15  

    Wiec tak też jestem początkujący, właśnie częściowo też korzystam z tego programu. Udało mi sie zrobić z niego właśnie zwykły licznik impulsów. Generalnie to brak w tym kodzie jest obsługi wyświetlacza LCD, jak sam widzisz nie jest skonfigurowany gdzie jakie porty procka maja nim sterować , jest niekompletna konfiguracja Timer1.To tyle czego brak na początek
    A teraz co zmienić aby to działało jako licznik:
    -linię Start Timer1 przenosisz nad pętlę Do
    - całkowicie kasujesz linie kodu Stop Timer1
    - modyfikujesz linię Wynik = Timer1 * 60 na Wynik = Timer1
    Wtedy program jak zastartuje to będzie chodził w kółko bez zerowania.
    Aktualnie jestem w pracy wiec nie mam dostępu do swojego kompa, jak wieczorem będę w domu to prześlę tobie jak chcesz ten zmodyfikowany kod, być może o czymś zapomniałem. Podobny temat już tu był , właśnie dotyczący tego kodu.
    Co do tego , że ma sie resetować po powiedzmy 999 impulsach to chyba, zaznaczam chyba bo przecież jestem początkujący, należy napisać instrukcję warunkową coś w stylu jeżeli wynik będzie 999 to reset czyli
    IF Wynik = 999 Then.... no właśnie i tu dalej nie wiem jaka ma być instrukcja do resetowania licznika.Pewnie ta instrukcja warunkowa musi sie znajdować po zczytaniu stanu licznika czyli po linii kodu Wynik = Timer1
    Tak w ogóle to miałem sie nie odzywać bo jestem totalnie świeżak w tym temacie ale widzę , że nie bardzo ktoś coś Tobie odpowiedział. Może wielkich bzdur nie napisałem.

    0
  • #3 15 Kwi 2010 20:02
    tesla44
    Poziom 9  

    Mam takie coś:

    Cytat:
    $crystal = 4000000

    $regfile "attiny2313.dat"
    Config Lcd = 16 * 2

    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portb.4 LCD
    Db5 = Portb.5 , Db6 = Portb.6
    Db7 = Portb.7 , E = Portb.3
    Rs = Portb.2

    Dim Wynik As Long
    Config Timer1 = Counter , Edge = Rising
    Cls : Lcd "Licznik" : Wait 1


    Start Timer1

    If Pind.1 Then
    Waitms 25
    Timer1 = 0
    Do
    Timer1 = 0


    Wynik = Timer1

    Cls
    Lcd "Licznik"
    Lowerline

    Lcd "P: " ; Wynik ; " obr/min"
    Cursor Off
    Loop
    End

    A z tym resetem chodziło mi że jeśli przycisk to resetuj timer1

    0
  • #4 15 Kwi 2010 20:30
    aro333
    Poziom 15  

    Ano widzę właśnie ,że pod port D.1 podłączony jest przycisk resetujący. Tylko zastanawiam się , czy nie należało by najpierw zdefiniować tego portu jako wejście czyli

    Code:

    Config Potrd.1 =  input
    Portd.1 = 1

    A czy czasami nie powinno być z tą instrukcją If coś takiego:
    Code:

    If Pind.1=0 Then Timer1= 0

    czyli jak wciśniesz przycisk podpięty pod pin/port d.1 który jest wejściem (wcześniej zadeklarowany w configu i ustawiony w stan wysoki, zakładam że przycisk będzie wymuszał stan niski) to wtedy ustawiasz licznik Timer1 na 0
    Waitms 25 chyba jest po to aby program poczekał na wciśniecie przycisku.
    No i z tego co kojarzę to jeszcze jest więcej parametrów przy config Timer1 ,z głowy nie pamiętam jakie.

    0
  • #5 15 Kwi 2010 23:12
    sorex86
    Poziom 15  

    Zrób tak:

    1 licznik do odmierzania czasu, przerwanie co np 25ms
    2 licznik do zliczania impulsów

    Jeżeli nastąpiło przerwanie np 25ms, to zlicz liczbę impulsów.
    W taki sposób masz dokładniejsze odmierzanie czasu, funkcja wait do tego się nie nadaje.

    Przeanalizuj sobie ten temat:

    https://www.elektroda.pl/rtvforum/viewtopic.ph...zerwania&sid=6538b7f40380fc921023f15995d6bc3e
    a potem dodaj to co napisałeś i gotowe.


    Marin Wiązania, programowanie w BASCOM, wszystko wyjaśnia.

    0