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

SPI na Atmedze 88PA - nie wysyłają się dane, brak CLK MISO i MOSI

Szustarol 27 Cze 2019 10:51 585 6
REKLAMA
  • #1 18032356
    Szustarol
    Poziom 8  
    Witam
    Napisałem prosty program do transmisji danych na SPI.
    Niestety, nic nie działa jak powinno. Sprawdzając na oscyloskopie, nie wygląda
    na to, żeby szły jakiekolwiek dane. Generalnie w czasie działania procka
    cały czas wisi on na linijce:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Wrzucam cały kod bo pewnie będzie potrzebny:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Generalnie polega to na tym, że ma być podłączonych 6 czujników MAX, aktualnie testuję tylko na jednym. PORTC cały jest używany na wyprowadzenia CS MAX'ów.
    Cały program wiesza się, co ciekawe, dopiero po drugim wywołaniu spiReadRegister8(MAX31856_CONFIG_REG);
    Jeśli wpiszę "return;" zaraz po pierwszym wywołaniu, to program działa dobrze.

    Pytanie do znawców tematu - czy w tym kodzie jest jakiś błąd, czy może błędu należy szukać w połączeniach na płytce tudzież w wadliwym RTC MAX?

    EDIT
    Dodam, że na oscyloskopie nie wygląda to tak, jakby "szły" jakieś dane
  • REKLAMA
  • #2 18032732
    excray
    Poziom 41  
    Musisz pin SS ustawić jako wyjście
  • REKLAMA
  • #3 18033252
    slx
    Poziom 19  
    Musisz ustawić SCK i MOSI jako wyjście. Interfejs SPI w trybie master nie zmienia konfiguracji tych pinów.


    Cytat:
    SPCR = (1 << SPE) | (1 << MSTR) | (1<<CPHA);

    PORTB |= (1 << 3) | (1 << 5); // tu chyba miało być DDRB

    DDRD |= (1 << 4);
    PORTD|= (1 << 4);
  • REKLAMA
  • #4 18040198
    Szustarol
    Poziom 8  
    Zastosowałem się do porad, kod teraz wygląda tak:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Fuse SPIEN jest ustawiony.
    I niestety wciąż ten sam problem, zacina się na linii, przy której jest komentarz. Co dziwne nie wygląda na to, żeby na SCK pojawiały się jakiekolwiek zmiany napięcia tzn. wydaje mi się, że jest to stałe 5V, ale mam dość wolny oscyloskop i mogłem coś przegapić.
  • REKLAMA
  • #5 18040346
    simw
    Poziom 27  
    Szustarol napisał:
    I niestety wciąż ten sam problem, zacina się na linii, przy której jest komentarz. Co dziwne nie wygląda na to, żeby na SCK pojawiały się jakiekolwiek zmiany napięcia tzn. wydaje mi się, że jest to stałe 5V, ale mam dość wolny oscyloskop i mogłem coś przegapić.

    Nie jestem biegły w tej dziedzinie, ale coś mi się wydaje, że tylko próbujesz coś odebrać, bez nadawania.
    Jak dobrze kojarzę, żeby w ogóle coś odebrać w SPI to master musi najpierw nadać, w ten sposób podajesz zegar i inicjujesz transmisję również tę odbiorczą od slave'a.
    Twoja funkcja spiSetAutoConvert(SENSOR6) w pierwszej fazie tylko czyta.
    Może na tym etapie lepiej jednak wrócić do teorii i zaglądnąć do poradników, choćby tu:
    http://mirekk36.blogspot.com/2019/01/magistrala-spi-co-ma-wspolnego-z.html
  • #6 18040361
    Szustarol
    Poziom 8  
    Nie tylko czyta, bo wysyła adres rejestru który chcę odczytać.
    Problem rozwiązałem, bit SS musiał być ustawiony, ale PRZED włączeniem bitu SPE.

    Teraz walczę z kolejnym błędem- mianowicie odbiór samego 0xff, ale postaram się poradzić temu w jakiś sposób.
  • #7 18041057
    dasej
    Poziom 32  
    Witam.

    Wysyłanie jednej danej pod określony adres w układzie.

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


    Jak układ ma dostać sygnały by zadziałała poprawnie transmisja.

    SPI na Atmedze 88PA - nie wysyłają się dane, brak CLK MISO i MOSI

    Podłączenie zgodnie ze schematem.

    SPI na Atmedze 88PA - nie wysyłają się dane, brak CLK MISO i MOSI
REKLAMA