Witam
Jest taki programik w Bascom AVR na uC 90s2313 i kwarc 4M (lub 8M -
efekt jest ten sam):
Config Timer0 = Timer , Prescale = 1
Enable Interrupts
Enable Timer0
On Timer0 Ledy Nosave
Dim Licznik As Byte
Ddrd = &B1111111
Do
Loop
Ledy:
If Licznik > 4 Then : Licznik = 1 : End If
Select Case Licznik
Case 1 :
Portb = 6
Portd.2 = 0
Case 2 :
Portb = 6
Portd.3 = 0
Case 3 :
Portb = 6
Portd.4 = 0
Case 4 :
Portb = 6
Portd.5 = 0
End Select
'''''''''''''''
Incr Licznik
Return
Wyswietla multipleksowo "1111" na czterech wys. 7seg led. Wszystko
bylo by dobrze, gdyby nie to ze segmenty, ktore w danej chwili nie
maja sie swiecic lekko sie jarza, co zmniejsza wyrazistosc odczytu (praktycznie go uniemozliwiaja). Wyswietlacze
sa sterowane z portu b przez uln2003 i oporniki. Kluczowanie z portu d przez 4 tranzystory. Co robie nie tak? Czas trwania imp. kluczujacych jest
za krotki? Moze nalezy inaczej sklonstruowac program? Z gory dziekuje
za wszystkie sugestie.
Aktyw Forum
Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.
Sprawdź punkty Zarejestruj sięBascom AVR + s2313 + 4x7seg = :/
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
Wszystko przez zbyt dużą częstotliwość odświeżania. Zwiększ prescale nawet do 1024 i dodatkowo w podprogramie Ledy zastosuj jescze jeden licznik tak by cały cykl wyswietlania trwał np. 20ms, co da częstotliwość 50Hz. Czyli tak by każdy wyświetlacz był obsługiwany przez 5ms.
Przykład:
'X = 4MHz
Config Timer0 = Timer , Prescale = 1024
Enable Interrupts
Enable Timer0
On Timer0 Ledy Nosave
Dim Licznik As Byte
Dim Licznik2 as byte
Ddrd = &B1111111
Do
Loop
Ledy:
incr Licznik2
If Licznik2 = 18 then 'co ok 5ms jes obsługiwany kolejny wyświetlacz
Licznik2 = 0
If Licznik > 4 Then : Licznik = 1 : End If
Select Case Licznik
Case 1 : Portb = 6
Portd.2 = 0
Case 2 : Portb = 6
Portd.3 = 0
Case 3 : Portb = 6
Portd.4 = 0
Case 4 : Portb = 6
Portd.5 = 0
End Select
Incr Licznik
End if
Return
Przykład:
'X = 4MHz
Config Timer0 = Timer , Prescale = 1024
Enable Interrupts
Enable Timer0
On Timer0 Ledy Nosave
Dim Licznik As Byte
Dim Licznik2 as byte
Ddrd = &B1111111
Do
Loop
Ledy:
incr Licznik2
If Licznik2 = 18 then 'co ok 5ms jes obsługiwany kolejny wyświetlacz
Licznik2 = 0
If Licznik > 4 Then : Licznik = 1 : End If
Select Case Licznik
Case 1 : Portb = 6
Portd.2 = 0
Case 2 : Portb = 6
Portd.3 = 0
Case 3 : Portb = 6
Portd.4 = 0
Case 4 : Portb = 6
Portd.5 = 0
End Select
Incr Licznik
End if
Return
Kilkanascie godzin kombinowania ,setki przeprogramowan uC zeby dojsc do tego ze ta poswiate na 7seg robil dekoder BCD ktory rowniez podlaczony byl do wyswietlaczy (uzywam plytki prototypowej avt-854) i mieszal. Po wyciagnieciu tej kostki juz jest ok. Dziekuje za pomoc.
Ostatnio zmieniony 19 lip 2004, o 11:55 przez zolax, łącznie zmieniany 1 raz.
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 33 gości