[BASCOM] Obsługa VFD

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
Awatar użytkownika
gwozdex
Użytkownik
Posty: 879
Rejestracja: 24 lut 2006, 10:04
Lokalizacja: Czechowice-Dziedzice
Kontakt:

[BASCOM] Obsługa VFD

Post autor: gwozdex » 29 lis 2008, 1:05

Witam!
Poniżej zamieszczam prościutki programik do multipleksowanego wyświetlania napisu "HELLO". Działa dobrze za wyjątkiem jednej sprawy- występuje smużenie czyli segmenty które powinny być wygaszone lekko się świecą co jest winą oprogramowania ( tak myslę) bo gdy wyświetlę statycznie cokolwiek smugi znikają.
Sposób sterowania zastosowałem taki sam jak tasza tzn. kaskadowe połączenie układów 4094 + drivery: https://elportal.pl/index.php?module=Co ... y&ceid=117

Kod: Zaznacz cały

$regfile = "2313def.dat"
$crystal = 4000000
Config Portd = Output
Portd = 0
Clock Alias Portd.2           '3.nóżka układu CD4094
Oe Alias Portd.5              '15.nóżka układu CD4094
Strobe Alias Portd.3          '1.nóżka układu CD4094
Dataa Alias Portd.4           '2.nóżka układu CD4094
Declare Sub Zerowanie
Dim I As Byte
Dim Dana As Long
Oe = 0
Clock = 0


Do
 Dana = &B11111111011111111000000111111111       '
 Call Zerowanie
 Waitms 4
 Dana = &B11111110111110111101010111011111
 Call Zerowanie
 Waitms 4
 Dana = &B11111101111111111101110111011111
 Call Zerowanie
 Waitms 4
 Dana = &B11111011111111111101110111011111
 Call Zerowanie
 Waitms 4
 Dana = &B11110111111110111001100111011111
 Call Zerowanie
 Waitms 4
Loop


Sub Zerowanie
Reset Strobe
For I = 0 To 31
  Dataa = Dana.i
  Toggle Clock
  Waitus 1
  Toggle Clock
Next I
Set Strobe
Oe = 1
End Sub
Problem na pewno występuje przy przełączaniu się pomiędzy kolejnymi znakami/ siatkami gdyż przy wolnej zmianie sekwencji widać pojedynce mignięcie niechcianych segmentów; przy odświerzaniu 60Hz niechciane segmenty świecą non stop.
Za wszelką pomoc będę wdzięczny.

tasza
Użytkownik
Posty: 1391
Rejestracja: 21 lut 2005, 15:02

Post autor: tasza » 29 lis 2008, 8:34

gwozdex pisze:Sposób sterowania zastosowałem taki sam jak tasza
...czyli sterowanie w "negatywie" czyli że wygaszasz segment wystawiając 1 na bit rejestru,
co zwiera wyjście ULN-a do masy...tak głośno sobie myślę.

To może zrób taką próbę:

Kod: Zaznacz cały


Sub Zerowanie
'++tasza
' wygaś poprzednią zawartość displaya
Reset Strobe
For I = 0 To 31
  Dataa = 1 'wszystko na 1
  Toggle Clock
  Waitus 1
  Toggle Clock
Next I
Set Strobe
Waitus 2
'--tasza

Reset Strobe
For I = 0 To 31
  Dataa = Dana.i
  Toggle Clock
  Waitus 1
  Toggle Clock
Next I
Set Strobe
Oe = 1
End Sub 

Awatar użytkownika
gwozdex
Użytkownik
Posty: 879
Rejestracja: 24 lut 2006, 10:04
Lokalizacja: Czechowice-Dziedzice
Kontakt:

Post autor: gwozdex » 29 lis 2008, 16:23

Witaj taszo!

Na początku dziękuję za szybką odpowiedz.
Niestety problem pozostaje aktualny- co prawda widać poprawę ale nadal widoczne są smugi z tym, że nie na wszystkich segmentach. Muszę przyznać ze próbowałem wczoraj tej drogi (zanim napisałem posta) ale ponieważ nie przyniosło efektu nie wspominałem o tym. co prawda ja wpisywałem 1 logiczną tylko do siatek, natomiast jak mówię- wpisanie 1 na wszystkie pozycje nadal pozostawia smugi.
Nie mam teraz czasu na dalszą zabawę- tylko na szybko sprawdziłem Twoje rozwiązanie.
Jeszcze do głowy wpadłmi pomysł użycia sygnału output Enable ( u mnie Oe) ale to też nie jest rozwiązanie ponieważ ustawiając koncówki układu CD4094 w High-Z zapalę wszystkie segmenty- sprawdziłem tak się dzieje!

[ Dodano: 2008-11-29, 16:44 ]
Dziwne...
Zrobiłem eksperyment i w programie usunąłem wszystkie komendy SET/RESET Strobe pozostawiają tylko jedną w bloku inicjacji pisząc- ustalając sygnał strobe= 1. Nie widać znaczącej różnicy w stosunku do Twojej wersji mojego programu :). ... i raz jeszcze dziękuję.

ODPOWIEDZ