$regfile = "m328pdef.dat" 'mikrokontroler
$crystal = 11059200 'zewnetrzny kwarc
$baud = 9600 'predkosc UART
'---konfiguracja stosu
$hwstack = 64
$swstack = 64
$framesize = 128
Config Watchdog = 16 'konfiguracja watchdog
Const Korekta_prad = 0.001 'korekta ADC-prad
Const Korekta_napiecie = 0.01 'korekta ADC-napiecie
'to jest tylko wstepna korekta. Dokladna korekta jest wykonywana za pomoca potencjometrow
Const Ilosc_probek = 64 'ilosc probek jakie wykonuje ADC
Const Pusty_akumulator = 2.8 'napiecie pustego akumulatora
Const Pelny_akumulator = 4.2 'napiecie w pelni naladowanego akumulatora
'---bufor UART
Config Com1 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Config Serialin0 = Buffered , Size = 100 ' buforowoanie UART-wejscie
Config Serialout0 = Buffered , Size = 100 ' buforowoanie UART-wyjscie
Config Submode = New
'---konfiguracja timera
Config Timer0 = Timer , Prescale = 1024 , Compare_a = Disconnect , Compare_b = Disconnect , Clear_timer = 1
Enable Compare0a : On Compare0a Timer0_isr Nosave : Compare0a = 107 '10ms @11MHz
'---konfiguracja przetwornika ADC
'zewnetrzne zrodlo napiecia 2V5 MPC1525
Config Adc = Single , Prescaler = Auto , Reference = Aref
'---wyjscia
Config Portd.2 = Output : Portd.2 = 0 : Ladowarka Alias Portd.2 'wlaczanie/wylaczanie ladowarki akumulatorow
Config Portd.6 = Output : Portd.6 = 0 : Wyjscie Alias Portd.6 'wyjsciw UPSa-zasilanie Raspberry Pi
'---wejscia
Config Pinb.2 = Input : Portb.2 = 1 : Usb Alias Pinb.2 'status systemu Raspberry Pi
'stan wysoki=system dziala
'stan niski=system wylaczony
'------------------------------------------------
'---ZMIENNE PROGRAMU
'---zmienna programu i jej odpowiednik w eeprom
'zmienne maja trafic do eeprom ponieważ układ musi wszystkie ustawione dane pamietac po restarcie AVR
Dim Opoznienie_wlaczenia As Byte , Opoznienie_wlaczenia_ee As Eram Byte
Dim Opoznienie_wylaczenia As Byte , Opoznienie_wylaczenia_ee As Eram Byte
Dim Ladowanie As Single , Ladowanie_ee As Eram Single
Dim Naladowany As Single , Naladowany_ee As Eram Single
Dim Rozladowany As Single , Rozladowany_ee As Eram Single
Dim Zmiana_ekranu As Byte , Zmiana_ekranu_ee As Eram Byte
Dim Led_lcd As Byte , Led_lcd_ee As Eram Byte
'---czas
Dim 10ms As Byte , 100ms As Byte , 1s As Byte
Dim Sekundy As Byte , Ekran As Byte , Lcd_ups As Byte
Dim Odczekaj As Byte , Stan_urzadzenia As Byte
'---ADC
Dim Pomiar_wejscia As Word , Odczyt As Single , Krok As Byte
'---dane ADC
Dim V_wej As String * 6 , V_aku As String * 6 , V_wyj As String * 6
Dim Amper As String * 6 , Watt As String * 6
Dim Watt_volt As Single , Watt_amper As Single , Watt_oblicz As Single
Dim Napiecie_aku As Single , Napiecie_wej As Single
Dim Cs As Single , Akumulator As Single
'---akumulator
Dim Pojemnosc_aku As String * 5 , Pojemnosc As Single , Aku_min_max As Single
Dim Ladowanie_aku As Byte , Aku_poziom As Bit
Dim Charge_start As String * 4 , Charge_stop As String * 4 , Discharged As String * 4
'---status sieci 230V
Dim Siec As Byte
'---DS18B20
Dim Odczyt_ds(2) As Byte , T As Integer , T1 As Single , Temp As String * 5
'---UART
Dim Znak As Byte , Ile_elementow As Byte
Dim Komenda_uart As String * 50 , Getcommands(10) As String * 50
Dim Uart_opoznienie_wylaczenia As String * 4 , Uart_opoznienie_wlaczenia As String * 4
Dim Uart_zmiana_ekranu As String * 4 , Uart_led_lcd As String * 1
Dim Uart_naladowany As String * 4 , Uart_ladowanie As String * 4 , Uart_rozladowany As String * 4
'---ikony
'ikonki na LCD. Mile dla oka, a i od razu wiadomo co sie dzieje w UPS
Dim Mig As Bit , Migaj As Byte , Ikona_usb As Byte
'---konfiguracja 1-wire
Config 1wire = Portd.3
1wreset
1wwrite &HCC
1wwrite &H44
'---konfiguracja i2c
$lib "i2c_twi.lbx"
Config Scl = Portc.5
Config Sda = Portc.4
Config Twi = 400000
I2cinit
'---konfiguracja LCD
'LCD jest podlaczony za pomoca konwertera na PCF8574
$lib "bl_Lcd_i2c.lib"
'LCD HD44780 16x2
Config Lcd = 16x2
Const Pcf_d4 = 4
Const Pcf_d5 = 5
Const Pcf_d6 = 6
Const Pcf_d7 = 7
Const Pcf_rs = 0
Const Pcf_rw = 1
Const Pcf_e1 = 2
Dim _lcd_e As Byte
Dim Backlight As Byte
Backlight_on Alias &H08
Backlight_off Alias &H00
Backlight = Backlight_on
_lcd_e = 128
Const Pcf8574_lcd = &H4E
Waitms 100 : Cls
'---powitanie UART
Sub Powitanie_uart
Print
Print "=================================================="
Print " *** Pi UPS by @pimowo ***"
Print
Print
Print " <P> Pomoc"
Print " <I> Informacje"
Print "--------------------------------------------------"
End Sub
'---powitanie LCD
'układ po starcie ladnie wita się z użytkownikiem ;)
Sub Powitanie_lcd
Locate 1 , 6 : Lcd "PiUPS"
Locate 2 , 4 : Lcd "by @pimowo"
Wait 4 'odczekaj i wyczysc ekran
End Sub
'---deklaracja znakow
'deklaracja nietypowych znakow-polskie "ogonki" oraz ikonki
Deflcdchar 0 , 14 , 31 , 17 , 17 , 19 , 23 , 31 , 31 'akumulator
Deflcdchar 1 , 32 , 14 , 17 , 31 , 16 , 14 , 4 , 6 'Ä™
Deflcdchar 2 , 32 , 14 , 1 , 15 , 17 , 15 , 4 , 6 'Ä…
Deflcdchar 3 , 2 , 4 , 14 , 16 , 14 , 1 , 30 , 32 'Ĺ›
Deflcdchar 4 , 4 , 32 , 31 , 2 , 4 , 8 , 31 , 32 'ĹĽ
Deflcdchar 5 , 32 , 10 , 10 , 31 , 14 , 4 , 4 , 3 'wtyczka
Deflcdchar 6 , 27 , 31 , 4 , 14 , 21 , 27 , 21 , 14 'malina
Deflcdchar 7 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32 'stopien
'---odczyt czujnika temperatury
'pomiar temperatury akumulatora na czujniku DS18B20
Sub Temperatura
If Err = 0 Then 'jezeli nie ma zadnych bledow to odczytaj czujnik
1wreset
1wwrite &HCC
1wwrite &HBE
Odczyt_ds(1) = 1wread(2)
T = Odczyt_ds(2)
Shift T , Left , 8
T = T + Odczyt_ds(1)
T1 = T * 0.0625
Temp = Fusing(t1 , "###.#")
Else 'jezeli jest problem z czujnikiem/magistrala to wyswietl "0"
Temp = "0.0"
End If
'---tu DS szykuje nowy odczyt
1wreset
1wwrite &HCC
1wwrite &H44
End Sub
'---pomiary ADC
'pomiar pradu i napiecia
Sub Pomiary(byval Channel As Byte)
Local Pomiar As Word : Pomiar = 0
For Krok = 1 To Ilosc_probek 'oczytaj kanal ADC ustalona ilosc razy
Pomiar = Pomiar + Getadc(channel)
Next
Pomiar_wejscia = Pomiar / Ilosc_probek 'wyciagnij srednia z pomiarow
Select Case Channel
Case 0 'pomiar pradu na wyjsciu UPS
Odczyt = Pomiar_wejscia * Korekta_prad
If Odczyt < 0.005 Then Odczyt = 0 'korekta aby pozbyc sie smieci
Amper = Fusing(odczyt , "#.###") 'zaokraglij wynik pomiaru do trzch miejsc po przecinku
Watt_amper = Odczyt 'zmienna do obliczenia mocy pobieranej z UPS
Case 1 'napiecie na wejsciu UPS
Odczyt = Pomiar_wejscia * Korekta_napiecie
If Odczyt < 0.5 Then Odczyt = 0 'korekta aby pozbyc sie smieci
V_wej = Fusing(odczyt , "#.###") 'zaokraglij wynik pomiaru do trzch miejsc po przecinku
Napiecie_wej = Odczyt
If Napiecie_wej >= 1 Then
Siec = 0 'gdy jest napiecie sieciowe wylacz alarm(0)
Backlight = Backlight_on 'wlacz podswietlenie LCD
Else
Siec = 1 'brak zasialania sieciowego wiec alarm(1)
If Led_lcd = 1 Then 'jezeli jest wlaczony automat sterowania LED w LCD to steruj podswietleniem
Backlight = Backlight_off 'wylacz podswietlenie LCD
Else
Backlight = Backlight_on 'wlacz podswietlenie LCD
'jezeli wylaczony jest automat sterowania LED w LCD to swieci caly czas
End If
End If
Case 2 'napiecie akumulatora
Odczyt = Pomiar_wejscia * Korekta_napiecie
V_aku = Fusing(odczyt , "#.###") 'zaokraglij wynik pomiaru do trzch miejsc po przecinku
Napiecie_aku = Odczyt
Case 3 'napiecie na wyjsciu UPS
Odczyt = Pomiar_wejscia * Korekta_napiecie
If Odczyt < 0.005 Then Odczyt = 0 'korekta aby pozbyc sie smieci
V_wyj = Fusing(odczyt , "#.###") 'zaokraglij wynik pomiaru do trzch miejsc po przecinku
Watt_volt = Odczyt 'zmienna do obliczenia mocy pobieranej z UPS
End Select
End Sub
'---procentowa pojemnosc akumulatora
'mile dla oka ponieważ wiemy na jak długo starczy jeszcze baterii az UPS "padnie"
Sub Bateria
Pojemnosc = Napiecie_aku
Pojemnosc = Pojemnosc - Pusty_akumulator
Aku_min_max = Pelny_akumulator - Pusty_akumulator
Pojemnosc = Pojemnosc / Aku_min_max
Pojemnosc = Pojemnosc * 100
Pojemnosc_aku = Fusing(pojemnosc , "###.#") 'zaokraglij wynik pomiaru do jednego miejsca po przecinku
End Sub
'---moc pobierana z UPS
'przeliczenie odczyow (napiecie na wyjściu UPS x natezenie pradu na wyjściu UPS)
Sub Moc
Watt_oblicz = Watt_volt * Watt_amper
Watt = Fusing(watt_oblicz , "#.###") 'zaokraglij wynik pomiaru do trzch miejsc po przecinku
End Sub
'---USTAWIENIA POCZATKOWE
'---odczytywanie z eeprom
Opoznienie_wlaczenia = Opoznienie_wlaczenia_ee
Opoznienie_wylaczenia = Opoznienie_wylaczenia_ee
Ladowanie = Ladowanie_ee
Naladowany = Naladowany_ee
Rozladowany = Rozladowany_ee
Zmiana_ekranu = Zmiana_ekranu_ee
Led_lcd = Led_lcd_ee
'----------------------------------------------------------------------------------------------
'----------------------------------------------------------------------------------------------
'TAK PRZY OKAZJI
'Jak to zrobić aby domyslne dane same sie wpisaly do eeprom?
'Przykladowo wrzucam nowy kod do AVR i wszystkie dane mi sie kasuja
'Chcialbym aby domyslne dane same sie wpisaly do eeprom przy pierwszym starcie
'Gdy eeprom byla juz zapisywana to nic nie robimy
'----------------------------------------------------------------------------------------------
'----------------------------------------------------------------------------------------------
Poczatkowy Alias 0
Czekaj_i_wlacz Alias 2
Wlaczone Alias 4
Czekaj_i_wylacz Alias 10
Wylaczone Alias 15
Rozladowane Alias 20
'---wlaczenie globalnych przerwan
Enable Interrupts
Enable Serial
'---pokaz powitanie na LCD oraz na UART
'Call Powitanie_uart
Call Powitanie_lcd
'---zrob pierwsze pomiary aby LCD nie wyswietlal zer
Call Pomiary(0)
Call Pomiary(1)
Call Pomiary(2)
Call Pomiary(3)
Call Moc
Call Temperatura
Call Bateria
Wait 1 : Cls 'wyczysc wyswietlacz
Lcd_ups = 1 'wlacz tryb "normalny" dla UPS (domyslny)
'---------------
'---PETLA GLOWNA PROGRAMU
Do
If 10ms = 1 Then 'gdy minelo 10ms
10ms = 0 'wyzeroj zmienna
If Lcd_ups = 0 Then 'jezeli wlaczony jest tryb "testowy" Regulacja ADC
Incr 100ms 'licz zmienna dla 100ms
If 100ms = 10 Then 'jezeli minelo 100ms (10ms x 10)
100ms = 0 'wyzeruj zmienna
'---zrob pomiary
Call Pomiary(0)
Call Pomiary(1)
Call Pomiary(2)
Call Pomiary(3)
'---wyswietl pomiary na LCD
Locate 1 , 1 : Lcd "A:" ; V_wej
Locate 1 , 10 : Lcd "B:" ; Amper
Locate 2 , 1 : Lcd "C:" ; V_aku
Locate 2 , 10 : Lcd "D:" ; V_wyj
'---wyniki pomiarow wyslij na UART
Print
Print " || V wej. pot.A: " ; V_wej ; " | A wyj. pot.B: " ; Amper ; " | V aku. pot.C: " ; V_aku ; " | V wyj. pot.D: " ; V_wyj ; " ||"
End If
Else 'tryb "normalny" UPSa
If Usb = 0 Then 'jezeli system na Raspberry Pi pracuje
Locate 2 , 12 : Lcd "USB" 'pokaz ikone "USB" na LCD
Else
Locate 2 , 12 : Lcd " " 'jezeli system zostal zamkniety wymaz ikone "USB" z LCD
End If
End If
If 1s < 100 Then 'odlicz sekunde (100x10ms)
Incr 1s 'licz sekundy
Else 'jezeli zmienna '1s = 100 (10ms x 100)
1s = 0 'wyzeruj zmienna
If Lcd_ups = 1 Then 'jezeli UPS jest w trybie "normalnym" to wykonaj pomiary
Call Pomiary(0)
Call Pomiary(1)
Call Pomiary(2)
Call Pomiary(3)
Call Moc
Call Temperatura
Call Bateria
Gosub Miganie 'skocz do podprogramu aby wyswietlic ikony
End If
'---------------------------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------------------------
'TEGO BLOKU NIE DO KONCA ROZUMIEM, A TU (CHYBA) POWINNA BYC MOJA LOGIKA DZIALANIA UPS
If Odczekaj > 0 Then 'opoznienie wlaczenia/wylaczenia wyjscia UPS'a
Decr Odczekaj
If Odczekaj = 0 Then
Select Case Stan_urzadzenia
Case Czekaj_i_wlacz
Wyjscie = 1
Stan_urzadzenia = Wlaczone
Case Czekaj_i_wylacz
Wyjscie = 0
Stan_urzadzenia = Wylaczone
End Select
End If
End If
Select Case Stan_urzadzenia
Case Poczatkowy
If Napiecie_wej > 1.0 Then
Odczekaj = Opoznienie_wlaczenia
Stan_urzadzenia = Czekaj_i_wlacz
End If
Case Wlaczone
Select Case Napiecie_aku
Case Is < Rozladowany
If Siec = 0 Then Ladowarka = 1 'jezeli jest napiecie sieciowe to laduj akumulator
Wyjscie = 1 'wlaczone napiecie na wyjsciu UPS
Stan_urzadzenia = Rozladowane
Aku_poziom = 1 'stan krytyczny akumulatora wiec alarm(1)
Case Is <= Ladowanie
If Siec = 0 Then Ladowarka = 1 'jezeli jest napiecie sieciowe to laduj akumulator
Aku_poziom = 0 'napiecie akumulatora powyzej stanu krytycznego wylacz(0)
Case Is >= Naladowany
Ladowarka = 0 'wylacz ladowarke
Aku_poziom = 0 'napiecie akumulatora powyzej stanu krytycznego wylacz(0)
End Select
End Select
'KONIEC TAJNEGO, NIEZROZSMIALEGO BLOKU
'---------------------------------------------------------------------------------------------------------
'---------------------------------------------------------------------------------------------------------
'---wyswietlanie wszystkich danych UPS na LCD
If Lcd_ups = 1 Then 'jezeli UPS jest w trybie "normalnym"
Incr Sekundy 'licz sekundy
If Sekundy >= Zmiana_ekranu Then 'przewijanie ekranow LCD co ustalona ilosc sekund
Sekundy = 0 'wyzeruj zmienna
Incr Ekran 'licz ekrany
If Ekran > 7 Then Ekran = 1 'jezeli wszystkie ekrany zostaly wyswietlone to zacznij od pierwszego
Locate 1 , 1 : Lcd Space(16) : Locate 1 , 1 'pozycja wyswietlania danych na gornej linii
Select Case Ekran
Case 1 : Lcd "Napi" ; Chr(1) ; "cie wej" ; Chr(3) ; "cie"
Case 2 : Lcd "Napi" ; Chr(1) ; "cie baterii"
Case 3 : Lcd "Napi" ; Chr(1) ; "cie wyj" ; Chr(3) ; "cie"
Case 4 : Lcd "Nat" ; Chr(1) ; Chr(4) ; "enie pr" ; Chr(2) ; "du"
Case 5 : Lcd "Moc pobierana"
Case 6 : Lcd "Temp. baterii"
Case 7 : Lcd "Bateria"
End Select
Locate 2 , 1 : Lcd Space(14) : Locate 2 , 1 'pozycja wyswietlania danych na dolnej linii
Select Case Ekran
Case 1 : Lcd Chr(5) ; " " ; V_wej ; " V"
Case 2 : Lcd Chr(0) ; " " ; V_aku ; " V"
Case 3 : Lcd Chr(6) ; " " ; V_wyj ; " V"
Case 4 : Lcd Chr(6) ; " " ; Amper ; " A"
Case 5 : Lcd Chr(6) ; " " ; Watt ; " W"
Case 6 : Lcd Chr(0) ; " " ; Temp ; Chr(7) ; "C"
Case 7 : Lcd Chr(0) ; " " ; Pojemnosc_aku ; " %"
End Select
End If
End If
'---koniec 1s
End If
'---koniec 10ms
End If
'---obsluga UART
If Ischarwaiting() > 0 Then 'jezeli w buforze cos jest
Znak = Waitkey() 'pobierz znak z bufora
If Znak = 13 Then 'jesli ENTER to skocz do uart
Gosub Uart 'skocz do podprogramu uart
Komenda_uart = ""
Else
Komenda_uart = Komenda_uart + Chr(znak) 'kluczowe budowanie bufora
'Print Chr(znak); 'to jest echo zeby bylo widac co przychodzi
End If
End If
Loop
End
'---KONIEC PETLI GLOWNEJ
'---------------
'---przerwanie od TIMERA
Timer0_isr:
$asm
!PUSH R16
!PUSH R24
!PUSH R26
!PUSH R27
!in R24, sreg
!PUSH R24
$end Asm
10ms = 1 'zglos, ze minelo 10ms
'---Tuned with NoSave Tool
$asm
!POP R24
!out sreg, r24
!POP R27
!POP R26
!POP R24
!POP R16
$end Asm
Return
'---miganie ikonami
'pierdola, ale mila dla oka poniewaz patrzac na ikony od razu wiadomo co sie dzieje z UPS
Miganie:
Mig = Not Mig
Locate 2 , 16
If Ladowarka = 1 Then 'jezeli trwa ladowanie akumulatora mrugaj naprzemiennie ikonami kabelka i baterii
If Mig = 1 Then
Lcd Chr(5)
Else
Lcd Chr(0)
End If
Else 'jezeli akumulator nie jest ladowany to wyswietl ikone zrodla napiecia
If Siec = 0 Then 'jezeli jest zasilanie sieciowe pokaz ikone kabelka
Lcd Chr(5)
Else 'jezeli brak zasilania sieciowego pokaz ikone baterii
Lcd Chr(0)
End If
End If
Return
'---obsluga UART
'analiza komend/polecen
Uart:
Ile_elementow = Split(komenda_uart , Getcommands(1) , " ")
Select Case Getcommands(1)
Case "F" 'jezeli odebrany znak to "F" (Fabryka) przywroc wartosci domyslne i zresetuj AVR
Opoznienie_wlaczenia = 60
Opoznienie_wlaczenia_ee = Opoznienie_wlaczenia
Opoznienie_wylaczenia = 60
Opoznienie_wylaczenia_ee = Opoznienie_wylaczenia
Ladowanie = 3.9
Ladowanie_ee = Ladowanie
Naladowany = 4.1
Naladowany_ee = Naladowany
Rozladowany = 3.3
Rozladowany_ee = Rozladowany
Zmiana_ekranu = 2
Zmiana_ekranu_ee = Zmiana_ekranu
Led_lcd = 1
Led_lcd_ee = Led_lcd
Case "U" 'jezeli odebrany znak to "U" (Ustawienia) konfiguracja UPS
Uart_opoznienie_wlaczenia = Getcommands(2)
Opoznienie_wlaczenia = Val(uart_opoznienie_wlaczenia)
Opoznienie_wlaczenia_ee = Opoznienie_wlaczenia
Uart_opoznienie_wylaczenia = Getcommands(3)
Opoznienie_wylaczenia = Val(uart_opoznienie_wylaczenia)
Opoznienie_wylaczenia_ee = Opoznienie_wylaczenia
Uart_ladowanie = Getcommands(4)
Ladowanie = Val(uart_ladowanie)
Ladowanie_ee = Ladowanie
Uart_naladowany = Getcommands(5)
Naladowany = Val(uart_naladowany)
Naladowany_ee = Naladowany
Uart_rozladowany = Getcommands(6)
Rozladowany = Val(uart_rozladowany)
Rozladowany_ee = Rozladowany
Uart_zmiana_ekranu = Getcommands(7)
Zmiana_ekranu = Val(uart_zmiana_ekranu)
Zmiana_ekranu_ee = Zmiana_ekranu
Uart_led_lcd = Getcommands(8)
Led_lcd = Val(uart_led_lcd)
Led_lcd_ee = Led_lcd
Case "I" 'jezeli odebrany znak to "I" (Informacje) wyswietl dane na temat sprzetu/programu
Print
Print "=================================================="
Print " *** INFO ***"
Print
Print
Print " Zasilacz awaryjny Raspberry Pi"
Print
Print " Projekt:"
Print " @pimowo"
Print " Piotr Mrozek"
Print " pimowo@gmail.com"
Print
Print
Print " PiUPS:"
Print " Wersja hadware: v2.0"
Print " Wersja software: v1.0"
Print "--------------------------------------------------"
Case "O" 'jezeli odebrany znak to "O" (Odczyt) pokaz konfiguracje UPS'a
Charge_start = Fusing(ladowanie , "#.##")
Charge_stop = Fusing(naladowany , "#.##")
Discharged = Fusing(rozladowany , "#.##")
Print Opoznienie_wlaczenia ; " " ; Opoznienie_wylaczenia ; " " ; Charge_start ; _
" " ; Charge_stop ; " " ; Discharged ; " " ; Zmiana_ekranu ; " " ; Led_lcd
Case "N" 'jezeli odebrany znak to "N" (Normalny) Normalne dzialanie UPS'a
Cls : Lcd_ups = 1
Case "T" 'jezeli odebrany znak to "T" (Test) regulacja ADC
Cls : Lcd_ups = 0
Case "P" 'jezeli odebrany znak to "P" (Pomoc) wyswietl wszystkie dostepne komendy
Print
Print "=================================================="
Print " *** Pomoc ***"
Print
Print
Print " D (Dane)"
Print " Wyswietl wszystkie pomiary"
Print
Print " F (Fabryka)"
Print " Zresetuj UPS do ustawien fabrycznych"
Print
Print " I (Informacje)"
Print " Wyswietl wszystkie pomiary"
Print
Print " N (Normalny)"
Print " Normalny tryb pracy UPS"
Print
Print " O (Odczyt)"
Print " Wyswietl wszystkie ustawienia UPS"
Print
Print " P (Pomoc)"
Print " Wyswietl wszystkie polecenia"
Print
Print " R (Reset)"
Print " Reset AVR"
Print
Print " T (Test)"
Print " Test i regulacja ADC"
Print
Print " U (Ustawienia)"
Print " Ustawienia parametrow UPS"
Print " <*> dokladny opis ustawien UPS"
Print "--------------------------------------------------"
Case "*" 'jezeli odebrany znak to "*" szerszy opis ustawien UPS
Print
Print "=================================================="
Print " *** Opis konfiguracji UPS ***"
Print
Print
Print " U (Ustawienia)"
Print
Print " Wyjscie UPS:"
Print " Opoznienie wlaczenia (1-240s)"
Print " Opoznienie wylaczenia (1-240s)"
Print
Print " Akumulator:"
Print " Koniec ladowania (0.1-9.9V)"
Print " Poczatek ladowania (0.1-9.9V)"
Print " Rozladowany (0.1-9.9V)"
Print
Print " LCD:"
Print " Przelaczanie ekranow (1-240s)"
Print " Auto-podswietlenie (1/0)"
Print
Print " Przykladowe (domyslne) ustawienia:"
Print " U 60 60 3.9 4.0 3.3 2 1"
Print
Print " |ustaw|"
Print " |wlacz wyjscie po 60 sekundach|"
Print " |wylacz wyjscie po 60 sekundach|"
Print " |poczatek ladowania akumulatora przy napieciu 3.9V|"
Print " |koniec laowania akumulatora po osiagnieciu 4.0V|"
Print " |stan krytyczny akumulatora przy napieciu 3.3V|"
Print " |przelaczaj ekrany LCD co 2 sekundy|"
Print " |wygas LCD przy zasilaniu akumulatorowym|"
Print "--------------------------------------------------"
Case "R" 'jezeli odebrany znak to "R" (Reset) zresetuj AVR
Disable Interrupts 'wylaczenie przerwan
Start Watchdog 'uruchomienie Watchdoga
Do 'petla nieskonczona
Loop 'w niej czekamy na Reset
Case "D" 'jezeli odebrany znak to "D" (Dane) odeslij dane pomiarow
Print V_wej ; " " ; V_aku ; " " ; V_wyj ; " " ; Amper ; " " ; Watt ; " " ; Temp ; _
" " ; Pojemnosc_aku ; " " ; Ladowarka ; " " ; Siec ; " " ; Aku_poziom
Case Else 'jezeli odebrany znak to zaden z powyzszych to zglos ten problem informacja na UART
' Print
' Print "=================================================="
' Print " *** BLAD! ***"
' Print
' Print
' Print " Nie rozpoznano polecenia"
' Print " <P> Pomoc"
' Print "--------------------------------------------------"
Gosub Czysc_bufor 'wyczysc bufor
End Select
Gosub Czysc_bufor 'wyczysc bufor
Return
'---czyszczenie bufora UART
Czysc_bufor:
Getcommands(1) = ""
Getcommands(2) = ""
Getcommands(3) = ""
Getcommands(4) = ""
Getcommands(5) = ""
Getcommands(6) = ""
Getcommands(7) = ""
Getcommands(8) = ""
Getcommands(9) = ""
Getcommands(10) = ""
Return