'GenAkustPing

Bascom

Generator spadającej kulki szklanej.
Program pokazuje na ile sposobów można wykorzystać generator zbudowany na Timer0.
Tutaj emeituje dźwięk spadającej kulki szklanej na porcelanowy podstawek.



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


'GenAkustPing.bas

 'Generator spadającej kulki szklanej na ceramiczny podstawek.

 'Procesor oscyluje z generatorem wenętrznym RC 8MHz.

 'Opis pod programem.

 'Opracował Henryk Wydmuch

 'Program zajmuje 12% pamięci.

 

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

$crystal = 8000000                                          'Informujemy kompilator o frekwencji 8MHz.

 

 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                       '

 

 

 Dim I As Byte                                              'Zmienna operacyjna dla pętli For.

 Dim Wp As Byte                                             'Zawiera liczbę wysokości tonu.

 Dim Zm As Byte                                             'Zawiera liczbę przepełnień Timer0.

 

 Config Pind.0 = Output                                     'Port impulsów ładujących C3.

 Set Portd.0                                                '

 Config Pind.1 = Output                                     'Port wyjściowy impulsów dla Led.

  Set Portd.1                                               '

 Config Pind.3 = Output                                     'Port wyjściowy impulsów dźwiękowych.

  Set Portd.3                                               '

  Config Pind.6 = Input                                     'Port startowy.

  Set Portd.6                                               '

 

  Declare Sub Peng                                          'Podprogram pętli For.

 

  On Timer0 Licz                                            'Włącz podprogram Timer0.

  Enable Interrupts                                         'Odblokuj wszystkie przerwania.

  Enable Timer0                                             'Odblokuj przerwanie Timer0.

 

 Cls                                                        '

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

 Do                                                         'Pętla Do.

 Wp = 10                                                    'Tu wpisz wysokość tonu spadającej kulki.

 

 If Pind.6 = 0 Then                                         'Jeśli przyciśnięto Start.

 

 Start Timer0                                               '

 Lcd "Start"                                                '

 

 Call Peng                                                  '

 

 Waitms 800                                                 '

 

 Call Peng                                                  '

 

 Waitms 600                                                 '

 

Call Peng                                                   '

 

 Waitms 400                                                 '

 

Call Peng                                                   '

 

 Waitms 200                                                 '

 

 Call Peng                                                  '

 

 Waitms 150                                                 '

 

Call Peng                                                   '

 

 Waitms 110                                                 '

 

 Call Peng                                                  '

 

 Waitms 80                                                  '

 

 Call Peng                                                  '

 

 Waitms 60                                                  '

 

Call Peng                                                   '

 

 Waitms 40                                                  '

 

Call Peng                                                   '

 

 Waitms 20                                                  '

 

 Call Peng                                                  '

 

 Waitms 10                                                  '

 

Call Peng                                                   '

 

 Waitms 8                                                   '                                                 '

 

 Call Peng                                                  '                                                '

 

 Waitms 7                                                   '                                                  '

 

Call Peng                                                   '

 

 Waitms 6                                                   '

 

Call Peng                                                   '

 

 Waitms 5                                                   '

 

 Call Peng                                                  '

 

 Waitms 4                                                   '

 

  Call Peng                                                 '

 

  Waitms 3                                                  '

 

Call Peng                                                   '

 

 Waitms 2                                                   '

 

 Call Peng                                                  '

 

 Waitms 1                                                   '

 

Call Peng                                                   '

 

 Waitms 1                                                   '

 

Call Peng                                                   '

 

 Waitms 1                                                   '

 

 Call Peng                                                  '

 

 Waitms 1                                                   '

Call Peng                                                   '

 

 Home                                                       '

 Lowerline                                                  '

 Lcd "Stop"                                                 .

 Waitms 900                                                 'Czekaj aż wybrzmi dźwięk, trzymaj "Stop" na Lcd.

 If Portd.6 = 1 Then                                        'Jeśli nie jest przyciśnięty Start.

 

 Stop Timer0                                                '

 

  Cls                                                       '

 End If                                                     'Koniec warunku If Portd.6 = 1.                                                  '

 

 End If                                                     '

Loop                                                        '

End                                                         '

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

 Licz:                                                      'Podprogram generatora Timer0.

 Incr Zm                                                    'Powiększaj przepełnienia Timer0 (po każdym 256 impulsie)..

 If Zm = Wp Then                                            'Jeśli przepełnień będzie tyle, ile zawiera Wp...

 Toggle Portd.3                                             'Zmień poziom Portu.

 Zm = 0                                                     '

 End If                                                     '

 Return                                                     '

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

Sub Peng:

   For I = 1 To 1                                           'Krocz jeden raz.

  Toggle Portd.0                                            'Port dający impuls na C3.

  Toggle Portd.1                                            'Błyski Led.

  Waitms 2

  Toggle Portd.1                                            'Wyłącz Port.

  Toggle Portd.0                                            'Wyłącz Port.

 Next I                                                     '

 End Sub                                                    'Koniec deklaracji.

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

 'Objaśnienie:

 'Program emituje dźwięki spadającej kulki szklanej.

 'Po naciśnięciu Start (Pind.6=0) pętla ruszy i wyemituje założoną liczbę impulsów

 'Szybkość emisji impulsów podskakującej kulki zwiększa się zmniejszaniem czasów Waitms.

 'Ilość Call Peng w pętli Do decyduje o ilości podskoków kulki.

 'Zawartość zmiennej Wp decyduje o wysokości tonów porcelanowego talerzyka na który spada kulka.

 'Lcd można pominąć.

 'Koniec.