İyi günler,
Bu işte yeni biri olarak soruyorum sorumu öncelikle bunu dikkate alırsanız sevinirim.
Benim elimde bir kart var 3 tane test noktası var. Bu test noktalarında 15.3V, 5V ve 3.3V var. Benim bir test kartı hazırlayıp bu noktalarda istenilen voltajların olup olmadığını kontrol etmem lazım. Eğer istenilen voltaj varsa led yanacak şekilde. Opamp karşılatırıcı ile yapılabilmekte fakat başka bir yolu var mı? teşekkürler şimdiden
1 adet 12F675 ile yapabilirsin
Bütün dosyalar https://drive.google.com/open?id=1sSvNwhuQhyYshx1jT1SZTFf7biHGT984
Programın değişik ölçüm toleransları için (%1, %3, %5, %7, %10) farklı hexler içinde
Bu toleransı eeprom adres 0 daki kayıtlı değeri oynayarak 0-100 arası değiştirebilirsin
Tolerans demek şu
Olcum noktasında 2,5V olsun
+- hangi sınır değerler içinde ise bu değeri var ve sınırlar içinde kabul edeceği anlamında.
- - -
Montaj sonrası gerilim bölen dirençlerde kayma olabileceği için devreyi önce 1 kere setlemek gerek,
12F675 ilk hex yükleme yapıldıktan sonra setlenmemiş olduğundan çalışmayacak ve setleme bekleyecektir
SETLEME;
doğru değerde giriş voltajları bağlandıktan sonra
Butona basılıp giriş değerlerinin okunması sağlanır, okur, hafızasına kaydeder
ve 0,5 sn led yanıp söner, normal çalışmaya geçmek için tekrar butona basılmayı bekler
Butona basınca normal calışmaya gecer, boltajların üçü de var ve sınırlariçinde ise led yanar
aksi taktirde söner.
SETLEME işi tekrar yapılabilir, bunun için cihaz enerjilenmeden önce butona basılır, sonra enerjilenir,
butona basıldığı ledin yanması ile görülür, buton bırakılır, led söner
setleme işlemini buton bıraktıktan itibaren aynen üstteki şekli ile tekrar yapar ve normal çalışmaya geçer.
Program ( Proton )
Device = 12F675
Config CPD_OFF,CP_ON,BODEN_ON,MCLRE_OFF,PWRTE_ON,WDT_OFF,INTRC_OSC_NOCLKOUT
Set_OSCCAL
Declare Xtal 4
All_Digital = TRUE
Declare Adin_Res 10
Declare Adin_Tad FRC
Declare Adin_Stime 100
ANSEL = %00000111
GPIO = 0
TRISIO = %00100111
GPIO = 0
IOC=%00000000
INTCON=%00000000
OPTION_REG=%1001111
ADCON0 = %10000000
WPU = %00100000
'-------------------------------------------------------------------------------
Dim tolerans As Byte
Dim HAM As Word 'ADC den okunan ham digital değer.
Dim volt_1 As Word
Dim volt_2 As Word
Dim volt_3 As Word
Dim volt_1_min As Word
Dim volt_2_min As Word
Dim volt_3_min As Word
Dim volt_1_max As Word
Dim volt_2_max As Word
Dim volt_3_max As Word
Dim s_1 As Byte
Dim dwd_1 As Dword
Dim buton As GPIO.5
Dim LED As GPIO.4
'-------------------------------------------------------------------------------
EData 10,_ ''' 0 Voltaj sınırı için Yüzde tolerans
0,0,0,0,_ ''' 1, 2, 3, 4 volt 1 için min ve max
0,0,0,0,_ ''' 5, 6, 7, 8 volt 2 için min ve max
0,0,0,0,_ ''' 9, 10, 11, 12 volt 3 için min ve max
0,_ ''' 13
0,_ ''' 14
0 ''' 15
''''''''''
LED = 0
DelayMS 200
Clrwdt
s_1 = ERead 15 ''' onceden setlenmismi
If s_1 = 0 Then setle ''' setlenmemisse
If buton = 0 Then setle_onu ''' ailista buton basili ise set
BASLA:
LED = 0 ''' led sonuk
bas_2:
''' 1. girisi olc
HAM = ADIn 0
If HAM < volt_1_min Then BASLA '' min degerden az ise ledi yakmadan basa
If HAM > volt_1_max Then BASLA '' max degerden cok ise ledi yakmadan basa
''' 2. girisi olc
HAM = ADIn 1
If HAM < volt_2_min Then BASLA '' min degerden az ise ledi yakmadan basa
If HAM > volt_2_max Then BASLA '' max degerden cok ise ledi yakmadan basa
''' 3. girisi olc
HAM = ADIn 2
If HAM < volt_3_min Then BASLA '' min degerden az ise ledi yakmadan basa
If HAM > volt_3_max Then BASLA '' max degerden cok ise ledi yakmadan basa
LED = 2 ''' led yanik
GoTo bas_2
'''
setle_onu:
LED = 1
For s_1 = 0 To 150
Clrwdt
DelayMS 1
If buton = 0 Then setle_onu ''' buton bırakasıya kadar bekle
Next
setle:
LED = 0
For s_1 = 0 To 150
Clrwdt
DelayMS 1
If buton = 1 Then setle ''' buton basasıya kadar bekle
Next
DelayMS 500
Clrwdt
tolerans = ERead 0 ''' tolerans
''' birinci girisi oku
HAM = ADIn 0
GoSub hesap ''' yüzdenin yarisini hesapla gel
volt_1_min = HAM - dwd_1
volt_1_max = HAM + dwd_1
''' ikinci girisi oku
HAM = ADIn 0
GoSub hesap ''' yüzdenin yarisini hesapla gel
volt_2_min = HAM - dwd_1
volt_2_max = HAM + dwd_1
''' ucuncu girisi oku
HAM = ADIn 0
GoSub hesap ''' yüzdenin yarisini hesapla gel
volt_3_min = HAM - dwd_1
volt_3_max = HAM + dwd_1
Clrwdt
''' değerleri EEPROM'a kaydet
EWrite 1 , [ volt_1_min ]
EWrite 3 , [ volt_1_max ]
Clrwdt
EWrite 5 , [ volt_2_min ]
EWrite 7 , [ volt_2_max ]
Clrwdt
EWrite 9 , [ volt_3_min ]
EWrite 11 , [ volt_3_max ]
Clrwdt
EWrite 15 , [ 255 ] ''' değerler kaydoldu
LED = 1 ''' led ile bildir
DelayMS 500
Clrwdt
LED = 0
setle_2:
For s_1 = 0 To 150
Clrwdt
DelayMS 1
If buton = 1 Then setle ''' buton basasıya kadar bekle
Next
GoTo BASLA ''' basa git
''''''
hesap:
Clrwdt
dwd_1 = HAM * tolerans
dwd_1 = dwd_1 / 200 ''' yüzdenin yarısı
Return
(https://s20.postimg.cc/t5h87m0hl/simulation.jpg) (https://postimg.cc/image/t5h87m0hl/)
(https://s20.postimg.cc/a0dyxvgop/bolucu.jpg) (https://postimg.cc/image/a0dyxvgop/)
Bir de bu işi yapan özel entegreler var. Mesela PC güç kaynaklarının çıkışını kontrol eden entegreler gibi. İstenilen ve standart değerler yakın. 3v3 , 5v ve 12v kontrol edilirken istenilen 15v3 olmuş. Gerilim bölücü direnç kullanarak halledilir.
PC power supply supervisor
ya da genel maksatlı voltage supervisor olarak aranabilir.
Ben ATX güç kaynaklarında rastlıyorum ama malzemeciden istemek/bulmak zor.
Örn: http://www.ti.com/lit/ds/symlink/tps3511.pdf
Kolay gelsin.