Pisze właśnie program obsługujący matrycę LED 126 na 15 mam sobie prototypowy programik który wygląda tak :
Config Timer0 = Timer , Prescale = 8
On Timer0 Tim0
Load Timer0 , 200
Enable Timer0
Enable interrupts
Do
For Da = 0 To 240
Dat(da) = 128
Next Da
Loop
End
Tim0:
Nr2 = Nr2 + 1
Nr3 = Nr2 + 15
Nr4 = Nr3 + 15
Nr5 = Nr4 + 15
Nr6 = Nr5 + 15
Nr7 = Nr6 + 15
Nr8 = Nr7 + 15
Nr9 = Nr8 + 15
Nr10 = Nr9 + 15
Nr11 = Nr10 + 15
Nr12 = Nr11 + 15
Nr13 = Nr12 + 15
Nr14 = Nr13 + 15
Nr15 = Nr14 + 15
Nr16 = Nr15 + 15
Nr17 = Nr16 + 15
Set Portd.6
Portb = 0
Porta = Dat(nr2)
Portc = Nr
Portb = 1
Porta = Dat(nr3)
Portc = Nr
Portb = 2
Porta = Dat(nr4)
Portc = Nr
Portb = 3
Porta = Dat(nr5)
Portc = Nr
Portb = 4
Porta = Dat(nr6)
Portc = Nr
Portb = 5
Porta = Dat(nr7)
Portc = Nr
Portb = 6
Porta = Dat(nr8)
Portc = Nr
Portb = 7
Porta = Dat(nr9)
Portc = Nr
Portb = 8
Porta = Dat(nr10)
Portc = Nr
Portb = 9
Porta = Dat(nr11)
Portc = Nr
Portb = 10
Porta = Dat(nr12)
Portc = Nr
Portb = 11
Porta = Dat(nr13)
Portc = Nr
Portb = 12
Porta = Dat(nr14)
Portc = Nr
Portb = 13
Porta = Dat(nr15)
Portc = Nr
Portb = 14
Porta = Dat(nr16)
Portc = Nr
Portb = 15
Porta = Dat(nr17)
Portc = Nr
Reset Portd.6
Nr = Nr - 1
If Nr = 255 Then
Nr = 14
End If
If Nr2 = 15 Then
Nr2 = 0
End If
Return
W timerze 0 chodzi odświeżanie wyświetlacza cała jego zawartość mieści się w tablicy w pamięci ram (zmienna Dat) Program ten nie ma wyświetlać niczego konkretnego tylko pionowe linie to co jest w pętli głównej wpisuje do tablicy ram na wszystkie jej pozycje taką samą daną i tu właśnie dzieją się cuda kiedy w linijce : Dat(da) = 128 jest 128 lub więcej wszystko chodzi na matrycy pojawiają się linie odpowiednio do wpisanej danej kiedy zmienię na 127 lub mniej przerwanie od timera nie jest przyjmowane 8O tak jakby zostało wyłączone gdyby nie to że na czas pisania programu zaniżyłem napięcie zasilania ledów pewnie bym cos usmażył bo matryca wywala jedną poziomą linię (ciągle świecącą) Procesor to Atmega32 wszystkie zmienne poprawnie zadeklarowane bascom w wersji 1.11.7.3 co ciekawe program zarówno w symulacji jak i w rzeczywistym procku zachowuje się jednakowo to jest przy wpisywaniu do tablicy wartości mniejszej od 128 blokuje się przerwanie od timera ... Ja się pytam co ma ze sobą wspólnego wartość wpisywana w tabele w ramie z układem przerwań
Architektura tablicy jest mniej więcej taka: do portuC dołączony 74HC154 do niego 15 tranzystorów mocy sterujących linie do portu B drugi 74HC154 do niego clocki 16 zatrzasków 74HC574 do portu A równolegle połączone linie danych zatrzasków sterowanie w takim układzie jest dość proste i spisuje się świetnie jest na tyle szybkie że da rade wyświetlać płynną grafikę ale nie mogę napisać przyzwoitego softu bo dzieją się wspomniane dziwne zjawiska ... współczynnik magii siedzi w tej wersji bascoma czy ja czegoś nie kumam ??
Config Timer0 = Timer , Prescale = 8
On Timer0 Tim0
Load Timer0 , 200
Enable Timer0
Enable interrupts
Do
For Da = 0 To 240
Dat(da) = 128
Next Da
Loop
End
Tim0:
Nr2 = Nr2 + 1
Nr3 = Nr2 + 15
Nr4 = Nr3 + 15
Nr5 = Nr4 + 15
Nr6 = Nr5 + 15
Nr7 = Nr6 + 15
Nr8 = Nr7 + 15
Nr9 = Nr8 + 15
Nr10 = Nr9 + 15
Nr11 = Nr10 + 15
Nr12 = Nr11 + 15
Nr13 = Nr12 + 15
Nr14 = Nr13 + 15
Nr15 = Nr14 + 15
Nr16 = Nr15 + 15
Nr17 = Nr16 + 15
Set Portd.6
Portb = 0
Porta = Dat(nr2)
Portc = Nr
Portb = 1
Porta = Dat(nr3)
Portc = Nr
Portb = 2
Porta = Dat(nr4)
Portc = Nr
Portb = 3
Porta = Dat(nr5)
Portc = Nr
Portb = 4
Porta = Dat(nr6)
Portc = Nr
Portb = 5
Porta = Dat(nr7)
Portc = Nr
Portb = 6
Porta = Dat(nr8)
Portc = Nr
Portb = 7
Porta = Dat(nr9)
Portc = Nr
Portb = 8
Porta = Dat(nr10)
Portc = Nr
Portb = 9
Porta = Dat(nr11)
Portc = Nr
Portb = 10
Porta = Dat(nr12)
Portc = Nr
Portb = 11
Porta = Dat(nr13)
Portc = Nr
Portb = 12
Porta = Dat(nr14)
Portc = Nr
Portb = 13
Porta = Dat(nr15)
Portc = Nr
Portb = 14
Porta = Dat(nr16)
Portc = Nr
Portb = 15
Porta = Dat(nr17)
Portc = Nr
Reset Portd.6
Nr = Nr - 1
If Nr = 255 Then
Nr = 14
End If
If Nr2 = 15 Then
Nr2 = 0
End If
Return
W timerze 0 chodzi odświeżanie wyświetlacza cała jego zawartość mieści się w tablicy w pamięci ram (zmienna Dat) Program ten nie ma wyświetlać niczego konkretnego tylko pionowe linie to co jest w pętli głównej wpisuje do tablicy ram na wszystkie jej pozycje taką samą daną i tu właśnie dzieją się cuda kiedy w linijce : Dat(da) = 128 jest 128 lub więcej wszystko chodzi na matrycy pojawiają się linie odpowiednio do wpisanej danej kiedy zmienię na 127 lub mniej przerwanie od timera nie jest przyjmowane 8O tak jakby zostało wyłączone gdyby nie to że na czas pisania programu zaniżyłem napięcie zasilania ledów pewnie bym cos usmażył bo matryca wywala jedną poziomą linię (ciągle świecącą) Procesor to Atmega32 wszystkie zmienne poprawnie zadeklarowane bascom w wersji 1.11.7.3 co ciekawe program zarówno w symulacji jak i w rzeczywistym procku zachowuje się jednakowo to jest przy wpisywaniu do tablicy wartości mniejszej od 128 blokuje się przerwanie od timera ... Ja się pytam co ma ze sobą wspólnego wartość wpisywana w tabele w ramie z układem przerwań