'Gong4

Bascom



Dzwonek drzwiowy GONG (nie pobiera prądu podczas czuwania)
Poniższy projekt dotyczy czterotonowego dzwonka drzwiowego o brzmieniu podobnym do gongu rurowego. Procesor Atmega8 czuwa nad funkcją opóźnienia po włączeniu zasilania, potrzebnego do ustabilizowania punktów pracy generatorów, załączeniu i wyłączeniu przekaźnika Pk1 podtrzymującego zasilanie, wyłączeniu wzmacniacza mocy po wybrzmieniu dźwięków. Dźwięk gongu otrzymujemy z dwóch głośników stanowiących pewne uproszczenie, ponieważ najlepsze brzmienie pochodziłoby z czterech. Dzwonek posiada dwa przyciski dzwonkowe działające w różnych sytuacjach. Przycisk dzwonkowy1 używamy w sytuacji, gdy dzwonek jest stałe zasilany napięciem w gniazdo +A. Jeśli zależy nam, aby w czasie czuwania dzwonek nie pobierał żadnego prądu użyjemy zasilacza wtyczkowego 12 - 14V/1A dołączonego do gniazda G2, podając napięcie sieci 230V do gniazda G1, dołączając wyjście z zasilacza do gniazda +A i używając przycisku dzwonkowego2.

Zasada działania.
Cztery tony dźwiękowe otrzymujemy z czterech generatorów zbudowanych na dwóch obwodach scalonych 4011. Częstotliwości poszczególnych dźwięków ustawiamy potencjometrami P1, P2, P3, P4. Gasnący dźwięk generatorów zawdzięczamy kondensatorom 10u w bramkach tranzystorów BS170. Kondensatory zostaną naładowane po podaniu impulsu na wejścia 1d, 2d, 3d, 4d. Start poszczególnych generatorów następuje po odblokowaniu wejść 1b, 2b, 3b, 4b. Nad czasem odblokowywania tych wejść czuwa procesor. Tranzystor IFR9530 odłączy napięcie zasilania wzmacniacza mocy TA7230 oraz przedwzmacniaczy na tranzystorach C945 po wybrzmieniu czwartego dźwięku. Jednocześnie rozłączony zostanie przekaźnik Pk1 wyłączając zasilanie zasilacza wtyczkowego. Natężenie dźwięku w głośnikach oraz odpowiednie relacje dźwięków wobec siebie (zdudnienia) ustawiamy potencjometrami P11, P22, P33, P44.


'Gong4.bas

'Program do dzwonka typu Gong.

'Działanie: cztery tony, dźwięk gasnący, tak jak w gongu, wysokość tonu do ustawienia, głośność do ustawienia.

'Przycisk dzwonkowy1 jest przyciskiem, gdy urządzenie jest na stałe załączone.

'Przycisk dzwonkowy2 jest przyciskiem, gdy dzwonek jest odłączany od zasilania.

'Przekaźnik Pk1 podtrzymuje zasilanie do czasu wybrzmienia dźwięku. Następnie, urządzenie nie pobiera prądu.

'+We14V A - wejście napięcia zasilania na stałe lub z zasilacza samowyłączającego się.

'Opracował Henryk Wydmuch.

'Pamięć zajęta w 8%.

'Schemat: Gong4.png

'Fusebit ustawiony na generator wewnętrzny 1MHz (0001).

 

 

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

 $crystal = 1000000                                         'Zastosujemy generator wewnętrzny 1MHz.

 

Config Timer0 = Timer , Prescale = 8                        'Konfiguruj Timer0, jako czasomierz, podział wstępny przez 8.

Config Timer1 = Timer , Prescale = 64                       'Konfiguruj Timer0, jako czasomierz, podział wstępny przez 64.

 

Dim Przep As Word                                           'Zmienna zliczająca przepełnienia Timer0.

Dim Mig As Word                                             'Zmienna zliczająca przepełnienia Timer1.

Dim Tak As Byte                                             'Zmienna otrzyma 1 po upływie chwili od przyciśnięciu przycisku dzwonkowego.

 

Config Pind.0 = Output                                      '

Config Pind.1 = Output                                      '

Config Pind.2 = Output                                      '

Config Pind.3 = Output                                      '

Config Pind.6 = Output                                      'Odblokowuje klucz załączający wzm. m. cz, rozłącza Pk1.

Config Pinc.0 = Output                                      '

Config Pinc.1 = Output                                      '

Config Pinc.2 = Output                                      '

Config Pinc.3 = Output                                      '

Config Pinc.5 = Input                                       'Portc.5 jako przycisk dzwonkowy1.

 

Reset Portd.0                                               'Zeruj Port.

Reset Portd.1                                               'Zeruj Port.

Reset Portd.2                                               'Zeruj Port.

Reset Portd.3                                               'Zeruj Port.

Set Portc.0                                                 'Podciągnij Port.

Set Portc.1                                                 'Podciągnij Port.

Set Portc.2                                                 'Podciągnij Port.

Set Portc.3                                                 'Podciągnij Port.

Set Portc.5                                                 'Podciągnij Port.

Set Portd.6                                                 'Podciągnij Port.

 

1b Alias Portd.0                                            'Portd.0 nazywa się 1b (b jak blokada).

2b Alias Portd.1                                            '

3b Alias Portd.2                                            '

4b Alias Portd.3                                            '

1d Alias Portc.0                                            '

2d Alias Portc.1                                            '

3d Alias Portc.2                                            '

4d Alias Portc.3                                            'Portc.3 nazywa się 4d (d jak dioda).

 

Enable Interrupts                                           'Odblokuj przerwania.

Enable Timer0                                               'Odblokuj przerwania Timer0.

Enable Timer1                                               'Odblokuj przerwania Timer1.

 

On Timer0 Czas                                              'Włącz podprogram Czas Timera0.

Stop Timer0                                                 '

On Timer1 Czas2                                             'Włącz podprogram Czas2 Timera1.

Reset Portd.6                                               'Zeruj Port, włącz wzm. m. cz., włącz Pk1.

 

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

Do                                                          'Pętla.

  If Pinc.5 = 0 Then                                        'Przycisk dzwonkowy1 (gdy do +A doprowadzono napięcie na stałe).

  Start Timer0                                              '

Else                                                        'W przeciwnym razie...

  If Tak = 1 Then                                           'Jeśli zmienna Tak ma 1.

  Start Timer0                                              '

  End If                                                    '

  End If

  Loop                                                      'Powtarzaj pętlę.

End                                                         'Koniec pętli.

 

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

Czas:                                                       'Podprogram Timer0 Czas (Przep = 1, to 20mS).

 Incr Przep                                                 'Po załadowaniu Timer0, zwiększaj zmienną Przep o 1.

  Select Case Przep                                         'Sprawdzaj zmienną Przep.

 

  Case 21 : Reset 1d                                        'Po 21 przepełnieniach, ładuj 10uF.

  Set 1b                                                    'Odblokuj generator dzwonka.

  Case 22 : Set 1d                                          'Skończ ładowanie 10uF.

  Case 3820 : Reset 1b                                      'Zablokuj generator.

 

  Case 420 : Reset 2d                                       'Ładuj 10uF.

  Set 2b                                                    'Odblokuj generator.

  Case 422 : Set 2d                                         'Skończ ładowanie 10uF.

  Case 3920 : Reset 2b                                      'Zablokuj generator.

 

  Case 820 : Reset 3d                                       'Ładuj 10uF.

  Set 3b                                                    'Odblokuj generator.

  Case 822 : Set 3d                                         'Skończ ładowanie 10uF.

  Case 4020 : Reset 3b                                      'Zablokuj generator.

 

  Case 1220 : Reset 4d                                      'Ładuj 10uF.

  Set 4b                                                    'Odblokuj generator.

  Case 1222 : Set 4d                                        'Skończ ładowanie 10uF.

  Case 4120 : Reset 4b                                      'Zablokuj generator.

  Set Portd.6                                               'Wyłącz wzmacniacz m. cz, rozłącz Pk1.

 

  Stop Timer0                                               '

  Przep = 0                                                 '

  Tak = 0                                                   '

 

  End Select                                                'Koniec selekcji zmiennej Przep.

 

 Return                                                     'Wróć do Timer0.

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

 

Czas2:                                                      'Podprogram Timer1.

  Timer1 = 65530                                            'Załaduj do Timer1 65530, odliczy 6.

  Incr Mig                                                  'Po każdym cyklu powiększ zmienną o 1.

  If Mig = 1 Then                                           'Jeśli jest 1 przepełnienie...

  Tak = 1                                                   'Załaduj 1 do zmiennej.

  Stop Timer1                                               '

  End If                                                    '

  If Mig = 100000 Then                                      'Jeśli będzie 100000 przepełnień, ale nie będzie, bo jest Stop  TIMER1.

  End If                                                    'Z tego powodu po cyklu będzie stały Set Portd.6.

 Return                                                     'Wróć.

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