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

Wybór pamięci i przetwornika A/C do echa cyfrowego na ATmega32

djnick 26 Paź 2007 14:49 3403 32
Najlepsze odpowiedzi

Jaką pamięć i jaki przetwornik A/C dobrać do zrobienia cyfrowego echa sterowanego przez ATmega32?

Najrozsądniej zacząć od wbudowanego 10-bitowego ADC i wewnętrznej SRAM ATmega32, a opóźnienie realizować w buforze cyklicznym przez zmianę odległości wskaźnika odczytu od zapisu, zamiast zmieniać częstotliwość próbkowania [#4421283][#4427703] Jeśli potrzebujesz krótkich czasów opóźnienia, wystarczy szeregowy SRAM, np. FRAM; dla większych czasów lepiej przejść na pamięć równoległą, ale kości 16-bitowe są tu słabo uzasadnione przy 8-bitowym MCU — praktyczniej wybrać 256kx8 albo 512kx8 [#4427215][#4429704] Do 16-bitowego przetwornika A/C padła propozycja LTC1864 pracującego po SPI, a jako DAC zaproponowano TDA1543 (2x16 bit, I2S), który można „podciągnąć” pod SPI [#4426462][#4427043] Przy fpróbkowania rzędu 30 kSPS i 16 bitach warto też pamiętać, że 16-bitowy transfer po SPI w ATMega8515 przy 8 MHz zajmuje ok. 2 µs, więc sam interfejs szeregowy nie musi być wąskim gardłem [#4438964] Jeżeli koniecznie chcesz zewnętrzną pamięć pamięciową pod AVR, to dla magistrali pamięciowej lepiej rozważyć układ z takim interfejsem jak ATmega8515, bo ATmega32 go nie ma [#4429140]
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA
  • #1 4416702
    djnick
    Poziom 11  
    Posty: 63
    Ocena: 2
    Witam! Postawiłem sobie za zadanie wykonanie echa cyfrowego na procku przetwornikach i pamięci. Nie wiem tylko jakiej pamięci i jakich przetworników użyć. Chciałbym żeby wszystkim sterował mikrokontroler ATmega32 lub podobny. Prosze o wszelką pomoc i komentarze.

    Dzieki!
  • REKLAMA
  • #2 4420299
    Batmanmen
    Poziom 15  
    Posty: 205
    Pomógł: 9
    Ocena: 4
    Jeśli chodzi o pamięć to SRAM, bo taka będzie tu najlepsza np. DS1270. Jest to 16Mbit pamięci dostępnej równolegle. Tylko prawie wszystkie piny stracisz z atmegi.

    Jeśli chodzi zaś o przetwornik to może MX7705, podwójny A/C 16bit, SPI. Ale ja go nigdy nie używałem w praktyce, także nie wiem jak się będzie spisywał do audio.
  • #3 4420465
    marek_Łódź
    Poziom 36  
    Posty: 3103
    Pomógł: 208
    Ocena: 66
    A po co aż tyle pamięci i w dodatku nieulotnej do echa?
  • #4 4420687
    Batmanmen
    Poziom 15  
    Posty: 205
    Pomógł: 9
    Ocena: 4
    Cytat:
    ...w dodatku nieulotnej...

    bez żartów...
    Cytat:
    np. DS1270

    Autor dobrze będzie już wiedział ile mu potrzeba pamięci, ja podałem przykład kości które są dostępne o różnych pojemnościach
  • REKLAMA
  • #5 4420766
    marek_Łódź
    Poziom 36  
    Posty: 3103
    Pomógł: 208
    Ocena: 66
    Za podaną w przykładzie pamięć można nieźle zabulić (właśnie za to, że ma wbudowaną bateryjkę). W przypadku procesorów bez magistrali pamięciowej, najlepiej stosować pamięci szeregowe RAM (np. FRAM), które nie zajmują tylu linii i są zdecydowanie tańsze (w wyborze od pojedynczych do kilkudziesięciu kilobajtów).
  • #6 4421283
    marenc
    Poziom 24  
    Posty: 881
    Pomógł: 37
    Ocena: 5
    Niech kolega najpierw napisze kod dla wewnętrznej pamięci SRAM, bo rozbudowanie pamięci to będzie najmniejszy problem ;) Polecam też rozpocząć od przetwornika ADC wbudowanego w ATmega32 ;)
  • #7 4423201
    marek_Łódź
    Poziom 36  
    Posty: 3103
    Pomógł: 208
    Ocena: 66
    ...zależnie od tego, czy chcemy zrobić urządzenie audio, czy działający model. W pierwszym etapie należałoby ustalić trzy podstawowe parametry, czyli rozdzielczość przetwornika (czy jak kto woli dynamikę sygnału) oraz częstotliwość próbkowania i czas rejestracji sygnału. Mając te trzy dane można rozmawiać o sprzęcie.
  • #8 4426391
    djnick
    Poziom 11  
    Posty: 63
    Ocena: 2
    jesli chodzi o wewmętrzny przetwornik z atmegi to jest on zaledwie 10-cio bitowy, mnie satysfakcjonowałoby przynajmniej 16 bitów. Spotkałem sie z gotowym programem echa na atmega32 wykorzystujący wewnetrzny przetwornik a/c i wew. pamięć SRAM. Co do parametrów to interesowało by mnie 16 bitów rozdzielczości a częstotliwość próbkowania ok 30kHz. A nie można by wykorzystać pamięci flash np at45db041d lub podobnej?
  • REKLAMA
  • #10 4426598
    autoservice
    Poziom 20  
    Posty: 516
    Pomógł: 7
    Ocena: 16
    ... przecież flash zaraz padnie, ma okreslona liczbe programowan. to nie SRAM !
    Pzdr.
  • #11 4426708
    marek_Łódź
    Poziom 36  
    Posty: 3103
    Pomógł: 208
    Ocena: 66
    Zaraz, jak zaraz. Zależnie od liczby dopuszczalnych programowań możemy liczyć co najmniej kilkaset tysięcy sekund nagrania, więc nie tak mało. No ale z pewnością statyczny ram jest lepszy.
  • #12 4426982
    djnick
    Poziom 11  
    Posty: 63
    Ocena: 2
    co racja to racja flash by długo nie pochodził.Tu mamy do czynienia z ciągłym zapisem i odczytem pamięci. To może Macie jakiś pomysł na jakąś kość z SRAM-em?

    Chciałem wszystko zrobić na jednej magistrali szeregowej (SPI lub TWI) tak by próbki z a/c trafiału bezpośrednio do pamięci (SRAM) i z pamięci do c/a. Wszystko sterowane przez mikro.



    A może by tak zastosować magistrale równoległą, jakbym zmniejdszył rozdzielczość do 12 bitów zastosował przetworniki z wyjsciami i wejsciami danych cufrowych równoległych i kompatybilne ze sobą, szyne adresową na 19lini, osobną szyna danych 8 bitów.
  • #13 4427043
    Batmanmen
    Poziom 15  
    Posty: 205
    Pomógł: 9
    Ocena: 4
    Cytat:
    Chciałem wszystko zrobić na jednej magistrali szeregowej (SPI lub TWI)

    Nie jest to odpowiedz ścisła na twoje pytanie ale może cię zainteresuje TDA1543, DAC, 2x16bit, I2S (można to pod SPI podciągnąć). Dostępna nie tylko w sklepach internetowych.
  • #14 4427095
    djnick
    Poziom 11  
    Posty: 63
    Ocena: 2
    TDA 1543 całkiem ciekawa propozycja i cena nie jest taka zaporowa.
  • #15 4427215
    marek_Łódź
    Poziom 36  
    Posty: 3103
    Pomógł: 208
    Ocena: 66
    Jeśli interesują Cię czasy rzędu pojedynczych sekund, to wystarczy SRAM szeregowy. Większe czasy rejestracji wymagają zainstalowania porządnego kawałka RAM i wtedy lepiej zrobić to na bazie pamięci równoległej, a przetworniki mogą być zarówno szeregowe, jak i równoległe (nie jest toi krytyczny element w tym systemie).
  • #16 4427339
    djnick
    Poziom 11  
    Posty: 63
    Ocena: 2
    mama jeszcze pytanie odnośnie sterowania długością opóżnienia w takim układzie. Spotykałem sie zawsze z regulacją po przez zmiane częstotliwości próbkowania. Nie można by regulacji tej dokonywać poprzez zmiane długości dostępnej pamięci przeznaczonej do zapisu? Wowczas można by było dobierać precyzyjnie czas opóżnienia. Czy dobrze rozumuje?
  • #17 4427703
    marek_Łódź
    Poziom 36  
    Posty: 3103
    Pomógł: 208
    Ocena: 66
    W sumie cała zabawa polega na współbieżnym zapisie-odczycie w dwóch punktach bufora cyklicznego. Niezależnie od długości opóźnienia można operować całą przestrzenią pamięci (piszemy od zera do ADmax, po czym zaczynamy znowu od zera), natomiast opóźnienie można regulować ustalając określoną odległość wskaźnika odczytu od punktu zapisu. Z pewnością jest to lepsze od operowania częstotliwością próbkowania, gdzie zakres regulacji jest ograniczony, a zmiana częstotliwości wpływa na jakość sygnału.

    W przypadku przesuwania wskaźnika, możemy ustawić dowolny czas opóźnienia od zera do Admax/fsamp (Max ilość próbek/częstotliwość próbkowania).
  • #18 4428836
    djnick
    Poziom 11  
    Posty: 63
    Ocena: 2
    Dzięki Marku za te informacje odnośnie regulacji opóźnienia. To faktycznia chyba najlepsza metoda.

    Chyba na początek bede chciał wykonać układ na przetwornikach 12 bitowych i dwuch pamięciach SRAM współadresowych, gdzie w jednej bedzie 8LSB a w drugiej 4MSB. Potrzeba mi do tego dwie kości po 2MB. Macie jakieś propozycje?
  • #19 4429140
    marek_Łódź
    Poziom 36  
    Posty: 3103
    Pomógł: 208
    Ocena: 66
    Rozumiem, że chodzi o 2 megabity, a nie megabajty (to by było ze 30 sekund opóźnienia). Najprościej zastosować kości o organizacji 16-bitowej np. to:

    SR614016VHSA10T (dostępne w tme.pl w bardzo rozsądnej cenie)
    Generalnie będzie problem z adresowaniem, bo proste avry nie mają magistrali pamięciowej (pierwszy, który ma to atmega8515). Poza tym trzeba będzie poświęcić dodatkowe bity na stronnicowanie, no chyba że zastosujesz ładowane z procesora liczniki, co przy sekwencyjnym dostępie jest jak najbardziej uzasadnione.,

    Z drugiej strony jeśli zastosujesz przetworniki szeregowe, stosowanie 12-16 bitowej magistrali danych nie ma żadnego uzasadnienia bo procesor i tak operuje na bajtach, tak więc spokojnie można zastosować jedną kość ośmiobitową 8x256K.
  • #20 4429427
    djnick
    Poziom 11  
    Posty: 63
    Ocena: 2
    Jak obliczyć ilość pamięci potrzebnej do uzyskania opóźnienia przykładowo 4 sekund? Bo ja to liczyłem tak:

    30kHz*16bitów*4sekundy=1.92Mb

    dla próbkowania 30kHz i dla rozdzielczości 16 bitów

    Jesli bym zastosował rozdzielczość 12 bitów to potrzebuje ok 1.5Mb

    Wcześniej troche pomyliłem się w obliczeniach. Wystarczy mi pamięć 256Kb x 16 np SR624016LLP55T. Tylko nie moge do niej znaleść noty katalogowej ani nawet rozkładu wyprowadzeń. Zawtanawiam sie czy nie zmienić mikrokontroler na innego AVR-a z interfejsem pamięci np 8515.
  • REKLAMA
  • #21 4429545
    Ch.M.
    Poziom 27  
    Posty: 1009
    Pomógł: 62
    Ocena: 15
    No nie 30kHz tylko 30kSPS*16bit*4s=1966080bitów=1,875Mb
    Wystarczy dwa razy mniejsza kostka :)
  • #22 4429704
    marek_Łódź
    Poziom 36  
    Posty: 3103
    Pomógł: 208
    Ocena: 66
    30kHz próbkowania=30kSPS (jak się zwał, tak się zwał ;-) )

    Pamieć o organizacji 16 bitowej jest słabo uzasadniona w układzie gdzie masz procesor z 8-bitową szyną danych. Zamiast 256kx16 lepiej zastosować 512kx8 (lub 256kx8), co ułatwi kontakt z procesorem i przy okazji łatwiej się lutuje (tam masz tsop, tutaj np. DIP32). Oczywiście na poziomie programu organizacja może być 12 czy 16 bitowa.

    Żeby jeszcze bardziej zagmatwać sprawę ;) wspomnę tylko o możliwości zastosowania kości pamięci dynamicznej.
  • #23 4430244
    djnick
    Poziom 11  
    Posty: 63
    Ocena: 2
    To prawda zastosowanie 8-mio bitowej pamięci uprości schemat no i oczywiście bedzie kompatybilna z 8-mio bitowym prockiem. Jesli chodzi o pamięci dynamiczne to nie bardzo się w nich orientuje. Słyszałem ze wymagają programowego odświeżania. Co nie zmienia faktu że chetnie czegoś bym sie dowiedział szczególnie jak taka pamięć miała by sie do echa?

    A jakbym jednak zastosował pamięć SRAM szaregową o organizacji 8-mio bitowej tylko nie orientyje sie w czasach dostępu takich pamięci i żadnej nie znam. Jak ktoś sie zetknął z taką pamięcią albo zna jakieś przykładowe kości to mógłby je zaprezentować. Dzięki.
  • #24 4431336
    marek_Łódź
    Poziom 36  
    Posty: 3103
    Pomógł: 208
    Ocena: 66
    Teoretycznie w układzie pracującym sekwencyjnie (cyklicznie) pamięć dynamiczna powinna się odświeżać sama, w sposób naturalny (bez konieczności stosowania żadnych dodatkowych elementów wspomagających), pod warunkiem zachowania odpowiedniej prędkości przemiatania (ewentualnie między cyklami dostępu można dołożyć dodatkowy, szybszy cykl odświeżania). Gdzieś na elektrodzie był taki temat i linki do stosownych aplikacji. Temat jest o tyle ciekawy, że kości o stosunkowo dużej pojemności można wydłubać ze starszych płyt głównych lub kart graficznych.

    Jeśli chodzi o pamięci szeregowe RAM, to jedyne, jakie widziałem z bliska to pamięci FRAM o pojemnościach do 512 kbit i organizacji bajtowej. Niestety cenowo stoją o ząbek wyżej w stosunku do klasycznych RAMów, dając w zamian dostęp szeregowy z czasami dostępu rzędu µs (nie mówiąc o nieulotności). Dokumentacja (pdf) i ceny dostępne na stronach tme.pl pod hasłem FRAM (również bardzo ciekawe układziki z zegarem i watchdogiem)
  • #25 4432801
    djnick
    Poziom 11  
    Posty: 63
    Ocena: 2
    Wygląda na to że pozostane przy pamięci SRAM o organizacji 522x8 lub 256x8. A może ktoś z Was wykonywał już obsługe zewnętrznego przetwornika a/c przez SPI na atmega?
  • #26 4433274
    marek_Łódź
    Poziom 36  
    Posty: 3103
    Pomógł: 208
    Ocena: 66
    Ja tylko bawiłem się jakimiś układami analog devices, ale tam problemy były bardzo specyficzne (kompletnie porypany i niekompatybilny z niczym protokół).
  • #27 4438895
    djnick
    Poziom 11  
    Posty: 63
    Ocena: 2
    Tego się obawiałem. Będzie problem ze znalezieniem odpowiedniego przetwornika a/c . Jest jeszcze jeden problem. Jeśli chce próbkować sygnał z fp=32000Hz to cały cykl zapisu pamięci i odczytu (cało "obróbka" musi trwać maksymalnie 31us. Będzie problem z szeregowym przetwornikiem bo samo "wyciągnięcie" 16 bitów zajmie min 16 taktów to jest 0.628usx16=10us przy kwarcu 16MHz. Poprawcie mnie jak coś źle obliczyłem.
  • #28 4438964
    marek_Łódź
    Poziom 36  
    Posty: 3103
    Pomógł: 208
    Ocena: 66
    djnick napisał:
    Tego się obawiałem. Będzie problem ze znalezieniem odpowiedniego przetwornika a/c . Jest jeszcze jeden problem. Jeśli chce próbkować sygnał z fp=32000Hz to cały cykl zapisu pamięci i odczytu (cało "obróbka" musi trwać maksymalnie 31us. Będzie problem z szeregowym przetwornikiem bo samo "wyciągnięcie" 16 bitów zajmie min 16 taktów to jest 0.628usx16=10us przy kwarcu 16MHz. Poprawcie mnie jak coś źle obliczyłem.


    http://www.datasheetcatalog.com/datasheets_pdf/L/T/C/1/LTC1864.shtml Dostępny w www.tme.pl Trzeba by było wziąść jakiś procesor na 20-24MHz W sumie poza zapisem i odczytem przetworników i pamięci układ ma niewiele do zrobienia, więc spokojnie powinien się wyrobić (zapisy odczyty w torze SPI nie absorbują procesora, więc można to tak zorganizować, że w czasie zapisu/odczytu robi się np obsługę pamięci)

    ps Transfer 16bitów w ATMega8515 przy f=fosc/2=16MHz/2= 8MHz wynosi 2µs
  • #29 4439657
    djnick
    Poziom 11  
    Posty: 63
    Ocena: 2
    To prawda pomyliłem sie stawiając przecinek (głupi błąd) Czyli z czasami nie było by tak źle. Przegłądałem dokumentacje tego LTC1864 posiada całkiem prostą obsługę. Chyba sie na niego zdecyduje. W dokumentacji są jego przykładowe aplikacje. Na pierwszej jest pokazane przejście z magistrali szeregowej na równoległą. Można by było wówczas ominąć procka i zapisać bezpośrednio do pamięci o organizacji 16b podobnie by było z przetwornikiem c/a. Wiem że trochę uparłem sie na tą magistrale równoległą. Dobrze kombinuje czy jednak lepiej zostać przy szeregowej??

    Dodano po 35 [sekundy]:

    To prawda pomyliłem sie stawiając przecinek (głupi błąd) Czyli z czasami nie było by tak źle. Przeglądałem dokumentacje tego LTC1864 posiada całkiem prostą obsługę. Chyba sie na niego zdecyduje. W dokumentacji są jego przykładowe aplikacje. Na pierwszej jest pokazane przejście z magistrali szeregowej na równoległą. Można by było wówczas ominąć procka i zapisać bezpośrednio do pamięci o organizacji 16b podobnie by było z przetwornikiem c/a. Wiem że trochę uparłem sie na tą magistrale równoległą. Dobrze kombinuje czy jednak lepiej zostać przy szeregowej??
  • #30 4439966
    marek_Łódź
    Poziom 36  
    Posty: 3103
    Pomógł: 208
    Ocena: 66
    W sumie i tak w obszarze pamięci masz magistralę równoległą, więc taka, czy inna konwersja serial-parallel-serial wchodzi w grę. Jeśli nie masz elementu "inteligencji" w postaci procesora, czy kości programowalnej, może należałoby poprzestać na układach równoległych (adc, dac), ale to kwestia ceny.

    Inna sprawa, że rozwiązując cały problem w klasycznej cyfrówce (bez procesora czy innego "mózgu" np. pld) będziesz musiał zestawić układ składający się pewnie z kilkunastu kości (dwa liczniki adresu -18-20 bitowe, taktowane przez generator, w tym jeden z dodawaniem odejmowaniem dodatkowych impulsów, dwa porty (trójstanowe) dostępu do pamięci oraz układ synchronicznego nimi i przetwornikami sterujący. Tak więc wspomniany przez Ciebie schemat paralelizacji danych to przedsmak sporo większej całości.

    Korzystając z procesora tych kości masz kilka (procesor, pamięć z zatrzaskiem adresowym, przetworniki) + program powiedzmy w asemblerze.

Podsumowanie tematu

✨ Dyskusja dotyczy doboru pamięci i przetworników A/C do realizacji echa cyfrowego sterowanego mikrokontrolerem ATmega32 lub podobnym. Wskazano, że najlepszym wyborem pamięci będzie SRAM, np. DS1270 (16Mbit, równoległa) lub kości o organizacji 8-bitowej (np. SR614016VHSA10T, SR624016LLP55T) ze względu na kompatybilność z 8-bitową magistralą mikrokontrolera i prostotę obsługi. Zwrócono uwagę na ograniczenia pamięci flash (np. AT45DB041D) ze względu na ograniczoną liczbę cykli zapisu. Alternatywnie rozważano pamięci szeregowe RAM, takie jak FRAM, choć są droższe. W kwestii przetworników A/C rekomendowano układy 12-16 bitowe, np. MX7705 (podwójny A/C 16 bit, SPI) oraz LTC1864 (prosty w obsłudze, dostępny w TME). Dyskutowano o magistrali szeregowej (SPI, TWI) versus magistrali równoległej do komunikacji z pamięcią i przetwornikami, podkreślając, że magistrala równoległa jest bardziej skomplikowana, ale może być uzasadniona przy wyższych wymaganiach prędkości. Poruszono temat regulacji długości opóźnienia echa poprzez zmianę odległości wskaźników zapisu i odczytu w buforze cyklicznym, co jest lepsze niż zmiana częstotliwości próbkowania. Wskazano, że przy próbkowaniu 30 kHz i rozdzielczości 16 bitów do uzyskania 4 sekund opóźnienia potrzebna jest pamięć około 1,9 Mb. Zasugerowano użycie mikrokontrolera AVR z obsługą zewnętrznej pamięci (np. ATmega8515) dla ułatwienia adresowania. Poruszono także kwestie czasów dostępu i transferu danych w SPI przy 16 MHz, które są wystarczające do realizacji projektu. Na wyjściu DAC zaproponowano układ TDA1543 (2x16 bit, I2S). Podsumowując, projekt wymaga kompromisu między pojemnością pamięci, szybkością interfejsów i złożonością układu, a najlepszym rozwiązaniem jest zastosowanie SRAM o organizacji 8 bitowej, przetworników 12-16 bitowych z interfejsem SPI oraz mikrokontrolera z obsługą zewnętrznej pamięci, przy czym regulacja opóźnienia powinna odbywać się przez zmianę odległości wskaźników w buforze pamięci.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA