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

Problem z obsługą przetwwornika DAC MAX534

A.T. 16 Kwi 2011 17:12 1298 18
REKLAMA
  • #1 9407518
    A.T.
    Poziom 20  
    Witam
    Męczę się już 2 dni z napisaniem programu do obsługi przetwornika MAX534 w języku c pod procesor ATMEGA32. Czy ktoś może mi wyjaśnić krok po kroku, co trzeba wysłać przez SPI żeby układ zaczął działać. Próbuję to zrobić wg datasheetu ale na wyjściu otrzymuję 0V. Bardzo proszę o jakiś fragment kodu dający jakieś napięcie na wyjściu.
    Pozdrawiam
    A.T.
  • REKLAMA
  • #2 9408258
    dondu
    Moderator na urlopie...
    Witaj,

    A.T. napisał:
    Czy ktoś może mi wyjaśnić krok po kroku, co trzeba wysłać przez SPI żeby układ zaczął działać.


    Ależ oczywiście:

    krok 1. Otworzyć Google.
    krok 2. Znaleźć datasheet MAX534
    krok 3. Przeczytać
    krok 4. Napisać swoją wersję kodu.
    krok 5. do{
    krok 6. sprawdzić jak działa
    krok 7. nanieść poprawki
    krok 8. }while(!działa) goto krok 6 (co najmniej 20 razy)
    krok 9. wkleić kod na forum i zadać konkretne pytania.

    Pozdrawiamy
    koledzy z forum
  • #3 9408839
    A.T.
    Poziom 20  
    Pisałem post z telefonu komórkowego z publicznego wifi. Teraz dopiero jestem u siebie przy kompie. To jest konfiguracja:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    A to jest właściwa część kodu, która powinna na wyjściu A dać napięcie odpowiadające połowie napięcia odniesienia. Niestety jest 0V :/
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Dziękuję i pozdrawiam
  • #4 9408904
    asembler
    Poziom 32  
    Może problem masz w tym że przetwornik oczekuje 12 bitów a ty wysyłasz 16.
  • #5 9409131
    A.T.
    Poziom 20  
    hmm 16?
    Mi się wydaje że 12, dokładnie to 10 bo 2 pierwsze mają być 00. Ale może się mylę. Ale nawet jakby, to w datasheecie pisze, że jak się wyśle 16 bitów, to 4 początkowe będą ignorowane.
  • #6 9409204
    nsvinc
    Poziom 35  
    A.T. napisał:
    [...]datasheecie pisze[...]

    Z tego co widzę jesteś tu nowy, więc powinienem zwrócić uwagę: Językoznawcy zdecydowali, że w potocznej mowie można mówić "pisze" w rozumieniu "jest napisane", ale w tekście pisanym takie sformuowanie jest błędne.

    A wracając do tematu:
    źle formatujesz informację którą wysyłasz do przetwornika!.
    Popatrz jeszcze raz na fig 3. na stronie ósmej. Musisz wysłać conajmniej 12 bitów, przy czym pierwszy bit jaki wyzegarujesz jest bitem A1. Jeśli popychasz 16 bitów, zaczynając od MSb, to najstarszy, piętnasty bit jest bitem A1. Przetwornik zignoruje cztery pierwsze, najmłodsze w twoim 16bitowym słowie bity.
    Jeśli wysyłasz najpierw LSb, sytuacja jest odwrotna. Wtedy najmłodszy bit będzie bitem A1, a cztery najstarsze bity 16bitowego słowa zostaną zignorowane...
  • REKLAMA
  • #7 9409315
    A.T.
    Poziom 20  
    Dziękuję za odpowiedź. Już poprawiłem, czy tak to powinno wyglądać?
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #9 9409377
    A.T.
    Poziom 20  
    Dziękuję. Jutro sprawdzę czy działa:) Ostatnie pytanie, czy trzeba podłączać wyjście DOUT do procesora(MISO)?
  • #11 9410183
    kamyczek
    Poziom 38  
    Zawsze można napisać SPI programowe 12 bitowe i zrobić to samo bez używania SPI sprzętowego ;)
  • REKLAMA
  • #13 9410202
    asembler
    Poziom 32  
    dondu napisał:
    Cofać się do czasów prehistorycznych zawsze można, tylko w jakim celu?

    Nie wiem czy akurat jest krok w tył - ja bym powiedział że raczej w bok.
    A sprzetowe SPI może sie przydać do osługi czegoś bardziej wymagającego.
  • #15 9412309
    kamyczek
    Poziom 38  
    SPI w AVR dedykowane jest do wysyłania 8-bitowych paczek , nie wszystkie układy peryferyjne akceptuje tego rodzaju transmisje , czasem więc trzeba napisać sobie własne programowe SPI i użyć go do odbierania bądź wysyłania danych . Nie mówię że tak jest w tym przypadku i nie mam pojęcia czy ten układ będzie akceptował wysłanie 16 zamiast 12 bajtów i jaki będzie efekt tej transmisji. Warto sprawdzić takie rozwiązanie i możliwość realizacji zadania w ten sposób .
  • #16 9412479
    asembler
    Poziom 32  
    Ja prawie zawsze w takich wypadkach steruje programowym i to jeszcze z jednego wględu - łatwiej dopasować szybkośc transmsji a układy które sterowałem to prawie każdy miał jakies ograniczenia od góry i może w tym tu też jest problem.
  • #17 9412693
    nsvinc
    Poziom 35  
    99% scalaków na SPI, wymagających niestandardowych długości słowa instrukcji lub wartości odczytanej zezwala na ekstra zegary leading lub trailing (a ch... wie jak po polsku się to nazywa :P ). Producenci układów scalonych w ciemię bici nie są, i zdają sobie z tego sprawę, że stosując niestandardową jednostkę transmisji nie uwzględniając nieznaczących zegarów, uniemożliwiliby podłączenie scalaczka pod standardowe SPI.

    Rozwiązanie programowe nie jest złe, ale ma jedną podstawową wadę - POWOLI. Poza tym, stosując mocniejszy procek z DMA, odpada nam możliwość zastosowania DMA :( Programowe SPI, to "skok w bok" - często nie potrzebny... Od programisty wymaga się jednak aby dokładnie wiedział co robi...
  • #18 9412794
    A.T.
    Poziom 20  
    Dziękuję za odpowiedź. Udało mi się uruchomić układ, ale takie wysyłanie informacji jak polecał nsvinc niestety się nie podobało maxiowi:) W pierwszej paczce trzeba wysłać tylko bity A1, A0, C1, C0. A dopiero w drugiej paczce 8 bitów zawierających informację o napięciu. W inny sposób nie chciało działać:/ Dodatkowo jeszcze trzeba ustawić CPOL = 0, CPHA = 0.
    Co do programowego SPI to odpada, musi to być szybkie, dlatego mam do tego zrobione takie sztuczne QSPI.
    Pozdrawiam
    A.T.
  • #19 9413046
    asembler
    Poziom 32  
    Programowy SPI to 1MHz czyli ok 8 razy wolniej niż sprzetowy. Ja miałem do czynienia z układami do audio i bardzo rzadko zdarzało sie zeby chodziły przy wiekszej czestotliwosci zegara a przewaznie to było mniej niż 400kHz.
    Szkoda że nie napisałes do czego ci ten przetwornik i co to za projekt no i skąd wezmiesz 80kB próbek na sek nawet przy programowym SPI
REKLAMA