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

[atmega8][bascom]Przepuszczanie sygnału analogowego przez UC

Ture11 15 Maj 2010 00:57 2269 7
REKLAMA
  • #1 8077059
    Ture11
    Poziom 39  
    Witam.
    Może i głupio, ale z ciekawości napisałem programik, którego jedynym zadaniem jest przepuszczanie podanego na wejście ADC dzwięku przez mikroprocesor atmega8 tak, że wychodzi na PWM1a. W sumie to nawet poniekąd mi się to udało, dzwięk przechodził, ale wyjściowa jakość nie była zadowalająca.
    Większość paramerów w programie dobrałem doświadczalnie...
    Otóż:

    -jest sobie kod
    
    $crystal = 100000
    $regfile = "m8def.dat"
    Config Adc = Single , Prescaler = Auto , Reference = Internal
    Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down
    Start Adc
    Dim X As Word
    
    Do
    X = Getadc(5)
    X = Pwm1a
    
    
    Loop
    

    No... Definicja kwarca nie jest pomyłką!!!

    No więc sprawa wygląda następująco:
    atmega chodzi na zewnętrzym kwarcu 27 MHz, ale w bascomie zdefiniowałem go jako 100kHz... TO SIĘ NAZYWA OVERCLOCKING A'LA HARDCORE !!!!!
    Sprawdziłem, że im mniejszą wartość kwarcu podawałem w bascomie, tym lepszej jakości dzwięk wychodził... Więc do tego doszedłem... Właściwie, to nie wiem, jakie jest próbkowanie...

    Od strony technicznej - sygnał ze źródła jest podłączony bezpośrednio do ADC, a głośnik bezpośrednio do PWM1A. Dzwięk przechodzi, ale jest taki "metaliczny"....
    I są szumy...

    Tak się zastanawiam; swoim programem wykorzystałem duże zasoby mikroprocka, a w międzyczasie na elektrodzie sa projekty odtwarzaczy wav dobrej jakości na PWM'ie, które robią podczas odtwarzania tysiące innych rzeczy...

    No to teraz pytam; jak mogę optymalnie dobrać częstotliwości, taktowania , próbkowania i inne? Co powinienem zmienić, aby dzwięk wychodzący był dobrej jakości? Czy da się to zrealizować za pomocą wbudowanego pwm, czy trzeba do tego zewnętrznego DAC'a???? A może jakaś filtracja sygnału wejściowego i wyjściowego?
    Na razie poznałem trochę teorii odnośnie próbkowania, ale jeszcze wielu rzeczy nie rozumiem...

    Dodam jeszcze, że PWM w moim programie jest 8 -bitowy, bo tak najlepiej działa ; przy 10 bitach dzwięj jest piskliwy....


    Z góry dziękuje za pomoc, i z góry przepraszam za ten draczny temat
  • REKLAMA
  • Pomocny post
    #2 8077386
    Karol966
    Poziom 31  
    Na jednej z płytek edukacyjnych jest zrealizowany DAC na wzmacniaczu operacyjnym (+ oczywiście elementy RC) oraz wyjściu PWM z ATmegi16/32 i tam nikt nie kombinuje z kwarcem ;)
  • REKLAMA
  • Pomocny post
    #3 8077469
    mario06
    Poziom 15  
    Nie znam się na bascomie, ale czy w petli do loop nie powinno być Pwm1a = X, b tak jak zostało napisane to wygląda jak by było z czytywanie raz z addc raz z pwm.
    I takie pytanie co do zadeklarowania częstotliwości czy to coś w ogóle da, w zasadzie funkcje delay i inne wykorzystujące opóźnienia po prostu wykonają się szybciej, czyli tak jak by zmniejszyć ich opóźnienie przy standardowo ustalonym zegarze.
  • REKLAMA
  • #4 8077793
    Ture11
    Poziom 39  
    Dzięki za odpowiedzi..
    Karol966 napisał:
    Na jednej z płytek edukacyjnych jest zrealizowany DAC na wzmacniaczu operacyjnym (+ oczywiście elementy RC) oraz wyjściu PWM z ATmegi16/32 i tam nikt nie kombinuje z kwarcem ;)


    Czy DAC,o którym to może OP177 ? Mam książkę Marcina Wiązania, i tam jest taki przykład....

    Co do kolejności PWM1A = x to się przyznaję, że nie pamiętam, bo program pisałem w warsztaciku, i tam on pozostał, natomiast gdy pisałem do Was temat, to już na innym komputerze i byłem zmuszony napisać go ponownie...
  • REKLAMA
  • Pomocny post
    #5 8078009
    Xitami
    Poziom 29  
    [atmega8][bascom]Przepuszczanie sygnału analogowego przez UC
    zamiast R1 + R2 daj potencjometr
    R3=R4, V2 do plusa zasilania
    V1-wejście
    Vout do ADC µC
  • Pomocny post
    #6 8078090
    tmf
    VIP Zasłużony dla elektroda
    A jakiej jakości chcesz mieć dźwięk, skoro ADC w ATMega ma pasmo zaledwie paru kHz. To z trudem wystarcza do zsamplowania w jako takiej jakości mowy. Z drugiej strony są noty aplikacyjne Atmela jak wykorzystać PWM do odtwarzania próbek, więc nie trzeba za bardzo kombinować. Wystarczy wziąć gotowce.
  • #7 8078795
    Ture11
    Poziom 39  
    tmf napisał:
    A jakiej jakości chcesz mieć dźwięk, skoro ADC w ATMega ma pasmo zaledwie paru kHz. To z trudem wystarcza do zsamplowania w jako takiej jakości mowy. Z drugiej strony są noty aplikacyjne Atmela jak wykorzystać PWM do odtwarzania próbek, więc nie trzeba za bardzo kombinować. Wystarczy wziąć gotowce.


    Heh no dobra, szczerze powiem, nie przewidziałem tego... Myślałem, że skoro z próbek da się odtwarzać na pwmie, to i te próbki da się pobierać z adc...


    Kolego Xitami. Niestety nie mogę odczytać obrazka.. Nie ma go...

    EDIT: obrazek się pojawił :-)

    Dodaje jako ciekawostkę nagrany przez wejście liniowe fragment motywu z filmu "Madagaskar" "przetworzony" przez mój "wynalazek" na surowo( tzn bez opisanych przez kolegów zmian)...
    Nagranie ma bardzo małe wzmocnienie.
    Natomiast próby z OPAMP zakończyły się zniechęceniem - może dla tego, że wziąłem TL082 za wzmacniacz operacyjny ? :-)
  • #8 8081401
    tmf
    VIP Zasłużony dla elektroda
    Po odsłuchaniu wydaje mi się, że to problem z ADC - za małe pasmo. Spróbuj z jakimś sygnałem o węższym paśmie - najlepiej z jakąś sinusoidą o znanej częstotliwości, zobaczymy czy ciągle jest ten szum. Jeśli zniknie to sprawa jasna, jeśli nie to jakiś błąd w programie. Próbowałeś z tymi przykładami z noty aplikacyjnej Atmela?
REKLAMA