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

[asm]Atmega16, SPI i odbior 16bitow

PNT_Bytom 19 Maj 2009 20:20 2359 8
REKLAMA
  • #1 6550180
    PNT_Bytom
    Poziom 17  
    Witam,
    Prosze o pomoc w realizacji w asemblerze odbioru 16 bitowej danej po sprzetowym SPI, dana odebrac chce z ukladu typu read-only... SCK mam podlaczone pod PB7, dane pod MISO (PB6) natomiast CS ukladu slave steruje przez pin PB0.... W tej chwili realizuje to poprostu tak:
    in R16, SPDR
    in R17, SPDR

    W zamierzeniu mlodszy bajt ma byc w R16 starszy w R17, nie mam jak tego dokladnie sprawdic w tej chwili ale wydaje mi sie ze do R17 i R16 wczytuje zawsze mlodszy bajt... Slave to MAX6675.
  • REKLAMA
  • Pomocny post
    #2 6551449
    rpal
    Poziom 27  
    A to co masz w tej chwili tobie działa ? Mam na mysli te dwie linijki kodu ? W nocie katalogowej masz gotowce w zakresie inicjowania samego SPI jak i wysyłania i odbioru danych. Jest w c i asm. Mimo że odbierasz tylko dane musisz jednak coś wysłać choćby 0 bo wpisanie tam czegokolwiek jest warunkiem aby wyzwolić impulsy zegarowe SCK(pisząc TAM mam na myśli SPDR). Tym samym dane z MAX6675 zostaną przepisane do SPDR. Zawartość SPDR po pierwszej porcji 8 bitów MSB upchnij w jakiś rejestr i ponów transmisje mając w SPDR już LSB które znów gdzieś trzeba przechować. Pamiętaj o linii CS aby na cały czas transmisji była w stanie 0. Wg. tego co napisałeś to w r16 i r17 masz dokładnie to samo.
    Popatrzyłem w notę, wartość zwracana przez pretwornik to tak naprawdę liczba 12 bitowa. Aby uzyskać wartość liczbową odpowiadającą pomiarowi musisz całą 16 bitową liczbę przesunąć w prawo o 3. Wtedy ten odczyt będzie coś warty. Popatrz na str 6. To musi być koniecznie w asm. Bo jakby mogłobyć w C to bardzo wygodnie manipuluje się tymi młodszymi i starszymi połówkami liczby np. za pomocą zadeklarowanej unii.
  • REKLAMA
  • #3 6551627
    PNT_Bytom
    Poziom 17  
    Wszystko sie zgadza, mam zainicjowane SPI, najpierw wysylam 0 zeby nawiazac lacznosc z maxem, CS mam na cala transmisje na 0, cala procedure przeswania rowniez ma zrobiona..... Nie jestem tylko pewien jak odczytac te 16 bitow z maxa... Czyli po pierwszym odczycie musze znowu cos wyslac zeby odczytac pozostale 8 bitow (bo tego wlasnie nie bylem pewien) ? Musi byc w ASM bo o tym mam jakiekolwiek pojecie (pocatkujacy....) a z C to ciezko
  • REKLAMA
  • #4 6551669
    rpal
    Poziom 27  
    Kazde odczytanie kolejnej porcji 8 bitow wymaga wyslania jakiejs wartosci do urzadzebia SPI wiec chcac odebrac kolejna porcje musisz cos tam wyslac. Niepokoi mnie na stale pdolaczenie CS pod 0. Wiele ukladow na tym zboczu ustawia swoje takie a nie inne funkcjonowanie. Dlatego proponowalbym na stale ustawic tam 1 a 0 tylko podczas operacji odczytu. Po jej zakonczeniu ponownie 1. No i te przesuniecie bitow jest konieczne aby miec prawidlowa wartos a nie jej zafalszowana wartosc.
  • REKLAMA
  • #5 6551839
    PNT_Bytom
    Poziom 17  
    CS nie mam na stale 0, jest sterowane z PB0 i programowo ustawiane 0 tylko na czas transmisji z maxem. Wieczorem dam znac o efektach....
    Pozdrawiam
  • #6 6553028
    BoskiDialer
    Poziom 34  
    Oczekiwanie na zakończenie transmisji po każdym bajcie jest? Żeby móc odebrać bajt przez SPI, master musi wysyłać bajt, inaczej transmisja się nie załącza.
  • #7 6553037
    PNT_Bytom
    Poziom 17  
    Oczekiwanie na zakonczenie transmisji jest, wieczorem popracuej nad tym i wkleje wiecej kodu ewentulanie..... Narazie dzieki za wskazowki :idea:
  • #8 6577080
    PNT_Bytom
    Poziom 17  
    Niestety nie poradzilem sobie ze sprzetowym SPI.... i napisalem softowe, kodu wklejal nie bede bo poczatkujacy w tym jestem i pewnie nie jest on doskonaly (ale dziala:D )
  • #9 6578494
    rpal
    Poziom 27  
    PNT_Bytom napisał:
    Niestety nie poradzilem sobie ze sprzetowym SPI.... i napisalem softowe, kodu wklejal nie bede bo poczatkujacy w tym jestem i pewnie nie jest on doskonaly (ale dziala:D )

    No to się nieco narobiłeś i to zupełnie niepotrzebnie bo wystarczy w nocie katalogowej odszukać "SPI" i masz tam gotowce w C i asm. Pewnie głownym problemem była linia CS :)
REKLAMA