Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Atmega + interfejs SPI, sterowanie przetwornikiem ADC?

kaayliah 11 Mar 2010 12:07 3229 10
  • #1
    kaayliah
    Level 9  
    Witam,

    planuję skonstruować układ, w którym Atmega sterowała by pracą przetwornika ADC za pomocą interfejsu SPI. W przypadku Atmega8 podczas używania tego interfejsu korzystam z sygnałów MISO, MOSI, SCK, SS(z PORTB). Podczas programowania tego mikrokontrolera interfejsem ISP wykorzystuję MOSI, MISO, RST, SCK. Rozumiem, że są to te same piny i że taki układ po zaprogramowaniu trzeba by podłączyć dopiero do ADC? Czy może inny mikrokontroler(Atmega16?) zawiera 'podwójny' interfejs SPI?
  • #2
    Nawigator
    Level 33  
    ISP działa dopiero gdy programator ustawi reset na zero więc można używać programowania z podłączonym przetwornikiem. Na wszelki wypadek należy dodać rezystory separujące pomiedzy układami np. 1k.
    Oczywiscie o ile transmisja programatora nie zakłóci ADC ale gdy /SS jest wysoki to adc powinien być odłączony (ewentualnie warto dać rezystor podciągający do plusa)

    N.
  • #3
    wados0
    Level 11  
    Swego czasu korzystałem jednocześnie z tego samego SPI do programowania i do przetwornika AC i nawet bez zabezpieczeń działało z tym, że programator na czas pomiaru odłączałem bo kontroler odbierał głupoty, ale pomysł aby na wszelki wypadek się zabezpieczyć jak kolega sugeruje jak najbardziej słuszny.
  • #4
    rpal
    Level 27  
    Nie ma mowy aby się procek poprawnie programował, przynajmniej weryfikacja zapisu nie będzie działać, Atmel zaleca podłączać szeregowe rezystory 1-1,2k w liniach które są wejściami procka albo też stosowanie analogowego multipleksera sterowanego niskim poziomem linii RESET.
  • #5
    janbernat
    Level 38  
    Która ATmega?
    W ATMega128 są inne piny do programowania i inne SPI.
    I w paru innych też.
    Chociaż w większości małych- te same.
    Wtedy albo rezystory- albo zworki.
  • #6
    rpal
    Level 27  
    z tego co pisze autor to piny są wspólne inaczej by nie truł o problemach :)
  • #7
    wados0
    Level 11  
    rpal wrote:
    Nie ma mowy aby się procek poprawnie programował, przynajmniej weryfikacja zapisu nie będzie działać, Atmel zaleca podłączać szeregowe rezystory 1-1,2k w liniach które są wejściami procka albo też stosowanie analogowego multipleksera sterowanego niskim poziomem linii RESET.


    Kwoli ścisłości - z AC przeszło coś takiego i działało, ale z SPI pomiędzy dwoma ATMEGAMI już nie(sygnatura Slave'a była niewłaściwa, jak pamiętam to same 0), Master chyba się dawał zaprogramować. Zresztą moje doświadczenie w materii kontrolerów nie jest takie jakie bym chciał mieć jeszcze :) Podejrzewam, że miałem więcej szczęścia niż rozumu.
  • #8
    manekinen
    Level 29  
    Jeśli ten przetwornik wykorzystuje linię CS chip select, i jeśli po jej zwolnieniu zostawia w spokoju MOSI, to nie widzę powodu żeby go odłączać - będzie wtedy przeźroczysty dla programatora. Programator też powinien po zakończeniu operacji wyłączać swoje linie i nic z nimi nie robić. Wtedy również nie będzie potrzeby odłączania programatora. Jak wspomniał kol. Nawigator - podciągnij linię SS (czyli tą którą strujesz CS) do VCC rezystorem ok 1k, będziesz miał pewność że ten ADC będzie wyłączony podczas resetu procka i nie będzie przeszkadzał.
  • #9
    rpal
    Level 27  
    Mimo wszystkiego co tu koledzy pisali, polecałbym jak jedyną pewną metodę zastosowanie multipleksera analogowego MC14053 tutaj link do strony kamami z gotowcemLink.
    Miałem kiedyś taki układ z przetwornikiem i nigdy nie miałem gwarancji że podczas programowania nie pojawią mi się błędy, raz wyskakiwały innym razem nie - przypadek. Dopiero kiedy włączyłem szeregowo oporniki kłopot się skończył, a multiplekser daje gwarancję że to będzie na 110 %. Nie wiem co powiada Atmel na temat stanów logicznych na pinach procesora podczas procesu programowania, tych nie używanych ale wydaje mi się że panują tam stany nieokreślone. Zatem wystarczy że układ przetwornika obciąża linie SPI a przypadkiem podczas programowania , końcówka która akurat przypada na linię CS "pierdnie" zerem ligicznym i kłopot gotowy. Przykładów mam sporo bo nie raz obserwowałem w układzie gdzie były zabudowane led-y miganie tych diod podczas programowania. Więc reasumując jak ma być tanio to wystarczy podstawka pod przetwornik i wyciąganie przetwornika, jak wygodnie to multiplekser koszt koło 1 PLN więc warto zainwestować w wygodę.
    Na marginiesie kol. wados0 jak masz zaprogramować dwie atmegi połaczone wspólnie magistralą SPI bez dokonania wyboru za pomocą linii RESET ? Poza tym pamiętaj że z programatorem wspinasz się w linie przed opornikami a nie za nimi. W układzie z 2 atmegami trzeba mieć zatem dwa złącza do programowania a nie programować poprzez opornik.
  • #10
    manekinen
    Level 29  
    Jeśli programator jest jakimś badziewiem typu "sample electronics" łączonym bezpośrednio do LPT to na 100% będą problemy. Programator powinien przełączać swoje linie właśnie w stan wysokiej impedancji - jako wejścia - jak zwał tak zwał i wtedy nie mają prawa one przeszkadzać.

    Nogi I/O AVRa podczas resetu są w stanie wysokiej impedancji z wyłączonymi pullupami - nie mają prawa przeszkadzać.

    Jeśli autor jest jeszcze zainteresowany tematem, to niech poda co to jest za przetwornik i będzie wiadomo jak się zachowuje gdy "nie jest wybrany" przez CS. W zasadzie to nie powinien trzymać swojej MISO jako wyjścia no bo gdzie tu wtedy sens stosowania CS i komunikacji z wieloma układami?

    Wtedy nie trzeba stosować żadnych multiplekserów czy w inny sposób rozbudowywać nieporzebnie układu ;)

    rpal - ostatnio jakoś przewijał się temat o programowaniu dwóch układów za pomocą jednego złącza. Najprostszym rozwiązaniem jest zworka do wybierania SCK. Jeden układ dostaje wszystkie sygnały i się programuje, drugi jest także zresetowany ale bez sygnału zegarowego nawet nie wejdzie w tryb programowania i nie będzie przeszkadzał temu pierwszemu.
  • #11
    rpal
    Level 27  
    ten temat jest o tym jak spowodować aby przy układzie wpietym w SPI programować atmela programatorem ISP, kol manekin. Zatem zbaczanie na manowce typu jak zaprogramować 2 atmele na raz nie jest w tzw. "temacie". Myślę że rady juz zostały wyczerpane a autor zrobi co zechce.