Witam
Mam problemy z fazami w domu. chciałbym mieć stały pomiar wyświetlany na LCD i w przypadku przekroczenia napięcia 240V zapalaną diodę led podpiętą do nóżek procka(docelowo będą to przekaźniki) i sygnał dźwiękowy na syrence.
Wykonałem w bascomie miernik faz na atmega8, tryb zaokrąglania wyniku zaczerpnąłem z jednego kodu z forum.
Płytka z układem zasilana jest z prostownika stabilizowanego 5V.
Napięcie (0-5V) jest podawane na nogi procesora z prostowniczków podpiętych do kolejnych faz. Założenie jest takie by 1V podawany na nogę ADC odpowiadał 100V sieci.
Mam kilka problemów i na pewno ktoś z większym doświadczeniem je rozwiąże.
1)Mam problem z wystrojeniem stałej przekształcającej wartość z ADC na wyświetlane volty. Nie wiem jaką stałą dobrać.
2)Mam problem z wyświetlaniem zmiennej "wys0","wys1","wys3". W zależności od napięcia ma się pojawiać napięcie albo napis "ALARM".
3)Jeżeli ktoś ma pomysł jak usprawnić program czekam na podpowiedzi.
Mam problemy z fazami w domu. chciałbym mieć stały pomiar wyświetlany na LCD i w przypadku przekroczenia napięcia 240V zapalaną diodę led podpiętą do nóżek procka(docelowo będą to przekaźniki) i sygnał dźwiękowy na syrence.
Wykonałem w bascomie miernik faz na atmega8, tryb zaokrąglania wyniku zaczerpnąłem z jednego kodu z forum.
Płytka z układem zasilana jest z prostownika stabilizowanego 5V.
Napięcie (0-5V) jest podawane na nogi procesora z prostowniczków podpiętych do kolejnych faz. Założenie jest takie by 1V podawany na nogę ADC odpowiadał 100V sieci.
Mam kilka problemów i na pewno ktoś z większym doświadczeniem je rozwiąże.
1)Mam problem z wystrojeniem stałej przekształcającej wartość z ADC na wyświetlane volty. Nie wiem jaką stałą dobrać.
2)Mam problem z wyświetlaniem zmiennej "wys0","wys1","wys3". W zależności od napięcia ma się pojawiać napięcie albo napis "ALARM".
3)Jeżeli ktoś ma pomysł jak usprawnić program czekam na podpowiedzi.
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Pinb.4 = Output ' ,UO
Config Pind.7 = Output ' ,S2
Config Pinb.2 = Output ' ,TO
Config Pinb.1 = Output ' ,IO
Config Pinc.5 = Output 'syr
Portb.2 = 0
Portb.1 = 0
Portd.7 = 0
Portc.5 = 0
Dim Wart_ac1 As Word , Wart_ac0 As Word , Wart_ac3 As Word
Dim Usre3 As Single , Usre0 As Single , Usre1 As Single
Dim Sumwy3 As Integer , Sumwy0 As Integer , Sumwy1 As Integer
Dim Wyn0 As Byte
Dim Zaok0 As Single , Zaok1 As Single , Zaok3 As Single
Dim Zao0 As Integer , Zao1 As Integer , Zao3 As Integer
Dim Wys0 As String * 5 , Wys1 As String * 5 , Wys3 As String * 5
Const Alarm = "ALARM"
Start Adc
Start:
Wyn0 = 0
Sumwy3 = 0
Sumwy0 = 0
Sumwy1 = 0
Usre0 = 0
Usre1 = 0
Usre3 = 0
Zaok0 = 0
Zaok1 = 0
Zaok3 = 0
Zao0 = 0
Zao1 = 0
Zao3 = 0
Do
'POMIAR FAZ
For Wyn0 = 1 To 100
Sumwy0 = Sumwy0 + Getadc(0)
Sumwy1 = Sumwy1 + Getadc(1)
Sumwy3 = Sumwy3 + Getadc(3)
Next T
'FAZA1 Uśrednianie
Sumwy0 = Sumwy0 \ 100
Sumwy0 = Getadc(0)
Usre0 = Sumwy0 \ 204.4
'FAZA1 zaokrąglanie
Zaok0 = Frac(usre0)
Usre0 = Int(usre0)
Zaok0 = Zaok0 * 100
Zao0 = Int(zaok0) * 10
'FAZA2 Uśrednianie
Sumwy1 = Sumwy1 \ 100
Sumwy1 = Getadc(1)
Usre1 = Sumwy1 \ 204.4
'FAZA2 zaokrąglanie
Zaok1 = Frac(usre1)
Usre1 = Int(usre1)
Zaok1 = Zaok1 * 100
Zao1 = Int(zaok1) * 10
'FAZA3 Uśrednianie
Sumwy3 = Sumwy3 \ 100
Sumwy3 = Getadc(3)
Usre3 = Sumwy3 \ 204.4
'FAZA3 zaokrąglanie
Zaok3 = Frac(usre3)
Usre3 = Int(usre3)
Zaok3 = Zaok3 * 100
Zao3 = Int(zaok3) * 10
'-----------CZUJNIK---------------
Select Case Zao0
Case Is > 240
Portb.2 = 1 'dioda 1
Portc.5 = 1 'syrena
Wys0 = Alarm
Case Is < 240
Portb.2 = 0
Wys0 = Zao0
End Select
Select Case Zao1
Case Is > 240
Portd.7 = 1 'dioda 2
Portc.5 = 1 'syrena
Wys1 = Alarm
Case Is < 240
Portd.7 = 0
Wys1 = Zao1
End Select
Select Case Zao3
Case Is > 240
Portb.1 = 1 'dioda 3
Portc.5 = 1 'syrena
Wys3 = Alarm
Case Is < 240
Portb.1 = 0
Wys3 = Zao3
End Select
'WYŚWIETLANIE
Cls
Lcd "R=" ; Wys0 ; "V " ; "S=" ; Wys1 ; "V"
Lowerline
Lcd "T=" ; Wys3 ; "V"
Waitms 100
Loop
End ''koniec programu
