RTV forum PL | NewsGroups PL

Jak wykorzystać Covox do stworzenia 16-bitowego DAC na dwóch portach w MCU?

Covox obsługiwany "na raty".

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Jak wykorzystać Covox do stworzenia 16-bitowego DAC na dwóch portach w MCU?

Atlantis
Guest

Thu May 28, 2015 6:02 pm   



Ponieważ nie przepadam za jakością audio z PWM-a w ośmiobitowych
mikrokontrolerach, lubię czasem zastosować starą, dobrą drabinkę
rezystorową (Covox) - o ile mam tylko wolny port. IMO jest to rozsądny
kompromis pomiędzy prostotą i ceną PWM-a, a jakością oferowaną przez
zewnętrzny DAC. Poza tym nie trzeba aż tak dokładnie pilnować, żeby
częstotliwość taktowania była odpowiednio wysoka.

Zastanawiam się jednak nad dwiema sytuacjami:

1) Chcemy zrobić przetwornik 16 bit, wykorzystując dwa porty MCU.
2) Mamy procesor w rodzaju Atmego8, który ma tylko jeden cały port
wyprowadzony na piny i akurat pechowo niektóre z nich obsługują
alternatywne funkcje, których potrzebujemy.

Czy w takim wypadku możliwe jest sterowanie rezystorami z dwóch różnych
portów i ładowanie wartości w dwóch etapach? Czy też spowoduje to
wyczuwalną różnicę w brzmieniu dźwięku?

AlexY
Guest

Thu May 28, 2015 6:45 pm   



Atlantis pisze:
Quote:
Ponieważ nie przepadam za jakością audio z PWM-a w ośmiobitowych
mikrokontrolerach, lubię czasem zastosować starą, dobrą drabinkę
rezystorową (Covox) - o ile mam tylko wolny port. IMO jest to rozsądny
kompromis pomiędzy prostotą i ceną PWM-a, a jakością oferowaną przez
zewnętrzny DAC. Poza tym nie trzeba aż tak dokładnie pilnować, żeby
częstotliwość taktowania była odpowiednio wysoka.

Zastanawiam się jednak nad dwiema sytuacjami:

1) Chcemy zrobić przetwornik 16 bit, wykorzystując dwa porty MCU.
2) Mamy procesor w rodzaju Atmego8, który ma tylko jeden cały port
wyprowadzony na piny i akurat pechowo niektóre z nich obsługują
alternatywne funkcje, których potrzebujemy.

Czy w takim wypadku możliwe jest sterowanie rezystorami z dwóch różnych
portów i ładowanie wartości w dwóch etapach? Czy też spowoduje to
wyczuwalną różnicę w brzmieniu dźwięku?


Audiofile wyczują, ja bym wystawił wyższy bajt a potem niższy, czas
między nimi to będzie pewnie z 1uS, membrana głośnika dopiero zacznie
się przemieszczać. Aczkolwiek nigdy tego nie robiłem, gdybym musiał mieć
te 16bitów to by znaczyło że konieczna jest "czystość" sygnału, użyłbym
jakichś buforów ze wspólną linią przepisania wejścia na wyjście albo
rejestru przesuwnego.

--
AlexY
http://faq.enter.net.pl/simple-polish.html
http://www.pg.gda.pl/~agatek/netq.html

Grzegorz Kurczyk
Guest

Thu May 28, 2015 7:07 pm   



W dniu 28.05.2015 o 20:45, AlexY pisze:

Quote:
Audiofile wyczują, ja bym wystawił wyższy bajt a potem niższy, czas
między nimi to będzie pewnie z 1uS, membrana głośnika dopiero zacznie
się przemieszczać. Aczkolwiek nigdy tego nie robiłem, gdybym musiał mieć
te 16bitów to by znaczyło że konieczna jest "czystość" sygnału, użyłbym
jakichś buforów ze wspólną linią przepisania wejścia na wyjście albo
rejestru przesuwnego.


Przy CLK=16MHz dwa rozkazy OUT jeden po drugim dadzą 62,5ns opóźnienia.
Ale zastanawiam się czy jest sens na 8miobitowcu bawić się w Hi-Fi ;-)

Pozdrawiam
Grzegorz

Atlantis
Guest

Thu May 28, 2015 7:38 pm   



W dniu 2015-05-28 o 20:45, AlexY pisze:

Quote:
się przemieszczać. Aczkolwiek nigdy tego nie robiłem, gdybym musiał mieć
te 16bitów to by znaczyło że konieczna jest "czystość" sygnału, użyłbym
jakichś buforów ze wspólną linią przepisania wejścia na wyjście albo
rejestru przesuwnego.

To fakt. Jednak prawdę mówiąc opcja z 16 bitami była bardziej
hipotetycznym pytaniem - tutaj w praktyce już prędzej użyłbym jakiegoś
DAC na I2S.

Bardziej interesuje mnie druga opcja. Weźmy na przykład Atmegę 8 -
jedynym "pełnym" portem jest tam PORTD, który jednakże dzieli piny z
UART-em i zewnętrznymi przerwaniami, które będą mi potrzebne. Czy nic
nie stoi na przeszkodzie, żeby podpiąć Covox-a do dwóch różnych portów,
a potem ładować do nich cały bajt w dwóch etapach? To chyba nie powinno
być słyszalne?

janusz_k
Guest

Thu May 28, 2015 8:47 pm   



W dniu 2015-05-28 o 21:38, Atlantis pisze:
Quote:
W dniu 2015-05-28 o 20:45, AlexY pisze:

się przemieszczać. Aczkolwiek nigdy tego nie robiłem, gdybym musiał mieć
te 16bitów to by znaczyło że konieczna jest "czystość" sygnału, użyłbym
jakichś buforów ze wspólną linią przepisania wejścia na wyjście albo
rejestru przesuwnego.

To fakt. Jednak prawdę mówiąc opcja z 16 bitami była bardziej
hipotetycznym pytaniem - tutaj w praktyce już prędzej użyłbym jakiegoś
DAC na I2S.
Prościej jest użyć 74HC595 po spi, można a nawet należy wykorzystać nogi

od programowania procka, obsługa banalna, jest wsparcie sprzętowe,
zajmuje tylko 3 nogi procka. Na wyjsciach 595 dajesz drabinkę rezystorów
i masz covox-a Smile
możesz zrobić nawet 24 bitowy na 3 kościach ;)


--
Pozdr

Janusz_K

AlexY
Guest

Thu May 28, 2015 11:22 pm   



Atlantis pisze:
[..]
Quote:
Bardziej interesuje mnie druga opcja. Weźmy na przykład Atmegę 8 -
jedynym "pełnym" portem jest tam PORTD, który jednakże dzieli piny z
UART-em i zewnętrznymi przerwaniami, które będą mi potrzebne. Czy nic
nie stoi na przeszkodzie, żeby podpiąć Covox-a do dwóch różnych portów,
a potem ładować do nich cały bajt w dwóch etapach? To chyba nie powinno
być słyszalne?

Ta sama zasada co pisałem wcześniej, da się, tylko ponownie, bity
wystawione jako pierwsze powinny być te wyższe (zgrubne wysterowanie) a
potem mniej znaczące bity z drugiego portu, tyle że w tym przypadku
odstęp czasowy może być ciut dłuższy ze względu na manipulacje bitami.

Zamiast operacji (16bitowy DAC na 2ch pełnych portach)
A->P1
B->P2
trzeba:
1 zapalać poszczególne bity (może okazać się szybsze [16 rozkazów dla
8bitów] a na pewno bezpieczniejsze)
albo
1 podzielić bity wedle dostępnych bitów w portach
2 porozstawiać je w bajtach
3 porobić zmienne dla poszczególnych portów
4 robić and z pozostałymi bitami portu i dopiero zapis.

Najlepiej jednak rejestr przesuwny, Janusz podał konkretny przykład, bo
tą metodą da się ale to więcej roboty niż to warte.

To takie moje rozważania, właśnie staram się naumieć PIC'e i mi się
mózgownica od nich lasuje... co za prymitywny szajs...

--
AlexY
http://faq.enter.net.pl/simple-polish.html
http://www.pg.gda.pl/~agatek/netq.html

J.F.
Guest

Fri May 29, 2015 8:40 am   



Użytkownik "Atlantis" napisał w wiadomości grup
Quote:
1) Chcemy zrobić przetwornik 16 bit, wykorzystując dwa porty MCU.
2) Mamy procesor w rodzaju Atmego8, który ma tylko jeden cały port
wyprowadzony na piny i akurat pechowo niektóre z nich obsługują
alternatywne funkcje, których potrzebujemy.

Czy w takim wypadku możliwe jest sterowanie rezystorami z dwóch
różnych
portów i ładowanie wartości w dwóch etapach? Czy też spowoduje to
wyczuwalną różnicę w brzmieniu dźwięku?

a) spowoduje,
b) jesli czas miedzy zmianami bedzie krotki, to moze niezauwazalne,
c) teoretycznie rzecz biorac, to by sie dalo skompensowac w nastepnym
kroku. Ale Atmega to nie DSP.

d) sa mozliwe rozwiazania ukladowe aby zmieniac 16 bit naraz,

e) myslisz ze rezystory i porty sa na tyle dokladne, ze z tego wyjdzie
dobry przetwornik 16 bit ?

f) DAC potanialy ...

g) a moze 8 bit + PWM ?

J.

Atlantis
Guest

Fri May 29, 2015 9:37 am   



W dniu 2015-05-29 o 10:40, J.F. pisze:

Quote:
e) myslisz ze rezystory i porty sa na tyle dokladne, ze z tego wyjdzie
dobry przetwornik 16 bit ?

Rozważania nad 16 bitowym Covoxem miały charakter na wpół teoretyczny.
W praktyce interesowała mnie kwestia ośmiobitowego przetwornika,
sterowanego z dwóch portów.


Quote:
g) a moze 8 bit + PWM ?

W przypadku 8 bitów Covox ciągle bije PWM na głowę pod względem jakości
i prostoty obsługi.

J.F.
Guest

Fri May 29, 2015 10:02 am   



Użytkownik "Atlantis" napisał w wiadomości grup
dyskusyjnych:55683340$0$8388$65785112@news.neostrada.pl...
W dniu 2015-05-29 o 10:40, J.F. pisze:
Quote:
e) myslisz ze rezystory i porty sa na tyle dokladne, ze z tego
wyjdzie
dobry przetwornik 16 bit ?

Rozważania nad 16 bitowym Covoxem miały charakter na wpół
teoretyczny.
W praktyce interesowała mnie kwestia ośmiobitowego przetwornika,
sterowanego z dwóch portów.

No to:
-zmiany beda wieksze, bo to nie sa zaklocenia na 8-smym co do wartosci
bicie, tylko np 5-tym,
-czas zaklocen jest nadal krotki.

Quote:
g) a moze 8 bit + PWM ?
W przypadku 8 bitów Covox ciągle bije PWM na głowę pod względem
jakości
i prostoty obsługi.

Mam na mysli covox kilkubitowy, ale z oversamplingiem.
Powinno sie wycisnac kilka dodatkowych bitow.

Tak nawiasem mowiac - przy wysokiej czestotliwosci zegara timera PWM
powinno dac dobre rezultaty, porownywalne z covox.

J.

Piotr Wyderski
Guest

Fri May 29, 2015 11:21 am   



Atlantis wrote:

Quote:
Ponieważ nie przepadam za jakością audio z PWM-a w ośmiobitowych
mikrokontrolerach

Jakość audio "z PWMa" może być znakomita, zwłaszcza, jeśli ten PWM
jest zrobiony sprytniej, np. w postaci sigma-delta. Nie z PWMem
wiec problem, tylko z jego realizacją -- może tu warto nieco popracować?
Nieco, bo jeśli nakłady będą duże, to...

Quote:
a jakością oferowaną przez zewnętrzny DAC.

A co z prostota oferowana przez wewnętrzny DAC?
IMHO nie warto walczyć z drabinkami, tylko zmienić MCU
na bardziej pasujący do zastosowania. Liczba możliwości
dostępnych na rynku jest trudna do ogarnięcia. W końcu
ten 21. po coś chyba mamy...

Pozdrawiam, Piotr

Paweł Hadam
Guest

Fri May 29, 2015 7:24 pm   



W dniu 2015-05-28 o 20:02, Atlantis pisze:

Quote:
Czy w takim wypadku możliwe jest sterowanie rezystorami z dwóch różnych
portów i ładowanie wartości w dwóch etapach? Czy też spowoduje to
wyczuwalną różnicę w brzmieniu dźwięku?


Ja bym się raczej zastanowił jaką tolerancję muszą mieć użyte rezystory
(albo jak wyselekcjonować powtarzalny zestaw na drabinkę R-2R), żeby
rozrzut na najstarszych bitach nie kasował przyrostu dokładności
sygnałów z bitów najmłodszych. To będzie miało największe znaczenie, a
nie nawet us na zapisie do portu (przy generacji sygnału audio).

Pozdrawiam,
Paweł

Michał Lankosz
Guest

Sat May 30, 2015 12:10 pm   



W dniu 2015-05-29 o 11:37, Atlantis pisze:
Quote:
W dniu 2015-05-29 o 10:40, J.F. pisze:

e) myslisz ze rezystory i porty sa na tyle dokladne, ze z tego wyjdzie
dobry przetwornik 16 bit ?

Rozważania nad 16 bitowym Covoxem miały charakter na wpół teoretyczny.
W praktyce interesowała mnie kwestia ośmiobitowego przetwornika,
sterowanego z dwóch portów.


g) a moze 8 bit + PWM ?

W przypadku 8 bitów Covox ciągle bije PWM na głowę pod względem jakości
i prostoty obsługi.


A może STM32F051? Masz tu 12-bit DAC. Dźwięk z niego jest o niebo lepszy
od Covoxa! Przy okazji jest ADC jeśli takowy Ci potrzebny np. w celu
rejestrowania komunikatów.

--
Michał

elektroda NewsGroups Forum Index - Elektronika Polska - Jak wykorzystać Covox do stworzenia 16-bitowego DAC na dwóch portach w MCU?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map