Witajcie,
w końcu wymęczyłem temat Multi LED, który robiłem na stykówce CPU ATtiny 2313, zegar 8MHz, układ zasiliłem z zasilacza po starym PC (20A), ze złomu elektronicznego jaki posiadam wykorzystałem 4 segmenty LCD (wyświetlacz nie był sprawny brakowało tranzystorów sterujących wspólnymi katodami). Ponieważ jestem początkującym trochę wysiłku włożyłem w poprawne uruchomienie i zrozumienie o co kaman z multipleksowaniem LED.
Jakie problemy zaliczyłem ↓
Pierwsze wgrywanie kod do CPU z Eclipse było porażką, fabrycznie ATtiny 2313 ma oscylator wewnętrzny ustawiony na 8MHz + CKDIV8 ON, trochę musiałem "pokarasiować " nim się odnalazłem (analiza kilku przewodników + poszukiwania rozwiązania na forum). Pierwsze kody hex (migająca dioda + kawalisz) wgrałem poprzez mkAVR Calculator wcześniej kompilację kodu zrobiłem w Eclipse, niestety ze względu na zegar CPU 1MHz nie mogłem wprowadzić bezpośrednio kod z Eclipse. Po dalszej analizie poradników ustawiłem w Eclipse spowolnienie do 1MHz (Properties->AVRDude->zakładka Other w polu Other option wpisałem -B 8 Applay) co pozwoliło wgrywać kod bezpośrednio z Eclipse do CPU. Następnie więcej "kardasiowałem" i w końcu skutecznie zmieniłem fuse bit (CKDIV8 na OFF) tak by zegar CPU na stykówce miał 8MHz.
Już mogłem ładować kod z Eclipse do CPU no i załadowałem mojego pieszczocha kod Multi LED (tak mi się wydawało wówczas) a tu widzę ciemność znowu kanał, odłączyłem wyświetlacz od CPU i przewodami wysterowałem anody a następnie katody no i dalej ciemność, po trwającej chwilę szamotaninie mentalnej zajarzyłem katody sterowane są tranzystorami n-p-n sygnał ON=1, a w kodzie programu mam 0 i tutaj (oczywiście że nie tylko tutaj ale w tym momencie szczególnie) cenne były uwagi MK z BB, zmieniłem kod programu tak by katody sterować sygnałem 1.
Wreszcie coś zobaczyłem na wyświetlaczach ale cyfry były zniekształcone i w niewłaściwej kolejności, nieprawidłowo podłączyłem przewody sterujące segmentami ZAMIENIŁEM "f<->g" oraz odwróciłem kolejność wyświetlaczy w ten sposób, że po lewej miałem jednostki a po prawej tysiące oczywiście lutownica w łapkę i zrobione chociaż mogłem to skorygować programowo ale na to wpadłem po prze-lutowaniu przewodów.
No i wreszcie sukces, działa jak należy jednak nie do końca jarzyłem w jaki dokładnie sposób działa część kodu w pliku głównym main.c w pętli while gdzie są określane poszczególne cyfry sterujące wyświetlaczem. Przyznaję, że trochę się gimnastykowałem nim w pełni opanowałem tę część kodu.
Dla wszystkich poczytujących i zainteresowanych tą tematyką dołączam kod programu na ATtiny 2313, dodałem klawisz który gasi wyświetlacz na chwilę szczegóły znajdziecie w kodzie (dołączyłem plik) uwaga wyświetlacz wspólna anoda ON=0 oraz katody załączane ON=1, dla własnej wygody i na przyszłość gdybym musiał do tego wracać rozpisałem jak działa część kodu w pętli while opis w pliku głównym main.c remerksy.
Gdyby coś co piszę było nie tak proszę mnie skorygować może mi się tylko wydaje, że odrobiłem lekcje, dołączam kod i link z migawką działającego układu.
Pozdrawiam fobos
https://drive.google.com/file/d/0B8tfcLOmSofySlV0Q2xyUWRKVGM/view?usp=sharing