Zasilacz awaryjny-UPS

Prezentacje projektów
Awatar użytkownika
pimowo
Posty: 392
Rejestracja: 28 maja 2016, 10:07

Re: Zasilacz awaryjny-UPS

Post autor: pimowo » 13 lut 2018, 23:01

Może teraz będzie łatwiej pomóc ;)
Kod mocno skrócony:
  1. $regfile = "m328pdef.dat"
  2. $crystal = 11059200
  3. $hwstack = 64
  4. $swstack = 64
  5. $framesize = 128
  6. $baud = 9600
  7.  
  8. '---bufor UART
  9. Config Com1 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
  10.  
  11. Config Serialin0 = Buffered , Size = 100                    ' buforowoanie UART
  12. Config Serialout0 = Buffered , Size = 100                   ' buforowoanie UART
  13.  
  14. Config Submode = New
  15.  
  16. '---ZMIENNE PROGRAMU
  17. '---zmienna programu i jej odpowiednik w eeprom
  18. Dim Opoznienie_wlaczenia As Single , Opoznienie_wlaczenia_ee As Eram Single
  19. Dim Opoznienie_wylaczenia As Single , Opoznienie_wylaczenia_ee As Eram Single
  20. Dim Ladowanie As Single , Ladowanie_ee As Eram Single
  21. Dim Naladowany As Single , Naladowany_ee As Eram Single
  22. Dim Rozladowany As Single , Rozladowany_ee As Eram Single
  23. Dim Zmiana_ekranu As Byte , Zmiana_ekranu_ee As Eram Byte
  24. Dim Led_lcd As Byte , Led_lcd_ee As Eram Byte
  25.  
  26. '---UART
  27. Dim Znak As Byte , Ile_elementow As Byte
  28. Dim Komenda_uart As String * 30 , Getcommands(10) As String * 30
  29.  
  30. Dim Uart_opoznienie_wylaczenia As String * 3 , Uart_opoznienie_wlaczenia As String * 3
  31. Dim Uart_zmiana_ekranu As String * 3 , Uart_led_lcd As String * 1
  32. Dim Uart_naladowany As String * 3 , Uart_ladowanie As String * 3 , Uart_rozladowany As String * 3
  33.  
  34. '---wlaczenie globalnych przerwan
  35. Enable Interrupts
  36. Enable Serial
  37.  
  38.  
  39. Do
  40.  
  41.   If Ischarwaiting() > 0 Then
  42.     Znak = Waitkey()                                        ' pobierz znak z bufora
  43.     If Znak = 13 Then                                       ' jesli ENTER to skocz do uart
  44.       Gosub Uart
  45.       Komenda_uart = ""
  46.     Else
  47.       Komenda_uart = Komenda_uart + Chr(znak)               ' kluczowe budowanie bufora
  48.       Print Chr(znak);                                      ' to jest echo zeby bylo widac co przychodzi
  49.     End If
  50.   End If
  51.  
  52. Loop
  53. End
  54.  
  55.  
  56. Uart:
  57.  
  58.   Ile_elementow = Split(komenda_uart , Getcommands(1) , " ")
  59.  
  60.     Select Case Getcommands(1)
  61.  
  62.       Case "U"                                              'jezeli odebrany znak to "U" (Ustawienia) konfiguracja UPS
  63.                                                             'przykładowa ramka "U 60 60 3.9 4.1 3.3 2 1"
  64.         Uart_opoznienie_wlaczenia = Getcommands(2)
  65.         Opoznienie_wlaczenia = Val(uart_opoznienie_wlaczenia)
  66.         Opoznienie_wlaczenia_ee = Opoznienie_wlaczenia
  67.  
  68.         Uart_opoznienie_wylaczenia = Getcommands(3)
  69.         Opoznienie_wylaczenia = Val(uart_opoznienie_wylaczenia)
  70.         Opoznienie_wylaczenia_ee = Opoznienie_wylaczenia
  71.  
  72.         Uart_ladowanie = Getcommands(4)
  73.         Ladowanie = Val(uart_ladowanie)
  74.         Ladowanie_ee = Ladowanie
  75.  
  76.         Uart_naladowany = Getcommands(5)
  77.         Naladowany = Val(uart_naladowany)
  78.         Naladowany_ee = Naladowany
  79.  
  80.         Uart_rozladowany = Getcommands(6)
  81.         Rozladowany = Val(uart_rozladowany)
  82.         Rozladowany_ee = Rozladowany
  83.  
  84.         Uart_zmiana_ekranu = Getcommands(7)
  85.         Zmiana_ekranu = Val(uart_zmiana_ekranu)
  86.  
  87.         Uart_led_lcd = Getcommands(8)
  88.         Led_lcd = Val(led_lcd)
  89.         Led_lcd_ee = Led_lcd
  90.  
  91.       Case "I"                                              'jezeli odebrany znak to "I" (Informacje) wyswietl dane na temat sprzetu/programu
  92.  
  93.         Print "cos tam, cos tam"
  94.  
  95.       Case "O"                                              'jezeli odebrany znak to "O" (Odczyt) pokaz konfiguracje UPS'a
  96.  
  97.         Print Opoznienie_wlaczenia ; " " ; Opoznienie_wylaczenia ; " " ; Ladowanie ; " " ; Naladowany ; " " ; Rozladowany ; " " ; Zmiana_ekranu ; " " ; Led_lcd
  98.  
  99.       Case "P"                                              'jezeli odebrany znak to "P" (Pomoc) wyswietl wszystkie dostepne komendy
  100.  
  101.         Print "cos tam, cos tam"
  102.  
  103.       Case "R"                                              'jezeli odebrany znak to "R" (Reset) zresetuj AVR
  104.  
  105.         Disable Interrupts                                  'wylaczenie przerwan
  106.         Start Watchdog                                      'uruchomienie Watchdoga
  107.         Do                                                  'petla nieskonczona
  108.         Loop                                                'w niej czekamy na Reset
  109.  
  110.       Case "D"                                              'jezeli odebrany znak to "D" (Dane) odeslij dane pomiarow
  111.  
  112.         'Print V_wej ; " " ; V_aku ; " " ; V_wyj ; " " ; Amper ; " " ; Watt ; " " ; Temp ; _
  113.         '    " " ; Pojemnosc_aku ; " " ; Ladowarka ; " " ; Siec ; " " ; Aku_poziom
  114.  
  115.       Case Else                                             'jezeli odebrany znak to zaden z powyzszych...
  116.  
  117.         Print "=================================================="
  118.         Print "               ***   BLAD!   ***"
  119.         Print
  120.         Print " Nie rozpoznano polecenia"
  121.         Print " <P> Pomoc"
  122.         Print "--------------------------------------------------"
  123.  
  124.         Gosub Czysc_bufor
  125.  
  126.     End Select
  127.  
  128.   Gosub Czysc_bufor
  129.  
  130. Return
  131.  
  132.  
  133. '---czysczenie bufora
  134. Czysc_bufor:
  135.  
  136.   Getcommands(1) = ""
  137.   Getcommands(2) = ""
  138.   Getcommands(3) = ""
  139.   Getcommands(4) = ""
  140.   Getcommands(5) = ""
  141.   Getcommands(6) = ""
  142.   Getcommands(7) = ""
  143.   Getcommands(8) = ""
  144.  
  145. Return
Awatar użytkownika
pimowo
Posty: 392
Rejestracja: 28 maja 2016, 10:07

Re: Zasilacz awaryjny-UPS

Post autor: pimowo » 15 lut 2018, 15:11

UART opanowany. Okazało się, że problem leżał po stronie programu na PC.

Została jedna rzecz z którą nie potrafię sobie poradzić-logika działania, załączanie i wyłączanie ładowarki itd. Pomożecie? :)
Pikczu
Posty: 388
Rejestracja: 17 sie 2015, 13:46
Lokalizacja: Dublin, Ireland
Kontakt:

Re: Zasilacz awaryjny-UPS

Post autor: Pikczu » 15 lut 2018, 19:26

Masz tu mała ciekawostkę :
Przerobiłem twój kod na: project mode
Ściąg z mojego dropboxa:
https://www.dropbox.com/s/u739rzsl878s8 ... S.rar?dl=0
Awatar użytkownika
pimowo
Posty: 392
Rejestracja: 28 maja 2016, 10:07

Re: Zasilacz awaryjny-UPS

Post autor: pimowo » 15 lut 2018, 19:54

Niezły porządek, ale to za wysokie progi jak dla mnie.
Ostatnio zmieniony 15 lut 2018, 20:38 przez pimowo, łącznie zmieniany 2 razy.
Pikczu
Posty: 388
Rejestracja: 17 sie 2015, 13:46
Lokalizacja: Dublin, Ireland
Kontakt:

Re: Zasilacz awaryjny-UPS

Post autor: Pikczu » 15 lut 2018, 20:09

To jest proste jak drut.
Każdy sub idzie do folderu Subs a plik zapisujesz jako .inc na początku każdego suba dodajesz $nocompile

Potem w oknie projektu dodajesz sobie suba trzeba jeszcze dopisać w programie $include xxx.inc i tyle proste i przejrzyste.
Awatar użytkownika
pimowo
Posty: 392
Rejestracja: 28 maja 2016, 10:07

Re: Zasilacz awaryjny-UPS

Post autor: pimowo » 15 lut 2018, 20:38

Dokładnie co chciałbym uzyskać to:
1. pierwszy start
a) jest napięcie sieciowe "Napiecie_wej >= 1"
- odczekaj "Opoznienie_wlaczenia"
- włącz napięcie na wyjściu UPS "Wyjscie = 1"
- "Siec = 0"
- "Ladowarka = 1" gdy napięcie poniżej "Ladowanie"
- "Ladowarka = 0" gdy napięcie powyżej "Naladowany"
- "Aku_poziom = 1" gdy napięcie akumulatora poniżej "Rozladowany"
- "Aku_poziom = 0" gdy napięcie akumulatora powyżej "Rozladowany"
b) brak napięcia sieciowego "Napiecie_wej < 1"
"Wyjscie = 0"
- "Siec = 1"
- "Ladowarka = 0"
- "Aku_poziom = 1" gdy napięcie akumulatora poniżej "Rozladowany"
- "Aku_poziom = 0" gdy napięcie akumulatora powyżej "Rozladowany"

2. normalne działanie gdy wszystko jest OK
- włączone napięcie na wyjściu UPS "Wyjscie = 1"
- "Siec = 0"
- "Ladowarka = 1" gdy napięcie poniżej "Ladowanie"
- "Ladowarka = 0" gdy napięcie powyżej "Naladowany"
- "Aku_poziom = 1" gdy napięcie akumulatora poniżej "Rozladowany"
- "Aku_poziom = 0" gdy napięcie akumulatora powyżej "Rozladowany"

3. normalne działanie gdy braknie napięcia 230V
- "Siec = 1"
- "Ladowarka = 0"
- "Aku_poziom = 0" gdy napięcie akumulatora powyżej "Rozladowany"
- "Aku_poziom = 1" gdy napięcie akumulatora poniżej "Rozladowany"
- malinka zamyka system
- system malinki zamknięty więc "Usb = 1"
- odczekaj "Opoznienie_wylaczenia"
- wyłącz napięcie na wyjściu UPS "Wyjscie = 0"

4. system zamknięty, a pojawia się napięcie 230V
- odczekaj "Opoznienie_wlaczenia"
- włącz napięcie na wyjściu UPS "Wyjscie = 1"
- "Siec = 0"
- "Ladowarka = 1" gdy napięcie poniżej "Ladowanie"
- "Ladowarka = 0" gdy napięcie powyżej "Naladowany"
- "Aku_poziom = 1" gdy napięcie akumulatora poniżej "Rozladowany"
- "Aku_poziom = 0" gdy napięcie akumulatora powyżej "Rozladowany"
  1. $regfile = "m328pdef.dat"                                   'mikrokontroler
  2. $crystal = 11059200                                         'zewnetrzny kwarc
  3. $baud = 9600                                                'predkosc UART
  4.  
  5.      '---konfiguracja stosu
  6. $hwstack = 64
  7. $swstack = 64
  8. $framesize = 128
  9.  
  10. Config Watchdog = 16                                        'konfiguracja watchdog
  11. Const Korekta_prad = 0.001                                  'korekta ADC-prad
  12. Const Korekta_napiecie = 0.01                               'korekta ADC-napiecie
  13.                                                             'to jest tylko wstepna korekta. Dokladna korekta jest wykonywana za pomoca potencjometrow
  14. Const Ilosc_probek = 64                                     'ilosc probek jakie wykonuje ADC
  15. Const Pusty_akumulator = 2.8                                'napiecie pustego akumulatora
  16. Const Pelny_akumulator = 4.2                                'napiecie w pelni naladowanego akumulatora
  17.  
  18.      '---bufor UART
  19. Config Com1 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
  20.  
  21. Config Serialin0 = Buffered , Size = 100                    ' buforowoanie UART-wejscie
  22. Config Serialout0 = Buffered , Size = 100                   ' buforowoanie UART-wyjscie
  23.  
  24. Config Submode = New
  25.  
  26.      '---konfiguracja timera
  27. Config Timer0 = Timer , Prescale = 1024 , Compare_a = Disconnect , Compare_b = Disconnect , Clear_timer = 1
  28. Enable Compare0a : On Compare0a Timer0_isr Nosave : Compare0a = 107       '10ms @11MHz
  29.  
  30.      '---konfiguracja przetwornika ADC
  31.      'zewnetrzne zrodlo napiecia 2V5 MPC1525
  32. Config Adc = Single , Prescaler = Auto , Reference = Aref
  33.  
  34.      '---wyjscia
  35. Config Portd.2 = Output : Portd.2 = 0 : Ladowarka Alias Portd.2 'wlaczanie/wylaczanie ladowarki akumulatorow
  36. Config Portd.6 = Output : Portd.6 = 0 : Wyjscie Alias Portd.6   'wyjsciw UPSa-zasilanie Raspberry Pi
  37.  
  38.      '---wejscia
  39. Config Pinb.2 = Input : Portb.2 = 1 : Usb Alias Pinb.2          'status systemu Raspberry Pi
  40.                                                                 'stan wysoki=system dziala
  41.                                                                 'stan niski=system wylaczony
  42.  
  43. '------------------------------------------------
  44.      '---ZMIENNE PROGRAMU
  45.      '---zmienna programu i jej odpowiednik w eeprom
  46.      'zmienne maja trafic do eeprom ponieważ układ musi wszystkie ustawione dane pamietac po restarcie AVR
  47. Dim Opoznienie_wlaczenia As Byte , Opoznienie_wlaczenia_ee As Eram Byte
  48. Dim Opoznienie_wylaczenia As Byte , Opoznienie_wylaczenia_ee As Eram Byte
  49. Dim Ladowanie As Single , Ladowanie_ee As Eram Single
  50. Dim Naladowany As Single , Naladowany_ee As Eram Single
  51. Dim Rozladowany As Single , Rozladowany_ee As Eram Single
  52. Dim Zmiana_ekranu As Byte , Zmiana_ekranu_ee As Eram Byte
  53. Dim Led_lcd As Byte , Led_lcd_ee As Eram Byte
  54.  
  55.      '---czas
  56. Dim 10ms As Byte , 100ms As Byte , 1s As Byte
  57. Dim Sekundy As Byte , Ekran As Byte , Lcd_ups As Byte
  58. Dim Odczekaj As Byte , Stan_urzadzenia As Byte
  59.  
  60.      '---ADC
  61. Dim Pomiar_wejscia As Word , Odczyt As Single , Krok As Byte
  62.  
  63.      '---dane ADC
  64. Dim V_wej As String * 6 , V_aku As String * 6 , V_wyj As String * 6
  65. Dim Amper As String * 6 , Watt As String * 6
  66. Dim Watt_volt As Single , Watt_amper As Single , Watt_oblicz As Single
  67. Dim Napiecie_aku As Single , Napiecie_wej As Single
  68. Dim Cs As Single , Akumulator As Single
  69.  
  70.      '---akumulator
  71. Dim Pojemnosc_aku As String * 5 , Pojemnosc As Single , Aku_min_max As Single
  72. Dim Ladowanie_aku As Byte , Aku_poziom As Bit
  73.  
  74. Dim Charge_start As String * 4 , Charge_stop As String * 4 , Discharged As String * 4
  75.  
  76.      '---status sieci 230V
  77. Dim Siec As Byte
  78.  
  79.      '---DS18B20
  80. Dim Odczyt_ds(2) As Byte , T As Integer , T1 As Single , Temp As String * 5
  81.  
  82.      '---UART
  83. Dim Znak As Byte , Ile_elementow As Byte
  84. Dim Komenda_uart As String * 50 , Getcommands(10) As String * 50
  85.  
  86. Dim Uart_opoznienie_wylaczenia As String * 4 , Uart_opoznienie_wlaczenia As String * 4
  87. Dim Uart_zmiana_ekranu As String * 4 , Uart_led_lcd As String * 1
  88. Dim Uart_naladowany As String * 4 , Uart_ladowanie As String * 4 , Uart_rozladowany As String * 4
  89.  
  90.      '---ikony
  91.      'ikonki na LCD. Mile dla oka, a i od razu wiadomo co sie dzieje w UPS
  92. Dim Mig As Bit , Migaj As Byte , Ikona_usb As Byte
  93.  
  94.      '---konfiguracja 1-wire
  95. Config 1wire = Portd.3
  96. 1wreset
  97. 1wwrite &HCC
  98. 1wwrite &H44
  99.  
  100.      '---konfiguracja i2c
  101. $lib "i2c_twi.lbx"
  102. Config Scl = Portc.5
  103. Config Sda = Portc.4
  104. Config Twi = 400000
  105. I2cinit
  106.  
  107.      '---konfiguracja LCD
  108.      'LCD jest podlaczony za pomoca konwertera na PCF8574
  109. $lib "bl_Lcd_i2c.lib"
  110.  
  111.      'LCD HD44780 16x2
  112. Config Lcd = 16x2
  113.  
  114. Const Pcf_d4 = 4
  115. Const Pcf_d5 = 5
  116. Const Pcf_d6 = 6
  117. Const Pcf_d7 = 7
  118. Const Pcf_rs = 0
  119. Const Pcf_rw = 1
  120. Const Pcf_e1 = 2
  121.  
  122. Dim _lcd_e As Byte
  123. Dim Backlight As Byte
  124.  
  125. Backlight_on Alias &H08
  126. Backlight_off Alias &H00
  127. Backlight = Backlight_on
  128. _lcd_e = 128
  129.  
  130. Const Pcf8574_lcd = &H4E
  131.  
  132. Waitms 100 : Cls
  133.  
  134.      '---powitanie UART
  135. Sub Powitanie_uart
  136.  
  137.   Print
  138.   Print "=================================================="
  139.   Print "          ***   Pi UPS by @pimowo   ***"
  140.   Print
  141.   Print
  142.   Print " <P> Pomoc"
  143.   Print " <I> Informacje"
  144.   Print "--------------------------------------------------"
  145.  
  146. End Sub
  147.  
  148.      '---powitanie LCD
  149.      'układ po starcie ladnie wita się z użytkownikiem ;)
  150. Sub Powitanie_lcd
  151.  
  152.   Locate 1 , 6 : Lcd "PiUPS"
  153.   Locate 2 , 4 : Lcd "by @pimowo"
  154.  
  155.   Wait 4                                                    'odczekaj i wyczysc ekran
  156.  
  157. End Sub
  158.  
  159.      '---deklaracja znakow
  160.      'deklaracja nietypowych znakow-polskie "ogonki" oraz ikonki
  161. Deflcdchar 0 , 14 , 31 , 17 , 17 , 19 , 23 , 31 , 31        'akumulator
  162. Deflcdchar 1 , 32 , 14 , 17 , 31 , 16 , 14 , 4 , 6          'Ä™
  163. Deflcdchar 2 , 32 , 14 , 1 , 15 , 17 , 15 , 4 , 6           'Ä…
  164. Deflcdchar 3 , 2 , 4 , 14 , 16 , 14 , 1 , 30 , 32           'Ĺ›
  165. Deflcdchar 4 , 4 , 32 , 31 , 2 , 4 , 8 , 31 , 32            'ĹĽ
  166. Deflcdchar 5 , 32 , 10 , 10 , 31 , 14 , 4 , 4 , 3           'wtyczka
  167. Deflcdchar 6 , 27 , 31 , 4 , 14 , 21 , 27 , 21 , 14         'malina
  168. Deflcdchar 7 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32            'stopien
  169.  
  170.      '---odczyt czujnika temperatury
  171.      'pomiar temperatury akumulatora na czujniku DS18B20
  172. Sub Temperatura
  173.  
  174.   If Err = 0 Then                                           'jezeli nie ma zadnych bledow to odczytaj czujnik
  175.  
  176.     1wreset                
  177.     1wwrite &HCC
  178.     1wwrite &HBE
  179.  
  180.     Odczyt_ds(1) = 1wread(2)
  181.     T = Odczyt_ds(2)
  182.     Shift T , Left , 8
  183.     T = T + Odczyt_ds(1)
  184.     T1 = T * 0.0625
  185.  
  186.     Temp = Fusing(t1 , "###.#")
  187.  
  188.   Else                                                      'jezeli jest problem z czujnikiem/magistrala to wyswietl "0"
  189.  
  190.     Temp = "0.0"
  191.  
  192.   End If
  193.  
  194.      '---tu DS szykuje nowy odczyt
  195.   1wreset
  196.   1wwrite &HCC
  197.   1wwrite &H44
  198.  
  199. End Sub
  200.  
  201.      '---pomiary ADC
  202.      'pomiar pradu i napiecia
  203. Sub Pomiary(byval Channel As Byte)
  204.  
  205.   Local Pomiar As Word : Pomiar = 0
  206.  
  207.     For Krok = 1 To Ilosc_probek                            'oczytaj kanal ADC ustalona ilosc razy
  208.  
  209.       Pomiar = Pomiar + Getadc(channel)
  210.  
  211.     Next
  212.  
  213.     Pomiar_wejscia = Pomiar / Ilosc_probek                  'wyciagnij srednia z pomiarow
  214.  
  215.     Select Case Channel
  216.  
  217.       Case 0                                                'pomiar pradu na wyjsciu UPS
  218.  
  219.         Odczyt = Pomiar_wejscia * Korekta_prad
  220.  
  221.           If Odczyt < 0.005 Then Odczyt = 0                 'korekta aby pozbyc sie smieci
  222.  
  223.         Amper = Fusing(odczyt , "#.###")                    'zaokraglij wynik pomiaru do trzch miejsc po przecinku
  224.         Watt_amper = Odczyt                                 'zmienna do obliczenia mocy pobieranej z UPS
  225.  
  226.       Case 1                                                'napiecie na wejsciu UPS
  227.  
  228.         Odczyt = Pomiar_wejscia * Korekta_napiecie
  229.  
  230.           If Odczyt < 0.5 Then Odczyt = 0                   'korekta aby pozbyc sie smieci
  231.  
  232.         V_wej = Fusing(odczyt , "#.###")                    'zaokraglij wynik pomiaru do trzch miejsc po przecinku
  233.         Napiecie_wej = Odczyt
  234.  
  235.           If Napiecie_wej >= 1 Then
  236.  
  237.             Siec = 0                                        'gdy jest napiecie sieciowe wylacz alarm(0)
  238.  
  239.             Backlight = Backlight_on                        'wlacz podswietlenie LCD
  240.  
  241.           Else
  242.  
  243.             Siec = 1                                        'brak zasialania sieciowego wiec alarm(1)
  244.  
  245.               If Led_lcd = 1 Then                           'jezeli jest wlaczony automat sterowania LED w LCD to steruj podswietleniem
  246.  
  247.                 Backlight = Backlight_off                   'wylacz podswietlenie LCD
  248.  
  249.               Else
  250.  
  251.                 Backlight = Backlight_on                    'wlacz podswietlenie LCD
  252.                                                             'jezeli wylaczony jest automat sterowania LED w LCD to swieci caly czas
  253.  
  254.               End If
  255.  
  256.           End If
  257.  
  258.       Case 2                                                'napiecie akumulatora
  259.  
  260.         Odczyt = Pomiar_wejscia * Korekta_napiecie
  261.         V_aku = Fusing(odczyt , "#.###")                    'zaokraglij wynik pomiaru do trzch miejsc po przecinku
  262.         Napiecie_aku = Odczyt
  263.  
  264.       Case 3                                                'napiecie na wyjsciu UPS
  265.  
  266.         Odczyt = Pomiar_wejscia * Korekta_napiecie
  267.  
  268.           If Odczyt < 0.005 Then Odczyt = 0                 'korekta aby pozbyc sie smieci
  269.  
  270.         V_wyj = Fusing(odczyt , "#.###")                    'zaokraglij wynik pomiaru do trzch miejsc po przecinku                      
  271.         Watt_volt = Odczyt                                  'zmienna do obliczenia mocy pobieranej z UPS
  272.  
  273.     End Select
  274.  
  275. End Sub
  276.  
  277.      '---procentowa pojemnosc akumulatora
  278.      'mile dla oka ponieważ wiemy na jak długo starczy jeszcze baterii az UPS "padnie"
  279. Sub Bateria
  280.  
  281.   Pojemnosc = Napiecie_aku
  282.   Pojemnosc = Pojemnosc - Pusty_akumulator
  283.   Aku_min_max = Pelny_akumulator - Pusty_akumulator
  284.   Pojemnosc = Pojemnosc / Aku_min_max
  285.   Pojemnosc = Pojemnosc * 100
  286.   Pojemnosc_aku = Fusing(pojemnosc , "###.#")                'zaokraglij wynik pomiaru do jednego miejsca po przecinku
  287.  
  288. End Sub
  289.  
  290.      '---moc pobierana z UPS
  291.      'przeliczenie odczyow (napiecie na wyjściu UPS x natezenie pradu na wyjściu UPS)
  292. Sub Moc
  293.  
  294.   Watt_oblicz = Watt_volt * Watt_amper
  295.   Watt = Fusing(watt_oblicz , "#.###")                       'zaokraglij wynik pomiaru do trzch miejsc po przecinku
  296.  
  297. End Sub
  298.  
  299.      '---USTAWIENIA POCZATKOWE
  300.      '---odczytywanie z eeprom
  301. Opoznienie_wlaczenia = Opoznienie_wlaczenia_ee
  302. Opoznienie_wylaczenia = Opoznienie_wylaczenia_ee
  303. Ladowanie = Ladowanie_ee
  304. Naladowany = Naladowany_ee
  305. Rozladowany = Rozladowany_ee
  306. Zmiana_ekranu = Zmiana_ekranu_ee
  307. Led_lcd = Led_lcd_ee
  308.  
  309.      '----------------------------------------------------------------------------------------------
  310.      '----------------------------------------------------------------------------------------------
  311. 'TAK PRZY OKAZJI
  312. 'Jak to zrobić aby domyslne dane same sie wpisaly do eeprom?
  313. 'Przykladowo wrzucam nowy kod do AVR i wszystkie dane mi sie kasuja
  314. 'Chcialbym aby domyslne dane same sie wpisaly do eeprom przy pierwszym starcie
  315. 'Gdy eeprom byla juz zapisywana to nic nie robimy
  316.      '----------------------------------------------------------------------------------------------
  317.      '----------------------------------------------------------------------------------------------
  318.  
  319. Poczatkowy Alias 0
  320. Czekaj_i_wlacz Alias 2
  321. Wlaczone Alias 4
  322. Czekaj_i_wylacz Alias 10
  323. Wylaczone Alias 15
  324. Rozladowane Alias 20
  325.  
  326.      '---wlaczenie globalnych przerwan
  327. Enable Interrupts
  328. Enable Serial
  329.  
  330.      '---pokaz powitanie na LCD oraz na UART
  331. 'Call Powitanie_uart
  332. Call Powitanie_lcd
  333.  
  334.      '---zrob pierwsze pomiary aby LCD nie wyswietlal zer
  335. Call Pomiary(0)
  336. Call Pomiary(1)
  337. Call Pomiary(2)
  338. Call Pomiary(3)
  339. Call Moc
  340. Call Temperatura
  341. Call Bateria
  342.  
  343. Wait 1 : Cls                                                'wyczysc wyswietlacz
  344.  
  345. Lcd_ups = 1                                                 'wlacz tryb "normalny" dla UPS (domyslny)
  346.  
  347.      '---------------
  348.      '---PETLA GLOWNA PROGRAMU
  349. Do
  350.  
  351.   If 10ms = 1 Then                                          'gdy minelo 10ms                                    
  352.     10ms = 0                                                'wyzeroj zmienna
  353.  
  354.     If Lcd_ups = 0 Then                                     'jezeli wlaczony jest tryb "testowy" Regulacja ADC
  355.                                                              
  356.       Incr 100ms                                            'licz zmienna dla 100ms
  357.  
  358.       If 100ms = 10 Then                                    'jezeli minelo 100ms (10ms x 10)
  359.         100ms = 0                                           'wyzeruj zmienna
  360.  
  361.      '---zrob pomiary
  362.         Call Pomiary(0)
  363.         Call Pomiary(1)
  364.         Call Pomiary(2)
  365.         Call Pomiary(3)
  366.  
  367.      '---wyswietl pomiary na LCD
  368.         Locate 1 , 1 : Lcd "A:" ; V_wej
  369.         Locate 1 , 10 : Lcd "B:" ; Amper
  370.         Locate 2 , 1 : Lcd "C:" ; V_aku
  371.         Locate 2 , 10 : Lcd "D:" ; V_wyj
  372.  
  373.      '---wyniki pomiarow wyslij na UART
  374.        Print
  375.         Print " || V wej. pot.A: " ; V_wej ; " | A wyj. pot.B: " ; Amper ; " | V aku. pot.C: " ; V_aku ; " | V wyj. pot.D: " ; V_wyj ; " ||"
  376.  
  377.       End If
  378.  
  379.     Else                                                    'tryb "normalny" UPSa
  380.  
  381.       If Usb = 0 Then                                       'jezeli system na Raspberry Pi pracuje
  382.  
  383.         Locate 2 , 12 : Lcd "USB"                           'pokaz ikone "USB" na LCD
  384.  
  385.       Else
  386.  
  387.         Locate 2 , 12 : Lcd "   "                           'jezeli system zostal zamkniety wymaz ikone "USB" z LCD
  388.  
  389.       End If
  390.  
  391.     End If
  392.  
  393.     If 1s < 100 Then                                        'odlicz sekunde (100x10ms)
  394.  
  395.       Incr 1s                                               'licz sekundy
  396.  
  397.     Else 'jezeli zmienna                                    '1s = 100 (10ms x 100)
  398.  
  399.       1s = 0                                                'wyzeruj zmienna
  400.  
  401.       If Lcd_ups = 1 Then                                   'jezeli UPS jest w trybie "normalnym" to wykonaj pomiary
  402.  
  403.         Call Pomiary(0)
  404.         Call Pomiary(1)
  405.         Call Pomiary(2)
  406.         Call Pomiary(3)
  407.         Call Moc
  408.         Call Temperatura
  409.         Call Bateria
  410.  
  411.         Gosub Miganie                                       'skocz do podprogramu aby wyswietlic ikony
  412.  
  413.       End If
  414.  
  415. '---------------------------------------------------------------------------------------------------------
  416. '---------------------------------------------------------------------------------------------------------
  417. 'TEGO BLOKU NIE DO KONCA ROZUMIEM, A TU (CHYBA) POWINNA BYC MOJA LOGIKA DZIALANIA UPS
  418.  
  419.  
  420.       If Odczekaj > 0 Then                                  'opoznienie wlaczenia/wylaczenia wyjscia UPS'a
  421.  
  422.         Decr Odczekaj
  423.  
  424.         If Odczekaj = 0 Then
  425.  
  426.           Select Case Stan_urzadzenia
  427.  
  428.             Case Czekaj_i_wlacz
  429.  
  430.               Wyjscie = 1
  431.               Stan_urzadzenia = Wlaczone
  432.  
  433.             Case Czekaj_i_wylacz
  434.  
  435.               Wyjscie = 0
  436.               Stan_urzadzenia = Wylaczone
  437.  
  438.           End Select
  439.  
  440.         End If
  441.  
  442.       End If
  443.  
  444.       Select Case Stan_urzadzenia
  445.  
  446.         Case Poczatkowy
  447.  
  448.           If Napiecie_wej > 1.0 Then
  449.  
  450.             Odczekaj = Opoznienie_wlaczenia
  451.             Stan_urzadzenia = Czekaj_i_wlacz
  452.  
  453.           End If
  454.  
  455.         Case Wlaczone
  456.  
  457.           Select Case Napiecie_aku
  458.  
  459.             Case Is < Rozladowany
  460.  
  461.               If Siec = 0 Then Ladowarka = 1                'jezeli jest napiecie sieciowe to laduj akumulator
  462.  
  463.               Wyjscie = 1                                   'wlaczone napiecie na wyjsciu UPS
  464.               Stan_urzadzenia = Rozladowane
  465.               Aku_poziom = 1                                'stan krytyczny akumulatora wiec alarm(1)
  466.  
  467.             Case Is <= Ladowanie
  468.  
  469.               If Siec = 0 Then Ladowarka = 1                'jezeli jest napiecie sieciowe to laduj akumulator
  470.  
  471.               Aku_poziom = 0                                'napiecie akumulatora powyzej stanu krytycznego wylacz(0)
  472.  
  473.             Case Is >= Naladowany
  474.  
  475.               Ladowarka = 0                                 'wylacz ladowarke
  476.               Aku_poziom = 0                                'napiecie akumulatora powyzej stanu krytycznego wylacz(0)
  477.  
  478.           End Select
  479.  
  480.       End Select
  481.  
  482. 'KONIEC TAJNEGO, NIEZROZSMIALEGO BLOKU
  483. '---------------------------------------------------------------------------------------------------------
  484. '---------------------------------------------------------------------------------------------------------
  485.  
  486.      '---wyswietlanie wszystkich danych UPS na LCD
  487.       If Lcd_ups = 1 Then                                   'jezeli UPS jest w trybie "normalnym"                                  
  488.  
  489.         Incr Sekundy                                        'licz sekundy
  490.  
  491.         If Sekundy >= Zmiana_ekranu Then                    'przewijanie ekranow LCD co ustalona ilosc sekund
  492.           Sekundy = 0                                       'wyzeruj zmienna
  493.  
  494.           Incr Ekran                                        'licz ekrany
  495.  
  496.           If Ekran > 7 Then Ekran = 1                       'jezeli wszystkie ekrany zostaly wyswietlone to zacznij od pierwszego
  497.  
  498.             Locate 1 , 1 : Lcd Space(16) : Locate 1 , 1     'pozycja wyswietlania danych na gornej linii
  499.  
  500.               Select Case Ekran
  501.  
  502.                 Case 1 : Lcd "Napi" ; Chr(1) ; "cie wej" ; Chr(3) ; "cie"
  503.                 Case 2 : Lcd "Napi" ; Chr(1) ; "cie baterii"
  504.                 Case 3 : Lcd "Napi" ; Chr(1) ; "cie wyj" ; Chr(3) ; "cie"
  505.                 Case 4 : Lcd "Nat" ; Chr(1) ; Chr(4) ; "enie pr" ; Chr(2) ; "du"
  506.                 Case 5 : Lcd "Moc pobierana"
  507.                 Case 6 : Lcd "Temp. baterii"
  508.                 Case 7 : Lcd "Bateria"
  509.  
  510.               End Select
  511.  
  512.             Locate 2 , 1 : Lcd Space(14) : Locate 2 , 1      'pozycja wyswietlania danych na dolnej linii
  513.    
  514.               Select Case Ekran
  515.  
  516.                 Case 1 : Lcd Chr(5) ; " " ; V_wej ; " V"
  517.                 Case 2 : Lcd Chr(0) ; " " ; V_aku ; " V"
  518.                 Case 3 : Lcd Chr(6) ; " " ; V_wyj ; " V"
  519.                 Case 4 : Lcd Chr(6) ; " " ; Amper ; " A"
  520.                 Case 5 : Lcd Chr(6) ; " " ; Watt ; " W"
  521.                 Case 6 : Lcd Chr(0) ; " " ; Temp ; Chr(7) ; "C"
  522.                 Case 7 : Lcd Chr(0) ; " " ; Pojemnosc_aku ; " %"
  523.  
  524.               End Select
  525.  
  526.         End If
  527.  
  528.       End If
  529.  
  530.      '---koniec 1s
  531.     End If
  532.  
  533.      '---koniec 10ms
  534.   End If
  535.  
  536.      '---obsluga UART
  537.   If Ischarwaiting() > 0 Then                               'jezeli w buforze cos jest
  538.  
  539.     Znak = Waitkey()                                        'pobierz znak z bufora
  540.  
  541.     If Znak = 13 Then                                       'jesli ENTER to skocz do uart
  542.  
  543.       Gosub Uart                                            'skocz do podprogramu uart
  544.  
  545.       Komenda_uart = ""
  546.  
  547.     Else
  548.  
  549.       Komenda_uart = Komenda_uart + Chr(znak)               'kluczowe budowanie bufora
  550.  
  551.       'Print Chr(znak);                                     'to jest echo zeby bylo widac co przychodzi
  552.  
  553.     End If
  554.  
  555.   End If
  556.  
  557. Loop
  558. End
  559.      '---KONIEC PETLI GLOWNEJ
  560.      '---------------
  561.  
  562.      '---przerwanie od TIMERA
  563. Timer0_isr:
  564.  
  565.   $asm
  566.   !PUSH R16
  567.   !PUSH R24
  568.   !PUSH R26
  569.   !PUSH R27
  570.   !in R24, sreg
  571.   !PUSH  R24
  572.   $end Asm
  573.  
  574.     10ms = 1                                                'zglos, ze minelo 10ms
  575.  
  576.      '---Tuned with NoSave Tool
  577.   $asm
  578.   !POP  R24
  579.   !out sreg, r24
  580.   !POP R27
  581.   !POP R26
  582.   !POP R24
  583.   !POP R16
  584.   $end Asm
  585.  
  586. Return
  587.  
  588.      '---miganie ikonami
  589.      'pierdola, ale mila dla oka poniewaz patrzac na ikony od razu wiadomo co sie dzieje z UPS
  590. Miganie:
  591.  
  592.   Mig = Not Mig
  593.  
  594.   Locate 2 , 16
  595.  
  596.     If Ladowarka = 1 Then                                   'jezeli trwa ladowanie akumulatora mrugaj naprzemiennie ikonami kabelka i baterii
  597.  
  598.       If Mig = 1 Then
  599.  
  600.         Lcd Chr(5)
  601.  
  602.       Else
  603.  
  604.         Lcd Chr(0)
  605.  
  606.       End If
  607.  
  608.     Else                                                    'jezeli akumulator nie jest ladowany to wyswietl ikone zrodla napiecia
  609.  
  610.       If Siec = 0 Then                                      'jezeli jest zasilanie sieciowe pokaz ikone kabelka
  611.  
  612.         Lcd Chr(5)
  613.  
  614.       Else                                                  'jezeli brak zasilania sieciowego pokaz ikone baterii
  615.  
  616.         Lcd Chr(0)
  617.  
  618.       End If
  619.  
  620.     End If
  621.  
  622. Return
  623.  
  624.      '---obsluga UART
  625.      'analiza komend/polecen
  626. Uart:
  627.  
  628.   Ile_elementow = Split(komenda_uart , Getcommands(1) , " ")
  629.  
  630.     Select Case Getcommands(1)
  631.  
  632.       Case "F"                                              'jezeli odebrany znak to "F" (Fabryka) przywroc wartosci domyslne i zresetuj AVR
  633.  
  634.         Opoznienie_wlaczenia = 60
  635.         Opoznienie_wlaczenia_ee = Opoznienie_wlaczenia
  636.         Opoznienie_wylaczenia = 60
  637.         Opoznienie_wylaczenia_ee = Opoznienie_wylaczenia
  638.         Ladowanie = 3.9
  639.         Ladowanie_ee = Ladowanie
  640.         Naladowany = 4.1
  641.         Naladowany_ee = Naladowany
  642.         Rozladowany = 3.3
  643.         Rozladowany_ee = Rozladowany
  644.         Zmiana_ekranu = 2
  645.         Zmiana_ekranu_ee = Zmiana_ekranu
  646.         Led_lcd = 1
  647.         Led_lcd_ee = Led_lcd
  648.  
  649.       Case "U"                                              'jezeli odebrany znak to "U" (Ustawienia) konfiguracja UPS
  650.  
  651.         Uart_opoznienie_wlaczenia = Getcommands(2)
  652.         Opoznienie_wlaczenia = Val(uart_opoznienie_wlaczenia)
  653.         Opoznienie_wlaczenia_ee = Opoznienie_wlaczenia
  654.  
  655.         Uart_opoznienie_wylaczenia = Getcommands(3)
  656.         Opoznienie_wylaczenia = Val(uart_opoznienie_wylaczenia)
  657.         Opoznienie_wylaczenia_ee = Opoznienie_wylaczenia
  658.  
  659.         Uart_ladowanie = Getcommands(4)
  660.         Ladowanie = Val(uart_ladowanie)
  661.         Ladowanie_ee = Ladowanie
  662.  
  663.         Uart_naladowany = Getcommands(5)
  664.         Naladowany = Val(uart_naladowany)
  665.         Naladowany_ee = Naladowany
  666.  
  667.         Uart_rozladowany = Getcommands(6)
  668.         Rozladowany = Val(uart_rozladowany)
  669.         Rozladowany_ee = Rozladowany
  670.  
  671.         Uart_zmiana_ekranu = Getcommands(7)
  672.         Zmiana_ekranu = Val(uart_zmiana_ekranu)
  673.         Zmiana_ekranu_ee = Zmiana_ekranu
  674.  
  675.         Uart_led_lcd = Getcommands(8)
  676.         Led_lcd = Val(uart_led_lcd)
  677.         Led_lcd_ee = Led_lcd
  678.  
  679.       Case "I"                                              'jezeli odebrany znak to "I" (Informacje) wyswietl dane na temat sprzetu/programu
  680.  
  681.         Print
  682.         Print "=================================================="
  683.         Print "                 ***   INFO   ***"
  684.         Print
  685.         Print
  686.         Print "          Zasilacz awaryjny Raspberry Pi"
  687.         Print
  688.         Print "                     Projekt:"
  689.         Print "                     @pimowo"
  690.         Print "                   Piotr Mrozek"
  691.         Print "                 pimowo@gmail.com"
  692.         Print
  693.         Print
  694.         Print " PiUPS:"
  695.         Print " Wersja hadware: v2.0"
  696.         Print " Wersja software: v1.0"
  697.         Print "--------------------------------------------------"
  698.  
  699.       Case "O"                                              'jezeli odebrany znak to "O" (Odczyt) pokaz konfiguracje UPS'a
  700.  
  701.         Charge_start = Fusing(ladowanie , "#.##")
  702.         Charge_stop = Fusing(naladowany , "#.##")
  703.         Discharged = Fusing(rozladowany , "#.##")
  704.  
  705.         Print Opoznienie_wlaczenia ; " " ; Opoznienie_wylaczenia ; " " ; Charge_start ; _
  706.           " " ; Charge_stop ; " " ; Discharged ; " " ; Zmiana_ekranu ; " " ; Led_lcd
  707.  
  708.       Case "N"                                              'jezeli odebrany znak to "N" (Normalny) Normalne dzialanie UPS'a
  709.  
  710.         Cls : Lcd_ups = 1
  711.  
  712.       Case "T"                                              'jezeli odebrany znak to "T" (Test) regulacja ADC
  713.  
  714.         Cls : Lcd_ups = 0
  715.  
  716.       Case "P"                                              'jezeli odebrany znak to "P" (Pomoc) wyswietl wszystkie dostepne komendy
  717.  
  718.         Print
  719.         Print "=================================================="
  720.         Print "             ***   Pomoc   ***"
  721.         Print
  722.         Print
  723.         Print " D (Dane)"
  724.         Print " Wyswietl wszystkie pomiary"
  725.         Print
  726.         Print " F (Fabryka)"
  727.         Print " Zresetuj UPS do ustawien fabrycznych"
  728.         Print
  729.         Print " I (Informacje)"
  730.         Print " Wyswietl wszystkie pomiary"
  731.         Print
  732.         Print " N (Normalny)"
  733.         Print " Normalny tryb pracy UPS"
  734.         Print
  735.         Print " O (Odczyt)"
  736.         Print " Wyswietl wszystkie ustawienia UPS"
  737.         Print
  738.         Print " P (Pomoc)"
  739.         Print " Wyswietl wszystkie polecenia"
  740.         Print
  741.         Print " R (Reset)"
  742.         Print " Reset AVR"
  743.         Print
  744.         Print " T (Test)"
  745.         Print " Test i regulacja ADC"
  746.         Print
  747.         Print " U (Ustawienia)"
  748.         Print " Ustawienia parametrow UPS"
  749.         Print " <*> dokladny opis ustawien UPS"
  750.         Print "--------------------------------------------------"
  751.  
  752.       Case "*"                                              'jezeli odebrany znak to "*" szerszy opis ustawien UPS
  753.  
  754.         Print
  755.         Print "=================================================="
  756.         Print "        ***   Opis konfiguracji UPS   ***"
  757.         Print
  758.         Print
  759.         Print " U (Ustawienia)"
  760.         Print
  761.         Print " Wyjscie UPS:"
  762.         Print " Opoznienie wlaczenia (1-240s)"
  763.         Print " Opoznienie wylaczenia (1-240s)"
  764.         Print
  765.         Print " Akumulator:"
  766.         Print " Koniec ladowania (0.1-9.9V)"
  767.         Print " Poczatek ladowania (0.1-9.9V)"
  768.         Print " Rozladowany (0.1-9.9V)"
  769.         Print
  770.         Print " LCD:"
  771.         Print " Przelaczanie ekranow (1-240s)"
  772.         Print " Auto-podswietlenie (1/0)"
  773.         Print
  774.         Print " Przykladowe (domyslne) ustawienia:"
  775.         Print " U 60 60 3.9 4.0 3.3 2 1"
  776.         Print
  777.         Print " |ustaw|"
  778.         Print " |wlacz wyjscie po 60 sekundach|"
  779.         Print " |wylacz wyjscie po 60 sekundach|"
  780.         Print " |poczatek ladowania akumulatora przy napieciu 3.9V|"
  781.         Print " |koniec laowania akumulatora po osiagnieciu 4.0V|"
  782.         Print " |stan krytyczny akumulatora przy napieciu 3.3V|"
  783.         Print " |przelaczaj ekrany LCD co 2 sekundy|"
  784.         Print " |wygas LCD przy zasilaniu akumulatorowym|"
  785.         Print "--------------------------------------------------"
  786.  
  787.       Case "R"                                              'jezeli odebrany znak to "R" (Reset) zresetuj AVR
  788.  
  789.         Disable Interrupts                                  'wylaczenie przerwan
  790.         Start Watchdog                                      'uruchomienie Watchdoga
  791.         Do                                                  'petla nieskonczona
  792.         Loop                                                'w niej czekamy na Reset
  793.  
  794.       Case "D"                                              'jezeli odebrany znak to "D" (Dane) odeslij dane pomiarow
  795.  
  796.         Print V_wej ; " " ; V_aku ; " " ; V_wyj ; " " ; Amper ; " " ; Watt ; " " ; Temp ; _
  797.             " " ; Pojemnosc_aku ; " " ; Ladowarka ; " " ; Siec ; " " ; Aku_poziom
  798.  
  799.       Case Else                                             'jezeli odebrany znak to zaden z powyzszych to zglos ten problem informacja na UART
  800.  
  801. '       Print
  802. '       Print "=================================================="
  803. '       Print "               ***   BLAD!   ***"
  804. '       Print
  805. '       Print
  806. '       Print " Nie rozpoznano polecenia"
  807. '       Print " <P> Pomoc"
  808. '       Print "--------------------------------------------------"
  809.  
  810.         Gosub Czysc_bufor                                   'wyczysc bufor
  811.  
  812.     End Select
  813.  
  814.   Gosub Czysc_bufor                                         'wyczysc bufor
  815.  
  816. Return
  817.  
  818.      '---czyszczenie bufora UART
  819. Czysc_bufor:
  820.  
  821.   Getcommands(1) = ""
  822.   Getcommands(2) = ""
  823.   Getcommands(3) = ""
  824.   Getcommands(4) = ""
  825.   Getcommands(5) = ""
  826.   Getcommands(6) = ""
  827.   Getcommands(7) = ""
  828.   Getcommands(8) = ""
  829.   Getcommands(9) = ""
  830.   Getcommands(10) = ""
  831.  
  832. Return
Ostatnio zmieniony 16 lut 2018, 4:14 przez pimowo, łącznie zmieniany 4 razy.
Pikczu
Posty: 388
Rejestracja: 17 sie 2015, 13:46
Lokalizacja: Dublin, Ireland
Kontakt:

Re: Zasilacz awaryjny-UPS

Post autor: Pikczu » 15 lut 2018, 21:08

Do ogarnięcia, ale Panie dodaj Pan komentarze, bo ja najpierw muszę przeczytać twój kod zrozumieć co autor miał na myśli, lub nie i dopiero coś skomponować.
A to wymaga czasu.
Awatar użytkownika
pimowo
Posty: 392
Rejestracja: 28 maja 2016, 10:07

Re: Zasilacz awaryjny-UPS

Post autor: pimowo » 15 lut 2018, 21:11

OK, postaram się to jakoś opisać :)
Teraz czas zmykać do pracy :(
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Pikczu
Posty: 388
Rejestracja: 17 sie 2015, 13:46
Lokalizacja: Dublin, Ireland
Kontakt:

Re: Zasilacz awaryjny-UPS

Post autor: Pikczu » 16 lut 2018, 23:02

w tym folderze brakuje pliki .PRJ ale nie zawracaj sobie tym głowy na razie.
Odrobię się to zerknę.
Awatar użytkownika
pimowo
Posty: 392
Rejestracja: 28 maja 2016, 10:07

Re: Zasilacz awaryjny-UPS

Post autor: pimowo » 17 lut 2018, 0:18

Z góry wielkie dzięki ;)
Jak utworzyć taki plik?

Doodatkowe pytanie, a może nawet dwa :P
1. Co ze zmiennymi w takim przypadku, umieszczamy zmienne w pliku głównym czy w .inc?
2. Czy ja jeszcze za mało widziałem czy to powszechna praktyka aby tak pisać programy?
Zawsze widziałem, że wszyscy robią w jednym pliku .bas
ODPOWIEDZ