logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Bascom Program do kitu JABEL J-89 złe wyświetlanie

Seps111 09 Sie 2021 17:36 651 6
REKLAMA
  • #1 19556698
    Seps111
    Poziom 3  
    Witam, w ramach wyzwania postanowiłem napisać program do kitu Jabel J-89 (timer mikroprocesorowy). Znalazłem na elektrodzie temat na którym ktoś się postanowił podzielić fajną bo prostą procedurą na sterowanie wyśiwietlaczy 7 segmentowych za pomocą rejestru przesuwnego 74164, https://www.elektroda.pl/rtvforum/topic415722.html#2120076 przepisałem program, wgrałem do atmela i umieściłem go w urządzeniu. Po odpaleniu spodziewałem się że wszystkie cyfry będą świecić jednakowo jednak pewne cyfry świecą dobrze tylko w odpowiedniej kolejności. Na załączonym obrazku powinno być 3333 a pokazują się takie krzaki. Próbowałem wielu zmian w kodzie jednak zawsze wychodzi to z takim samym skutkiem. Jeśli ktoś ma pomysł co może być nie tak to proszę o pomoc.

    Czym różnią się oznaczenia 24PI a 24PU? . Jeśli nauczę się dobrze pisać w bascomie to nie wykluczone że napiszę i podzielę się wieloma programami do kitów Jabel wraz z ich wytłumaczeniem, bo niestety polityka tej firmy (nie udostępnianie wsadów) sprawia że wielu osobom zostaje niedosyt gdy zmontują układ z mikroprocesorem i nie wiedzą jak on działa ponieważ 70% roboty wykonuje atmel z tajemniczym wsadem.

    Jakby co tablica Label jest jeszcze nie dokończona ze względu na zaistniały problem.

    Bascom Program do kitu JABEL J-89 złe wyświetlanie


    Kod:
    $regfile = "89C2051.dat"
    $crystal = 12000000

    Dim X As Byte , Y As Word , I As Byte , J As Byte , Cyfry(4) As Byte
    Dim Z As Word
    Y = 3333
    Cyfry(4) = Y / 1000
    Y = Y Mod 1000
    Cyfry(3) = Y / 100
    Y = Y Mod 100
    Cyfry(2) = Y / 10
    Cyfry(1) = Y Mod 10


    Do
    For I = 1 To 4
    X = Lookup(cyfry(i) , Label)

    P3.5 = 1
    P3.4 = 1
    P3.3 = 1
    P3.2 = 1


    For J = 1 To 8
    P3.1 = 0
    P3.0 = X.0
    Rotate X , Right
    P3.1 = 1
    Next J



    Select Case I
    Case 1 : P3.5 = 0
    Case 2 : P3.4 = 0
    Case 3 : P3.3 = 0
    Case 4 : P3.2 = 0
    End Select
    Waitms 5




    Next I
    Loop
    End
    Return


    Label:
    Data &B00000010 , &B11110101 , &B01011000 , &B01010100 , &B10001110
    Data &B10001110 , &B00001110 , &B10001111 , &B00000000 , &B00010000
  • REKLAMA
  • #2 19557285
    kamyczek
    Poziom 38  
    Układy nie różnią się niczym znaczącym dla programu prędzej gubisz jakiś tat zegara , lub masz uszkodzony jeden z rejestrów 74164 albo go źle ustawiasz ..
  • REKLAMA
  • #3 19557340
    Seps111
    Poziom 3  
    74164 jest na pewno sprawny ponieważ na oryginalnym układzie z Jabela wszystko działa ok, co do taktu rejestr ma 8 wyjść które są podłączone do 7 segmentów plus kropka, program posiada pętle for która przesuwa bity w rejestrze o dokładnie 8 pozycji ustawiając stany według danych z tabeli Label, może kolejne instrukcje wpływają na rejestr, dziwne jest to że na obrazku z programem jest napisane że został przetestowany i niby ma działać Bascom Program do kitu JABEL J-89 złe wyświetlanie
  • REKLAMA
  • #4 19557392
    kamyczek
    Poziom 38  
    Sprawdź czy przypadkiem nie ma błędu wynikającego z innego rozłożenia wyprowadzeń dla segmentów w wyświetlaczach . Chodzi o jedności i setki , bo liczba segmentów które świecą się zgadza , tyle że świeci inny segment . Zapal kolejno po jednym segmencie zmieniając tablice (label ) świeci ci tylko to co ma wartość zero zrób z 3 po kolei 0b11111110 , 0b11111101 i 0bserwuj czy świeci ten sam segment na wszystkich wyświetlaczach jak będzie przeskok oznacza że musisz mieć dwie tabele dla znaków osobno dla jedności i setek, osobno dla dziesiątek i tysięcy .
  • #5 19557411
    HD-VIDEO
    Poziom 43  
    Z tym wyświetlaczem połączenia segmentów są takie:

    Wyświetlacz 1-2-3-4

    Dla seg. a > a-a-a-a
    Dla seg. b > b-f-b-f
    Dla seg. c > c-d-c-d
    Dla seg. d > d-g-d-g
    Dla seg. e > e-c-e-c
    Dla seg. f > f-dp-f-dp
    Dla seg. g > g-b-g-b
    Dla seg. dp > dp-e-dp-e
  • REKLAMA
  • #6 19557413
    kamyczek
    Poziom 38  
    To odpowiedź już chyba masz w projekcie był inny wyświetlacz jak go zmienili poprawili program . Musisz zrobić osobne tablice dla setek i jedności i drugą dla dziesiątek i tysięcy i poprawić program tak żeby w zależności od słupka korzystał z odpowiedniej tabeli , albo poprawisz połączenia i przy tej okazji przestanie działać program z Jabela .
  • #7 19558435
    Seps111
    Poziom 3  
    HD-VIDEO napisał:
    Z tym wyświetlaczem połączenia segmentów są takie:

    Wyświetlacz 1-2-3-4

    Dla seg. a > a-a-a-a
    Dla seg. b > b-f-b-f
    Dla seg. c > c-d-c-d
    Dla seg. d > d-g-d-g
    Dla seg. e > e-c-e-c
    Dla seg. f > f-dp-f-dp
    Dla seg. g > g-b-g-b
    Dla seg. dp > dp-e-dp-e


    Sprawdziłem i w tym tkwi problem, jak poprawię program to go tu wrzucę, spróbuję zastosować przerwania żeby móc zastosować opóźnienie które nie będzie zakłócało multiplexowania wyświetlacza. Dzięki wielkie za pomoc i pozdrawiam.

    Dodano po 2 [godziny] 46 [minuty]:

    Wygląda na to że problem jest z głowy.
    Bascom Program do kitu JABEL J-89 złe wyświetlanie
    Jeszcze miałbym pytanko odnośnie timera, zauważyłem że w bascomie 8051 nie ma tej prostszej procedury co w avr z prescalowaniem, jak można to obejść żeby zrobić licznik kilkaset Hz który będzie zajmować się wyświetlaczem z prędkości oscylatora 12Mhz.

    Dodano po 3 [godziny] 20 [minuty]:

    Oto kod który napisałem, poczytałem trochę o timerach i mniejwięcej ogarnąłem temat, na pozór wszystko ok, wyświetlacz działa ale trochę ciemniej niż wcześniej (wiem że to wina zbyt szybkiej pracy przerwań), jednak licznik stoi w miejscu mimo że jest pętla DO która co 0.5 sekundy zwiększa wyświetlaną wartość o 1. Wie ktoś jak to naprawić?

    $regfile = "89C2051.dat"
    $crystal = 12000000

    Dim X As Byte , I As Byte , J As Byte , Cyfry(4) As Byte
    Dim Z As Word
    Dim A As Byte
    Dim Y As Integer

    Y = 3937
    Cyfry(4) = Y / 1000
    Y = Y Mod 1000
    Cyfry(3) = Y / 100
    Y = Y Mod 100
    Cyfry(2) = Y / 10
    Cyfry(1) = Y Mod 10

    Config Timer0 = Timer , Gate = Internal , Mode = 2
    Load Timer0 , 255
    On Timer0 Segment
    Enable Timer0
    Enable Interrupts
    Start Timer0

    Do

    Waitms 500
    Incr Y

    Loop

    Label1:
    Data &B00000010 , &B11110101 , &B01011000 , &B01010100 , &B10001110
    Data &B10001110 , &B00001110 , &B10001111 , &B00000000 , &B00010000

    Label2:
    Data &B00100000 , &B11111001 , &B01000101 , &B01010001 , &B11010000
    Data &B01010010 , &B01000010 , &B01111001 , &B01000000 , &B01010000


    Segment:

    Incr I

    If I = 5 Then
    I = 1
    End If


    If I = 1 Then
    X = Lookup(cyfry(i) , Label2)

    P3.5 = 1
    P3.4 = 1
    P3.3 = 1
    P3.2 = 1

    For J = 1 To 8
    P3.1 = 0
    P3.0 = X.0
    Rotate X , Right
    P3.1 = 1
    Next J
    End If

    If I = 2 Then
    X = Lookup(cyfry(i) , Label1)

    P3.5 = 1
    P3.4 = 1
    P3.3 = 1
    P3.2 = 1

    For J = 1 To 8
    P3.1 = 0
    P3.0 = X.0
    Rotate X , Right
    P3.1 = 1
    Next J
    End If

    If I = 3 Then
    X = Lookup(cyfry(i) , Label2)

    P3.5 = 1
    P3.4 = 1
    P3.3 = 1
    P3.2 = 1

    For J = 1 To 8
    P3.1 = 0
    P3.0 = X.0
    Rotate X , Right
    P3.1 = 1
    Next J
    End If

    If I = 4 Then
    X = Lookup(cyfry(i) , Label1)

    P3.5 = 1
    P3.4 = 1
    P3.3 = 1
    P3.2 = 1

    For J = 1 To 8
    P3.1 = 0
    P3.0 = X.0
    Rotate X , Right
    P3.1 = 1
    Next J
    End If


    P3.5 = 1
    P3.4 = 1
    P3.3 = 1
    P3.2 = 1

    For J = 1 To 8
    P3.1 = 0
    P3.0 = X.0
    Rotate X , Right
    P3.1 = 1
    Next J

    Select Case I
    Case 1 : P3.5 = 0
    Case 2 : P3.4 = 0
    Case 3 : P3.3 = 0
    Case 4 : P3.2 = 0
    End Select


    Return
REKLAMA