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.

[PIC12F683][C] - jak zrobić generowanie tonu na PWM

kangyooni 03 Sie 2009 21:39 1647 2
  • #1 03 Sie 2009 21:39
    kangyooni
    Poziom 17  

    Witam,

    Przymierzam się do projekciku - chociaż na PIC jeszcze nic nie robiłem.

    Otóż chciałbym przy pomocy 12F683 @20MHz generować przebiegi akustyczne pseudo-sinus po 2 nałożone na siebie - konkretnie tony DTMF (telefoniczne). Poniżej jest banalny (!) przykład jak to zrobić w PicBasic Pro:

    Code:
    FREQOUT 0,100,697,1209

    - generuje cyfrę 1 (697Hz + 1209Hz) o czasie 100ms. Na pinie 7 (GP0) mamy gotowy przebieg do wyprowadzenia w linię.

    Niestety jednak nie będę umiał zrobić nic więcej w tym języku, więc chciałem ugryźć to w C lub w assemblerze. Tutaj problem: JAK? Myślałem nad zapisywaniem fragmentów spróbkowanych sinusoid i odtwarzanie tego w różnym rytmie, ale czuję że nie tędy droga, funkcja byłaby niemiłosiernie rozrośnięta. Ktoś ma pomysł albo gotowca? W sieci znalazłem tylko to, co powyżej.

    Z góry dzięki.

    0 2
  • #2 04 Sie 2009 22:44
    kangyooni
    Poziom 17  

    W miarę jak dalej szukam, temat robi się ciekawszy. Znalazłem oryginalną notę Microchipa (AN655 D/A Conversion Using PWM and R-2R Ladders to Generate Sine and DTMF Waveforms). Używa tabel siedmiu spróbkowanych przebiegów - dla każdej częstotliwości składowej. Działa albo na sprzętowym PWM, albo mostku R-2R. Natomiast - tu jestem w szoku - FREQOUT może generować dowolne zestawy częstotliwości i nawet nie wymaga sprzętowego PWM-a! - robi to na dowolnym pinie. Jakiś sprytny algorytm, który chciałbym poznać :D

    0
  • #3 26 Sie 2009 22:24
    CDMaster
    Poziom 14  

    Nigdy nie pisałem w PicBasic, ale możliwe, że cała implementacja jest ukryta. Generowanie PWM jest bardzo proste. Potrzeba do tego tylko Timera i obsługi przerwań i rzeczywiście można to zrobić na każdym pinie:D Sam korzystam z tego, bo steruję zasilaniem żarówki przez optotriak z wykrywaniem zera. Tam możliwy jest tylko PWM o częstotliwości 100Hz, a PIC na którym pracuję z danym zegarem może działać minimalnie na 1kHz...

    0