Witam
Staram się uruchomić sprzętowy moduł USI w Tiny45. Nigdy nie robiłem wcześniej nic z tymi małymi kostkami.
Robię sterowanie dużą lampą ledową (PWM). Sterowanie jest jednym przyciskiem - 6 trybów jasności (pojedyncze wciśnięcia ) oraz ON/OFF po (dłuższym wciśnięciu przycisku). Wszystko ładnie działa, ale chciałem dodać funkcjonalność polegająca na wyświetleniu numeru oznaczającego tryb pracy (jasność) na jednym wyświetlaczu 7seg. Tiny45 ma tylko 5 użytecznych pinów, więc trzeba to zrobić przez rejestr przesuwny. W sumie typowa sprawa. Jednak MCU posiada zamiast TWI I SPI coś takiego jak USI.
Czytam i czytam notę PDF i albo robię jakieś głupie błędy, albo zakręciłem się w jakimś błędnym rozumowaniu... W każdym razie coś nie mogę zmusić USI do pracy.
Do wyjścia "DO" podłączone jest wejście szeregowe 74595
Do SCK oczywiście wejście taktowania rejestru.
Wyjście "DI" chcę użyć jako sterowanie zatrzaskiem
Choć może da się nie używać latch'a w typowy sposób, display nie będzie multipleksowany (tylko jedna cyfra), więc może być "widoczne" wsuwanie bitów do rejestru.
USI próbuję obecnie zainicjować tak:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Do tego inicjuję timer0 w trybie CTC (z tego co jest w nocie rozumiem, że muszę zapewnić źródło taktowania i TIM0 może być jednym z nich)
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Wysłać bajt (to będzie tylko jeden bajt, wyświetlacz jest wsp. kat podpięty do GND) próbuję tak:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Wiem, że powinno się czekać na ukończenie wysyłania, ale na razie, do testów nie chciałem sobie dokładać tych "dziwnych" flag w rejestrze stanu
W każdym razie, niestety nic z tego nie działa.
Czuję, że problem jest braku zrozumienia mechanizmu taktowania modułu USI.
Może ktoś coś podpowie.