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

Nietypowa transmisja SPI - ATMEGA8

pgnige 15 Lut 2010 14:05 2408 22
REKLAMA
  • #1 7697549
    pgnige
    Poziom 14  
    Witam, proszę o pomoc w sprawie transmisji SPI.
    Mam do wysłania 8 bitów oraz do odebrania 11 bitów przy jednym przesyle danych (tj. linia SS cały czas 0), później krótka szpilka 1 na SS i znowu 19 bitów.
    Jest to w ogóle wykonalne?

    Wiem, że trzeba wysłać 19 bitów, żeby odebrać 19 bitów, ale jak można wysłać inną ilość bitów niż wielokrotności bajta (16 bitów lub 24 bity). Należałoby więc wysłać 2 bajty, a następnie dosłać 3 bity. I tutaj "rodzi się" moje pytanie jak można wysłać 3 bity, a nie 8 bitów?

    Próbowałem zliczać takty zegara SCK, ale nie chciało to działać.
    Bardzo proszę o pomoc (najlepiej program w BASCOM'ie lub ASM).

    Oddam wszystkie moje punkty oraz mogę zapłacić przelewem na konto - naprawdę bardzo mi zależy.
  • REKLAMA
  • #2 7697581
    pgnige
    Poziom 14  
    Witam, proszę o pomoc w sprawie transmisji SPI.
    Mam do wysłania 8 bitów oraz do odebrania 11 bitów przy jednym przesyle danych (tj. linia SS cały czas 0), później krótka szpilka 1 na SS i znowu 19 bitów.
    Jest to w ogóle wykonalne?

    Wiem, że trzeba wysłać 19 bitów, żeby odebrać 19 bitów, ale jak można wysłać inną ilość bitów niż wielokrotności bajta (16 bitów lub 24 bity). Należałoby więc wysłać 2 bajty, a następnie dosłać 3 bity. I tutaj "rodzi się" moje pytanie jak można wysłać 3 bity, a nie 8 bitów?

    Próbowałem zliczać takty zegara SCK, ale nie chciało to działać.
    Bardzo proszę o pomoc (najlepiej program w BASCOM'ie lub ASM).

    Oddam wszystkie moje punkty oraz mogę zapłacić przelewem na konto - naprawdę bardzo mi zależy.
  • #3 7697846
    H0miczek
    Poziom 20  
    lepiej napisz z czym gadasz po tym SPI (pelne oznaczenie) bo znajac zycie cos chrzanisz
  • #5 7697888
    rpal
    Poziom 27  
    Nie da się wysłać innej ilości bitów niż wielokrotność 8. Jeśli interesują ciebie tylko wybrane bity w ilości mniejszej niż 8 to albo zignoruj te niepotrzebne albo wytnij je operacją AND. Przynajmniej dla sprzętowej wersji transmisji w atmega8.
  • REKLAMA
  • #7 7697951
    rpal
    Poziom 27  
    W jaki sposób ma się dla poruszonego temat nota katalogowa tego sensora ? Równie "pożyteczna" dla autora będzie nota od pamięci 25C01 albo jakiegoś przetwornika cyfrowo-analogowego lub odwrotnie.
    Jesli kolega chce bardzo wysłać inną ilość bitów niż 8 to musisz ją zrealizować calkowicie programowo i wówczas możesz sobie słać ile dusza zapragnie bitów. Ale zapewne chcesz zrobić to sprzętowo bo masz to już "zaszyte" w atmega8 więc się nie da i w ogóle po co, skoro większość układów SPI używa 8 bitowej porcji danych nawet jeśli przesyła informacje jako słowa 12,14 czy 16 bitowe .
  • #8 7697972
    pgnige
    Poziom 14  
    Wg noty tego układu ma być wysyłane 19 bitów i chyba tyle być musi, chyba, że się mylę i można wysłać 24, później jakoś posegregować.

    W dokumentacji jest 19 więc myślałem, że trzeba dokładnie 19 bitów.

    Nietypowa transmisja SPI - ATMEGA8
  • REKLAMA
  • #9 7697985
    H0miczek
    Poziom 20  
    bez zaglebiania sie w dokumenty obstawiam ze wcale nie trzeba. mozesz spokojnie taktowac dalej. zazwyczaj CS wysoki resetuje wszystko wiec przy nastepnej transmisji wyjmiesz dobre dane. a że na paru dodatkowych zegarach dostaniesz smieci to nieistotne. tylko dane koncowe musisz potem przerobic..
  • #10 7698002
    rpal
    Poziom 27  
    Na mój gust to tam jest byk bo na rysunku nr 2 jest jak wół 1 bajt komendy, 1 bajt danych więc z tym oscylogramem coś nie halo. A jesli ma być zwrócone słowo 11,12,13 ect bitowe to trzeba nieznacząe bity zignorować i np. przesunąć w w prawo o tyle ile bitów będzie brakowało do slowa 16 bitowego.
  • #11 7698046
    pgnige
    Poziom 14  
    Nie zgodzę się, że jest 1 bajt danych, ponieważ jest 11 bitów. Proszę dokładnie popatrzeć.

    Mimo wszystko wysyłając 24 bity nic nie mogę od niego odebrać.

    Program:
    $regfile = "m8def.dat"
    $crystal = 8000000
    
    Config Portb = Output
    Portb = 0
    Config Portc = Output
    Portc = 0
    Config Portd = Output
    Portd = 0
    Config Portb.4 = Input
    Set Portb.2
    Set Spcr.6
    Set Spcr.4
    Set Spcr.1
    Set Spcr.0
    
    Reset Portb.2
    Spdr = 16
    
    Do
    Loop Until Spsr.7 = 0
    
    Reset Spsr.7
    Portc = Spdr
    Spdr = 100
    
    Do
    Loop Until Spsr.7 = 0
    
    Reset Spsr.7
    Portc = Spdr
    Spdr = 100
    
    Do
    Loop Until Spsr.7 = 0
    
    Set Portd.4
    Reset Spsr.7
    Portc = Spdr
    Set Portb.2
    
    Do
    
    Loop
    End
  • #12 7698092
    rpal
    Poziom 27  
    jesli masz dane 11bitowe to odczytujesz 2 bajty danych (czyli 16 bitów) . 1 bajt = 8 bitów.
    liczbę 16 bitową odczytaną z czujnika przesuwasz w prawo o 5 bitów w prawo i masz swój prawidłowy wynik, bo w tych "nadliczbowych" bitach masz albo same 0 albo śmiecie bez znaczenia.
  • REKLAMA
  • #13 7698105
    pgnige
    Poziom 14  
    To zrozumiałem, ale dlaczego powyższy program nie chce działać?
    Wcale nie mogę nic odebrać z rejestru SPDR.
    Pisząc coś takiego wbrew pozorom Portc nie jest wypełniany wartością 16:
    Spdr = 16
    Portc = Spdr
  • #14 7698302
    rpal
    Poziom 27  
    moze predkosc transmisji za duża, może nie aktywujesz CS, może masz błedy w połaczeniach, może nie wpisujesz odpowiednich komend dla twojego czujnika ?
  • #15 7698402
    pgnige
    Poziom 14  
    Prędkość ustawiłem na najniższą, CS jest aktywowany, połaczenia są na 100% poprawne. Wysyłam narazie jedną komendę (16) do odczytu kątu odchylenia od osi X.
  • #16 7698429
    markosik20
    Poziom 33  
    Jeżeli to aż tak straszny wymóg co do tych bitów pozostaje Ci napisanie obsługi SPI programowo.
  • #17 7698439
    pgnige
    Poziom 14  
    W jaki sposób w BASCOM??
  • #18 7698475
    markosik20
    Poziom 33  
    pgnige napisał:
    W jaki sposób w BASCOM??


    Żartujesz? W profilu masz wpisane "Programowanie mikroprocesorów" więc nie wiem w czym problem. Tak nawiasem nie znam bascoma...ale na pewno da się to zrobić bardzo prosto w pętli.
  • #19 7698556
    pgnige
    Poziom 14  
    A w Asemblerze?
  • #20 7699113
    asembler
    Poziom 32  
    A w asemblerze to pikuś. Juz ci kilku kolegów podpowiadało zeby zrobic to poprostu programowo to kilkanascie bajtów jedyna wada to ze nie osiagniesz 1/2 osc a tylko 1/16 czyli i tak nieźle.
    Załączniki:
  • #21 7699264
    rpal
    Poziom 27  
    kolego autorze moja praktyka własnych błędów podpowiada mi aby nie wyszukiwać jakiś wyimaginowanych problemów, tylko szukać tych najbardziej oczywistych. Wymóg przez producenta scalaka 11 bitowej transmisji trąci sf. Wszak na jednym rysunków podają jak dokonać transmisji uzywając słow 8bitowych.
  • #22 7699776
    asembler
    Poziom 32  
    Jest bardzo wiele scalaków szczególnie w urzadzeniach audio sie spotkałem gdzie streowanie jest realizowane ilością bitów niepodzielną przez 8. Moze nie autor podzieli si ewiedzą do czego takie sterowanie mu potrzebne
  • #23 7709830
    pgnige
    Poziom 14  
    Bardzo dziękuję wszystkim za pomoc i zainteresowanie się moim problemem.

    Rozwiązanie okazało się jeszcze inne: należało dodać przerwę czasową rzędu 1ms pomiędzy kolejnymi odczytami.

    Temat uważam za zamknięty.
REKLAMA