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

ATMega168/C - Niemożność wysłania informacji wielokrotnie przez SPI

ADI-mistrzu 05 Kwi 2013 09:25 732 0
REKLAMA
  • #1 12157548
    ADI-mistrzu
    Poziom 30  
    Witam,

    Mam dość nietypowy problem polegającym najprawdopodobniej na nie wpisywaniu się flagi SPIF.

    Przykładowy program wygląda tak:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Do portu PB1 jest podpięta dioda, po każdym przejściu następuje zmiana jej stanu logicznego (wiem że mogłem zrobić to na operacji ^= ale już się nie bawiłem).

    Efekt tego jest taki że dioda się zapala i tak już zostaje co oznacza że wysłanie informacji przez SPI następuje tylko raz.
    Najprawdopodobniej z jakiś przyczyn flaga SPIF nie może przejść w stan wysoki.

    Udało mi się to wyeliminować tylko w jeden sposób, za każdym razem przed wysłaniem informacji wyłączam i ponownie włączam SPI:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Miał ktoś podobny przypadek?

    Programuje w Eclipse wykorzystując WinAVR. Próbowałem zrobić symulację na AVR Studio 4 i co ciekawe efekt jest taki sam, wysłanie dokonuje się jednokrotnie, potem procesor utyka w pętli while oczekującej na SPIF.

    Pozdrawiam

    Dodano po 46 [minuty]:

    Już sam znalazłem problem (a od wczoraj na tym siedzę).

    Po przewertowaniu dokumentacji znalazłem taki tekst:
    If SS is an input and is driven low when the SPI is
    in Master mode, this will also set the SPIF Flag.


    Więc wystarczy PB2 ustawić jako wyjście, wtedy wszystko od razu rusza z kopyta.

    Aż powinienem sobie kliknąć "pomógł" :D
  • REKLAMA
REKLAMA