Witam!
Nie mogę pozbyć się problemu żarzenia diodek w matrycy led.
Przesówam na matrycy jakiś tekst w lewo, na kolumnie poprzedzającą aktywną kloumne, zaczynają się żarzyć te diody które świecą na aktywnej kolumnie.
Co daje taki bardzo głupi efekt smużenia do przodu:cry:
Kod programu opieram w większości o kod z książki Pana Marcina Wiązania.
Zakładma że jest to skutek błednego oprogramowania, gdyż pomijając rejestr 74HC595, podłączjąc kolumny matrycy poprzez ULN2803 do ATTINY taki efekt nie występuje.
Opisze może schemat:
Matryca 8x8. Wiersze matrycy mam podłaczone przez oporniki do UDN2981 i do mikrokontrolera, kolumny przez ULN2803, rejestr 74hc595 i do mikrokontrolera.
oto kod programu:
W przypadku pominięcia rejestru kod w zasadzie jest taki sam, tylko w obsudze przerwania najpierw wygaszam wszystkie kolumny, potem zapalam tą, która ma się świecić. I działa to dobrze.
Czy jest ktoś w stanie mi pomóc??

Nie mogę pozbyć się problemu żarzenia diodek w matrycy led.
Przesówam na matrycy jakiś tekst w lewo, na kolumnie poprzedzającą aktywną kloumne, zaczynają się żarzyć te diody które świecą na aktywnej kolumnie.
Co daje taki bardzo głupi efekt smużenia do przodu:cry:
Kod programu opieram w większości o kod z książki Pana Marcina Wiązania.
Zakładma że jest to skutek błednego oprogramowania, gdyż pomijając rejestr 74HC595, podłączjąc kolumny matrycy poprzez ULN2803 do ATTINY taki efekt nie występuje.
Opisze może schemat:
Matryca 8x8. Wiersze matrycy mam podłaczone przez oporniki do UDN2981 i do mikrokontrolera, kolumny przez ULN2803, rejestr 74hc595 i do mikrokontrolera.
oto kod programu:
$regfile = "ATtiny2313.dat"
$crystal = 8000000
Config Pind.0 = Output
Config Pind.1 = Output
Config Pind.2 = Output
Config Pind.3 = Output
Config Pind.4 = Output
Config Pind.5 = Output
Config Pind.6 = Output
Config Pinb.0 = Output
Config Pinb.1 = Output
Config Pinb.2 = Output
Config Pinb.3 = Output
Config Pinb.4 = Output
Config Pinb.5 = Output
Config Pinb.6 = Output
Config Pinb.7 = Output
Declare Sub Tablica_sw
Declare Sub Pobr_kol_z_tab
Declare Sub Przepisz I
Config Timer0 = Timer , Prescale = 256
Declare Sub Pob_w_zn A
On Timer0 Mult_wysw_matr
Dim Znak As String * 1
Dim Nr_kol As Byte
Dim Kod_zn As Byte T
Dim Kol_zn As Byte
Dim I As Byte
Dim B As Byte
Dim J As Byte
Dim Kol(8) As Byte
Dim Tekst As String * 40
Dim D1 As Byte
Ds Alias Portd.0
Oe Alias Portd.1
St_cp Alias Portd.2
Sh_cp Alias Portd.3
Mr Alias Portd.4
Ds = 0
Oe = 0
St_cp = 0
Sh_cp = 0
Mr = 0
MR=1
Enable Interrupts
Enable Timer0
Load Timer0 , 47
Do
Tekst = "Ble ble ble ble ble "
D1 = Len(tekst)
For J = 1 To D1
Znak = Mid(tekst , J , 1)
Kod_zn = Asc(znak)
Tablica_sw
Next J
Loop
End
Sub Tablica_sw
For I = 1 To 5
Call Pobr_kol_z_tab
Waitms 700
Call Przepisz
Next I
Kol(8) = 255
Waitms 700
Call Przepisz
End Sub
Sub Pobr_kol_z_tab
Kod_zn = Asc(znak)
Select Case I
Case 1:
Kol(8) = Lookup(kod_zn , Kol1)
Case 2:
Kol(8) = Lookup(kod_zn , Kol2)
Case 3:
Kol(8) = Lookup(kod_zn , Kol3)
Case 4 :
Kol(8) = Lookup(kod_zn , Kol4)
Case 5:
Kol(8) = Lookup(kod_zn , Kol5)
End Select
End Sub
Sub Przepisz
Kol(1) = Kol(2)
Kol(2) = Kol(3)
Kol(3) = Kol(4)
Kol(4) = Kol(5)
Kol(5) = Kol(6)
Kol(6) = Kol(7)
Kol(7) = Kol(8)
End Sub
Sub Pob_w_zn
Select Case Nr_kol
Case 0:
Kol_zn = Kol(nr_kol + 1)
Case 1:
Kol_zn = Kol(nr_kol + 1)
Case 2:
Kol_zn = Kol(nr_kol + 1)
Case 3:
Kol_zn = Kol(nr_kol + 1)
Case 4:
Kol_zn = Kol(nr_kol + 1)
Case 5:
Kol_zn = Kol(nr_kol + 1)
Case 6:
Kol_zn = Kol(nr_kol + 1)
Case 7:
Kol_zn = Kol(nr_kol + 1)
End Select
Portb = Portb And &B10000000
Kol_zn = Kol_zn And &B01111111
Kol_zn = Not Kol_zn
Portb = Portb Or Kol_zn
End Sub
Mult_wysw_matr:
Load Timer0 , 47
Call Pob_w_zn
Select Case Nr_kol
Case 0:
Ds = 1
Gosub Reg_shift
Case 1:
Ds = 0
Gosub Reg_shift
Case 2:
Ds = 0
Gosub Reg_shift
Case 3:
Ds = 0
Gosub Reg_shift
Case 4:
Ds = 0
Gosub Reg_shift
Case 5:
Ds = 0
Gosub Reg_shift
Case 6:
Ds = 0
Gosub Reg_shift
Case 7:
Ds = 0
Gosub Reg_shift
End Select
Incr Nr_kol
'
If Nr_kol = 8 Then
Nr_kol = 0
End If
Return
Reg_shift:
Sh_cp = 1
Sh_cp = 0
St_cp = 1
St_cp = 0
Return
Kol1:
Dalej są kody kolumn....
W przypadku pominięcia rejestru kod w zasadzie jest taki sam, tylko w obsudze przerwania najpierw wygaszam wszystkie kolumny, potem zapalam tą, która ma się świecić. I działa to dobrze.
Mult_wysw_matr: 'podprogram przerwania od
'przepełnienia Timer0
Load Timer0 , 94 'załadowanie do licznika
'wartości początkowej
Reset C1 'wygaszenie kolumny 1
Reset C2 'wygaszenie kolumny 2
Reset C3 'wygaszenie kolumny 3
Reset C4 'wygaszenie kolumny 4
Reset C5 'wygaszenie kolumny 5
Reset C6
Reset C7
Reset C8
Call Pob_w_zn 'wywołanie procedury
'pobierającej kod wyświetlanej
'kolumny z tablic
Select Case Nr_kol 'w zależności od wartości Nr_kol
'wykonaj:
Case 0: 'gdy Nr_kol = 0
Set C1 'włączenie kolumny 1
Case 1: 'gdy Nr_kol = 1
Set C2 'włączenie kolumny 2
Case 2: 'gdy Nr_kol = 2
Set C3 'włączenie kolumny 3
Case 3: 'gdy Nr_kol = 3
Set C4 'włączenie kolumny 4
Case 4: 'gdy Nr_kol = 4
Set C5 'włączenie kolumny 5
Case 5:
Set C6
Case 6:
Set C7
Case 7:
Set C8
End Select 'koniec instrukcji wyboru
Incr Nr_kol 'zwiększenie o jeden wartości
'Nr_kol
If Nr_kol = 7 Then 'jeśli wartość Nr_kol osiągnie
7 to
Nr_kol = 0 'zerowanie wartości Nr_kol
End If
Return 'powrót z podprogramu przerwaniaCzy jest ktoś w stanie mi pomóc??
