Przetwornik DAC do zasilacza
- Michał6201
- Posty: 127
- Rejestracja: 03 paź 2015, 20:07
Re: Przetwornik DAC do zasilacza
Witam
Nie chce zaśmiecać forum, więc dopytam tutaj, bo nie jestem pewien jak zrobić, a w nocie katalogowej nie ma tego.
DAC mam na oddzielnej pcb, a płytka zasilacza jest osobno. Połączę te dwie płytki krótkimi kabelkami ekranowanymi.
Pytanie - czy montowa te wzmacniacze operacyjne (ZAZNACZONE NA CZERWONO) na płYtce DAC, a czy bezpośrednio wyjścia DAC podłączyć do wejść na płytce zasilacza?
Nie chce zaśmiecać forum, więc dopytam tutaj, bo nie jestem pewien jak zrobić, a w nocie katalogowej nie ma tego.
DAC mam na oddzielnej pcb, a płytka zasilacza jest osobno. Połączę te dwie płytki krótkimi kabelkami ekranowanymi.
Pytanie - czy montowa te wzmacniacze operacyjne (ZAZNACZONE NA CZERWONO) na płYtce DAC, a czy bezpośrednio wyjścia DAC podłączyć do wejść na płytce zasilacza?
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
- niveasoft
- Posty: 1239
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Przetwornik DAC do zasilacza
W Op-Amp`ach masz nogi 2 i 6 połączone bezpośrednio ze sobą czyli ten wzmacniacz pracuje jako bufor - taki wzmacniacz mocy a nie napięcia.
Musisz wiedzieć ile do Twojego układu wpływa prądu i jeśli wydajność prądowa z noty tego DAC nie da rady to musisz dać jakiś bufor. Nie wiem czy dokładnie ten. Pewnie tani LM358 też by się nadał, ale może chodzi o niskoszumny...a na Allegro dwa OPA są za 10zł...
Musisz wiedzieć ile do Twojego układu wpływa prądu i jeśli wydajność prądowa z noty tego DAC nie da rady to musisz dać jakiś bufor. Nie wiem czy dokładnie ten. Pewnie tani LM358 też by się nadał, ale może chodzi o niskoszumny...a na Allegro dwa OPA są za 10zł...
- Michał6201
- Posty: 127
- Rejestracja: 03 paź 2015, 20:07
Re: Przetwornik DAC do zasilacza
Bo one nie mają wzmacniać napięcia. Ma tyle samo być na wyjściu co na wejściu nieodwracającym -> Wzmocnienie = 1
Mam te opampy w domu.
Według noty katalogowej DAC, wyjścia jego mogą dać max 30mA.
Mam te opampy w domu.
Według noty katalogowej DAC, wyjścia jego mogą dać max 30mA.
Ostatnio zmieniony 12 kwie 2021, 1:45 przez Michał6201, łącznie zmieniany 1 raz.
- niveasoft
- Posty: 1239
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Przetwornik DAC do zasilacza
Jak się tak temu przyglądam bliżej to Ty masz tam dalej wejścia Op-Amp na LM358 więc te pierwsze chyba są zbędne.
- Michał6201
- Posty: 127
- Rejestracja: 03 paź 2015, 20:07
Re: Przetwornik DAC do zasilacza
No właśnie też mi się tak wydaje, zostawiłbym tylko te rezystory i kondensatorki podciągnięte do AGND.
W samym zasilaczu jest OPAMP LM358 i w nim na wejściach steruje się napięciem wyjściowym zasilacza i ograniczenie prądowe.
Napięcie wyjściowe regulowane jest napięciem 0 - 5V, natomiast ograniczenie prądowe napięciem 0 - 150mA.
A na wyjściach DAC mam napięcie od 0V do 5V, przy zasilaniu DAC +5V i napięciu referencyjnym 2,5V.
W samym zasilaczu jest OPAMP LM358 i w nim na wejściach steruje się napięciem wyjściowym zasilacza i ograniczenie prądowe.
Napięcie wyjściowe regulowane jest napięciem 0 - 5V, natomiast ograniczenie prądowe napięciem 0 - 150mA.
A na wyjściach DAC mam napięcie od 0V do 5V, przy zasilaniu DAC +5V i napięciu referencyjnym 2,5V.
- Michał6201
- Posty: 127
- Rejestracja: 03 paź 2015, 20:07
Re: Przetwornik DAC do zasilacza
Udało mi się dzisiaj uruchomić przetwornik DAC AD5667.
Mam układ bez literki R w oznaczeniu, więc nie posiada wewnętrznego napięcia odniesienia i trzeba podłączyć zewnętrzne. Podłączyłem zewnętrzne napięcie odniesienia 2,5V i na wyjściu przetwornika mam max 2,5V.
Przejrzałem kilka razy notę aplikacyjną tego przetwornika i nigdzie nie mogę doczytać, czy można dołączyć zewnętrzne napięcie odniesienia 5,0V?
Prosze Was o zerknięcie w tą notę:
https://www.analog.com/media/en/technic ... 7_5667.pdf
Wydaje mi się, że może być zewnętrzne napięcie odniesienia 5,0V. Ale boję się w ciemno podłączać, bo nie chciałbym uszkodzić tego scalaka.
Najwyżej dam na wyjściu DAC wzmacniacz operacyjni rail do rail ze wzmocnieniem = 2.
Mam układ bez literki R w oznaczeniu, więc nie posiada wewnętrznego napięcia odniesienia i trzeba podłączyć zewnętrzne. Podłączyłem zewnętrzne napięcie odniesienia 2,5V i na wyjściu przetwornika mam max 2,5V.
Przejrzałem kilka razy notę aplikacyjną tego przetwornika i nigdzie nie mogę doczytać, czy można dołączyć zewnętrzne napięcie odniesienia 5,0V?
Prosze Was o zerknięcie w tą notę:
https://www.analog.com/media/en/technic ... 7_5667.pdf
Wydaje mi się, że może być zewnętrzne napięcie odniesienia 5,0V. Ale boję się w ciemno podłączać, bo nie chciałbym uszkodzić tego scalaka.
Najwyżej dam na wyjściu DAC wzmacniacz operacyjni rail do rail ze wzmocnieniem = 2.
- niveasoft
- Posty: 1239
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Przetwornik DAC do zasilacza
Pisze tam w kilku miejscach że VREF może mieć VDD +0.3V a w jednej tabelce pisze że podczas testu połączono VREF=VDD=5.5V Więc chyba śmiało
- Michał6201
- Posty: 127
- Rejestracja: 03 paź 2015, 20:07
Re: Przetwornik DAC do zasilacza
Wczoraj w nocy tez tego się doszukałem
Dziś podłączyłem 5V do napięcia odniesienia i pięknie pokazuje w pełnej skali napięcie od 0 do 5V
Dziś podłączyłem 5V do napięcia odniesienia i pięknie pokazuje w pełnej skali napięcie od 0 do 5V
- Michał6201
- Posty: 127
- Rejestracja: 03 paź 2015, 20:07
Re: Przetwornik DAC do zasilacza
Mam działający kod do obsługi enkodera od Bartka.
Dzisiaj postanowiłem ten kod rozszerzyć do obsługi 2 enkoderów. Jeden do ustawiania napięcia, a drugi do ustawiania prądu.
Jeden enkoder jest na przerwaniu INT0, a drugi na przerwaniu INT1
Osobno każdy z tych enkoderów działa poprawnie. Problem się pojawia, jak w kodzie mam obydwa enkodery.
Wtedy jest problem z miganiem i wyborem poszczególnych liter. Raz mignie i zniknie, potem znów mignie, albo wcale nie miga wybrana pozycja.
Może ja coś źle zrobiłem w tym kodzie?
Oto ten kod do obsługi dwóch enkoderów:
Dzisiaj postanowiłem ten kod rozszerzyć do obsługi 2 enkoderów. Jeden do ustawiania napięcia, a drugi do ustawiania prądu.
Jeden enkoder jest na przerwaniu INT0, a drugi na przerwaniu INT1
Osobno każdy z tych enkoderów działa poprawnie. Problem się pojawia, jak w kodzie mam obydwa enkodery.
Wtedy jest problem z miganiem i wyborem poszczególnych liter. Raz mignie i zniknie, potem znów mignie, albo wcale nie miga wybrana pozycja.
Może ja coś źle zrobiłem w tym kodzie?
Oto ten kod do obsługi dwóch enkoderów:
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- $regfile = "m32def.dat"
- $crystal = 11059200
- $hwstack = 64
- $swstack = 16
- $framesize = 64
- Const Timeout_time = 8 'x500ms
- Config Submode = New
- ' config LCD 2X16
- Config Lcdpin = Pin , Rs = Porta.2 , E = Porta.3 , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7
- Config Lcd = 16x2
- Cursor Off
- Cls
- Deflcdchar 0,17,17,17,10,4,32,32,32' (volt)
- Deflcdchar 1,14,17,17,31,17,32,32,32' (amper)
- '---------------------------------------------------------------------------------------
- ' config for encoders
- ' ENCODER U_SET
- Config PortD.5 = Input : PortD.5 = 1 : Encoder1_a Alias PinD.5 'ENKODER1A
- Config Portd.3 = Input : Portd.3 = 1 : Encoder1_b Alias Pind.3 'ENKODER1B, INT1
- Config PortD.7 = Input : PortD.7 = 1 : Enc_sw1 Alias PinD.7 ' Przycisk Enkoder1
- ' ENCODER I_SET
- Config PortD.6 = Input : PortD.6 = 1 : Encoder2_a Alias PinD.6 'ENKODER2A
- Config Portd.2 = Input : Portd.2 = 1 : Encoder2_b Alias Pind.2 'ENKODER2B, INT0
- Config PortC.2 = Input : PortC.2 = 1 : Enc_sw2 Alias PinC.2 ' Przycisk Enkoder2
- Config Int1 = Rising 'przerwanie generować będzie rosnące zbocze
- Enable Int1 : On Int1 Encoder1_isr Nosave
- Config Int0 = Rising 'przerwanie generować będzie rosnące zbocze
- Enable Int0 : On Int0 Encoder2_isr Nosave
- Dim Encoder1_turn_left As Byte , Encoder1_turn_right As Byte
- Dim Encoder2_turn_left As Byte , Encoder2_turn_right As Byte
- '----------------------------------------------------------------------------------------
- ' config Timer2
- Config Timer2 = Timer , Prescale = 1024 , Clear_timer = 1
- Compare2 = 107 '10ms @11MHz/1024
- 'settings
- Dim 500ms As Byte , Mig As Byte , Timeout As Byte , Mig1 As Byte , Timeout1 As Byte
- 'Zmienne dla encodera prądu
- Dim Prad As Single , Prad_ee As Eram Single
- Dim Pos2 As Byte , Pos2_ee As Eram Byte
- Dim Current_str As String * 10
- Dim Temp_str As String * 10
- 'Zmienne dla encodera napięcia
- Dim Napiecie As Single , Napiecie_ee As Eram Single
- Dim Pos As Byte , Pos_ee As Eram Byte
- Dim Volt_str As String * 10
- Dim Temp_str1 As String * 10
- Enable Interrupts
- ' Procedura wyświetlania napięcia U_SET
- Sub Show_voltage
- Temp_str1 = Fusing(napiecie , "#.&&&")
- Volt_str = Format(temp_str1 , " ") 'dwa znaki+kropka+trzy znaki
- If Mig1 = 1 Then
- Select Case Pos
- Case 1
- Mid(volt_str , 1) = " " 'wstaw spację w miejscu pos (migaj)
- Case 2
- Mid(volt_str , 4) = " "
- Case 3
- Mid(volt_str , 5) = " "
- Case 4
- Mid(volt_str , 6) = " "
- End Select
- End If
- Locate 1 , 1 : Lcd Volt_str ; Chr(0) ' Wyświetlenie na LCD napięcia ustawionego U_SET
- End Sub
- ' Procedura wyświetlania prądu I_SET
- Sub Show_current
- Temp_str = Fusing(prad , "#.&&&")
- Current_str = Format(temp_str , " ") 'dwa znaki+kropka+trzy znaki
- If Mig = 1 Then
- Select Case Pos2
- Case 1
- Mid(current_str , 1) = " " 'wstaw spację w miejscu pos (migaj)
- Case 2
- Mid(current_str , 4) = " "
- Case 3
- Mid(current_str , 5) = " "
- Case 4
- Mid(current_str , 6) = " "
- End Select
- End If
- Locate 1 , 10 : Lcd Current_str ; Chr(1) ' Wyświetlenie na LCD ograniczenia prądowego I_SET
- End Sub
- Sub Set_dac
- 'przelicz Single Prad i wyslij do DAC
- End Sub
- ' eeprom reading U_SET
- '------------------------------
- Pos = Pos_ee
- If Pos > 4 Then
- Pos = 4 : Pos_ee = Pos
- Napiecie_ee = 0
- End If
- Napiecie = Napiecie_ee
- '------------------------------
- Call Show_voltage()
- ' eeprom reading I_SET
- '------------------------------
- Pos2 = Pos2_ee
- If Pos2 > 4 Then
- Pos2 = 4 : Pos2_ee = Pos2
- Prad_ee = 0
- End If
- Prad = Prad_ee
- '------------------------------
- Call Show_current()
- Call Set_dac()
- ' ########################## GŁÓWNA PĘTLA ###############################
- Do
- '************************************************************** Obsługa encodera dla prądu
- Debounce Enc_sw2 , 0 , Enc_sw2_sub , Sub ;'ENCODER I_SET
- '##### encoder turns left ######
- If 0 < Encoder2_turn_left Then
- Decr Encoder2_turn_left
- 'tutaj Twój kod -
- If Timeout > 0 Then
- Select Case Pos2
- Case 1
- Prad = Prad - 1.0
- Case 2
- Prad = Prad - 0.1
- Case 3
- Prad = Prad - 0.01
- Case 4
- Prad = Prad - 0.001
- End Select
- If Prad < 0 Then Prad = 0
- Mig = 0 : Call Show_current
- End If
- Timeout = Timeout_time 'przedłuzaj/uruchamiaj timeout przy kazdym kliku
- Gifr.intf0 = 1
- Enable INT0
- End If
- ' #### encoder turns right ######
- If 0 < Encoder2_turn_right Then
- Decr Encoder2_turn_right
- 'tutaj Twój kod +
- If Timeout > 0 Then
- Select Case Pos2
- Case 1
- Prad = Prad + 1
- Case 2
- Prad = Prad + 0.1
- Case 3
- Prad = Prad + 0.01
- Case 4
- Prad = Prad + 0.001
- End Select
- If Prad > 3.0 Then Prad = 3.0
- Mig = 0 : Call Show_current
- End If
- Timeout = Timeout_time 'przedłuzaj/uruchamiaj timeout przy kazdym kliku
- Gifr.intf0 = 1
- Enable INT0
- End If
- If Tifr.ocf2 = 1 Then '10ms
- Tifr.ocf2 = 1
- If 500ms < 49 Then
- Incr 500ms
- Else
- 500ms = 0
- If Mig = 0 Then Mig = 1 Else Mig = 0
- If Timeout > 0 Then
- Decr Timeout
- If Timeout = 0 Then
- 'wyślij do DAC
- Mig = 0
- Prad_ee = Prad 'zapamietaj dopiero po Timeoucie
- Call Set_dac
- End If
- Call Show_current()
- End If
- End If
- End If
- ' ***************************************************************** Obsługa encodera dla napięcia
- Debounce Enc_sw1 , 0 , Enc_sw1_sub , Sub 'ENCODER U_SET
- '##### encoder turns left ######
- If 0 < Encoder1_turn_left Then
- Decr Encoder1_turn_left
- 'tutaj Twój kod -
- If Timeout1 > 0 Then
- Select Case Pos
- Case 1
- Napiecie = Napiecie - 1.0
- Case 2
- Napiecie = Napiecie - 0.1
- Case 3
- Napiecie = Napiecie - 0.01
- Case 4
- Napiecie = Napiecie - 0.001
- End Select
- If Napiecie < 0 Then Napiecie = 0
- Mig1 = 0 : Call Show_voltage
- End If
- Timeout1 = Timeout_time 'przedłuzaj/uruchamiaj timeout przy kazdym kliku
- Gifr.intf1 = 1 'dla Mega8, M32 itp
- Enable Int1
- End If
- ' #### encoder turns right ######
- If 0 < Encoder1_turn_right Then
- Decr Encoder1_turn_right
- 'tutaj Twój kod +
- If Timeout1 > 0 Then
- Select Case Pos
- Case 1
- Napiecie = Napiecie + 1
- Case 2
- Napiecie = Napiecie + 0.1
- Case 3
- Napiecie = Napiecie + 0.01
- Case 4
- Napiecie = Napiecie + 0.001
- End Select
- If Napiecie > 20.0 Then Napiecie = 20.0
- Mig1 = 0 : Call Show_voltage
- End If
- Timeout1 = Timeout_time 'przedłuzaj/uruchamiaj timeout przy kazdym kliku
- Gifr.intf1 = 1 'dla Mega8, M32 itp
- Enable Int1
- End If
- If Tifr.ocf2 = 1 Then '10ms
- Tifr.ocf2 = 1
- If 500ms < 49 Then
- Incr 500ms
- Else
- 500ms = 0
- If Mig1 = 0 Then Mig1 = 1 Else Mig1 = 0
- If Timeout1 > 0 Then
- Decr Timeout1
- If Timeout1 = 0 Then
- 'wyślij do DAC
- Mig1 = 0
- Napiecie_ee = Napiecie 'zapamietaj dopiero po Timeoucie
- Call Set_dac
- End If
- Call Show_voltage()
- End If
- End If
- End If
- '********************************************************************************************
- Loop
- End
- ' Obsługa przycisku Encoder1 U_SET
- Enc_sw1_sub:
- If Timeout1 > 0 Then
- Incr Pos : If Pos > 4 Then Pos = 1
- Pos_ee = Pos
- End If
- Timeout1 = Timeout_time 'przedłuzaj/uruchamiaj timeout przy kazdym kliku
- Return
- ' Obsługa przycisku Encoder2 I_SET
- Enc_sw2_sub:
- If Timeout > 0 Then
- Incr Pos2 : If Pos2 > 4 Then Pos2 = 1
- Pos2_ee = Pos2
- End If
- Timeout = Timeout_time 'przedłuzaj/uruchamiaj timeout przy kazdym kliku
- Return
- 'tutaj obsługa przerwania zewnetrznego z enkodera 2
- Encoder2_isr:
- $asm
- PUSH R23
- PUSH R24
- PUSH R26
- PUSH R27
- !in R24, sreg
- PUSH R24
- $end Asm
- Disable INT0
- If Encoder2_a = 1 Then
- Incr Encoder2_turn_right
- Else
- Incr Encoder2_turn_left
- End If
- 'Tuned with NoSave Tool
- $asm
- POP R24
- !out sreg, r24
- POP R27
- POP R26
- POP R24
- POP R23
- $end Asm
- Return
- 'tutaj obsługa przerwania zewnetrznego z enkodera 1
- Encoder1_isr:
- $asm
- PUSH R23
- PUSH R24
- PUSH R26
- PUSH R27
- !in R24, sreg
- PUSH R24
- $end Asm
- Disable Int1
- If Encoder1_a = 1 Then
- Incr Encoder1_turn_right
- Else
- Incr Encoder1_turn_left
- End If
- ' Tuned with NoSave Tool
- $asm
- POP R24
- !out sreg, r24
- POP R27
- POP R26
- POP R24
- POP R23
- $end Asm
- Return
- niveasoft
- Posty: 1239
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Przetwornik DAC do zasilacza
Bardziej w ten deseń Nie możesz w dwóch miejscach sprawdzać tego samego czasu 500ms minęło i już nie wróci.
Sprawdź. Może zadziała. Nie testowałem.
Pewnie można by połączyć Mig z Mig1 bo to po prostu odwrócenie stanu co 500ms. Pewnie jeszcze coś by się znalazło...
Sprawdź. Może zadziała. Nie testowałem.
Pewnie można by połączyć Mig z Mig1 bo to po prostu odwrócenie stanu co 500ms. Pewnie jeszcze coś by się znalazło...
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- $regfile = "m32def.dat"
- $crystal = 11059200
- $hwstack = 64
- $swstack = 16
- $framesize = 64
- Const Timeout_time = 8 'x500ms
- Config Submode = New
- ' config LCD 2X16
- Config Lcdpin = Pin , Rs = Porta.2 , E = Porta.3 , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7
- Config Lcd = 16x2
- Cursor Off
- Cls
- Deflcdchar 0,17,17,17,10,4,32,32,32' (volt)
- Deflcdchar 1,14,17,17,31,17,32,32,32' (amper)
- '---------------------------------------------------------------------------------------
- ' config for encoders
- ' ENCODER U_SET
- Config PortD.5 = Input : PortD.5 = 1 : Encoder1_a Alias PinD.5 'ENKODER1A
- Config Portd.3 = Input : Portd.3 = 1 : Encoder1_b Alias Pind.3 'ENKODER1B, INT1
- Config PortD.7 = Input : PortD.7 = 1 : Enc_sw1 Alias PinD.7 ' Przycisk Enkoder1
- ' ENCODER I_SET
- Config PortD.6 = Input : PortD.6 = 1 : Encoder2_a Alias PinD.6 'ENKODER2A
- Config Portd.2 = Input : Portd.2 = 1 : Encoder2_b Alias Pind.2 'ENKODER2B, INT0
- Config PortC.2 = Input : PortC.2 = 1 : Enc_sw2 Alias PinC.2 ' Przycisk Enkoder2
- Config Int1 = Rising 'przerwanie generować będzie rosnące zbocze
- Enable Int1 : On Int1 Encoder1_isr Nosave
- Config Int0 = Rising 'przerwanie generować będzie rosnące zbocze
- Enable Int0 : On Int0 Encoder2_isr Nosave
- Dim Encoder1_turn_left As Byte , Encoder1_turn_right As Byte
- Dim Encoder2_turn_left As Byte , Encoder2_turn_right As Byte
- '----------------------------------------------------------------------------------------
- ' config Timer2
- Config Timer2 = Timer , Prescale = 1024 , Clear_timer = 1
- Compare2 = 107 '10ms @11MHz/1024
- 'settings
- Dim 500ms As Byte , Mig As Byte , Timeout As Byte , Mig1 As Byte , Timeout1 As Byte
- 'Zmienne dla encodera prądu
- Dim Prad As Single , Prad_ee As Eram Single
- Dim Pos2 As Byte , Pos2_ee As Eram Byte
- Dim Current_str As String * 10
- Dim Temp_str As String * 10
- 'Zmienne dla encodera napięcia
- Dim Napiecie As Single , Napiecie_ee As Eram Single
- Dim Pos As Byte , Pos_ee As Eram Byte
- Dim Volt_str As String * 10
- Dim Temp_str1 As String * 10
- Enable Interrupts
- ' Procedura wyświetlania napięcia U_SET
- Sub Show_voltage
- Temp_str1 = Fusing(napiecie , "#.&&&")
- Volt_str = Format(temp_str1 , " ") 'dwa znaki+kropka+trzy znaki
- If Mig1 = 1 Then
- Select Case Pos
- Case 1
- Mid(volt_str , 1) = " " 'wstaw spację w miejscu pos (migaj)
- Case 2
- Mid(volt_str , 4) = " "
- Case 3
- Mid(volt_str , 5) = " "
- Case 4
- Mid(volt_str , 6) = " "
- End Select
- End If
- Locate 1 , 1 : Lcd Volt_str ; Chr(0) ' Wyświetlenie na LCD napięcia ustawionego U_SET
- End Sub
- ' Procedura wyświetlania prądu I_SET
- Sub Show_current
- Temp_str = Fusing(prad , "#.&&&")
- Current_str = Format(temp_str , " ") 'dwa znaki+kropka+trzy znaki
- If Mig = 1 Then
- Select Case Pos2
- Case 1
- Mid(current_str , 1) = " " 'wstaw spację w miejscu pos (migaj)
- Case 2
- Mid(current_str , 4) = " "
- Case 3
- Mid(current_str , 5) = " "
- Case 4
- Mid(current_str , 6) = " "
- End Select
- End If
- Locate 1 , 10 : Lcd Current_str ; Chr(1) ' Wyświetlenie na LCD ograniczenia prądowego I_SET
- End Sub
- Sub Set_dac
- 'przelicz Single Prad i wyslij do DAC
- End Sub
- ' eeprom reading U_SET
- '------------------------------
- Pos = Pos_ee
- If Pos > 4 Then
- Pos = 4 : Pos_ee = Pos
- Napiecie_ee = 0
- End If
- Napiecie = Napiecie_ee
- '------------------------------
- Call Show_voltage()
- ' eeprom reading I_SET
- '------------------------------
- Pos2 = Pos2_ee
- If Pos2 > 4 Then
- Pos2 = 4 : Pos2_ee = Pos2
- Prad_ee = 0
- End If
- Prad = Prad_ee
- '------------------------------
- Call Show_current()
- Call Set_dac()
- ' ########################## GŁÓWNA PĘTLA ###############################
- Do
- '************************************************************** Obsługa encodera dla prądu
- Debounce Enc_sw2 , 0 , Enc_sw2_sub , Sub 'ENCODER I_SET
- '##### encoder turns left ######
- If 0 < Encoder2_turn_left Then
- Decr Encoder2_turn_left
- 'tutaj Twój kod -
- If Timeout > 0 Then
- Select Case Pos2
- Case 1
- Prad = Prad - 1.0
- Case 2
- Prad = Prad - 0.1
- Case 3
- Prad = Prad - 0.01
- Case 4
- Prad = Prad - 0.001
- End Select
- If Prad < 0 Then Prad = 0
- Mig = 0 : Call Show_current
- End If
- Timeout = Timeout_time 'przedłuzaj/uruchamiaj timeout przy kazdym kliku
- Gifr.intf0 = 1
- Enable INT0
- End If
- ' #### encoder turns right ######
- If 0 < Encoder2_turn_right Then
- Decr Encoder2_turn_right
- 'tutaj Twój kod +
- If Timeout > 0 Then
- Select Case Pos2
- Case 1
- Prad = Prad + 1
- Case 2
- Prad = Prad + 0.1
- Case 3
- Prad = Prad + 0.01
- Case 4
- Prad = Prad + 0.001
- End Select
- If Prad > 3.0 Then Prad = 3.0
- Mig = 0 : Call Show_current
- End If
- Timeout = Timeout_time 'przedłuzaj/uruchamiaj timeout przy kazdym kliku
- Gifr.intf0 = 1
- Enable INT0
- End If
- ' ***************************************************************** Obsługa encodera dla napięcia
- Debounce Enc_sw1 , 0 , Enc_sw1_sub , Sub 'ENCODER U_SET
- '##### encoder turns left ######
- If 0 < Encoder1_turn_left Then
- Decr Encoder1_turn_left
- 'tutaj Twój kod -
- If Timeout1 > 0 Then
- Select Case Pos
- Case 1
- Napiecie = Napiecie - 1.0
- Case 2
- Napiecie = Napiecie - 0.1
- Case 3
- Napiecie = Napiecie - 0.01
- Case 4
- Napiecie = Napiecie - 0.001
- End Select
- If Napiecie < 0 Then Napiecie = 0
- Mig1 = 0 : Call Show_voltage
- End If
- Timeout1 = Timeout_time 'przedłuzaj/uruchamiaj timeout przy kazdym kliku
- Gifr.intf1 = 1 'dla Mega8, M32 itp
- Enable Int1
- End If
- ' #### encoder turns right ######
- If 0 < Encoder1_turn_right Then
- Decr Encoder1_turn_right
- 'tutaj Twój kod +
- If Timeout1 > 0 Then
- Select Case Pos
- Case 1
- Napiecie = Napiecie + 1
- Case 2
- Napiecie = Napiecie + 0.1
- Case 3
- Napiecie = Napiecie + 0.01
- Case 4
- Napiecie = Napiecie + 0.001
- End Select
- If Napiecie > 20.0 Then Napiecie = 20.0
- Mig1 = 0 : Call Show_voltage
- End If
- Timeout1 = Timeout_time 'przedłuzaj/uruchamiaj timeout przy kazdym kliku
- Gifr.intf1 = 1 'dla Mega8, M32 itp
- Enable Int1
- End If
- If Tifr.ocf2 = 1 Then '10ms
- Tifr.ocf2 = 1
- If 500ms < 49 Then
- Incr 500ms
- Else
- 500ms = 0
- If Mig = 0 Then Mig = 1 Else Mig = 0
- If Timeout > 0 Then
- Decr Timeout
- If Timeout = 0 Then
- 'wyślij do DAC
- Mig = 0
- Prad_ee = Prad 'zapamietaj dopiero po Timeoucie
- Call Set_dac
- End If
- Call Show_current()
- End If
- If Mig1 = 0 Then Mig1 = 1 Else Mig1 = 0
- If Timeout1 > 0 Then
- Decr Timeout1
- If Timeout1 = 0 Then
- 'wyślij do DAC
- Mig1 = 0
- Napiecie_ee = Napiecie 'zapamietaj dopiero po Timeoucie
- Call Set_dac
- End If
- Call Show_voltage()
- End If
- End If
- End If
- '********************************************************************************************
- Loop
- End
- ' Obsługa przycisku Encoder1 U_SET
- Enc_sw1_sub:
- If Timeout1 > 0 Then
- Incr Pos : If Pos > 4 Then Pos = 1
- Pos_ee = Pos
- End If
- Timeout1 = Timeout_time 'przedłuzaj/uruchamiaj timeout przy kazdym kliku
- Return
- ' Obsługa przycisku Encoder2 I_SET
- Enc_sw2_sub:
- If Timeout > 0 Then
- Incr Pos2 : If Pos2 > 4 Then Pos2 = 1
- Pos2_ee = Pos2
- End If
- Timeout = Timeout_time 'przedłuzaj/uruchamiaj timeout przy kazdym kliku
- Return
- 'tutaj obsługa przerwania zewnetrznego z enkodera 2
- Encoder2_isr:
- $asm
- PUSH R23
- PUSH R24
- PUSH R26
- PUSH R27
- !in R24, sreg
- PUSH R24
- $end Asm
- Disable INT0
- If Encoder2_a = 1 Then
- Incr Encoder2_turn_right
- Else
- Incr Encoder2_turn_left
- End If
- 'Tuned with NoSave Tool
- $asm
- POP R24
- !out sreg, r24
- POP R27
- POP R26
- POP R24
- POP R23
- $end Asm
- Return
- 'tutaj obsługa przerwania zewnetrznego z enkodera 1
- Encoder1_isr:
- $asm
- PUSH R23
- PUSH R24
- PUSH R26
- PUSH R27
- !in R24, sreg
- PUSH R24
- $end Asm
- Disable Int1
- If Encoder1_a = 1 Then
- Incr Encoder1_turn_right
- Else
- Incr Encoder1_turn_left
- End If
- ' Tuned with NoSave Tool
- $asm
- POP R24
- !out sreg, r24
- POP R27
- POP R26
- POP R24
- POP R23
- $end Asm
- Return