Witam.
Odnawiam temat gdyż po długiej przerwie znowu postanowiłem zmierzyć się z tym wyświetlaczem na Lc7582 . I udało się
Określiłem już pozycję każdego segmentu.
Program pisany w Bascomie wielokrotnie zmieniałem upraszczając go i zmniejszając program wynikowy. I tu spotkała mnie niemiła niespodzianka. Próbując usunąć wcześniej zadeklarowaną zmienną (a w sumie 3 takie zmienne) której już nigdzie nie używam program się sypie i na wyświetlaczu widać dziwne krzaki. Wielokrotnie przeglądałem program i nigdzie nie widzę błędu. Nazwy tych zmiennych mogę zmieniać bez "buntu" wyświetlacza lecz usunąć nie mogę.
Są to zmienne jednosci dziesiatki setki w kodzie poniżej:
$regfile = "attiny2313.dat" '
$crystal = 4000000
$lib "bcd.lbx"
$external Bin2bcd16
Declare Function Bin2bcd16(binval As Word) As Word
Config Pind.2 = Output : Pind.2 = 0
Config Pind.3 = Output : Pind.3 = 0
Config Pind.4 = Output : Pind.4 = 0
Config Pinb.7 = Output : Pind.7 = 0
Dat Alias Portd.2 'linia danych
Clk Alias Portd.3 'linia zegarowa
Ce Alias Portd.4 'zezwolenie transmisji
Dim Petla As Byte , Dane(10) As Byte
Dim Jenosci As Byte , Dziesiatki As Byte , Setki As Byte
Dim Tysiace As Byte
Dim Dziesietnev As Byte
Dim Pom As Word
Dim B As Word , Mah As Word , V As Byte
V = 183 : Mah = 1234
Do
Gosub Przelicz
Gosub Wyswietlanie
Waitms 10
Loop
End
Przelicz:
B = Mah
Pom = Bin2bcd16(b)
Dane(2) = Pom And &B0000000000001111
Shift Pom , Right , 4
Dane(4) = Pom And &B0000000000001111
Shift Pom , Right , 4
Dane(6) = Pom And &B0000000000001111
Shift Pom , Right , 4
Tysiace = Pom And &B0000000000001111
B = V
Pom = Bin2bcd16(b)
Dziesietnev = Pom And &B0000000000001111
Shift Pom , Right , 4
Dane(5) = Pom And &B0000000000001111
Shift Pom , Right , 4
Dane(7) = Pom And &B0000000000001111
Dane(2) = Lookup(dane(2) , Tabela) 'jednosci mah
Dane(4) = Lookup(dane(4) , Tabela) 'dziesiatki mah
Dane(6) = Lookup(dane(6) , Tabela) 'setki mah
Tysiace = Lookup(tysiace , Tabela) 'tysiace mah
'Dane(3) = Lookup(dane(3) , Tabela)
Dziesietnev = Lookup(dziesietnev , Tabela) 'dziesietne V
Dane(5) = Lookup(dane(5) , Tabela) 'Jednosci V
Dane(7) = Lookup(dane(7) , Tabela) 'dziesiatki V
If Dane(7) = 123 Then Dane(7) = 0 'jesli dziesiatki v = 0 to wygas segmenty dziesiatek
Dane(3) = Dziesietnev
Dane(8).0 = Tysiace.0
Dane(8).1 = Tysiace.1
Dane(8).6 = Tysiace.2
Dane(8).7 = Tysiace.3
Dane(9).0 = Tysiace.4
Dane(9).1 = Tysiace.5
Dane(9).2 = Tysiace.6
Dane(8).3 = 1
Dane(3).7 = 1 'kropka V
Dane(1).6 = 1 'znak V
Dane(1).7 = 1 'znak mAh
Return
Wyswietlanie:
Reset Clk : Reset Dat 'wyzeroj dla pewnosci
Set Ce 'rozpoczecie transmisji
For Petla = 6 To 117 'wyslij 112 bitow
Dat = Dane(1).petla
Set Clk 'ustaw taktowanie
Reset Clk 'wyzeruj taktowanie
If Petla = 61 Then Reset Ce : Set Ce 'jesli wyslalo polowe to wyzeruj i ustaw ce
Next
Reset Ce
Tabela:
Data 123 , 10 , 55 , 47 , 78 , 109 , 125 , 11 , 127 , 111
Program sypie się również gdy próbuję bezpośrednio do trzeciego bajtu zmiennej tablicowej Dane (do dane(3) ) wpisać wartość z tabeli. Pozostałe bajty tej zmiennej bez problemu akceptują te operację. Program pokazany wyżej działa dobrze ale jak wprowadzę wymienione wcześniej zmiany wszystko psują choć nie powinny. Nie wiem czy to wina kompilatora czy czego.
Wie ktoś o co chodzi?
Prosze o pomoc
