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

obustronna komunikacja ATmega 5V-SRAM 3,3V

schabik89 17 Paź 2011 20:52 2676 20
REKLAMA
  • #1 10037874
    schabik89
    Poziom 10  
    Witam,

    Chciałbym do mojej ATmegi w projekcie podłączyć kość SRAM z komunikacją szeregową po SPI "23k256"

    Problem jest taki, że jej zasilanie to 3,3V (nie mogę znaleźć innych szeregowych SRAMów na 5 V), a Atmega koniecznie musi pójść na zasilanie 5V.

    Pytanie do was czy mogę po prostu linie SCK i MOSI jako wejściowe do SRAMu puścić przez dzielniki napięcia a linie MISO czyli wyjście RAMu puścić przez jakiś konwerter z 3,3 na 5.

    Proszę o odpowiedz czy dobrze kombinuje, a jeżeli tak to doradźcie mi jak mam dokonać tej konwersji 3,3-5
  • REKLAMA
  • #2 10038054
    tmf
    VIP Zasłużony dla elektroda
    Ze względu na częstotliwość pracy SPI (a dokładniej szybkość narastania/opadania zboczy) dzielniki rezystorowe są możliwe, ale to będzie raczej kiepsko działać. Lepiej zastosować scalone konwertery napięć. Z tym że akurat dla SPI to trochę przerost formy. Dlaczego nie możesz obniżyć napięcia zasilania ATMegi? Jeśli chodzi tylko o częstotliwość maksymalną to XMega działa ok dla napięcia 3V3.
  • #3 10038076
    asembler
    Poziom 32  
    A może da sie bezpośrednio podłączyc?
    Identycznie podłaczyłem szeregowy flash i dziala - tylko nie wiem jak długo.
  • REKLAMA
  • #4 10038514
    schabik89
    Poziom 10  
    Nie mogę niestety obniżyć napięcia zasilania ATmegi bo potrzebuje ją taktować jak największym kwarcem po za tym mam w układzie max232 no i przetwornik ADS7816 który musi mieć przynajmniej 4,5V
  • #5 10038587
    tmf
    VIP Zasłużony dla elektroda
    No to użyj jak pisałem XMega, przy 3V3 masz 32MHz, a więc 2xtyle co wyciśniesz z ATMega, w dodatku masz wbudowane dwa dobre ADC, dzięki czemu ten zewnętrzny ADS nie będzie potrzebny. Max też można wymienić na wersję zasilaną niższym napięciem.
  • #6 10040415
    schabik89
    Poziom 10  
    Ja wiem, że Xmega by wszystko rozwiązała niestety nie mam funduszy na kupowanie minimodułu z nią oraz programatora, nie mówiąc już o tym, że nie mam czasu sie uczyć C, bo programuję w BASCOMie. W procesorze jest dużo obliczeń i nieustanny odczyt ADC wiec chciałbym moją ATmege644p taktować na 20 MHz. Niestety z zasilania 3,3 V wycisnę tylko 10MHz.
    Jeśli chodzi o połączenie bezpośrednie to raczej nie pójdzie ponieważ z datasheetów wynika, że ATmega przy wysokim stanie wysyła minimum 4,2V, a dla SRAMu maximum do przyjęcia to 3,9V. Natomiast RAM w stanie wysokim to min 2,7V a atmega potrzebuje na wejściu min 0,6Vcc co przy zasilaniu 5V daje 3V.

    Proszę was o jakieś pomysły związane z procesorem zasilanym na 5V. Xmega to naprawdę ostateczność, chyba że można by ją zaprogramować w BASCOMie
  • #8 10040550
    piotrva
    VIP Zasłużony dla elektroda
    Zaraz, zaraz, skoro to jest komunikacja SPI to masz:
    1. SCK -> do pamięci - dajesz dzielnik 5V->3,3V
    2. MOSI -> do pamięci - dajesz dzielnik 5V->3,3V
    3. MISO <- do procesora - dajesz odpowiedni tranzystor (szczególnie zwróć uwagę na częstotliwość przełączania i "opóźnienia") lub jakiś bufor z serii 74hc(t) (np. 74HCT08 - bramka and) zasilany napięciem 5V, wejścia podpięte do układu dającego 3,3V
    Oczywiście zależy ile chcesz z tego SPI wycisnąć - bo rezystory w pewnym momencie będą dawać za duże zmiany w sygnałach i jak pisali już koledzy - przy wyższych SCK nie zadziała jak powinno lub będzie sypać błędami.
    Względnie GTL2003 lub MAX3002 lub podobne konwertery specjalizowane.

    Nb. Xmega (np. klasy 128a1) da się programować w bascom 1.11.9.8 i wyższych,
  • REKLAMA
  • #9 10040917
    asembler
    Poziom 32  
    schabik89 napisał:
    J
    Niestety z zasilania 3,3 V wycisnę tylko 10MHz.
    Jeśli chodzi o połączenie bezpośrednie to raczej nie pójdzie ponieważ z datasheetów wynika, że ATmega przy wysokim stanie wysyła minimum 4,2V, a dla SRAMu maximum do przyjęcia to 3,9V. Natomiast RAM w stanie wysokim to min 2,7V a atmega potrzebuje na wejściu min 0,6Vcc co przy zasilaniu 5V daje 3V.


    A próbowałeś?
    Odkąd to odczyt z zewnętrznego ADC trwa krócej?
  • #10 10041039
    piotrva
    VIP Zasłużony dla elektroda
    Co do napięcie/taktowanie -> to są normy podane przez producenta - powyżej nie gwarantuje on stabilnej pracy układu, ale zwykle też działa w pewnym zakresie powyżej tych zaleceń.
    A co do napięć, to zwykle układy zasilane 3,3V dają te 3,3-3,1V i atmega rozpoznaje ten stan jako wysoki.
  • REKLAMA
  • #11 10041041
    dondu
    Moderator na urlopie...
    asembler napisał:
    schabik89 napisał:
    Jeśli chodzi o połączenie bezpośrednie to raczej nie pójdzie ...

    A próbowałeś?

    Niestety to oznacza niepewność:

    asembler napisał:
    Identycznie podłaczyłem szeregowy flash i dziala - tylko nie wiem jak długo.

    Oczywiście można zaryzykować, ale czy autor dopuszcza takie ryzyko?
  • #12 10041095
    asembler
    Poziom 32  
    To żadne ryzyko tylko próba.
    Ja tu raczej widze problem od strony programowej/programisty a nie od strony sprzetu.
  • #13 10041104
    dondu
    Moderator na urlopie...
    asembler napisał:
    Ja tu raczej widze problem od strony programowej/programisty a nie od strony sprzetu.

    Ja rozumie, że on jest dopiero na etapie budowy schematu, a do prototypu i programu jeszcze daleko.
  • #14 10041137
    asembler
    Poziom 32  
    Skoro widać że to ma być tylko prototyp i jednostkowa sztuka to nie jest to żadne ryzyko podłaczyć bezpośrednio, Sam tak robie w prototypach bo mi sie nie chce wlutowywać dodatkowych rezystorów. SPI chodzi z pełną prędkością, a kłopoty z osiągnieciem u niektórych maksymalnej przepustowości pewnie biorą sie ze złego programatora, bo nie wyobrażam sobie aby odłączać programator za kazdym razem.

    Ciekawe co to za skomplikowane obliczenia?
    Ile tego RAM-u faktycznie potrzeba?
  • #15 10041579
    schabik89
    Poziom 10  
    Faktycznie spróbuje to podpiąć i zobaczyć czy działa, ale chciałbym mieć jeszcze w zanadrzu jeszcze jakaś alternatywę. Poszukam jeszcze jakiś konwerterów napięć jak już wyżej wspomniano.

    Co do obliczeń to chciałbym odczytywać z ADC na bieżąco ciśnienie z czujnika ciśnienia, wyświetlać go na LCD, i wysyłać po SPI do SRAMU(do 2 minut pomiaru) i po skończonym pomiarze wysłać go przez rs232 na PC. Oczywiście po drodze jeszcze parę obliczeń związanych z uśrednianiem trzech próbek po sobie i tych z kolejnych odstępów jako, że odczyt z takiego czujnika jest podobno całkiem poszarpany. Wszystko to na Atmega644p taktowanej 20MHz. Nad ADC sie jeszcze zastanawiam czy wystarczy użyć wewnętrznego o wydajności 15ksps czy na spi podpiąć taki na 200ksps docelowy pomiar ciśnienia to ok 20Hz
  • #16 10041903
    tmf
    VIP Zasłużony dla elektroda
    Zdradź mi po co ci samplowanie 200ksps, 16-bit, jeśli masz przetwornik ciśnienia, który samplujesz 20Hz? Nawet robiąc jakiś oversampling to wbudowany w ATMegę ADC wystarczy. A po co ci do tego aż 20MHz to tylko ty wiesz :) Przecież nawet te uśrednienia to śmiesznie proste obliczenia, które procesor taktowany z ułamkiem tej częstotliwości pociągnie. Kolejna sprawa - 20 sampli/s przez 2 minuty to 4800 bajtów na próbki, jeśli próbki miałby mieć tylko 10 bitów co IMHO wystarcza, to potrzebujesz 3000 bajtów pamięci - lepiej dobrać procesor który ma 4-8kB SRAM wewnętrznego i po kłopocie. No i ten przetwornik ciśnienia, nie możesz dobrać taki, który ma wyjście np. I2C?
  • #17 10041907
    asembler
    Poziom 32  
    I do tego ci potrzebne 20MHz?
    Na moje oko to wystarczy 1Mhz nawet w Bascomie podejrzewam.
    20hz *120s to zaledwie 2400 wyników dwubajtowych.
    Czyli spokojnie zmiescic mozna w wewnetrznej pamieci RAM.
    Jak już koniecznie chcesz jeszcze więcej minut to zastosuj atmege1284p która ma 16kB RAM-u.
    Po co taki szybki ADC skoro pomiary co 20Hz a dodatkowo chcesz uśredniac.
    A moze mozna ustawic wewnętrzny preskaler przetwornika ADC tak aby usrednianie dodatkowo realizowane było sprzetowo? i w miarę potrzeby dalej usredniac cyfrowo.
    Ja tu nie widze potrzeby szukania innej alternatywy.


    Skoro ci dwóch niezależnie identycznie radzi to coś w tym musi być.
    Myśle że kolega niedoczytał iż przetwornik ADC jest sprzetowy i stąd to asekuracyjne 20MHz lub próba zastosowania zewnetrzengo mającego odciązyć obliczenia, a realnie pewnie spowoduje dociązenie procesora.
  • #18 10042172
    schabik89
    Poziom 10  
    Źle zostałem zrozumiany, albo w niezrozumiały sposób napisałem to co chciałem.

    Chodzi o to, że za tymi 20Hz kryją się pewne obliczenia. 20Hz to tylko,że tak powiem próbkowanie na potrzeby wyświetlacza LCD. Wynik co prawda w 50ms odstępach ale próbki w założeniu będą zbierane w paczkach po 3(dla uśrednienia) co powiedzmy 2ms (500Hz) i to zostaje wysłane na RAM. Po tych 25 próbkach, a za razem na nich będą następowały obliczenia- jakieś interpolacje,uśrednienia, wygładzanie postrzępionego wykresu, sam do końca nie jestem w stanie jeszcze powiedzieć co to będzie bo się dopiero za projekt biorę. Wszystko to się będzie stało za jednym z pośród tych 20 herców.
    W każdym razie chciałbym się z tymi obliczeniami jeszcze wyrobić za nim zostanie pobrana następna próbka, czyli mam na nie powiedzmy te 2ms stąd asekuracyjnie przyjąłem jak największy kwarc.

    Rzeczywiście Atmega 644p ma 4kB RAMu jeśli wykorzystam powiedzmy 3kB na pomiary to zmieszczę na niej 1500 dwu bajtowych pomiarów. Wszystko razy 2ms i daje mi to zaledwie 3s pomiaru. Ja potrzebuję do zarejestrowania minimum 30s. Dlatego zewnętrzny RAM minimum 32kB jest koniecznością.

    Oczywiście to wszystko jest na razie wymysłem w mojej głowie. Wiem, że to kwestia optymalizacji. Mogę z tego 2 ms próbkowania zrobić sobie 5 ms i wszystko będzie wyglądało inaczej.

    Z tego co piszę wyżej i wy mi uświadomiliście jeszcze wyżej myślę, że wewnętrzne ADC powinno spokojnie wystarczyć.

    Jeśli chodzi o przetwornik ciśnienia to nie mogę użyć niczego na I2C, ponieważ jest to zwyczajny analogowy przemysłowy przetwornik do wysokich ciśnień o sygnale 0-10V.
  • #19 10042281
    mirekk36
    Poziom 42  
    schabik89 napisał:
    ... będą następowały obliczenia- jakieś interpolacje,uśrednienia, wygładzanie postrzępionego wykresu, sam do końca nie jestem w stanie jeszcze powiedzieć co to będzie bo się dopiero za projekt biorę.


    To jeszcze dobitniej świadczy o tym, że koledzy, którzy ci wyżej doradzają mają rację. Wystarczy taktowanie 1MHz a już 8MHz to będzie aż za szybko ;)

    Poza tym podoba mi się określenie "jakieś" .... albo "postrzępionego wykresu". Wcale nie chcę być złośliwy, jednak takie podejście nawet do prototypu świadczy o tym, że jeśli nawet nie legnie on w gruzach to sam sobie gotujesz problemy. Nie można tak podchodzić do analizy problemu. A żeby nie pisać i co ważniejsze nie myśleć nawet o "jakichś tam interpolacjach" itp ... to weź że sobie lepiej "jakiś"/dowolny procek AVR nawet podłączony na płytce stykowej czy w jakimś zestawie uruchomieniowym i sprawdź sobie te obliczenia. Zobacz i dotknij ADC - bo tak to piszesz niechcąco niestworzone historie no i problem nawet w twoich własnych oczach urasta do postaci wielkiego JEŻA do którego ciężko podejść a przynajmniej bez 20-30MHz się nie obejdzie.
  • #20 10047889
    schabik89
    Poziom 10  
    Chciałbym zadać jeszcze pytanie nie związanie z tematem odnośnie programowania w Bascomie.
    Wiem, że jeśli postawie flagę w procedurze obsługi przerwania będzie ona widzialna w pętli głównej. Czy w odwrotną stronę też to działa? Chciałbym aby procedura obsługująca przerwanie wykonywała się inaczej w zależności od flag, które ustawie w głównej pętli DO..LOOP END.
  • Pomocny post
    #21 10048234
    GienekS
    Poziom 32  
    Jeżeli zmienna jest globalna, to masz dostęp do niej zarówno w przerwaniu jak i poza ciałem przerwania.
REKLAMA