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

Komunikacja USI -> SPI [Attiny25 -> Atmega8535]

felo188 01 Kwi 2012 15:59 2016 3
REKLAMA
  • #1 10744677
    felo188
    Poziom 10  
    Witam.
    Próbuje skomunikować uC. Attiny25 ma pracować jako slave i wysyłać dane do mastera (Atmega8535).

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


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

    Do sygnalizacji służą mi dwie diody podłączone z 8535 tak, że anody do 5V, katody do pinów PD2, PD3.
    Myślę, że problemem może być niewysterowanie SS po stronie Attiny, tylko nie wiem jak to ugryźć. Oba procki ustawione są na 8MHz.
    Druga sprawa to ustawienie pinów w Attiny. W funkcji PortSettingsSPI() ustawiam PB0 (DI) jako wejście. Tylko, że docelowo ma to być wyjście, zgodnie z PortSettings() - SFT1. Jak pogodzić te dwa ustawienia?

    Edit:
    Komunikacja Attiny ustawiona jest na three-wire USI tak aby móc podłączyć pod SPI.

    Dodano po 4 [godziny] 42 [minuty]:

    Zauważyłem chyba błąd.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    USCK powinno być wejściem a nie wyjściem. Ale to i tak chyba nie rozwiąże do końca problemu. Sprawdzę to jutro.
  • REKLAMA
  • #2 10749877
    piochu91
    Poziom 9  
    O, widzę, że ktoś oprócz mnie również ma ten problem :D
    Przede wszystkim musisz uwzględnić ten pin SS, o którym wspomniałeś, bez tego ani rusz. Za każdym razem gdy coś wysyłasz po SPI musisz ustawiać SS na zero, a po wysłaniu SS na 1. Warto również zajrzeć do bibliotek, które udostępnia Atmel, jest to nota AVR319, do pobrania stąd Link ,przy nocie możesz od razu pobrać plik zip z plikami.
    Mi w końcu udało się skomunikować ATtiny24 z ATmega8.

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


    A tutaj są funkcje, które z dokumentacji AVR319 przerobiłem na ATtiny24:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Z ATmegą mi to działa, jednak moim docelowym przeznaczeniem była komunikacja z radiem RFM12B, a to mi już nie działa. Jednak mam nadzieję, że powyższy kod u Ciebie się sprawdzi.
  • REKLAMA
  • #3 10749977
    felo188
    Poziom 10  
    Dziękuje za odpowiedź ;) Niestety dziś już tego raczej nie sprawdzę. Dam znać w najbliższym czasie czy się udało :)
  • #4 10755268
    felo188
    Poziom 10  
    Witam.
    Gdzie zmieniasz swój stan SS (USI_SS_PIN)? W moim przypadku zmieniłem tak (slave):
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

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

    Zmienną SS definiuje jako
    #define SS PB3
    W masterze mam
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Reszta bez zmian.
    Czy pin SS po stronie slave musi być podłączony z jakimkolwiek pinem mastera?
    Podłączenie reszty sygnałów jest ok, sprawdziłem wyprowadzenia i się zgadza.
REKLAMA