Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Jaka pamięć i jaki przetwornik a/c ?

djnick 26 Paź 2007 14:49 2530 32
  • #1 26 Paź 2007 14:49
    djnick
    Poziom 11  

    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!

    0 29
  • #2 27 Paź 2007 17:06
    Batmanmen
    Poziom 15  

    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.

    0
  • #3 27 Paź 2007 18:01
    marek_Łódź
    Poziom 36  

    A po co aż tyle pamięci i w dodatku nieulotnej do echa?

    0
  • #4 27 Paź 2007 19:12
    Batmanmen
    Poziom 15  

    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

    0
  • #5 27 Paź 2007 19:34
    marek_Łódź
    Poziom 36  

    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).

    0
  • #6 27 Paź 2007 21:43
    marenc
    Poziom 24  

    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 ;)

    0
  • #7 28 Paź 2007 14:39
    marek_Łódź
    Poziom 36  

    ...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.

    0
  • #8 29 Paź 2007 14:05
    djnick
    Poziom 11  

    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?

    0
  • #10 29 Paź 2007 15:20
    autoservice
    Poziom 20  

    ... przecież flash zaraz padnie, ma okreslona liczbe programowan. to nie SRAM !
    Pzdr.

    0
  • #11 29 Paź 2007 15:53
    marek_Łódź
    Poziom 36  

    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.

    0
  • #12 29 Paź 2007 17:12
    djnick
    Poziom 11  

    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.

    0
  • #13 29 Paź 2007 17:29
    Batmanmen
    Poziom 15  

    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.

    0
  • #14 29 Paź 2007 17:44
    djnick
    Poziom 11  

    TDA 1543 całkiem ciekawa propozycja i cena nie jest taka zaporowa.

    0
  • #15 29 Paź 2007 18:18
    marek_Łódź
    Poziom 36  

    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).

    0
  • #16 29 Paź 2007 18:48
    djnick
    Poziom 11  

    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?

    0
  • #17 29 Paź 2007 20:18
    marek_Łódź
    Poziom 36  

    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).

    0
  • #18 30 Paź 2007 07:32
    djnick
    Poziom 11  

    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?

    0
  • #19 30 Paź 2007 10:20
    marek_Łódź
    Poziom 36  

    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.

    0
  • #20 30 Paź 2007 12:17
    djnick
    Poziom 11  

    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.

    0
  • #21 30 Paź 2007 13:09
    Ch.M.
    Poziom 27  

    No nie 30kHz tylko 30kSPS*16bit*4s=1966080bitów=1,875Mb
    Wystarczy dwa razy mniejsza kostka :)

    0
  • #22 30 Paź 2007 13:53
    marek_Łódź
    Poziom 36  

    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.

    0
  • #23 30 Paź 2007 16:50
    djnick
    Poziom 11  

    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.

    0
  • #24 30 Paź 2007 20:54
    marek_Łódź
    Poziom 36  

    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)

    0
  • #25 31 Paź 2007 11:15
    djnick
    Poziom 11  

    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?

    0
  • #26 31 Paź 2007 14:16
    marek_Łódź
    Poziom 36  

    Ja tylko bawiłem się jakimiś układami analog devices, ale tam problemy były bardzo specyficzne (kompletnie porypany i niekompatybilny z niczym protokół).

    0
  • #27 02 Lis 2007 09:16
    djnick
    Poziom 11  

    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.

    0
  • #28 02 Lis 2007 09:47
    marek_Łódź
    Poziom 36  

    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

    0
  • #29 02 Lis 2007 13:34
    djnick
    Poziom 11  

    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??

    0
  • #30 02 Lis 2007 15:04
    marek_Łódź
    Poziom 36  

    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.

    0