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 = :/

zolax
-
-
Posty:9
Rejestracja:29 gru 2003, o 21:22
Bascom AVR + s2313 + 4x7seg = :/

Postautor: zolax » 19 lip 2004, o 09:11

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.

Awatar użytkownika
Kamilkozi
-
-
Posty:229
Rejestracja:19 mar 2004, o 11:48
Lokalizacja:Gdańsk
Kontaktowanie:

Postautor: Kamilkozi » 19 lip 2004, o 09:58

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

zolax
-
-
Posty:9
Rejestracja:29 gru 2003, o 21:22

Postautor: zolax » 19 lip 2004, o 10:18

:)
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.

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 20 gości