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 (atmega8) - SPI instrukcje w trakcie przesyłania danych

st4chuu 09 Sie 2014 16:36 1782 6
REKLAMA
  • #1 13864392
    st4chuu
    Poziom 15  
    Cześć

    Robię taki mały układzik odczytujący dane z zewnętrznego ADC MCP3304.
    Z przetwornika chcę wycisnąć tyle ile się da. Czyli chcę odczytywać 100kS/s.
    Jednak w czasie zabawy. Jako, że jestem niedoświadczonym świeżakiem. Dotarło do mnie... Maksymalny CLK dla przetwornika do 2,1Mhz. Na razie przesył danych po SPI wygląda tak, że końcówka 1 Bajtu to instrukcje, kolejne odebrane 2 bajty to wynik przetwornika. Czyli łącznie po SPI lecą 3 bajty. Czyli praktycznie nic mikroprocesor by nie robił jak tylko odbieranie przetworzonego sygnału.

    Czy SPI działa "niezależnie" tzn do rejestru wpisujemy wartości i SPI samo działa sobie z boku. Chodzi mi o to czy w czasie przesyłania można procesor zająć czymś innym?

    Miałem już pomysł na to, żeby zastosować 2 mikroprocesory. Jeden by tylko odbierał wyniki ADC, i równolegle przesyłał by do drugiego odpowiednią liczbę bitów.

    Czy macie jakiś pomysł mieliście podobny problem?

    Aha zapomniałem. Atmega taktowana jest 16mHz. Zrobię przymiarkę jeszcze do 24mHz, jak go dorwę w sklepie.


    Pozdrawiam
  • REKLAMA
  • Pomocny post
    #2 13864508
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #3 13864611
    st4chuu
    Poziom 15  
    Dzięki o to chodziło.
    ten przetwornik wykorzystałem bo akurat był w okolicy i zachęciła mnie jego rozdzielczość.
    Sam układ jest już podłączony i Hula, ADC przesyła wynik pomiaru różnicowego, atmega przechwytuje info i wyświetla. Aktualne pomiary dają o niebo lepsze wyniki niż przy wbudowanym ADC.

    Ten procesor, akurat tą rodzinę znam(jako tako), mam do nich programator, no i pełno wala ich się w domu.

    co do podniesienia taktowania miałem bardziej na celu wykonanie więcej obliczeń przez Mikroprocesor. Obawiałem się, że na czas wysyłania atmega jest zajęta i nie robi nic innego.
  • REKLAMA
  • #4 13868125
    st4chuu
    Poziom 15  
    Przepraszam, że nie edytuje. Ale tak delikatnie chciałem odkopać.

    Jak obsłużyć SPI z przerwaniem? Dotychczas SPI wywoływałem raz na jakiś czas. Jakoś specialnie się nie przejmując że uC nic innego nie zrobi w tym czasie.

    Program wygląda jak w nocie czyli wywołuje funkcję do przesyłu bajtu.
    Nie wygląda mi to, że program czeka aż zostanie przesłany Bajt. Jak to zrobić, żeby odbywało się w tle a program poinformował o zakończonym przesyle jakąś flagą?

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #5 13868280
    tmf
    VIP Zasłużony dla elektroda
    Dla SPI, żeby coś odebrać musisz coś nadać. Z tego powodu zrobienie tego tak jak chcesz nie ma sensu - odbiór bajta danych już sygnalizuje jedna z flag rejestru stanu SPI i dublowanie tej funkcji nie ma sensu. Jeśli chcesz zaprząc przerwania to musisz w nie przerzucić coś więcej - np. całą obsługę wmiany danych z ADC. Swoją drogą przy odczycie na poziomie 100 kS/s przerwania tracą sens - zajmują procesorowi zbyt wiele czasu. Lepiej więc zamienić ATMega8 na np. XMEGA8E5, która jest tańsza i ma ten sam rdzeń AVR, za to ma DMA. Dzięki temu obsłużysz transmisję SPI przez DMA, co praktycznie nie zajmuje procesorowi czasu.
  • #6 13868304
    st4chuu
    Poziom 15  
    ATxmega8E5 wydaje się całkiem rozstądna poczytałem o niej teraz, wydaje się, że będę mógł zrezygnować z zewnętrznego ADC a jak wygląda sprawa z programatorem do tego?
  • REKLAMA
  • Pomocny post
    #7 13868371
    piotrva
    VIP Zasłużony dla elektroda
    Można za 40-80zł dostać klon AVR ISP mkII z interfejsem PDI, który obsługuje wszystkie procesory ATXMega i nie tylko.
REKLAMA