Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

atmega8 i wyświetlacz 7 segmentowy LED ==> BASCOM

Lodoo 05 Lis 2005 02:56 21564 31
  • #31 05 Lis 2005 02:56
    Lodoo
    Poziom 15  

    No to mam juz jakis podstawowy kod do pomiaru predkosci :)
    mam multipleksa

    NIE WIEM CZY DOBRZE ZADEKLAROWALEM PORTY - prosze o sprawdzenie czy ilosc cyferek sie zgadza i czy prawidlowo "pominalem" bity kwarcu (portB) resetu (PortC) i timer'a (portD) - wystarczy tam dac zera (wejscia) i juz?? no i potem jak deklaruje ktore maja byc w jakich stanach to jak pominac bit ze srodka? (np portD.4 - timer) czy juz po deklaracji ze jest w porcie D 1 bit wejscia to juz deklaruje 7 zamiast 8 stanow? (tak zrobilem) czy jak?

    NIE WIEM JAK ROZBIC 3-cyfrowa ZMIENNA "Predkosc" NA "setki" "dziesiatki" i "jednosci"

    NIE WIEM JAK ZROBIC, zeby przy malych predkosciach (ponizej 10km/h) wartosc na wyswietlaczach byla zmieniana co 1 sekunde (4xtimer1)

    Prosze o pomoc w tych 3 kwestiach.
    dziekuje :)

    Code:

    'PREDKOSCIOMIERZ na potrojnym wyswietlaczu 7-seg z dekoderem CD4511
    'podlaczenie: jednosci PD1, dziesiatki PD2, setki PD3
    '             segmenty a-g poprzez uklad - dekoder CD4511 sterowany 4 bitami
    '             piny: PD5, PD6, PD7, PD0
    '             pin PD4 zostaje do timer'a

    $regfile = "m8def.dat"
    $crystal = 4000000

    Dim Jednosci As Byte , Dziesiatki As Byte , Setki As Byte
    Dim Wyswietlacz As Byte , Tablica(4) As Byte
    Dim Imppred As Byte , Predkosc As Byte , Czekaj As Byte

    Config Portb = &B11111001        'piny 6 i 7 to piny kwarcu. Tak ma to wygladac?
    Config Portc = &B1111101          'pin 6 to pin RESET, reszta wejscia
    Config Portd = &B11110111     'czy tak mam to zadeklarowac zeby PD4 bylo wejsciem Timera?
            Portd = &B1110000             'wyswietlacze wygaszone => stany niskie na katodach i wysokie na anodach

    Config Timer1 = Timer , Prescale = 64
    Config Timer0 = Counter , Edge = Falling      'wyzwalanie zboczem spadajacym

    Predkosc = 0

    Poczatek:

    Tcnt0 = 0                                'kasowanie impulsow z czujnika predkosci
    Start Timer0                           ' start zliczania impulsow

    Timer1 = 0                             'zerowanie timera z 250ms do zera
    Start Timer1                           ' start ogliczania czasu





    Do                                         'poczatek petli wyswietlania

    'TU MUSZE COS WSTAWIC ZEBY ROZDZIELIC PREDKOSC
    'NA SETKI DZIESIATKI I JEDNOSCI
    'I PREDKOSC WPISUJE NA WYSWIETLACZ:
    '
    '     PREDKOSC ==> jednosci, dziesiatki, setki

       Wyswietlacz = 0
      Do                                        'petla multipleksera
       Select Case Wyswietlacz
       Case 0:
         Portd.1 = 0
         Tablica(jednosci) = Lookup(jednosci , Tabela)
          Portd.5 = Tablica(1)
          Portd.6 = Tablica(2)
          Portd.7 = Tablica(3)
          Portd.0 = Tablica(4)
       Case 1:
         Portd.2 = 0
         Tablica(dziesiatki) = Lookup(dziesiatki , Tabela)
          Portd.5 = Tablica(1)
          Portd.6 = Tablica(2)
          Portd.7 = Tablica(3)
          Portd.0 = Tablica(4)
       Case 2:
         Portd.3 = 0
         Tablica(setki) = Lookup(setki , Tabela)
          Portd.5 = Tablica(1)
          Portd.6 = Tablica(2)
          Portd.7 = Tablica(3)
          Portd.0 = Tablica(4)
       End Select
       Incr Wyswietlacz
      Loop Until Wyswietlacz = 3
    Loop Until Timer1 = 15625             'wartosc ta odpowiada 0,25s

    Stop Timer1                                   'zatrzymanie odliczania czasu
    Stop Timer0                                   'zatrzymanie zliczania impulsow
    Imppred = Tcnt0                              'impulsy zczytane z PD4
    Predkosc = Imppred * 6.186
           'predkosc=[14400/(ilosc impulsow na 1 km)]*Imppred
           'srednica kola 54,7cm , 4 impulsy na 1 obrot kola => 6,186

    Goto Poczatek


    Tabela:                                       ' ponizej przykladowe cyfry odpowiadajace liczbim 0...9
    Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 138 , 194

  • Pomocny post
    #32 05 Lis 2005 09:16
    marek_Łódź
    Poziom 36  

    Lodoo napisał:
    NA "setki" "dziesiatki" i "jednosci"

    Cytat:
    NIE WIEM JAK ZROBIC, zeby przy malych predkosciach (ponizej 10km/h) wartosc na wyswietlaczach byla zmieniana co 1 sekunde (4xtimer1)

    Code:

    Dim Speed As Byte                                           ' Prędkość
    Dim Tmp As Byte
    Dim I As Byte
    Dim Index As Byte
    Dim Mmv as Byte

    *** Rozbicie na 3 cyfry ***
    Dim Cyfry(3) As Byte

    Speed = 147                                                      ' W Polsce to zakazane

    Mmv=0                                                              'Taktowanie konwersji
    ..........

    Do    ' główna pętla programu
    ...
    '*** poniżej 10 km/h co czwarte przejście ***
    Incr Mmv                                           
    Tmp = 0
    If Speed < 10 Then Tmp = Mmv Mod 4

    '*** Warunkowa konwersja (co 1 lub co 4 przejście) ***
    If Tmp = 0 Then

    '*** Rozbicie liczby na cyfry ***
      For I = 1 To 3                                            'Nasza konwersja
        Tmp = Speed Mod 10                                      'Ostatnia cyfra
        Index = 4 - I                                           'Do tablicy
        Cyfry(index) = Tmp
        Speed = Speed - Tmp                                     'Pozostałe
        Speed = Speed / 10
      Next I
    '****************************
    End If

    ..... wyświetlanie itp....



    Żeby przemiatanie cyfr wyświetlacza było pod kontrolą, odczekanie powinno być po wysłaniu każdej cyfry (np. do 20 ms - 50Hz). Chyba lepiej to zrobić to w przerwaniach zegara, ale rozumiem, że to będzie następna wersja (jeśli powstanie).

    Co do zmniejszenia częstotliwości przy v<10km/h to wystarczy wprowadzić zmienną Mmv odliczającą przejścia przez konwersje (wyliczanie cyfr) i warunkowo robić konwersję. Przy prędkości<10 cyfry są cyfry wyliczane co czwarte przejście czyli przez pozostałe 3 przejścia pętli pozostają stałe, przy prędkości>10 cyfry wyliczane są w każdym przejściu.

TME logo Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
TME Logo