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

Program do licznika impulsu BASCOM

tesla44 15 Kwi 2010 11:42 3018 4
REKLAMA
  • #1 7963531
    tesla44
    Poziom 10  
    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

    $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
  • REKLAMA
  • #2 7965296
    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.
  • REKLAMA
  • #3 7965389
    tesla44
    Poziom 10  
    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
  • REKLAMA
  • #4 7965556
    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
    
    Config Potrd.1 =  input
    Portd.1 = 1
    

    A czy czasami nie powinno być z tą instrukcją If coś takiego:
    
    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.
  • #5 7966468
    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/topic1624170.html
    a potem dodaj to co napisałeś i gotowe.


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