logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

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

JarekPrzybyl 21 Maj 2015 15:52 1548 6
  • #1 14710130
    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: text
    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?
  • Pomocny post
    #2 14710245
    Konto nie istnieje
    Konto nie istnieje  
  • #3 14710426
    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.
  • #4 14710479
    Konto nie istnieje
    Konto nie istnieje  
  • #5 14710619
    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ć"?
  • Pomocny post
    #6 14710674
    Konto nie istnieje
    Konto nie istnieje  
  • #7 14710736
    JarekPrzybyl
    Poziom 15  
    Wszystko jasne, dzięki jeszcze raz za szczegółowe tłumaczenie :)
REKLAMA