obsługiwany "na raty".

May 28, 2015 11 Replies

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?


Atlantis pisze:

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.

W dniu 28.05.2015 o 20:45, AlexY pisze:

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

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

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?

W dniu 2015-05-28 o 21:38, Atlantis pisze:

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 :) możesz zrobić nawet 24 bitowy na 3 kościach ;)

Atlantis pisze: [..]

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

Użytkownik "Atlantis" napisał w wiadomości grup

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.

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

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.

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

Użytkownik "Atlantis" napisał w wiadomości grup dyskusyjnych:55683340$0$8388$ snipped-for-privacy@news.neostrada.pl... W dniu 2015-05-29 o 10:40, J.F. pisze:

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.

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.

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

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

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

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ł

W dniu 2015-05-29 o 11:37, Atlantis pisze:

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.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required