'1GenAkustTim0Tim2

Bascom

Czterotonowy Gong drzwiowy.
Program dotyczy gongu drzwiowego, działającego w oparciu o dwa generatory skonstruowane na Timer0 i Timer2.



Uwaga! Przycisk dźwiękowy (poniżej) nie działa w przeglądarce Firefox


'1GenAkustTim0Tim2.bas

 'Czterotonowy gong drzwiowy.

 'Generatory tonów akustycznych, przełączanych krokami pętli For.

 'Zastosowano dwa generatory: Timer0 i Timer2.

 'Wyjście częstotliwości z Portd.3 i 4.

 'Opis pod programem.

 'Opracował Henryk Wydmuch

 'Program zajmuje 25% pamięci.

 

 $regfile = "m8def.dat"                                     'Info dla kompilatora.

 'Stosujemy kwarc 16MHz!.

 $crystal = 7000000                                          'Wpisujemy kwarc 7MHz, a stosujemy 16MHz.

 

 Config Lcd = 16 * 2                                        'Konfiguracja Lcd.

 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5

 

 Config Timer0 = Timer , Prescale = 1                       'Timer0 jako miernik czasu, podział przez 1.

 Config Timer2 = Timer , Prescale = 1

 

 Config Pind.2 = Output                                     '

 

 Config Pind.6 = Input                                      'Przycisk startu.

  Set Portd.6                                               '

  Config Pind.3 = Output                                    'Wyjście generatora0.

  Set Portd.3                                               '

  Config Pind.4 = Output                                    'Wyjście generatora2.

  Set Portd.4                                               '

 

  On Timer0 Licz0                                           'Podprogram Timer0.

  On Timer2 Licz2                                           'Podprogram Timer2.

 

  Dim Bt As Byte                                            'Deklaracje.

  Dim Zm As Byte                                            '

  Dim Wp As Byte                                            '

  Dim Zt As Byte                                            '

  Dim Wd As Byte                                            '

 

  Declare Sub Plcd                                          'Deklaracja Sub.

 

  Enable Interrupts                                         '

 

  Stop Timer0                                                 '

Stop Timer2                                                 '

 

 Cls                                                        'Wyczyść Lcd.

 

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

Do                                                          'Początek pętli głównej programu.

 

If Pind.6 = 0 Then                                          'Jeśli w Portd.6 pojawi się 0...

 

Enable Timer0                                               'Odblokuj Timer0.

Enable Timer2                                               'Odblokuj Timer2.

 

 For Bt = 1 To 4                                            'Pętla For.

 

 If Bt = 1 Then                                             'Jeśli Bt w pętli For ma 1...

   Wp = 35                                                  'Do Wp wpiszemy 35.

   Wd = 55                                                  'Do Wd wpiszemy 55.

   Reset Portd.2                                            'Port podający impuls będzie miał 0.

  Waitms 200                                                'Impuls będzie trwał 200mS.

   Toggle Portd.2                                           'Wyłącz impuls.

 Call Plcd                                                  'Wywołaj podprogram..

  Waitms 10                                                 'Przeciągnij w czasie pierwszy dźwięk.

 

 Else                                                       'W przeciwnym razie...

 

 If Bt = 2 Then                                             '

   Wp = 30                                                  '

   Wd = 52                                                  '

     Reset Portd.2                                          '

 Waitms 1                                                   '

   Toggle Portd.2                                           '

 Call Plcd                                                  '

 

 Else                                                       '

 

 If Bt = 3 Then                                             '

   Wp = 38                                                  '

   Wd = 58                                                  '

     Reset Portd.2                                          '

 Waitms 1                                                   '

   Toggle Portd.2                                           '

 Call Plcd                                                  '

 

 Else                                                       '

 

 If Bt = 4 Then                                             '

   Wp = 53                                                  '

   Wd = 68                                                  '

     Reset Portd.2                                          '

 Waitms 1                                                   '

   Toggle Portd.2                                           '

 Call Plcd                                                  '

   Waitms 200                                               '

 

  Stop Timer0                                               '

  Stop Timer2                                               '

End If                                                      '

End If                                                      '

End If                                                      '

End If                                                      '

 

  Next Bt                                                   'Koniec For.

 

End If                                                      'Koniec warunku, gdy Pind.6=0 .

Loop                                                        '

End                                                         '

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

Licz0:                                                      'Podprogram Timer0.

 Incr Zm                                                    'Przy każdym przepełnieniu Timer0 powiększaj Zm.

 If Zm = Wp Then                                            'Jeśli liczba przepełnień wyniesie tyle co zmienna Wp...

 Toggle Portd.3                                             'Przełącz Portd.3 (który jest wyjściem częstotliwości Timer0).

 Zm = 0                                                     '

 End If                                                     '

Return                                                      'Wróć do programu.

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Licz2:                                                      '

 Incr Zt                                                    '

 If Zt = Wd Then                                            '

 Toggle Portd.4                                             '

 Zt = 0                                                     '

 End If                                                     '

Return                                                      '

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Sub Plcd                                                    'Deklaracja podprogramu Plcd.

 Start Timer0                                               '

 Start Timer2                                               '

 Home                                                       '

 Lcd "Wp=" ; Wp ; " Wd=" ; Wd                               'Pokaż zawartość zmiennych.

 Lowerline                                                  '

 Lcd "Gong"                                                 '

End Sub                                                     '

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

'Objaśnienie:

'W tym programie generatorami dźwięków są dwa generatory: Timer0 i Timer2.

'Wyjścia generatorów to Portd.3 i Portd.4.

'Sygnały mieszają się na rezystancjach 2 x 5,1k.

'Zmieszany dźwięk podany jest na tranzystor BS170, który jest wzmacniaczem - kluczem.

'Tranzystor jest zasilany napięciem zgromadzonym w C3.

'T1 podaje impuls dodatni na BS170. W miarę rozładowywania się C3 wzmocnienie tranzystora maleje aż do zaniku dźwięku.

'W celu uzyskania innych dźwięków, wpisujemy inne wartości do zmiennych Wp i Wd.

'Koniec.