logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak napisać program na ATMEGA8 do woltomierza i amperomierza z LCD 2x16?

wyszkowskidaniel 24 Lut 2008 21:49 21475 30
REKLAMA
  • #1 4842497
    wyszkowskidaniel
    Poziom 13  
    Posty: 117
    Pomógł: 1
    Ocena: 10
    Witam. Wiem że ten temat był już nieraz przerabiany ale nie znalazłem tego dokładnie co szukam... Buduję zasilacz który będzie miał 2 źródła zasilania. Chcę użyć do tego uC ATMEGA8 i wyświetlacza LCD 2*16 znaków. Zależy mi na tym aby był jeden wyświetlacz, nie mam za bardzo miejsca na panelu. Chcę aby w 2 linijkach wyświetlał 2 pomiary prądu i 2 napięcia, np.
    U1= 0,00 I1=0,00
    U2= 0,00 I2=0,00

    Chciałem napisać program ale jestem początkujący więc nie za bardzo mi to wychodzi. Na Elce są dostępne tylko .hex ...
    Interesował by mnie pomiar napięcia do 40V i prądu do 10A.
    Proszę o pomoc w napisaniu programu...
  • REKLAMA
  • #2 4843805
    karlos79
    Poziom 33  
    Posty: 1768
    Pomógł: 254
    Ocena: 76
    Witam
    Zamieść schemat na forum, wklej kod i dokładnie napisz co Ci nie wychodzi.
    W jakim języku piszesz program?
    Pozdrawiam
  • #3 4844065
    wyszkowskidaniel
    Poziom 13  
    Posty: 117
    Pomógł: 1
    Ocena: 10
    program piszę w baskomie. Niebawem zamieszczę schemat i kod
  • #4 4848027
    wyszkowskidaniel
    Poziom 13  
    Posty: 117
    Pomógł: 1
    Ocena: 10
    Tutaj jest kod który mam od znajomego, tylko że on dokonuje 4 pomiary i co pomiar przełącza wyświetlacz na kolejny... Pomożecie mi przerobić ten program?

    Tutaj jest ten kod:



     $regfile = "m8def.dat"                                     'informuje kompilator o pliku
          'dyrektyw mikrokontrolera
    $crystal = 8000000                                          'informuje kompilator
    
    
    
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portd.4 , E = Portd.3 , Rs = Portd.2
    
       Config Adc = Single , Prescaler = Auto , Reference = Internal
    
    
    
     Config Watchdog = 2048                                     'reset wystąpi po 8192 ms
    'Start Watchdog
    
    
    
    
    
    
    Declare Sub Odcz_temp
    
    
    
     ' Config Portc.1 = Output
    Config Portb.2 = Output                                     'wyjścia przekazników
    Config Portb.1 = Output                                     'wyjścia przekazników
    Config Portd.0 = Output                                     'wyjścia przekazników
    
    
    
    
    Config Pinb.3 = Input                                       'porty jako wejściowe
    Config Pinb.4 = Input                                       'porty jako wejściowe
    Config Pinb.5 = Input                                       'porty jako wejściowe
    
    Set Portb.3                                                 ' ustawia na stan wysoki
    Set Portb.4                                                 ' ustawia na stan wysoki
    Set Portb.5                                                 ' ustawia na stan wysoki
    
    
       Dim Wart_nap As Word
       Dim Wart_nap1 As Word
       Dim Wart_nap2 As String *
       Dim Wart_nap22 As Word
    
    
    
     Dim Wart_ac As Word
     Dim Wart_ac1 As Word
     Dim Wart_ac2 As Word
     Dim Wart_ac3 As Word
    
     Dim V As Single
     Dim V1 As Single
     Dim V2 As Single
     Dim V3 As Single
    
    
    
      Dim Adres As Byte , Command As Byte
    
     Enable Interrupts
    ' Set Portb.3 = Input
    
    
    
     Start Adc
    
    Do
    
    
     'czytam pierwszy czujnik
     'waits 2
     Wart_ac = Getadc(0)
     V = Wart_ac * 0.0026
    
    
    
    
     'czytam drugi czujnik
     'Waitms 20
     Wart_ac1 = Getadc(1)
     V1 = Wart_ac1 * 0.0026
    
    
     Reset Watchdog
    
    
     'czytam 3 czujnik
     'Waitms 20
    
     Wart_ac2 = Getadc(2)
     V2 = Wart_ac2 * 0.0026
    
    
     Reset Watchdog
    
    
     'czytam 4 czujnik
    
    
     Wart_ac3 = Getadc(3)
     V3 = Wart_ac3 * 0.0026
    
    
    
    
    
    
     Cls
    
    
    
      Lcd "V1:" ; V
      Reset Watchdog
      Waitms 1500
      Reset Watchdog
      Cls
    
    
    
      Lcd "V2:" ; V1
      Reset Watchdog
      Waitms 1500
      Reset Watchdog
      Cls
    
    
    
    
      Lcd "V3:" ; V2
       Waitms 1500
      Reset Watchdog
      Cls
    
    
    
      Lcd "V4:" ; V3
      Reset Watchdog
      Waitms 1500
      Reset Watchdog
      Cls
    
    
    
    
      Reset Watchdog
    
    
      Loop 


    Dodano po 4 [minuty]:

    Ten program co ja pisałem jest kompletnie źle napisany... i go nie wystawiam bo było by wielkie pośmiewisko :D:D
  • #5 4852210
    karlos79
    Poziom 33  
    Posty: 1768
    Pomógł: 254
    Ocena: 76
    Witam
    Do pomiary prądu potrzebny będzie rezystor szeregowy, i na nim będziesz mierzyć spadek napięcia.
    Później zostaje tylko zastosować wzór na prawo ohma i wyświetlić wynik.
    Nie będę teraz przepisywać całego kodu, zmienię tylko kilka rzeczy.
    Jeszcze jedna uwaga, kody umieszczaj w znacznikach code.
    
     $regfile = "m8def.dat" 'informuje kompilator o pliku
    'dyrektywy mikrokontrolera
    $crystal = 8000000 'informuje kompilato
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portd.4 , E = Portd.3 , Rs = Portd.2
    cls
    Config Adc = Single , Prescaler = Auto , Reference = Internal
    
    ' Config Portc.1 = Output
    Config Portb.2 = Output 'wyjścia przekazników
    Config Portb.1 = Output 'wyjścia przekazników
    Config Portd.0 = Output 'wyjścia przekazników
    
    Config Pinb.3 = Input 'porty jako wejściowe
    Config Pinb.4 = Input 'porty jako wejściowe
    Config Pinb.5 = Input 'porty jako wejściowe
    
    Set Portb.3 ' ustawia na stan wysoki
    Set Portb.4 ' ustawia na stan wysoki
    Set Portb.5 ' ustawia na stan wysoki
    
    Dim Wart_nap As Word
    Dim Wart_nap1 As Word
    Dim Wart_nap2 As Word ' tu będzie prąd ( a dokładniej spadek napięcia)
    Dim Wart_nap22 As Word ' to będzie prąd ( a dokładniej spadek napięcia)
    
    
    
    Dim Wart_ac As Word
    Dim Wart_ac1 As Word
    Dim Wart_ac2 As Word
    Dim Wart_ac3 As Word
    
    Dim V As Single
    Dim V1 As Single
    Dim V2 As Single
    Dim V3 As Single
    
    
    
    Dim Adres As Byte , Command As Byte
    
    Enable Interrupts
    ' Set Portb.3 = Input
    
    Start Adc
    
    do
    'czytam pierwszy czujnik
    Wart_ac = Getadc(0)
    V = Wart_ac * 0.0026
    
    'czytam drugi czujnik
    'Waitms 20
    Wart_ac1 = Getadc(1)
    V1 = Wart_ac1 * 0.0026
    
    'czytam 3 czujnik
    'Waitms 20
    Wart_ac2 = Getadc(2)
    V2 = Wart_ac2 * 0.0026
    
    'czytam 4 czujnik
    Wart_ac3 = Getadc(3)
    V3 = Wart_ac3 * 0.0026
    
    
    Cls
    Lcd "V1:" ; V ;"V2:" ; V1
     lowerline
       Lcd "I1:" ; V2 ;"I2:" ; V3
    Waitms 250
    loop
    end
     
    

    Nie wiem czy to zadziała, bo napisałem z marszu i nie sprawdzałem tego.
    Pozdrawiam
  • REKLAMA
  • #6 4852481
    wyszkowskidaniel
    Poziom 13  
    Posty: 117
    Pomógł: 1
    Ocena: 10
    Witam. Nie pasuje mu text: Loverline
    Rozumiem że służy to do wyświetlania wartości w 2 linijce?
  • Pomocny post
    #7 4853077
    karlos79
    Poziom 33  
    Posty: 1768
    Pomógł: 254
    Ocena: 76
    Witam
    Zrobiłem literówkę powinno być lowerline.
    Pozdrawiam
  • #8 4853448
    wyszkowskidaniel
    Poziom 13  
    Posty: 117
    Pomógł: 1
    Ocena: 10
    Wielkie dzięki za pomoc. Bardzo mi pomogłeś w tym programie...
    Jutro go wleje na at8 i zobaczymy, ale w symulacji na kompie śmiga i myślę że nie będzie problemów...
    Pozdrawiam

    Dodano po 5 [minuty]:

    aha. Jakie wartości oporników muszą być na woltomierzu? Suma napięcia mierzonego poprzez te oporniki nie może przekraczać +5V?
    Pozdrawiam

    Dodano po 13 [minuty]:

    Jeszcze jedna rzecz, mianowicie jak zaokrąglić wynik do 2miejsca po przecinku? :D
  • #9 4856664
    karlos79
    Poziom 33  
    Posty: 1768
    Pomógł: 254
    Ocena: 76
    Witam
    Teraz nie mam czasu za bardzo się rozpisywać.
    " Jeszcze jedna rzecz, mianowicie jak zaokrąglić wynik do 2miejsca po przecinku?"
    Poszukaj w helpie funkcji fusing.
    Co do rezystorów, to musisz policzyć dzielnik napięcia.
    Do prób wstaw potencjometr między +5V a GND, suwak podłącz do wejścia ADC.
    Pozdrawiam
  • #10 4856872
    wyszkowskidaniel
    Poziom 13  
    Posty: 117
    Pomógł: 1
    Ocena: 10
    OK. Próbuję ale błąd mi wyskakuje... :/
    Nie umiem tego podstawić fragmentu, zmieniałem znaki Z S ale nadal błąd, jakbyś miał chwileczkę czasu na dopisanie tego to bym był wdzięczny...:

    Print Z 'prints 123.456779477



    Z = Fusing(s , "#.##")



    'now use some formatting with 2 digits behind the decimal point with rounding

    Print Fusing(s , "#.##") 'prints 123.46



    'now use some formatting with 2 digits behind the decimal point without rounding

    Print Fusing(s , "#.&&") 'prints 123.45
  • #11 4878823
    zgf1
    Poziom 23  
    Posty: 715
    Pomógł: 36
    Ocena: 43
    Będę czekał, sam chcę skonstruować coś podobnego :)
    Dodaj jakieś zdjęcia działającego urządzenia jeśli możesz.
  • #12 4878865
    karlos79
    Poziom 33  
    Posty: 1768
    Pomógł: 254
    Ocena: 76
    Witam

    Mam wolną chwilę i naskrobie kawałek kodu :)

    
    Dim Wart_nap As String * 3
    
    V2 = Wart_ac2 * 0.0026' 
    
    Wart_nap2 = Fusing(V2 , "#.&&")
    
    V3 = Wart_ac3 * 0.0026' 
    
    Wart_nap3 = Fusing(V3 , "#.&&")
    
     Lcd "V1:" ; Wart_nap3 ;"V2:" ; Wart_nap2 
    

    Pozostaje Ci tylko wpleść to do Twojego programu.
    Pozdrawiam
  • REKLAMA
  • #13 4881390
    basti1984_2007
    Poziom 17  
    Posty: 211
    Pomógł: 15
    Ocena: 83
    Aha, a chłopaki zapomnieliście chyba, że jak będą dwa "kanały" tegoż zasilacza i wszystko pod jedną atmegę podepnie to już nie będą dwa niezależne kanały?? I nic tu nie da stosowanie wzmacniaczy różnicowych.

    Czyż nie mam racji??
  • #14 4881458
    karlos79
    Poziom 33  
    Posty: 1768
    Pomógł: 254
    Ocena: 76
    Witam
    Przecież na atmedze będzie zrealizowany pomiar napięć i prądów no i wyświetlanie tych wartości na LCD.
    Reszta może pracować niezależnie- ustawianie parametrów itd.
    Nawet jeśli sterowanie modułów zasilaczy odbywało by się za pomocą mikrokontrolera, to i tak parametry jednego zasilacza nie będą się zmieniały pod wpływem zmian ustawień drugiego.
    Więc wygląda na to, że jednak będą to niezależne bloki, z jednym elementem wspólnym- miernikiem.
    Pozdrawiam
  • #15 4929956
    wyszkowskidaniel
    Poziom 13  
    Posty: 117
    Pomógł: 1
    Ocena: 10
    Sorry że tak długo nie odpowiadałem... Przyznam się: jestem DEBILEM :D
    Próbuję wkleić kod ale nie wychodzi. Cały czas wyskakuje ERROR. Mógłbyś wkleić ten kod? Zasilacz ukończony ale bez wyświetlacza... Mam jeszcze 1000 innych spraw na głowie i dnia zaczyna mi brakować. Opublikuję to w internecie na konstrukcję DIY i nie zapomnę o tym że mi pomogłeś... :D:D :D

    Pozdrawiam
    Życzę Wesołych Świąt !!!
  • REKLAMA
  • #16 4930005
    karlos79
    Poziom 33  
    Posty: 1768
    Pomógł: 254
    Ocena: 76
    Witam
    Daj Twój kod i schemat.
    Zobaczę co tam Ci nie gra.
    Pozdrawiam
    P.S
    Dziękuję za życzenia i Tobie również życzę wesołych świąt.
  • #17 4930013
    wyszkowskidaniel
    Poziom 13  
    Posty: 117
    Pomógł: 1
    Ocena: 10
    Trzeba tylko kod poprawić. Wstawić:

    Dim Wart_nap As String * 3

    V2 = Wart_ac2 * 0.0026'

    Wart_nap2 = Fusing(V2 , "#.&&")

    V3 = Wart_ac3 * 0.0026'

    Wart_nap3 = Fusing(V3 , "#.&&")

    Lcd "V1:" ; Wart_nap3 ;"V2:" ; Wart_nap2


    Aby wynik był zaokrąglany.
  • #18 4930843
    karlos79
    Poziom 33  
    Posty: 1768
    Pomógł: 254
    Ocena: 76
    Witam
    Daj cały kod na forum oczywiście jeśli to możliwe i napisz dokładniej co tam Ci nie pasuje.
    Postaram się coś wymyślić :)
    Pozdrawiam
    P.S
    Nie zapomnij o znacznikach CODE, jak będziesz wklejać kod.
  • #19 4934112
    wyszkowskidaniel
    Poziom 13  
    Posty: 117
    Pomógł: 1
    Ocena: 10
    Nie potrafię wstawić komendy, która zaokrągla wynik do 2 miejsc po przecinku. Cały program (bez zaokrąglania) wygląda tak:


    $regfile = "m8def.dat" 'informuje kompilator o pliku
    'dyrektywy mikrokontrolera
    $crystal = 8000000 'informuje kompilato

    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portd.4 , E = Portd.3 , Rs = Portd.2
    cls
    Config Adc = Single , Prescaler = Auto , Reference = Internal

    ' Config Portc.1 = Output
    Config Portb.2 = Output 'wyjścia przekazników
    Config Portb.1 = Output 'wyjścia przekazników
    Config Portd.0 = Output 'wyjścia przekazników

    Config Pinb.3 = Input 'porty jako wejściowe
    Config Pinb.4 = Input 'porty jako wejściowe
    Config Pinb.5 = Input 'porty jako wejściowe

    Set Portb.3 ' ustawia na stan wysoki
    Set Portb.4 ' ustawia na stan wysoki
    Set Portb.5 ' ustawia na stan wysoki

    Dim Wart_nap As Word
    Dim Wart_nap1 As Word
    Dim Wart_nap2 As Word ' tu będzie prąd ( a dokładniej spadek napięcia)
    Dim Wart_nap22 As Word ' to będzie prąd ( a dokładniej spadek napięcia)



    Dim Wart_ac As Word
    Dim Wart_ac1 As Word
    Dim Wart_ac2 As Word
    Dim Wart_ac3 As Word

    Dim V As Single
    Dim V1 As Single
    Dim V2 As Single
    Dim V3 As Single



    Dim Adres As Byte , Command As Byte

    Enable Interrupts
    ' Set Portb.3 = Input

    Start Adc

    do
    'czytam pierwszy czujnik
    Wart_ac = Getadc(0)
    V = Wart_ac * 0.0026

    'czytam drugi czujnik
    'Waitms 20
    Wart_ac1 = Getadc(1)
    V1 = Wart_ac1 * 0.0026

    'czytam 3 czujnik
    'Waitms 20
    Wart_ac2 = Getadc(2)
    V2 = Wart_ac2 * 0.0026

    'czytam 4 czujnik
    Wart_ac3 = Getadc(3)
    V3 = Wart_ac3 * 0.0026


    Cls
    Lcd "V1:" ; V ;"V2:" ; V1
    lowerline
    Lcd "I1:" ; V2 ;"I2:" ; V3
    Waitms 250
    loop
    end



    I muszę wstawić to:



    Dim Wart_nap As String * 3

    V2 = Wart_ac2 * 0.0026'

    Wart_nap2 = Fusing(V2 , "#.&&")

    V3 = Wart_ac3 * 0.0026'

    Wart_nap3 = Fusing(V3 , "#.&&")

    Lcd "V1:" ; Wart_nap3 ;"V2:" ; Wart_nap2

    Aby wynik zaokrągliło. Próbowałem z helpem w bascomie, wklejałem w różne już potem miejsca i nic. Wyskakuje błąd jak sprawdzam poprawność programu. Jakbyś mógł to wklej ten kod w odpowiednie miejsce.

    Pozdrawiam
  • #20 4935459
    karlos79
    Poziom 33  
    Posty: 1768
    Pomógł: 254
    Ocena: 76
    Witam
    Coś wykombinowałem na szybkiego.
    
     $regfile = "m8def.dat"                                     'informuje kompilator o pliku
    'dyrektywy mikrokontrolera
    $crystal = 8000000 'informuje kompilato
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portd.4 , E = Portd.3 , Rs = Portd.2
    cls
    Config Adc = Single , Prescaler = Auto , Reference = Avcc ' tutaj jest zmiana
    
    ' Config Portc.1 = Output
    Config Portb.2 = Output 'wyjścia przekazników
    Config Portb.1 = Output 'wyjścia przekazników
    Config Portd.0 = Output 'wyjścia przekazników
    
    Config Pinb.3 = Input 'porty jako wejściowe
    Config Pinb.4 = Input 'porty jako wejściowe
    Config Pinb.5 = Input 'porty jako wejściowe
    
    Set Portb.3 ' ustawia na stan wysoki
    Set Portb.4 ' ustawia na stan wysoki
    Set Portb.5 ' ustawia na stan wysoki
    
    Dim Wart_nap As Single
    Dim Wart_nap1 As Single
    Dim Wart_nap2 As Single                                     ' tu będzie prąd ( a dokładniej spadek napięcia)
    Dim Wart_nap3 As Single                                     ' to będzie prąd ( a dokładniej spadek napięcia)
    
    
    
    Dim Wart_ac As Word
    Dim Wart_ac1 As Word
    Dim Wart_ac2 As Word
    Dim Wart_ac3 As Word
    
    Dim V As Single
    Dim V1 As Single
    Dim V2 As Single
    Dim V3 As Single
    
    
    
    'Dim Adres As Byte , Command As Byte
    
    'Enable Interrupts
    ' Set Portb.3 = Input
    
    Start Adc
    
    do
    'czytam pierwszy czujnik
    Wart_ac = Getadc(0)
    V = Wart_ac * 0.0049                                        'zamiana odczytanej wartości
                                                                 'z A/C na napięcie
                                                                 'Wart_ac * ok. 4,8 mV
     Wart_nap = Fusing(v , "#.&&")                              'formatowanie wartości zmiennej
                                                                 'V do do formatu xx.xx i zamiana
                                                                 'tej wartości na postać tekstową
    
    'czytam drugi czujnik
    'Waitms 10
    Wart_ac1 = Getadc(1)
    V1 = Wart_ac1 * 0.0049
       Wart_nap1 = Fusing(v1 , "#.&&")
    'czytam 3 czujnik
    'Waitms 10
    Wart_ac2 = Getadc(2)
    V2 = Wart_ac2 * 0.0049
         Wart_nap2 = Fusing(v2 , "#.&&")
    'Waitms 10
    'czytam 4 czujnik
    Wart_ac3 = Getadc(3)
    V3 = Wart_ac3 * 0.0049
      Wart_nap3 = Fusing(v3 , "#.&&")
    'Waitms 10
    Cls
    Lcd "U1:" ; Wart_nap ; "_U2:" ; Wart_nap1
    lowerline
    Lcd "I1:" ; Wart_nap2 ; "_I2:" ; Wart_nap3
    Waitms 25
    loop
    end
    

    Pozdrawiam
  • #21 4936053
    zgf1
    Poziom 23  
    Posty: 715
    Pomógł: 36
    Ocena: 43
    Wyszkowskidaniel możesz schemat swojego urządzenia podac tutaj?
  • #22 4936798
    karlos79
    Poziom 33  
    Posty: 1768
    Pomógł: 254
    Ocena: 76
    Witam
    zgf1 napisał:
    Wyszkowskidaniel możesz schemat swojego urządzenia podac tutaj?

    Może zamiast "sępić" wniósł byś coś konstruktywnego to tematu.
    Jakieś propozycje odnośnie konstrukcji tego układu.
    Obawiam się, że schematu jeszcze nie dostaniesz, bo pewnie go nie ma, lub nie jest ukończony.
    Pozdrawiam
  • #23 4937142
    zgf1
    Poziom 23  
    Posty: 715
    Pomógł: 36
    Ocena: 43
    Nie wiem o co Ci chodzi, czepiasz sie strasznie, a może chcesz postów nabić troszkę? :)

    Co złego jest w poproszeniu o schemat?
    Do tego autor napisał coś 05 Mar 2008, wiec zanim coś napiszesz zastanów się. Mówisz, ze mój post nic nie wnosi lecz Twój wnosi jeszcze mniej.
  • #24 4937182
    karlos79
    Poziom 33  
    Posty: 1768
    Pomógł: 254
    Ocena: 76
    Witam
    Zobacz np. tutaj http://elfly.pl/multimetr/multimetr_DIP.htm
    Schemat jest beznadziejnie prosty i można sobie go opracować w kilka minut.
    W tym przypadku układ trochę będzie inny dlatego, że inaczej będziemy mierzyć prąd- właśnie nad tym pracuję.
    Pozdrawiam
  • #25 4937272
    zgf1
    Poziom 23  
    Posty: 715
    Pomógł: 36
    Ocena: 43
    No właśnie mam już zasilacz regulowany. W chwili obecnej mam amperomierz na ICL7107 przełącznikiem steruje i mam pomiar napięcia bądź natężenia.

    Pomiar natężenia dokonuje na rezystorze szeregowym 0.1ohm.

    Z mikrokontrolerami dopiero zaczynam dlatego chciałem dokładny schemat.
  • #26 4937374
    karlos79
    Poziom 33  
    Posty: 1768
    Pomógł: 254
    Ocena: 76
    Witam
    Na tej stronce do której podałem link masz wszystko co Ci jest potrzebne: schemat, wzór płytki drukowanej i pliki do zaprogramowania mikrokontrolera.
    Pozdrawiam
  • #27 4938840
    wyszkowskidaniel
    Poziom 13  
    Posty: 117
    Pomógł: 1
    Ocena: 10
    Schematy z mojego zasilacza mam z netu. Sam zasilacz jest zrobiony już na znanym schemacie zasilacza 0-30V oraz 0-3A z strony
    http://www.electronics-lab.com/projects/power/003/index.html

    Mam w sumie 2 regulowane źródła napięcia stałego z zakresu 0-30V/0-3A i 0-30V/0-5A. Regulator przemiennego (230V zwykły układ taki jak ściemniacz), Aktywne obciążenie regulowane z zakresu 0-10A, oraz stałe punkty napięciowe 5V i 24V.
    schemat z regulatora 230V z strony:
    http://www.nikomp.com.pl/opisy/ZEDJ0/ZEDJ2200.jpg

    a aktywne obciążenie przerobione z 1A do 10A z strony:
    http://www.elportal.pl/pdf/k04/22_03b.pdf

    Termostat wykorzystuje wzmacniacz operacyjny LM358 i czujnik temp. LM35.

    Foto postaram się umieścić jeszcze dziś ale nie obiecuję bo nie wiem czy zdążę. Kiedyś też wykorzystywałem ICL7107 ale za dużo miejsca zajmuje aby upach wszystko w Z39.

    Odnośnie tego programu to nadal nie zaokrągla wyniku, tylko zmniejszył się pomiar, np. kiedyś było 0,98567243 a teraz cały czas max wartość jest 0,00000000234. Schemat do tego jeszcze opracowuję więc go nie wkładam na forum. Jak skończę to go dam, obiecuję. Jeszcze ten program i wszystko gra. Jak zasilacz ukończę to dam schematy (komplet)+wzór płytki PCB+maskownica na Z39
    Załączniki:
    • Jak napisać program na ATMEGA8 do woltomierza i amperomierza z LCD 2x16? termostat.gif (7.38 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #28 4939499
    karlos79
    Poziom 33  
    Posty: 1768
    Pomógł: 254
    Ocena: 76
    wyszkowskidaniel napisał:


    Odnośnie tego programu to nadal nie zaokrągla wyniku, tylko zmniejszył się pomiar, np. kiedyś było 0,98567243 a teraz cały czas max wartość jest 0,00000000234. Schemat do tego jeszcze opracowuję więc go nie wkładam na forum. Jak skończę to go dam, obiecuję. Jeszcze ten program i wszystko gra.


    Muszę zmontować testowy układ, bo też coś mi z tym programem nie pasuje.
    Jak chcesz rozwiązać sprawę pomiaru prądu? Czy będziesz stosować komparator na wzmacniaczu operacyjnym?
    Pozdrawiam
  • #29 4939606
    wyszkowskidaniel
    Poziom 13  
    Posty: 117
    Pomógł: 1
    Ocena: 10
    Eee... o kurde. Nie pomyślałem o tym. Myślałem aby wpiąć szeregowo do wyjścia opornik niewielki (0,27ohm) i na nim mierzyć spadki napięć. Ale to moje rozwiązanie nie przewidziałem w tym układzie. trzeba by było skonfigurować program aby na 2 wejściach ADC był mierzone napięcie na tym oporniku i to będzie prąd podczas gdy będzie dołączony odbiornik. Dobrze że skleroza w tym wieku nie boli... :D
  • #30 4941052
    karlos79
    Poziom 33  
    Posty: 1768
    Pomógł: 254
    Ocena: 76
    Witam
    Można wykorzystać komparator nogi 12 i 13 atmegi.
    Do tego zastosować klucze (np. przekaźnik), które będą przełączane mikrokontrolerem w zależności od tego który obwód prądowy będzie mierzony.
    Taki sam sposób można zastosować do przełączania obwodów jeśli będziesz mierzyć prąd za pomocą ADC.
    Cały problem polega na tym żeby nie przerywać obwodu w którym mierzysz prąd.
    Można też dwa kanały ADC zastosować do pomiaru prądu w jednym obwodzie a komparator do pomiaru w drugim obwodzie.
    Na razie są to moje rozmyślania, możliwe, że całkiem abstrakcyjne...
    Kiedyś spotkałem się z układami do pomiaru prądu, tylko... skleroza.
    Pozdrawiam

Podsumowanie tematu

✨ Dyskusja dotyczy napisania programu na mikrokontroler ATMEGA8 do wyświetlania na LCD 2x16 pomiarów napięcia i prądu z dwóch źródeł zasilania w zasilaczu regulowanym. Autor chce wyświetlać na jednej dwuliniowej matrycy wartości U1, I1, U2, I2, mierzone do 40V i 10A. Program pisany jest w języku Bascom-AVR. Wskazano konieczność zastosowania rezystora szeregowego do pomiaru prądu (np. 0,1Ω lub 0,27Ω) i wykorzystania dzielnika napięcia do pomiaru napięcia, aby nie przekroczyć 5V na wejściu ADC. Podano przykładowe fragmenty kodu z konfiguracją LCD, ADC i wykorzystaniem funkcji Fusing do formatowania i zaokrąglania wyników do dwóch miejsc po przecinku. Poruszono kwestie przełączania kanałów pomiarowych i niezależności dwóch kanałów zasilacza przy wspólnym mikrokontrolerze. Autor otrzymał wskazówki dotyczące poprawnego wstawiania kodu, formatowania wyników oraz propozycje konstrukcyjne, w tym wykorzystanie komparatorów i przekaźników do przełączania obwodów pomiarowych. Podano linki do schematów zasilaczy i aktywnego obciążenia oraz omówiono wykorzystanie wzmacniacza operacyjnego LM358 i czujnika temperatury LM35 w termostacie. Autor zgłaszał problemy z błędami w kodzie i zaokrąglaniem wyników, które zostały częściowo rozwiązane przez społeczność. W dyskusji pojawiły się także uwagi dotyczące ograniczeń pomiaru prądu i napięcia oraz sugestie dotyczące testowania i dalszego rozwoju projektu.
Wygenerowane przez model językowy.
REKLAMA