Witam wszystkich.
Postanowiłem założyć nowy wątek, bo temat przewija się przez forum od jakiegoś czasu, ale nie znalazłem konkretnej odpowiedzi.
Chodzi o kompleksowe sterowanie wyświetlaczy LED poprzez dwa rejestry przesuwne 74HC595, czyli katody i anody.
W oparciu o BB i poradniki Pana Mirka napisałem program z użyciem jednego rejestru (sterowanie katod przez SoftSpi), anody steruję z mikrokontrolera i wszystko działa prawidłowo. Problem pojawia się jak podłączę drugi rejestr kaskadowo, żeby sterować nim anody. Nie wiem jak to ogarnąć programowo, żeby wysłać dwa bajty za jednym razem poprzez SoftSpi. Mam podłączone dwa wyświetlacze 3-cyfrowe, docelowo chcę mierzyć napięcie na dwóch pinach mikrokontrolera i wyświetlać wartości na tych dwóch wyświetlaczach.
Jak wspominałem wcześniej, to wszystko działa jeśli anody steruję z mikrokontrolera.
Poniżej kawałek kodu z piku d_led.c.
Zakomentowałem wszystkie if-y żeby pokazać co działa. Jeśli do zmiennej „data” przypiszę na siłę np. 0xFFFF (starszy bajt anody, młodszy katody) to mam na wyjściu obu rejestrów stany wysokie, dla 0xFF00 na pinach rejestru od anod mam stany wysokie, na tym od katod - niskie, jakakolwiek inna kombinacja daje odpowiednie stany logiczne na poszczególnych pinach rejestrów. Mogę zapalać dowoli poszczególne cyfry i pojedyncze segmenty, więc hardware jest ok., komunikacja SoftSpi też działa.
Nie wiem co wpisać do kolejnych przerwań timera, żeby oprócz kodu cyfry, wysłać również odpowiednią komendę do rejestru sterującego anodami, czyli do starszego bajtu w słowie. Próbowałem różnych kombinacji i nic nie działa, prosiłbym o jakąś podpowiedź.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.