BASCOM


Amperomierz z wyłącznikiem nadprądowym.


Urządzenie przeznaczone jest do pokazywania wielkości płynącego przez nie prądu oraz do wyłączenia prądu , gdy przekroczy wartość nastawioną przełącznikiem.



'AmperomierzWyl5.bas

'Miernik prądu z wyłącznikiem nadprądowym, ustawianym przełącznikiem do 1,6A.

'Wyświetla wynik na Lcd, sygnalizuje diodą i dźwiękowo przekroczenie zakresu.

'Fusebit ustawiony na kwarc zewnętrzny 1010.

'Patrz sch. AmperomierzWyl5.png.

'Opracował Henryk Wydmuch.

'Pamięć zajęta w 36%.

 

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

$crystal = 4000000                                          'Informujemy kompilator o kwarcu 4MHz.

 

 Config Lcd = 16 * 2                                        'Konfiguracja Lcd.

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

 

 Config Timer0 = Timer , Prescale = 1                       'Timer0 jako Timer z podziałem przez 1.

 Config Timer1 = Counter , Edge = Falling                   'Timer1 jako licznik działający od zbocza opadającego.

 

  Config Pind.5 = Input                                     'Konfiguruj Portd.5 jako wejście.

  ' Set Portd.5

 Config Pind.7 = Output                                     'Wyjście. Zatykanie T1.

   Set Portd.7                                              'Dołącz rezystor podciągający.

 Config Pinb.0 = Output                                     'Wyjście sygnału alarmowego.

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

 Config Pinb.1 = Input                                      'Wyłączenie przy 0,2A.

   Set Portb.1                                              'Ustaw poziom wysoki.

 Config Pinb.2 = Input                                      'Wyłączenie przy 0,4A.

   Set Portb.2                                              'Ustaw poziom wysoki.

 Config Pinb.3 = Output                                     'Wyjście. D2 i D3 diody Led.

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

 Config Pinc.0 = Input                                      'Wyłączenie przy 0,6A.

   Set Portc.0                                              'Ustaw poziom wysoki.

 Config Pinc.1 = Input                                      'Wyłączenie przy 0,8A.

   Set Portc.1                                              'Ustaw poziom wysoki.

 Config Pinc.2 = Input                                      'Wyłączenie przy 1A.

   Set Portc.2                                              'Ustaw poziom wysoki.

 Config Pinc.3 = Input                                      'Wyłączenie przy 1,2A.

   Set Portc.3                                              'Ustaw poziom wysoki.

 Config Pinc.4 = Input                                      'Wyłączenie przy 1,4A.

   Set Portc.4                                              'Ustaw poziom wysoki.

 Config Pinc.5 = Input                                      'Wyłączenie przy 1`,6A.

   Set Portc.5                                              'Ustaw poziom wysoki.

 

 Deflcdchar 3 , 4 , 4 , 6 , 12 , 4 , 4 , 4 , 14             'Wpisano ł.

 Deflcdchar 1 , 2 , 4 , 15 , 8 , 7 , 1 , 14 , 32            'Wpisano ś.

 Deflcdchar 2 , 28 , 2 , 30 , 18 , 18 , 30 , 1 , 2          'Wpisano ą.

 

 On Timer0 Odmierz_1s                                       'Podprogramdla Timera0 o nazwie Odmierz_1s.

 On Timer1 Zlicz_przep_tim1                                 'Podprogram dla Timera1.

 

 Dim Liczba_przerwan_tim0 As Word                           'Rezerwujemy dwa bajty w pamięci dla zmiennej Liczba_przerwan_tim0. Tu załadujemy liczbę przerwań Timera0.

 Dim Lczba_przep_tim1 As Byte                               'Rezewujemy jeden bajt dla zmiennej Liczba_przep_tim1. Tu załadujemy liczbę przerwań Timera1.

 Dim Flaga_aktual_lcd As Bit                                'Rezerwujemy jeden bit na aktualizację wyświetlacza Lcd.

 Dim Wynik_pomiaru As Single                                'Tu znajdzie się wynik pomiaru w Hz.

 Dim Pomiar As Single

 Dim Z As String * 7                                        'Z jako zmienna słowna z siedmioma miejscami.

 Dim S As String * 7

 

 Declare Sub B1                                             'Deklaracja procedury.

 Declare Sub Hz                                             'Deklaracja procedury.

 

 Enable Interrupts                                          'Zezwalaj na wszystkie przerwania.

 Enable Timer0                                              'Odblokowujemy przerwanie Timera0.

 Enable Timer1                                              'Odblokowujemy przerwanie Timera1.

 

 Stop Timer0                                                'Zatrzymujemy Timer0.

 Stop Timer1                                                'Zatrzymujemy Timer1.

 

 Timer1 = 0                                                 'Zerujemy Timer1.

 Wynik_pomiaru = 0                                          'Zerujemy zmienną Wynik_pomiaru.

 Liczba_przerwan_tim0 = 0                                   'Zerujemy zmienną zawierającą liczbę przerwań Timera0.

 Lczba_przep_tim1 = 0                                       'Zerujemy zmienną zawierającą liczbę przerwań Timera1.

 Cursor Off                                                 '

 Start Timer1                                               '

 Start Timer0                                               '

 

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

Do                                                          'Start pętli głównej.

 If Flaga_aktual_lcd = 1 Then                               'Jeśli flaga aktualizacji Lcd włączona (po każdej sekundzie), to...                                       

  Cls                                                       'Czyść LCD.

 

'---------0A----------------

  If Pomiar => 0 Then                                       'Jeśli spadek napięcia na RR wynosi więcej niż 0mV...

  Set Portb.3                                               'Poziom wysoki w Portb.3 (bez sygn. wyłącz. prądu).

  Call Hz                                                   'Wywołaj podprogram Hz (pomiar prądu bez alarmu).

  End If                                                    '

'---------0,2A----------------

 

  If Pinb.1 = 0 Then                                        'Jeśli przełącznik W1 ustawiono na 0,2A.

  If Pomiar > 110 Then                                      'A  prąd jest większy od 0,2A.

  Reset Portd.7                                             'Włącz optron.

  Reset Portb.3                                             'Zaświeć czerwoną diodę D3, migającą (sygn. wyłącz. prądu).

  Gosub B1                                                  'Wywołaj podprogram B1 (alarm).

 End If                                                     'Koniec warunku.

 End If                                                     '

 

'---------0,4A----------------

 

  If Pinb.2 = 0 Then                                        '

  If Pomiar > 220 Then                                      '0,4A

  Reset Portb.3                                             '

  Call B1                                                   '

 End If                                                     '

 End If                                                     '

 

'---------0,6A----------------

 

  If Pinc.0 = 0 Then                                        '

  If Pomiar > 330 Then                                      '0,6A

  Reset Portb.3                                             '

  Call B1                                                   '

 End If                                                     '

 End If                                                     '

 

'---------0,8A----------------

 

  If Pinc.1 = 0 Then                                        '

  If Pomiar > 440 Then                                      '0,8A

  Reset Portb.3                                             '

  Call B1                                                   '

 End If                                                     '

 End If                                                     '

 

'---------1A----------------

 

  If Pinc.2 = 0 Then                                        '

  If Pomiar > 550 Then                                      '1A

  Reset Portb.3                                             '

  Call B1                                                   '

 End If                                                     '

 End If                                                     '

 

'---------1,2A----------------

 

  If Pinc.3 = 0 Then                                        '

  If Pomiar > 660 Then                                      '1,2A

  Reset Portb.3                                             '

  Call B1                                                   '

 End If                                                     '

 End If                                                     '

 

'---------1,4A----------------

 

  If Pinc.4 = 0 Then                                        '

  If Pomiar > 770 Then                                      '1,4A

  Reset Portb.3                                             '

  Call B1                                                   '

 End If                                                     '

 End If                                                     '

 

'---------1,6A----------------

 

  If Pinc.5 = 0 Then                                        '

  If Pomiar > 880 Then                                      '1,6A

  Reset Portb.3                                             '

  Call B1                                                   '

 End If                                                     '

 End If                                                     '

 

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

     End If                                                 'Koniec warunku If Flaga_aktual_lcd = 1.

 Loop                                                       'Powtórz pętlę.

 End                                                        'Koniec pętli.

 

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

 Sub B1:                                                    'Procedura wyłączenia prądu.

  Wynik_pomiaru = Wynik_pomiaru * 0.00179                   '

  Reset Portd.7                                             'Włącz optron.

  Z = Str(wynik_pomiaru)                                    'Zamień zawartość Wynik_pomiaru na słowną.

  Gosub Soc                                                 'Skocz do podprogramu alarmu dźwiękowego i D3.

  End Sub                                                   'Koniec procedury.

 Return                                                     '

 

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

Sub Hz                                                      'Procedura pokazywania prądu.

  Wynik_pomiaru = Wynik_pomiaru * 0.00179                   'Pomiar prądu.

  Z = Str(wynik_pomiaru)                                    'Wartość w Wynik_pomiaru zamień na słowną.

  Lcd Z                                                     'Pokaż ją na Lcd.

  Locate 1 , 6                                              'Pierwsza linia Lcd, 6 miejsce.

  Lcd " A       "                                           '

  Locate 2 , 1                                              '

  Lcd "  Pomiar pr" ; Chr(2) ; "du  "                       '

  'S = Str(pomiar)                                            '

  'Lcd S                                                     'Pokaż ile jest spadku na RR (do prób).

  Flaga_aktual_lcd = 0                                      '

  End Sub                                                   'Koniec procedury.

  Return                                                    'Wróć do pętli.

 

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

 Odmierz_1s:                                                'Podprogram dla Timera0 (wyznaczanie 1sek).

  Timer0 = 6                                                'Do Timera0 dodaj sześć i zapamiętaj jako Timer0 (zliczy 250).

  Incr Liczba_przerwan_tim0                                 'Liczbę przerwań Timera0 powiększ o jeden.

  If Liczba_przerwan_tim0 = 12845 Then                      'Jeśli liczba przerwań Timera0 jest równa 12845, to...

  'Liczbą 12845 ustalamy dokładny pomiar.

  Liczba_przerwan_tim0 = 0                                  'Wyzeruj zmienną.

  Wynik_pomiaru = 65536 * Lczba_przep_tim1                  'Zmienną Liczba_przep_tim1 pomnóż przez 65536, a wynik wstaw do zmiennej Wynik_pomiaru.

  Wynik_pomiaru = Wynik_pomiaru + Timer1                    'Wynik powyższego działania dodaj do aktualnej zawartości Timera1 i ten wynik wpisz do zmiennej Wynik_pomiaru.

  Pomiar = Wynik_pomiaru                                    'Przepisz.

  Flaga_aktual_lcd = 1                                      'Załącz flagę aktualizacji Lcd.

  Lczba_przep_tim1 = 0                                      'Zeruj flagę przepełnień Timera1.

  Timer1 = 0                                                'Zeruj Timer1.

   End If                                                   'Koniec uwarunkowania.

 Return                                                     'Wróć do programu.

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

  Zlicz_przep_tim1:

  Enable Interrupts                                         'Podprogram Timera1 (przekroczenie zakresu).

  Incr Lczba_przep_tim1                                     'Zawartość zmiennej Liczba_przep_tim1 powiększ o jeden.

  If Lczba_przep_tim1 = 23 Then                             'Po 23 przepełnieniach Timer-a 1...

  Cls                                                       'Czyść LCD.

  Lcd "Przepe" ; Chr(3) ; "nienie"                          'Wpisz komunikat.

  Locate 2 , 1                                              'Druga linia Lcd, na początku.

  Lcd "   licznika!"                                        '

  Sound Portb.0 , 400 , 350                                 'Sygnał Dźwiękowy.

  Waitms 50                                                 'Krótka przerwa.

  Sound Portb.0 , 400 , 350                                 'Sygnał Dźwiękowy.(400-czas, 350-ton, większa cyfra=niższy ton).

   End If                                                   'Koniec warunku gdy będzie 23 przepełnień.

 Return                                                     'Wróć do programu.

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

Soc:                                                        'Pdprogram alarmu.

  Do                                                        'Pętla.

  Lcd "  Uwaga!"                                            'Pokaż ostrzeżenie.

  Locate 2 , 1                                              '

  Lcd "  Pr" ; Chr(2) ; "d wy" ; Chr(3) ; Chr(2) ; "czony!."       'Pokaż komunikat.

  Sound Portb.0 , 200 , 150                                 'Sygnał Dźwiękowy.

  Waitms 30                                                 'Krótka przerwa.

  Sound Portb.0 , 200 , 150                                 'Sygnał Dźwiękowy.Większa cyfra=niższy ton).

  Waitms 600                                                'Czas powtarzania alarmu.

 Loop                                                       '

 End                                                        '

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

 'Jak uruchomić:

 'Us1 jest przetwornikiem napięcie/częstotliwość (U/f). 1V na wejściu, daje 1000Hz na wyjściu (1mV=1Hz).

 'Procesor, między innymi jest miernikiem częstotliwości. Na Lcd widzimy odczyt prądu.

 'Odczyt płynącego prądu odbywa się na RR. Po przekroczeniu ustawionego przełącznikiem W1 prądu zostanie on wyłączony.

 'Kluczem wyłączającym jest T1. Informacja o wyłączeniu przychodzi z procesora, z Portd.7.

 'Wyłączenie pokazane jest komunikatem na Lcd, dźwiękiem z głośnika i miganiem D3.

 'Resetowanie wyłączenia prądu może się odbyć dopiero po usunięciu obciążenia, albo zmianie nastawy W1.

 'Żarówka 24V może mieć moc ok. 5W.

 'Gdy W1 ustawiony jest na 0, nie ma wyłączenia prądu.

 'Kalibracja odczytu odbywa się, gdy szeregowo dołączony jest wyskalowany miernik prądu. Kalibrację uzyskuje się

 'zmieniając w programie (podprogramy Sub B1 i Sub Hz) liczbę 0.00179.

 'Koniec.