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

[Rozwiązano] Atmega8 + 74hc595 sprzętowe SPI "wiesza się"

Scyś 27 Kwi 2020 20:14 954 6
REKLAMA
  • #1 18652031
    Scyś
    Poziom 3  
    Witam.
    Chciałem uruchomić rejestr przesuwowy 74hc595 na sprzętowym SPI, ale coś nie działa.
    Mianowicie uC się wiesza, przesyłanie raz działa raz nie, podłączyłem diode do jednego wyjścia tak żeby jej stan zmieniał się co 0,5s i efekt jest taki, że mignie raz i się świeci, albo jest zgaszona. Podłączenie jest raczej dobre, podłączony programator USBAsp raczej nie przeszkadza bo efekt z podłączonym i odłączonym jest taki sam.
    Co może być przyczyną wieszania się uC, czy to po prostu jest jakiś błąd w kodzie?
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • Pomocny post
    #2 18652101
    bart-projects
    Poziom 29  
    Pin SS dla SPI (tutaj akurat PB2) MUSI być skonfigurowany jako wyjście nawet jak go nie używasz. Jeśli jest wejściem i z jakiegoś powodu ustali się na nim stan niski to SPI przechodzi w tryb Slave by uniknąć kolizji.
  • REKLAMA
  • #3 18652224
    Scyś
    Poziom 3  
    Rzeczywiście wystarczyło tylko ustawić SS na wyjście i wszystko śmiga, aż miło.
    Tyle się oszukałem, przeglądałem inne przykłady z tym rejestrem ale na żadnym nie było ustawiane SS.
    Dzięki wielki.
  • REKLAMA
  • Pomocny post
    #4 18654882
    dondu
    Moderator na urlopie...
    bart-projects napisał:
    Pin SS dla SPI (tutaj akurat PB2) MUSI być skonfigurowany jako wyjście nawet jak go nie używasz.

    Nie musi być wyjściem. Może być wyjściem lub pozostawiony jako wejście, ale:
    - z włączonym wewnętrznym rezystorem pull-up (opcja preferowana),
    - lub zewnętrznym rezystorem pull-up,
    - lub podłączony bezpośrednio do Vcc (ale tak lepiej nie robić).

    Cytat:
    Master Mode

    When the SPI is configured as a Master (MSTR in SPCR is set), the user can determine the direction of
    the SS pin.

    If SS is configured as an output, the pin is a general output pin which does not affect the SPI system.
    Typically, the pin will be driving the SS pin of the SPI Slave

    If SS is configured as an input, it must be held high to ensure Master SPI operation.


    Ważna natomiast jest kolejność:
    - najpierw zadbaj o pin SS,
    - dopiero później włączaj tryb Master.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Nie definiuj F_CPU w kodzie programu z tych powodów:
    http://mikrokontrolery.blogspot.com/2011/03/fcpu-gcc-gdzie-definiowac.html
  • Pomocny post
    #5 18654985
    bart-projects
    Poziom 29  
    Może faktycznie z przyzwyczajenia tego jak go ustawiam napisałem "MUSI", ale nie widzę tu w ogóle sensu w sformułowaniu @dodndu, że pozostawienie go jako wejście z wewnętrznym podciąganiem to wersja preferowana. Jeśli nie planujesz tego że raz będziesz Masterem a raz Slave i sam będziesz musiał pilnować na rejestrach czy nadal jesteś Master przed wysłaniem czegokolwiek to masz nieużyteczny do niczego pin.
    Konfigurując go jako wyjście możesz go sobie użyć do sterowania czymkolwiek bez wpływu na magistralę SPI. Widze tu korzyść, ale nie przesądzam, jak @dondu, co jest preferowanym wyjściem...
  • REKLAMA
  • Pomocny post
    #6 18654997
    dondu
    Moderator na urlopie...
    Źle zrozumiałeś.
    Nie napisałem, że ma ustawiać jako wejście tylko zaprzeczyłem, że musi być wyjściem (jak napisałeś).
    Nie napisałem także, że preferowane jest wejście z wewnętrznym rezystorem pull-up zamiast wyjścia,
    tylko że jeśli jest wejściem, to preferowane jest użycie wewnętrznego rezystorta pull-up.

    Projektant ma więc do wyboru co najmniej 4 możliwości.
  • #7 18841410
    Scyś
    Poziom 3  
    Rozwiązany!
REKLAMA