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

[avr][c] 74hc165 i 74hc595 - wysylanie i odbieranie danych sprzetowym spi

esane 12 Cze 2012 16:43 3725 5
REKLAMA
  • #1 10993950
    esane
    Poziom 9  
    Witam,

    Jak (najlepiej na raz) wysylac i odbierac dane z wyzej wspomnianych rejestrow przez sprzetowe spi, przy czym nie jest ich po rowno, wyjsciowych 595 mam 8 sztuk, a wejsciowych 165 sztuk 13. Linia zegarowa wspolna. Zapis dziala ladnie, lecz przy odczycie dostaje same 1 (tzn. kazdy odczytany bajt to 0b11111111). Staralem sie odczytac narazie tylko pierwsze 8 rejestrow, zeby zrobic to razem z wysylaniem. Ponizej kod - jak sie do tego zabieralem:

    Inicjalizacja spi oraz funkcja przesylajaca:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    A w programie glownym wywolane jest to tak:

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


    I o ile dane_do_wyslania wysylaja sie poprawnie, to w tablicy spi_read wszystkie bity to 1. Co robie nie tak? I jak odczytac wiecej bajtow niz wysylam?

    Z gory dziekuje za wszelka pomoc
  • REKLAMA
  • REKLAMA
  • #3 10994391
    esane
    Poziom 9  
    Oto schemat tej czesci urzadzenia:

    [avr][c] 74hc165 i 74hc595 - wysylanie i odbieranie danych sprzetowym spi

    na wszystkich wejsciach sa enkodery z rezystorkami podciagajacymi, a na wyjsciach diody z rezystorkami ograniczajacymi prad

    EDIT: udalo mi sie dojsc do czegos takiego
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Dochodze do wniosku ze nie mozna na raz czytac i wysylac po spi kiedy rejestrow wejsciowych jest wiecej niz wyjsciowych. Tak czy inaczej z tym kodem nadal jest cos nie tak, poniewaz poprawnie odczytuje tylko pierwszy bit, tj. najmniej znaczacy bit zmiennej read[0]. Wysyladnie do rejestrow dziala poprawnie. Moze mial ktos kiedys podobny problem? Bede bardzo wdzieczny za jakakolwiek pomoc.

    Jesli to ma jakies znaczenie - uc to atmega1284p, zegar 20mhz
  • REKLAMA
  • #4 10995587
    LordBlick
    VIP Zasłużony dla elektroda
    Proponuję rozdzielić sygnały wyboru wejścia od wyjścia. Wcale to nie musi być PB4. /SS jest tu przypisany na sztywno tylko w trybie Slave.
  • REKLAMA
  • #5 10995786
    cpkpiotr
    Poziom 13  
    Mam te same scalaki, procka i czytałem i zapisywałem w tym samym czasie. Jednak używałem dodatkowo osobnego sygnału do zatrzaśnięcia danych wejściowych (pin1 w 74hc165). To mój stary projekt, więc na szybko tyle - po podejrzeniu schematu podpowiadam. A pamiętam, że minimalizowałem swego czasu liczbę pinów procka, więc skoro go dałem, to prawdopodobnie musiał być ;-)
    Powodzenia.
  • #6 10997173
    esane
    Poziom 9  
    Niestety rozdzielenie sygnalow latch nie wchodzi w gre (sporo ciecia na 4 plytkach). Wydaje mi sie ze nie to jest problemem, bo w ukladzie w ktorym to testowalem (z mniejsza iloscia rejestrow, na atmedze8 i programowym spi) dzialalo poprawnie z wspolnym latchem i zegarem.
REKLAMA