'DTMF_nad9

Bascom

Schemat przedstawia nadajnik tonów DTMF

Urządzenie przeznaczone jest do sterowania dowolnego radiotelefonu przez gniazdo mikrofonowe. Posiada osiem przycisków włączających i wyłączających w odbiorniku (DTMF_odb9) odpowiednie urządzenia. Program procesorowy wykorzystuje tony DTMF z zakresu 1 do 9. Jeden przycisk PX powoduje wysłanie pięciu tonów DTMF.

'DTMF_nad9.bas

 'Generator DTMF.

 'Osiem przycisków P1 - P8 steruje ośmioma kanałami włącz-wyłącz.

 'Tony generuje UM91531.

 'Procesor ATTiny2313 steruje koderem UM91531.

 'Odbiornikiem jest: DTMF-odb9.bas

 'Fusebit A987 ustawiony na 0010, generator wew.4MHz.

 'Pamięć zajęta w 48%.

 'Opracował Henryk Wydmuch.

 

 $regfile = "2313def.dat"                                   'Dyrektywy dla kompilatora.

 $crystal = 4000000                                         'Zastosujemy generator wewnętrzny 4MHz.

 

Config Pind.0 = Input                                       'Konfigurujemy Portd.0 jako wejście.

 Set Portd.0                                                'Ustawiamy poziom wysoki w Portd.0.

Config Pind.1 = Input                                       'Konfigurujemy Portd.1 jako wejście.

 Set Portd.1                                                'Ustawiamy poziom wysoki w Portd.1.

 

Config Portd.2 = Output                                     'Konfigurujemy Portd.2 jako wyjście A.

Config Portd.3 = Output                                     'Konfigurujemy Portd.3 jako wyjście B.

Config Portd.4 = Output                                     'Konfigurujemy Portd.4 jako wyjście C.

Config Portd.5 = Output                                     'Konfigurujemy Portd.5 jako wyjście D.

 

Config Pind.6 = Input                                       'Konfigurujemy Portd.6 jako wejście.

 Set Portd.6                                                'Ustawiamy poziom wysoki w Portd.6.

Config Pinb.0 = Input                                       'Konfigurujemy Portb.0 jako wejście.

 Set Portb.0                                                'Dołączamy rezystor podciągający.

Config Pinb.1 = Input                                       'Konfigurujemy Portb.1 jako wejście.

 Set Portb.1                                                'Dołączamy rezystor podciągający.

Config Pinb.2 = Input                                       'Konfigurujemy Portb.2 jako wejście.

 Set Portb.2                                                'Dołączamy rezystor podciągający.

Config Pinb.3 = Input                                       'Konfigurujemy Portb.3 jako wejście.

 Set Portb.3                                                'Dołączamy rezystor podciągający.

Config Pinb.4 = Input                                       'Konfigurujemy Portb.4 jako wejście.

 Set Portb.4                                                'Ustawiamy poziom wysoki w Portb.4.

Config Pinb.5 = Input                                       'Konfigurujemy Portb.5 jako wejście.

 Set Portb.5                                                'Dołączamy rezystor podciągający.

Config Pinb.6 = Input                                       'Konfigurujemy Portb.6 jako wejście.

 Set Portb.6                                                'Dołączamy rezystor podciągający.

Config Pinb.7 = Input                                       'Konfigurujemy Portb.7 jako wejście.

 Set Portb.7                                                'Dołączamy rezystor podciągający.

 

 A Alias Portd.2                                            'Wyjścia impulsów w kodzie BCD.

 B Alias Portd.3                                            'Zamieniamy nazwy.

 C Alias Portd.4                                            '

 D Alias Portd.5                                            '

 

 P1 Alias Pind.0                                            'Nazwy przycisków w Portach.

 P2 Alias Pind.1                                            '

 P3 Alias Pind.6                                            '

 P4 Alias Pinb.0                                            '

 P5 Alias Pinb.1                                            '

 P6 Alias Pinb.2                                            '

 P7 Alias Pinb.3                                            '

 P8 Alias Pinb.4                                            '

 

 Declare Sub Dtmf_start                                     'Deklarujemy  procedury kolejnych kodów DTMF.

 Declare Sub Dtmf_1                                         '

 Declare Sub Dtmf_2                                         '

 Declare Sub Dtmf_3                                         '

 Declare Sub Dtmf_4                                         '

 Declare Sub Dtmf_5                                         '

 Declare Sub Dtmf_6                                         '

 Declare Sub Dtmf_7                                         '

 Declare Sub Dtmf_8                                         '

 Declare Sub Dtmf_9                                         '

 

 '---------Pętla nadzoruje przyciski P i wywołuje deklaracje.-------------------

  Do                                                        'Start pętli.

 

   '----P1----

   If Pind.0 = 0 Then                                       'Gdy przycisk P1.

   Call Dtmf_start                                          'Wywołaj pierwszą procedurę.

   Waitms 12                                                'Czas pomiędzy tonami.

   Call Dtmf_1                                              '

   Waitms 12                                                '

   Call Dtmf_8                                              '

   Waitms 12                                                '

   Call Dtmf_3                                              '

   Waitms 12                                                '

   Call Dtmf_2                                              '

   End If                                                   'Koniec warunku P1.

   '-----------

 

   '----P2----

   If Pind.1 = 0 Then                                       'Gdy przycisk P2.

   Call Dtmf_start                                          'Wywołaj pierwszą procedurę.

   Waitms 12                                                'Czas pomiędzy tonami.

   Call Dtmf_5                                              '

   Waitms 12                                                '

   Call Dtmf_3                                              '

   Waitms 12                                                '

   Call Dtmf_2                                              '

   Waitms 12                                                '

   Call Dtmf_7                                              '

   End If                                                   'Koniec warunku P2.

   '-----------

 

   '----P3----

   If Pind.6 = 0 Then                                       'Gdy przycisk P3.

   Call Dtmf_start                                          'Wywołaj pierwszą procedurę.

   Waitms 12                                                'Czas pomiędzy tonami.

   Call Dtmf_5                                              '

   Waitms 12                                                '

   Call Dtmf_6                                              '

   Waitms 12                                                '

   Call Dtmf_3                                              '

   Waitms 12                                                '

   Call Dtmf_2                                              '

   End If                                                   'Koniec warunku P3.

   '-----------

 

   '----P4----

   If Pinb.0 = 0 Then                                       'Gdy przycisk P4.

   Call Dtmf_start                                          'Wywołaj pierwszą procedurę.

   Waitms 12                                                'Czas pomiędzy tonami.

   Call Dtmf_6                                              '

   Waitms 12                                                '

   Call Dtmf_1                                              '

   Waitms 12                                                '

   Call Dtmf_3                                              '

   Waitms 12                                                '

   Call Dtmf_5                                              '

   End If                                                   'Koniec warunku P4.

   '-----------

 

   '----P5----

   If Pinb.1 = 0 Then                                       'Gdy przycisk P5.

   Call Dtmf_start                                          'Wywołaj pierwszą procedurę.

   Waitms 12                                                'Czas pomiędzy tonami.

   Call Dtmf_6                                              '

   Waitms 12                                                '

   Call Dtmf_1                                              '

   Waitms 12                                                '

   Call Dtmf_9                                              '

   Waitms 12                                                '

   Call Dtmf_3                                              '

   End If                                                   'Koniec warunku P5.

   '-----------

 

   '----P6----

   If Pinb.2 = 0 Then                                       'Gdy przycisk P6.

   Call Dtmf_start                                          'Wywołaj pierwszą procedurę.

   Waitms 12                                                'Czas pomiędzy tonami.

   Call Dtmf_6                                              '

   Waitms 12                                                '

   Call Dtmf_3                                              '

   Waitms 12                                                '

   Call Dtmf_1                                              '

   Waitms 12                                                '

   Call Dtmf_4                                              '

   End If                                                   'Koniec warunku P6.

   '-----------

 

    '----P7----

   If Pinb.3 = 0 Then                                       'Gdy przycisk P7.

   Call Dtmf_start                                          'Wywołaj pierwszą procedurę.

   Waitms 12                                                'Czas pomiędzy tonami.

   Call Dtmf_7                                              '

   Waitms 12                                                '

   Call Dtmf_2                                              '

   Waitms 12                                                '

   Call Dtmf_1                                              '

   Waitms 12                                                '

   Call Dtmf_4                                              '

   End If                                                   'Koniec warunku P7.

   '-----------

 

   '----P8----

   If Pinb.4 = 0 Then                                       'Gdy przycisk P8.

   Call Dtmf_start                                          'Wywołaj pierwszą procedurę.

   Waitms 12                                                'Czas pomiędzy tonami.

   Call Dtmf_7                                              '

   Waitms 12                                                '

   Call Dtmf_1                                              '

   Waitms 12                                                '

   Call Dtmf_2                                              '

   Waitms 12                                                '

   Call Dtmf_4                                              '

   End If                                                   'Koniec warunku P8.

   '-----------

 

  'Waitms 1

  Loop                                                      'Powtórz pętlę.

  End                                                       'Koniec.

 '------------------------------------------------------------

  '----PROCEDURY----

 

   '--4--

   Sub Dtmf_start                                           'Pierwszy ton DTMF (przy każdym przycisku P).

     Set C                                                  '

     Toggle C                                               '

   End Sub                                                  'Koniec procedury.

 '------------------------------------------------------------

 '--1--

 Sub Dtmf_1                                                 '

     Set A                                                  '

     Toggle A                                               '

   End Sub                                                  '

 '------------------------------------------------------------

 '--2--

 Sub Dtmf_2                                                 '

     Set B                                                  '

     Toggle B                                               '

   End Sub                                                  '

 '------------------------------------------------------------

 '--3--

 Sub Dtmf_3                                                 '

     Set A                                                  '

     Set B                                                  '

     Toggle A                                               '

     Toggle B                                               '

   End Sub                                                  '

 '-----------------------------------------------------------

 '--4--

 Sub Dtmf_4                                                 '

     Set C                                                  '

     Toggle C                                               '

  End Sub                                                   '

 '------------------------------------------------------------

  '--5--

   Sub Dtmf_5                                               '

     Set A                                                  '

     Set C                                                  '

     Toggle A                                               '

     Toggle C                                               '

   End Sub                                                  '

 '------------------------------------------------------------

  '--6--

   Sub Dtmf_6                                               '

     Set B                                                  '

     Set C                                                  '

     Toggle B                                               '

     Toggle C                                               '

   End Sub                                                  '

 '------------------------------------------------------------

  '--7--

   Sub Dtmf_7                                               '

     Set A                                                  '

     Set B                                                  '

     Set C                                                  '

     Toggle A                                               '

     Toggle B                                               '

     Toggle C                                               '

   End Sub                                                  '

 '------------------------------------------------------------

  '--8--

   Sub Dtmf_8                                               '

     Set D                                                  '

     Toggle D                                               '

   End Sub                                                  '

 '------------------------------------------------------------

  '--9--

   Sub Dtmf_9                                               '

     Set D                                                  '

     Set A                                                  '

     Toggle D

     Toggle A                                               '

   End Sub                                                  '

 '------------------------------------------------------------

 'Objaśnienie:

 

 'Uwaga na aplikację: w tabelce kodów wyjściowych DTMF z układu UM91531 pomylono wyjście # z *.

 

 'Działanie nadajnika tonów DTMF:

 'Przycisk Px i wysłanie 5 tonów w paczce. Tony wybrano w zakresie od 1 do 9.

 'Kolejność ich wysłania jest istotna.

 'Zwłoka pomiędzy tonami to 12mS (Waitms 12).

 'Us1 wysyła impulsy w kodzie BCD do kodera Us2, ten zamienia impulsy w tony DTMF i wysyła je szeregowo.

 'Osiem przycisków Px daje możliwość wysłania 8 informacji załącz-wyłącz.

 'Zrezygnowano z wyprodukowania tonów przy pomocy procesora, gdyż nie są one słyszane przez odbiornik UM92870.

 'Koniec.