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

Generowanie kodów DTMF na mikrokontrolerach 89c51 - czy to możliwe?

MES Mariusz 14 Lis 2004 17:23 2424 7
REKLAMA
  • #1 985044
    MES Mariusz
    Poziom 36  
    Posty: 5452
    Pomógł: 8
    Ocena: 224
    Czy komuś udało się generować kody DTMF na 89c51 lub pokrewnych?
    Nie mówię o AVR, bo tam sprawa jedt prosta (zwłaszcza, gdy ma się pod ręką Bascoma).
  • REKLAMA
  • #2 985209
    elektro255
    Poziom 15  
    Posty: 178
    Pomógł: 4
    Ocena: 1
    sprubuj wygenerować odpowiednią częstotliwość za pomocą bascomowego sound

    tutaj znajdziesz częstotliwości jakie są potrzebne do wygenerowania każdego sygnału http://www.w4zt.com/freqs/dtmf.html
  • REKLAMA
  • #3 985421
    shg
    Poziom 35  
    Posty: 2289
    Pomógł: 339
    Ocena: 135
    no tak, tylko, że trzeba na raz generować 2 tony i je zmiksować, a BASCOMowy sound chyba nie jest "wielozadaniowy" (czytaj na przerwaniach :D ) i blokuje proca
  • #4 985717
    Xitami
    Poziom 29  
    Posty: 1130
    Pomógł: 118
    Ocena: 31
    Potrzebny przetwornik C/A np. DAC08, drabinka R-2R, albo po prostu scalony generator DTMF, na moje oko do 10zł coś się znajdzie.
  • REKLAMA
  • #5 986086
    shg
    Poziom 35  
    Posty: 2289
    Pomógł: 339
    Ocena: 135
    Xitami napisał:
    Potrzebny przetwornik C/A np. DAC08, drabinka R-2R

    Wystarczy przetwornik 2 bitowy (an nawet 1.5 bitowy ;) , czyli trzy możliwe napięcia).
    Albo nawet dwa przetworniki jednobitowe + sumator :D, czyli 2 rezystory i tym właśnie się zajmiemy)

    na każdy z pinów podajemy dwie częstotliwośći odpowiadające częstotliwościom sygnałów DTMF. Np. dla "1" będą to 697 i 1209 Hz
    Po "zmixowaniu na rezystorach dostajemy coś takiego jak na rysunku dtmf_sq.gif. tam jest jeszcze interpolacja sin(x)/x na potrzeby wyświetlania, co może trochę "namieszać", ale generalnie dostajemy na wyjściu sygnał o 3 poziomach.

    Teraz taki sygnał przepuszczamy przez filtr dolnoprzepustowy (ja zastosowałem Butterwortha 4 rzędu) fc=1600Hz, ale jak to będzie zwykły RC 1 rzędu, też się raczej nic nie stanie, mam nadzieję...

    I w ten oto "magiczny" sposób dostajemy to, co widać na rysunku dtmf_sqfil.gif. Poniżej dla porównania DTMF wygenerowany programowo...

    Wszystkie trzy sygnały w pliku dtmf.rar, wav 8bit 44.1kHz po 1 sekundzie

    --------

    W ramach dalszych badań - filtr 1 rzędu to trochę mało, minimum drugiego, chociaż harmoniczne najniższej częstotliwośći w DTMF (697Hz) leżą i tak powyżej częstotliwości najwyższej (1633), więc jeżeli odbiornik do detekcji częstotliwości stosuje pętle PLL, to nie powinno być problemów.

    Tony można generować np tak:
    Dla naszej "1" okresy wynoszą odpowiednio 1434 i 827 cykli dla rezonatora 12MHz, czyli ich połówki to 717 i 414 cykli
    mamy 2 liczniki a i b i dwa piny x i y
    a=717
    b=414
    petla:
    a=a-1
    jezeli a=0 to x = not(x) a=717
    b=b-1
    jeżeli b=0 to y = not(y) b=414
    skocz do petla

    Założenie jest takie, że cała pętla wykonuje się w jednym cyklu, co jest oczywiście nonsensem :D
    I teraz albo bawimy się w cyklowanie (tak jak sie robilo dema na C64 :D), odpowiednio dobieramy wartości ładowane do liczników i piszemy procedurę w asm, albo robimy wszystko na przerwaniach i timerach, a to się da nawet na jednym timerze zrobić :!: i przy okazji generator DTMF nie będzie blokował procka :D :D
    Załączniki:
    • dtmf.rar (26.41 KB) Musisz być zalogowany, aby pobrać ten załącznik.
    • Generowanie kodów DTMF na mikrokontrolerach 89c51 - czy to możliwe? dtmf_sq.gif (11.74 KB) Musisz być zalogowany, aby pobrać ten załącznik.
    • Generowanie kodów DTMF na mikrokontrolerach 89c51 - czy to możliwe? dtmf_sqfil.gif (13.27 KB) Musisz być zalogowany, aby pobrać ten załącznik.
    • Generowanie kodów DTMF na mikrokontrolerach 89c51 - czy to możliwe? dtmf_gen.gif (12.33 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #6 2850819
    ewsd75
    Poziom 13  
    Posty: 90
    Ocena: 20
    Bawiąc się DTMF - e najlepiej jest stosować układy nadajnika i odbiornika tego kodu. Może i procki potrafią wygenerować ( AVR-y Bascom) kod DTMF ale pozostaje jeszcze sprawa odpowiedniej filtracji sygnału. A układy przeznaczone do DTMF mają w swojej budowie filtry cyfrowe i jądro procesorka DSP. A nie można zastapić procka DSP zwykłym prockiem. A generując prosty kod BCD, na wyjściu układu DTMF otrzymamy sygnał częstotliwościowy. I tak jest najlepiej. Jak to wszystko poskładamy w całośc to przesyłając przez linię telefoniczą mamy pewność że sygnał dotarł bez zniekształceń.
  • #7 2851213
    morph13
    Poziom 25  
    Posty: 987
    Pomógł: 25
    Ocena: 32
    ewsd75 napisał:
    ... układy przeznaczone do DTMF mają w swojej budowie .filtry.... jądro procesorka DSP. A nie można zastapić procka DSP zwykłym prockiem......


    Chwila, chwila, kolego czy za bardzo sie nie rozpędiłeś ....... jaka kość do generacji DTFM-u (domyślnie to przyjmuje kierując się wypowiedzą) ma jądro (rdzeń, core) DSP ????????. Gdyby tak było kosztowałaby 10 krotnie więcej (co najmniej) a poza tym to byłoby czyte marnowanie "mocy procka DSP" na "głupoty".
    Analiza sygnału DSP lub innego analogowego - to inna sprawa, ale nigdy nie zwykle scalaki do generacji kodu DTMF.

    ele mid - Jeśli możesz to daj scalak dla DTMF-u, jeśli nie to zrób jak napisał shg. A swoją drogą shg ładne Ci wyszły te przebiegi :-).
    a jak wiadomo czasami jeden obrazek jest więcej wart niz 1k :-) słów.

    Oczywiście zastapienie DSP zwykłym prockiem jest nierealne a pewne urzeczywistnienie tych planów może dać tylko DSPic ale to już inna bajka....
  • #8 2852648
    ewsd75
    Poziom 13  
    Posty: 90
    Ocena: 20
    Mówiąc scalaki do DTMF mam na myśli układ MT8870 - odbiornik kodu DTMF. Na wyjściach są stany 0 i 1 w kodzie binarnym. Układ dekoduje kod częstotliwościowy na kod binarny, a nadajnik działa odwrotnie kod binarny dekoduje na odpowiednią częstotliwość. Porównałem w modemie który zbudowałem i podłączyłem go bezpośrednio na centrali telefonicznej i lepiej działa układ z odbiornikem i nadajnikem DTMF niż częstotliwości generowane przez mikrokontroler ( AVR) . W karcie katalogowej w/w układu znajdziesz filtr cyfrowy. Może nazwanie "jądrem DSP" to zamocne stwierdzenie za co przepraszam. Ale filtr cyfrowy tam jest. :D

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy możliwości generowania kodów DTMF na mikrokontrolerach 89c51. Wskazano, że generowanie dwóch jednoczesnych tonów DTMF wymaga miksowania częstotliwości, co jest trudne do realizacji za pomocą prostych funkcji dźwiękowych w Bascomie ze względu na blokowanie procesora. Proponowane rozwiązania sprzętowe obejmują zastosowanie przetworników cyfrowo-analogowych (DAC08, drabinka R-2R) lub scalonych generatorów DTMF, które kosztują około 10 zł. Opisano również metodę generowania sygnału DTMF za pomocą dwóch jednobitowych przetworników i sumatora rezystorowego, a następnie filtracji dolnoprzepustowej (np. filtr Butterwortha 4. rzędu) w celu uzyskania odpowiedniego sygnału. Podkreślono, że dedykowane układy nadajnika i odbiornika DTMF (np. MT8870) zawierają wbudowane filtry cyfrowe i zapewniają lepszą jakość sygnału niż generacja programowa na mikrokontrolerach. W dyskusji pojawiła się także uwaga, że układy generujące DTMF nie posiadają rdzenia DSP, a filtracja i analiza sygnału DSP to osobna kwestia, wymagająca bardziej zaawansowanych procesorów, takich jak DSPic.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA