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

[BASCOM] zliczanie impulsów - złe wskazania

mariusz1140 26 Sty 2010 17:29 1667 7
  • #1 26 Sty 2010 17:29
    mariusz1140
    Poziom 10  

    Code:
    $regfile "m8def.dat"
    
                          $crystal = 1000000
          Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portb.4 , Rs = Portb.5
    Config Lcd = 20 * 4
    ''''''''''''''''''''''''''konfiguracja portów''''''''''''''''''''''''''''''''''
    Config Portd.5 = Input


    ''''''''''''''''''''''''''''konfiguracja LCD'''''''''''''''''''''''''''''''''''

    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
    Portd.5 = 0
    Start Timer0
    Start:
    Timer1 = 0
    Start Timer1
    Do
    Loop Until Timer1 = 33249
    Stop Timer1
       Imppr = Timer1
       Predkosc = Imppr * 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 + Timer1
       If Droga >= 255 Then
          Incr Dystans
          Droga = Droga - 255
       End If
       Portd.5 = 0
    Goto Start
    End




    Witam, co w tym kodzie jest źle napisane? prędkosciomierz niestety nie działa...

    pisze, ze prędkosc wynosi 163km/h

    noo errors ale nie działa...

    Dodano po 24 [minuty]:

    dobra juz mi się udało ;)

    odbiera imulsy

    tylko mam pytanie jak podłączyć dobrze hallotron ?

    inventco.eu - post poprawiłem. Proszę umieszczać kod programu w znacznikach CODE.

    0 7
  • #2 26 Sty 2010 17:34
    Krauser
    Poziom 26  

    Myślę, ze sam powinieneś zastanowić się co robi poszczególna linia i dojdziesz co jest nie tak. Po pierwsze jak to ma działać? Bo jeśli prędkość ma być obliczana w oparciu o liczbę impulsów Timer/Counter0 w czasie wyznaczonym przez Timer1 to linia Imppr = Timer1 jest bez sensu (nie mówiąc o tym, że do 8-bitowej zmiennej jest wpisywana 16-bitowa)
    Po drugie zastanów się nad typami zmiennych. Czy to przejdzie Predkosc = Imppr * 2.82. Gdyby kod był w C to bym się nie zastanawiał, a tu... ale można to szybko sprawdzić w symulacji.

    0
  • #3 26 Sty 2010 20:40
    mariusz1140
    Poziom 10  

    po wielu zastanowieniach zrobiłem tak:

    Code:
      $regfile "m8def.dat"
    
                          $crystal = 1000000
          Config Lcdpin = Pin , Db4 = Portd.7 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portb.4 , Rs = Portb.5
    Config Lcd = 20 * 4
    ''''''''''''''''''''''''''konfiguracja portów''''''''''''''''''''''''''''''''''
    Config Portb.3 = Input


    ''''''''''''''''''''''''''''konfiguracja LCD'''''''''''''''''''''''''''''''''''

    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
    Stop Timer1
       Imppr = Tcnt0
       Predkosc = Imppr * 2.82                                  ' (2 [pomiary/1s] * (3600s/1000m)[przelicznik na km/h] )/(255imp/100m)[stala drogi] = 2,82
       Locate 3 , 1
       Lcd ; Predkosc ; "km/h"
       Drogastr = Str(dystans)
       Drogastr = Format(drogastr , " 0.0")
       Locate 4 , 1
       Lcd ; Drogastr ; " km"
       Imppr = 0
       Droga = Droga + Tcnt0
       If Droga >= 255 Then
          Incr Dystans
          Droga = Droga - 255
       End If
       Tcnt0 = 0
    Goto Start
    End


    dobrze jest to zrobione?

    inventco.eu - post poprawiłem. Proszę umieszczać kod programu w znacznikach CODE.

    0
  • #4 27 Sty 2010 18:41
    mariusz1140
    Poziom 10  

    odswiezam

    Dodano po 8 [minuty]:

    coś tam juz działa, ale mam jeszcze pytanie jak podłączyć hallotron do tego?

    0
  • Pomocny post
    #5 27 Sty 2010 20:32
    Krauser
    Poziom 26  

    Sygnałem wyjściowym hallotrona jest napięcie. Tak więc przez 1/2 LM358 pracująca jako komparator i zasilona napięciem takim jak procesor. Ważna jest biegunowość napięcia wejściowego.

    0
  • #6 01 Lut 2010 15:07
    mariusz1140
    Poziom 10  

    ok, z elektroniką juzsobie poradze, ale ten kod juz zaczyna mnie drażnić
    dzięki Krauser :)
    a moze liepiej byłoby liczć czas pomiędzy impulsami?
    i podawac wynik na wyswietlacz?
    pomoze ktoś w bascomie?

    0
  • #7 01 Lut 2010 21:50
    janbernat
    Poziom 38  

    Naucz się przerwań.
    Wykorzystaj Timer0 do generowania przerwania co np. 1s- jeśli ten czas Ci wystarczy.
    Czyli ustaw Timer0 jako timer.
    Ustaw Timer1 jako counter i zliczaj impulsy co 1s.
    W przerwaniu co 1s od Timer0 niech Timer1 zaczyna zliczać impulsy.
    I co 1s wyświetl liczbę impulsów i wyzeruj Timer1.
    I od początku.
    Całą koncepcję powinieneś zmienić.

    0
  • #8 02 Lut 2010 07:46
    inventco.eu

    Poziom 29  

    Moderowany przez inventco.eu:

    I tą informacją kończymy temat. Reszta dotyczy regulaminu i punktu 14.

    0