Witajcie po przerwie...
troszkę zarzuciłem w/w projekt, bo składałem, już docelowy wyświetlacz diodowy. Pomijając kilka dni lutowania itd... musiałem od nowa stworzyć program. Wróciłem do absolutnego początku - a wyżej zdobyta wiedza przyda się w tym projekcie

.
Wiec tak, zmontowałem wyświetlacz 16x8 (czyli dwie matryce 8x8). Aby to ogarnąć pomyślałem, że użyje 3x 74HC595.
Jeden do sterowania wierszy (w sumie 8 - będą multipleksowane). A pozostałe dwa do obsługi kolumn (16 - czyli równe dwa rejestry).
Wiersze podłączone są katodami ( załączamy "0" ) kolumny anodami (załączamy "1").
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Nie mogąc się doczekać efektów wrzuciłem najprostszy kod, bez multipleksowania - żeby sprawić czy działa, i tu kicha...
Na podstawie poradnika o rejestrach zmieniłem sobie fukcje wysyłająca dodając jeszcze kolejne polecenia by obsłużyły 3 rejestry. Pierwszym problemem było ogarniecie, z której strony zaczyna sie odczyt....
wpisałem SendSpiW(0xffffff) jesli sterujemy zapalaniem wierszy wpisując "0" to juz sie zdziwiłem gdyz przy takim poleceniu świeci cała matryca.... dlaczego? powinno byc zgaszone ?
0x FF FF FF > pierwsza dwójka miała w zamyśle sterować wierszami, kolejne dwie dwójki sterować kolumnami, a tu przy takim ustawieniu wszystko świeci...
Rejestry połączone są w sposób następujący
1. rejestr od wierszy
2. rejestr od kolumn 1 - 8
3. rejestr od kolumn 9 -16
kolejna sprawa to słabe świecenie matrycy... dodałem do kodu funkcje _delay_ms(20); i sie zdziwiłem... obraz miga a diod świeca się jaśniej (tak jak powinny) czy to nie powinno stac w miejscu nawet mimo delaya?
Spójrzcie na kod
Może ja czegoś nie rozumiem, a wszystko jest ok ?
Animacja z w/w kodu z wpisaną funkcją _delay_ms(20)

SendSpiW(0xffffff);

Teraz mysle jak rozdzielić część bajtów odpowiedzialną za zmianę stanu wierszy - by dac to do przerwania i multipleksować - mysle o maskowaniu hhmmm...