Nie jestem początkujący, nie buduję pierwszego poważniejszego (po "mryganiu" LEDem) projektu z procesorem, a jednak SPI mnie przerosło, przejrzenie mnóstwa zbliżonych tematów na Elektrodzie też nie pomogło, pomóżcie proszę.
Nie opisuję całego układu, bo to nie ma sensu, ograniczę się do fragmentu, który sprawia problemy.
Układ 74HC595N podpiety do ATMEGA8 w następujący sposób:
SER (noga 14) do portu PD.6
SCK (11) do PB.0
RCK (12) do PD.7
SCL (10) do Vcc
I tyle, żadnych rezystorów podciągających nie ma. Druga strona HC595 steruje katodami wyświetlacza 7segm CA. Kondensatorów filtrujących zasilanie nie brakuje.
Pierwsze pytanie mam n/t samej konfiguracji SPI:
Config Spi = Soft , Din = Pind.7 , Dout = Portd.6 , Ss = None , Clock = Portb.0
Czy to jest poprawne? O ile Clock i Dout są dość oczywiste, tak mam wątpliwości co do Din, może ktoś zorientowany się przyjrzeć i potwierdzić bądź powiedzieć, jak to powinno wyglądać?
I teraz sam listing programu, oczywiście jest to sama wizualizacja problemu:
I tyle. Inicjalizuję SPI po czym w pętli wpisuję sobie do SPI ręcznie podane wartości, poszczególne bity sterują wprost katodami wyswietlacza, Qa jest niepodłączone (z powodu, że nie po tej stronie obudowy się znajduje), Qb do Qh kolejno do poszczególnych segmentów (Qb=A itd.). Jedyne co działa, to A=&B11111111, albo A=&B00000000, jedno faktycznie gasi cały wyświetlacz, drugie zapala "8", ale to jest jedyne co sensownego udało mi się uzyskać. Ustawienie dowolnego tylko jednego bitu na zero powoduje zapalenie tylko segmentu A. Z kolei ustawienie dowolnego jednego bitu na 1 (reszta zerowa) powoduje, że i tak cały czas świeci się ósemka. Bardziej skomplikowane maski tworzą na wyświetlaczu różne ciekawe wzory, ale bez żadnej zauważalnej logiki.
Na chłopski rozum wygląda mi to tak, jakby całkowicie rozjeżdżała się komunikacja szeregowa i do rejestru wpisywały się bity na przypadkowych miejscach, brak mi jednak pomysłu, dlaczego. Pomożecie?
Nie opisuję całego układu, bo to nie ma sensu, ograniczę się do fragmentu, który sprawia problemy.
Układ 74HC595N podpiety do ATMEGA8 w następujący sposób:
SER (noga 14) do portu PD.6
SCK (11) do PB.0
RCK (12) do PD.7
SCL (10) do Vcc
I tyle, żadnych rezystorów podciągających nie ma. Druga strona HC595 steruje katodami wyświetlacza 7segm CA. Kondensatorów filtrujących zasilanie nie brakuje.
Pierwsze pytanie mam n/t samej konfiguracji SPI:
Config Spi = Soft , Din = Pind.7 , Dout = Portd.6 , Ss = None , Clock = Portb.0
Czy to jest poprawne? O ile Clock i Dout są dość oczywiste, tak mam wątpliwości co do Din, może ktoś zorientowany się przyjrzeć i potwierdzić bądź powiedzieć, jak to powinno wyglądać?
I teraz sam listing programu, oczywiście jest to sama wizualizacja problemu:
Kod: text
I tyle. Inicjalizuję SPI po czym w pętli wpisuję sobie do SPI ręcznie podane wartości, poszczególne bity sterują wprost katodami wyswietlacza, Qa jest niepodłączone (z powodu, że nie po tej stronie obudowy się znajduje), Qb do Qh kolejno do poszczególnych segmentów (Qb=A itd.). Jedyne co działa, to A=&B11111111, albo A=&B00000000, jedno faktycznie gasi cały wyświetlacz, drugie zapala "8", ale to jest jedyne co sensownego udało mi się uzyskać. Ustawienie dowolnego tylko jednego bitu na zero powoduje zapalenie tylko segmentu A. Z kolei ustawienie dowolnego jednego bitu na 1 (reszta zerowa) powoduje, że i tak cały czas świeci się ósemka. Bardziej skomplikowane maski tworzą na wyświetlaczu różne ciekawe wzory, ale bez żadnej zauważalnej logiki.
Na chłopski rozum wygląda mi to tak, jakby całkowicie rozjeżdżała się komunikacja szeregowa i do rejestru wpisywały się bity na przypadkowych miejscach, brak mi jednak pomysłu, dlaczego. Pomożecie?
