Elektroda.pl
Elektroda.pl
X
CControls
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[BASCOM] komunikacja SPI z 74HC595 - pomóżcie ogarnąć

JarekPrzybyl 21 Maj 2015 15:52 1011 6
  • #1 21 Maj 2015 15:52
    JarekPrzybyl
    Poziom 15  

    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:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    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?

    0 6
  • CControls
  • Pomocny post
    #2 21 Maj 2015 16:46
    373522
    Użytkownik usunął konto  
  • CControls
  • #3 21 Maj 2015 18:13
    JarekPrzybyl
    Poziom 15  

    Ok, zaraz to sprawdzę.
    Jedno pytanie: jaki sens ma machanie przed wejściem w pętlę portem MR u Ciebie (czyli SCL wg oznaczeń rejestru 595)? W przeglądanych przeze mnie schematach to wyprowadzenie ludzie zwykle mieli podłączone do VCC.

    A niezależnie od tego, czy twoje rozwiązanie zadziała, czy nie, ciekaw jestem, czemu nie chce działać to tak, jak ja próbuję. Z tego, co czytam, to ludziom to po prostu działa, problemy pojawiają się zwykle na innych etapach, czemu nie chce działać u mnie?

    [EDIT] sprawdziłem, twoja metoda działa. W zasadzie mi wystarczy, dzięki, niemniej ciekaw jestem wszelkich teorii tłumaczących, dlaczego wersja z wykorzystaniem SPI nie działała.

    0
  • #4 21 Maj 2015 18:28
    373522
    Użytkownik usunął konto  
  • #5 21 Maj 2015 19:13
    JarekPrzybyl
    Poziom 15  

    Pin wejściowy Din konfigurowany jako output - tak, też mnie to zastanawiało, niemniej tak było we wszystkich znalezionych przeze mnie przykładach, uznałem więc, że tak ma być, a SPI INIT widać robi z tym porządek. Podobnie zresztą z SS - znalezione przeze mnie przykłady w przypadku, gdy SPI sterowało jednym układem pomijały go, wydało się mi to logiczne: jeśli mamy jeden układ, to na jakie licho go "wybierać"?

    0
  • Pomocny post
    #6 21 Maj 2015 19:30
    373522
    Użytkownik usunął konto