Lodoo Poziom 14

Joined: 13 Jul 2004 Posts: 187 Location: Wrocław
|
#31
05 Nov 2005 03:56 Re: atmega8 i wyświetlacz 7 segmentowy LED ==> BASCOM |
|
|
|
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
|
|
|
marek_Łódź Poziom 23

Joined: 23 Dec 2004 Posts: 3131 Location: Łódź
|
#32
05 Nov 2005 10:16 Re: atmega8 i wyświetlacz 7 segmentowy LED ==> BASCOM |
|
|
|
| Lodoo wrote: |
| NA "setki" "dziesiatki" i "jednosci" |
| Quote: |
| 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.
|
|