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

Jak zrobić komputer spalania w Bascom z pomiarem prędkości?

woszu 27 Cze 2007 10:32 3000 4
REKLAMA
  • #1 4024967
    woszu
    Poziom 15  
    Posty: 287
    Pomógł: 2
    Ocena: 33
    Witam.
    Przeszukałem już forum, ale nie rozwiązałem problemu.
    Chcę zrobić komputer spalania do samochodu. Najpierw zaczynam od pomiaru prędkości, bo bez tego nie policzy się spalania. Od razu trafiłem na problemy.
    Kod:
    
    $regfile = "m8def.dat"
    $crystal = 4000000
    ''''''''''''''''''''''''''konfiguracja portów''''''''''''''''''''''''''''''''''
    Config Portd = &B11000000
    Config Portb = Output
    Config Portc = &B00010000
    ''''''''''''''''''''''''''''konfiguracja LCD'''''''''''''''''''''''''''''''''''
    Config Lcdbus = 4
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Pb.2 , Db5 = Pb.3 , Db6 = Pb.4 , Db7 = Pb.5 , E = Pb.1 , Rs = Pb.0
    Cursor Off
    Cls
    '''''''''''''''''''''''''konfiguracja zmiennych''''''''''''''''''''''''''''''''
    Dim Predkosc As Byte
    Dim Imppr As Byte                                         
    Dim Droga As Word
    Dim Dystans As Long
    Dim Drogastr As String * 6
    
    Config Timer1 = Timer , Prescale = 64
    Config Timer0 = Counter , Edge = Falling
    ''''''''''''''''''''''''''''program główny'''''''''''''''''''''''''''''''''''''
    
    Cls
    Tcnt0 = 0
    Start Timer0
    Start:
    Timer1 = 0
    Start Timer1
    Do
    Loop Until Timer1 = 33249         '0.5s         
    Stop Timer1
       Imppr = Tcnt0
       Predkosc = Imppr * 2.82                       ' (2 [pomiary/1s] * (3600s/1000m)[przelicznik na km/h] )/(255imp/100m)[stala drogi] = 2,82
       Cls
       Lcd "Predkosc:" ; Predkosc ; "km/h"
       Drogastr = Str(dystans)
       Drogastr = Format(drogastr , " 0.0")
       Lowerline
       Lcd "Droga:"
       Lcd "  " ; Drogastr ; " km"
       Imppr = 0
       Droga = Droga + Tcnt0
       If Droga >= 255 Then
          Incr Dystans
          Droga = Droga - 255
       End If
       Tcnt0 = 0
    Goto Start
    End
    


    Problem polega na tym, ze mnożenie razy stałą 2,82 powoduje wyświetlanie prędkości co 3km/h. Jedyne co wymyśliłem, to robić pomiar co 2 sekundy, wtedy mnożnik wyniesie 0,7 i prędkość powinna się zmieniać już co 1km/h, ale to jest ślepa uliczka, bo pomiar co 2s jest zbyt wolny. Kolega Pfemek ,robił pomiar nawet co 0,25s i miał mnożnik 0.9, ale wynikało to z tego że miał stałą drogi 16imp/m. Ja mam stałą 255imp/100m (trochę nietypowa).
    Proszę o pomoc, jak rozwiązać sprawę częstszego pomiaru i większej rozdzielczości pomiaru.
    Pozdrawiam
  • REKLAMA
  • #2 4025171
    pmmisiek
    Poziom 15  
    Posty: 234
    Pomógł: 7
    Ocena: 4
    Bez zwiększenia czasu pomiaru, raczej tego nie obejdziesz. Możesz sróbować jescze uśrednić wynik z dwóch ostatnich pomiarów, ale niewiele to pomoże.

    Pozdrawiam
  • REKLAMA
  • #3 4025784
    Dr_DEAD
    Poziom 28  
    Posty: 829
    Pomógł: 126
    Ocena: 3
    Zamiast zliczać ilość impulsów w stałej jednostce czasu, mierz czas pomiędzy poszczególnymi impulsami.
  • REKLAMA
  • #4 4025966
    woszu
    Poziom 15  
    Posty: 287
    Pomógł: 2
    Ocena: 33
    Dr_DEAD masz może jakiś przykład, bo tak średnio wiem jak to zrobić. Trochę lewy jestem w programowaniu, jadę na przykładach:)

    Dodano po 1 [minuty]:

    aha, no i timer 1 będzie wykorzystywany do zliczania czasu otwarcia wtryskiwacza, więc on jest zarezerwowany do odliczania stałej jednostki czasu
  • #5 4026064
    Dr_DEAD
    Poziom 28  
    Posty: 829
    Pomógł: 126
    Ocena: 3
    Czas pomiędzy impulsami zmierzysz tak samo jak czas otwarcia wtryskiwacza. Z kodem Ci nie pomogę bo pisze pod ASM i to dla MPS430 a nie AVR.
REKLAMA