Miernik napięcia i natężenia prądu

Pytania, kody i porady dotyczące nie tylko Bascom.
marekszy
Posty: 99
Rejestracja: 20 lis 2016, 20:21

Re: Miernik napięcia i natężenia prądu

Post autor: marekszy » 23 maja 2019, 10:56

zmieniłem mnożnik i po podaniu na ADC1 170mV wyświetla 1,7A ,ale jakoś to nieliniowe w stosunku do innych napięć i trochę wrażliwe.
Pobaw się tym mnożnikiem
  1. Prad_1:
  2. Hsingle_2 = Prad_a * 0.0058'0.0049
  3.   Hsingle_2 = Hsingle_2 * 10
  4.   Amper = Fusing(hsingle_2 , "#.&")
  5. Return
Awatar użytkownika
kulamario
Posty: 207
Rejestracja: 17 sie 2015, 20:05
Lokalizacja: Greystones
Kontakt:

Re: Miernik napięcia i natężenia prądu

Post autor: kulamario » 23 maja 2019, 13:48

  1. Prad_1:
  2. Hsingle_2 = Prad_a * 0.0038
  3.   Hsingle_2 = Hsingle_2 * 10
  4.   Amper = Fusing(hsingle_2 , "#.&")
u mnie dopiero przy takim zapisie pokazuje 1,7A na żarówce 21W 12V
a jak dam halogen 50W 12V to mam 3,7A
Awatar użytkownika
niveasoft
Posty: 1213
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Miernik napięcia i natężenia prądu

Post autor: niveasoft » 23 maja 2019, 14:37

Tak w ogóle nie wnikając w kod to jak tak patrzę że cos jest mnożone razy 0.0038 a potem razy dziesięć to naturalnym, dla mnie, byłoby przesuniecie o jedno zero pierwszego mnożenia i rezygnacja z drugiego :D ahahahaha :D
Wiecie - takie skracanie ułamków, upraszczanie działań itd :D
marekszy
Posty: 99
Rejestracja: 20 lis 2016, 20:21

Re: Miernik napięcia i natężenia prądu

Post autor: marekszy » 23 maja 2019, 18:49

Oczywiście masz rację, ale kiedyś na szybko poszło i już nie zgłębiałem tematu, bo i po co
Pikczu
Posty: 390
Rejestracja: 17 sie 2015, 13:46
Lokalizacja: Dublin, Ireland
Kontakt:

Re: Miernik napięcia i natężenia prądu

Post autor: Pikczu » 23 maja 2019, 22:43

Narysowałem w proteusie gotowca ( nie zbyt ładny)
Kod jest od kolegi marekszy
  1. '*****************pomiar V/A,termometr*********
  2.  
  3. $regfile = "m8def.dat"
  4. $crystal = 8000000
  5. $hwstack = 64
  6. $swstack = 64
  7. $framesize = 64
  8.  
  9. Config Portb = &B11111111 : Portb = &B11111111
  10. Config Portc = &B11111100 : Portc = &B11111100
  11. Config Portd = &B11000000 : Portd = &B10111111
  12.  
  13. Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.3 , Db6 = Portb.5 , Db7 = Portb.2 , E = Portb.0 , Rs = Portb.1
  14. Config Lcd = 20 * 2
  15.  
  16.  
  17. Cursor Off : Cls
  18.  
  19. Config Timer0 = Timer , Prescale = 256
  20. Enable Timer0 : On Timer0 Prztimer0
  21.  
  22.  
  23.  
  24. Config Adc = Single , Prescaler = Auto , Reference = Avcc   'Zrodlem odniesienia jest napiecie zasilania
  25. Start Adc                                                   ' tu wlaczamy ADC
  26.  
  27. Enable Interrupts
  28.  
  29. Buzer Alias Portd.6
  30. Wentylator Alias Portc.5
  31. '*********************************************************
  32. Dim Flaga_4ms As Bit , Flaga_100ms As Bit , Flaga_1s As Bit
  33. Dim Dzielnik As Byte , Dzielnik2 As Byte
  34.  
  35. 'Deklaracja wszystkich zmiennych potrzebnych do pracy programu termostatu
  36. Config 1wire = Portd.3                                      ' konfiguracja portu PD.3 jako wejścia magistrali 1-wire
  37.  
  38. Dim Temp As Word , Hsingle As Word , T1_word As Word
  39. Dim Odczyt(2) As Byte , T As Integer , T1 As Single , Napis As String * 5
  40. Dim Alarm As Byte
  41.  
  42. 'deklaracje do pomiaru napiecia
  43.  
  44. Dim P As Byte                                               'licznik dla ilosci pomiarow
  45. Dim Probka As Word                                          'wartosc odczytana z przylozonego do ADC
  46. Dim Napiecie As Word                                        'dodaje do siebie kolejne odczyty
  47. Dim Napiecie_u As Single                                    'napiecie usrednione single bo z przecinkiem
  48. Dim Hsingle_1 As Single                                     'pomocnicza zmienna
  49. Dim Volt As String * 5                                      'zmienna "tekstowa" 5 znakow ksztaltowana przez "fusing"
  50. Dim Napiecie_alarm As Word                                  'wylaczenie po osiagnieciu np.15V
  51. Const P_max = 20                                            'ilosc pomiarow do usredniania
  52.  
  53. 'deklaracje do pomiaru pradu
  54. Dim X As Byte                                               'licznik dla ilosci pomiarow
  55. Dim Probka_1 As Word                                        'wartosc odczytana z przylozonego do ADC
  56. Dim Prad As Word                                            'dodaje do siebie kolejne odczyty
  57. Dim Prad_a As Single                                        'napiecie usrednione single bo z przecinkiem
  58. Dim Hsingle_2 As Single                                     'pomocnicza zmienna
  59. Dim Amper As String * 5                                     'zmienna "tekstowa" 5 znakow ksztaltowana przez "fusing"
  60. Const X_max = 20                                            'ilosc pomiarow do usredniania
  61.  
  62. 'wczytanie danych z pamieci
  63.  
  64.  Temp = 45
  65.  
  66. 'niech DS ma już gotowa temp
  67.  1wreset
  68.  1wwrite &HCC
  69.  1wwrite &H44
  70. '**********************************************************
  71. Lcd "    MAREKSZY    "
  72. Lowerline
  73. Lcd "    TEST V/A    "
  74. Wait 2
  75. Cls
  76. '**********************************************************
  77.  
  78. Do
  79.  
  80. If Flaga_4ms = 1 Then                                       'co 4ms
  81.      Flaga_4ms = 0
  82.     'co ma byc co 4ms
  83.      Gosub Pomiar_v
  84.      Gosub Pomiar_a
  85.   End If
  86.    If Flaga_100ms = 1 Then                                  ' co 100ms
  87.       Flaga_100ms = 0
  88.      'co ma byc po 100ms
  89.      Gosub Wyswietlanie
  90.  
  91.    End If
  92.     If Flaga_1s = 1 Then                                    'co 1s
  93.        Flaga_1s = 0
  94.        'co ma byc co 1s
  95.       Gosub Temperatura
  96.       Gosub Napiecie_1
  97.       Gosub Prad_1
  98.     End If
  99.  
  100. Loop
  101. End
  102. '***********************Przerwanie timer0**************************************
  103. Prztimer0:
  104.  Timer0 = 131
  105.  Flaga_4ms = 1
  106.  Incr Dzielnik
  107.  If Dzielnik = 25 Then                                      '25*4ms = 100ms
  108.    Dzielnik = 0
  109.    Flaga_100ms = 1
  110.    Incr Dzielnik2
  111.    If Dzielnik2 = 10 Then                                   '10*100ms=1s'
  112.     Dzielnik2 = 0
  113.     Flaga_1s = 1
  114.    End If
  115.  End If
  116. Return
  117.  
  118. '************************podprogram pom.temperatury****************************
  119.  
  120. Temperatura:
  121.  
  122.   1wreset                                                   ' tu czytasz temperature
  123.   1wwrite &HCC
  124.   1wwrite &HBE
  125.    Odczyt(1) = 1wread(2)
  126.    T = Odczyt(2)
  127.   Shift T , Left , 8
  128.    T = T + Odczyt(1)
  129.    T1 = T * 0.0625
  130.    T1_word = T1
  131.  
  132.     Napis = Fusing(t1 , "#.#")
  133.    ' Locate 2 , 13
  134.    'Lcd "T:" ; Napis ; "" ; Chr(223) ; "C"                   'wyświetl wynik ze zmiennej Word temperatura
  135.  
  136.  1wreset                                                    ' tu kazesz DS`owi przygotować nowy odczyt
  137.  If Err = 0 Then
  138.   1wwrite &HCC                                              ' i za sekunde juz będzie gotowy
  139.   1wwrite &H44
  140.   Alarm = 0
  141.   Else
  142.   Alarm = 1
  143.  End If
  144. Return
  145.  
  146. '******************************konw.napiecia***********************************
  147. Napiecie_1:
  148. Hsingle_1 = Napiecie_u * 0.0049
  149.   Hsingle_1 = Hsingle_1 * 6
  150.   Volt = Fusing(hsingle_1 , "#.&")
  151. Return
  152.  
  153. '******************************konw.pradu**************************************
  154. Prad_1:
  155. Hsingle_2 = Prad_a * 0.0049
  156.   Hsingle_2 = Hsingle_2 * 10
  157.   Amper = Fusing(hsingle_2 , "#.&")
  158. Return
  159. '**********************************pomiar V************************************
  160. Pomiar_v:
  161.  
  162. Incr P                                                      'zwiekszanie licznika dla pomiarow
  163.  Probka = Getadc(0)                                         'zmierz na Pinie 0 ADC
  164.  Napiecie = Napiecie + Probka                               'dodaj kolejne pomiary
  165.   If P >= P_max Then                                        'gdy pomiarow 20
  166.       P = 0
  167.     Napiecie_u = Napiecie / P_max                           'podziel cala sume przez ilosc pomiarow (usrednij)
  168.     Napiecie = 0                                            'zeruj zmienna by dodawac nowe
  169.   End If
  170.  
  171. Return
  172. ''***********************************pomiar A**********************************
  173. Pomiar_a:
  174.  
  175. Incr X                                                      'zwiekszanie licznika dla pomiarow
  176.  Probka_1 = Getadc(1)                                       'zmierz na Pinie 0 ADC
  177.  Prad = Prad + Probka_1                                     'dodaj kolejne pomiary
  178.   If X >= X_max Then                                        'gdy pomiarow 20
  179.       X = 0
  180.     Prad_a = Prad / X_max                                   'podziel cala sume przez ilosc pomiarow (usrednij)
  181.     Prad = 0                                                'zeruj zmienna by dodawac nowe
  182.   End If
  183.  
  184. Return
  185. '**********************************wyswietlanie********************************
  186. Wyswietlanie:
  187.  
  188.   Locate 1 , 1 : Lcd "I:" ; Amper ; "A  "
  189.   Locate 2 , 1 : Lcd "U:" ; Volt ; "V      "
  190.   Locate 1 , 10 : Lcd "T:" ; Napis ; "" ; Chr(223) ; "C"
  191.  
  192. Return
schemat wygląda tak:
kula 2.PNG
Żeby dodać kod do procka klikamy prawym klawiszem na procesor, następnie wybieramy "edit properties"
edit.PNG
Następnie podajemy ścieżkę dostępu do pliku hex z folderu o nazwie "bas" z folderu o nazwie "kulamario"
hex.PNG
Plik się nie zmieścił w tym poście będzie w następnym.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Pikczu
Posty: 390
Rejestracja: 17 sie 2015, 13:46
Lokalizacja: Dublin, Ireland
Kontakt:

Re: Miernik napięcia i natężenia prądu

Post autor: Pikczu » 23 maja 2019, 22:48

Plik projektu w Proteusie. Po rozpakowaniu w środku będzie folder bas - tam jest kod.
W kodzie prawie nic nie zmieniałem bo czasu brak.
Kulamario.rar
Pomiar temperatury nie działa coś jest chyba nie tak w kodzie.
Zresztą pomiar napięcia tez nie działa. Zmieniając wartość RV1 regulujemy przepływ prądu.
Teraz kulamario będziesz sobie mógł testować do woli.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Awatar użytkownika
pimowo
Posty: 392
Rejestracja: 28 maja 2016, 10:07

Re: Miernik napięcia i natężenia prądu

Post autor: pimowo » 23 maja 2019, 22:51

@Pikczu, a możesz mój kod wrzucić? Ciekawy jestem czy coś zadziała? :D
marekszy
Posty: 99
Rejestracja: 20 lis 2016, 20:21

Re: Miernik napięcia i natężenia prądu

Post autor: marekszy » 23 maja 2019, 22:54

Nie działa bo bocznik 0,1R narysuj tak jak na ostatnim rysunku, a termometr to jakieś resztki, nie sprawdzony, ADC1 mierzy właśnie prąd
Pikczu
Posty: 390
Rejestracja: 17 sie 2015, 13:46
Lokalizacja: Dublin, Ireland
Kontakt:

Re: Miernik napięcia i natężenia prądu

Post autor: Pikczu » 23 maja 2019, 23:02

Pimowo jutro sprawdzę bo już muszę iść spać.
Zainstaluj proteusa bo będę musiał usnąć link, wiesz (krakersy są tam i te sprawy).
Marekszy - bocznik jest ok narysowany.
Idę spać cześć.
Awatar użytkownika
kulamario
Posty: 207
Rejestracja: 17 sie 2015, 20:05
Lokalizacja: Greystones
Kontakt:

Re: Miernik napięcia i natężenia prądu

Post autor: kulamario » 24 maja 2019, 18:44

dzięki za pomoc kolegów miernik i zasilacz w sumie zrobiony
mam takie pytanie ile ten miernik może zmierzyć najmniej ?
bo podłączeniu malej diody LED pokazuje 0.000A a dioda świeci
i tak się zastanawiam jak by to trzeba było wykonać ze by mieć rozdzielczość od powiedzmy 10mA do 3A czy tam 5A
czy ten ACS712 da rade takie coś zrobić?
ODPOWIEDZ