Nije da moram baš da koristim ovaj pin nego me yanima šta je uzrok ovome.
Evo koda:
Code:
program korektor
dim ad_tmp as word 'za smjestanje rezultata konverzije
const over_up as word = 770 'maksimalna vrijednost napona na oko 245V
const value_1 as word = 620 'za pad napona na 200V
const value_2 as word = 500 'za pad napona na 180V
const over_down as word = 480 'minimalna vrijednost napona na oko 160V
sub procedure set_voltage
if (ad_tmp < over_up) and (ad_tmp > value_1) then
gpio = %00000001 'prvi stepen (napon izmedju 220V i 245V) gpio.0 = 1
end if
if (ad_tmp < value_1) and (ad_tmp > value_2) then
gpio = %00000010 'drugi stepen (napon izmedju 180V i 200V) gpio.1 = 1
end if
if (ad_tmp < value_2) and (ad_tmp > over_down) then
gpio = %00000100 'treci stepen (napon izmedju 160 i 180V) gpio.2 = 1
end if
end sub
sub function is_error as byte
result = 0
if (ad_tmp > over_up) or (ad_tmp < over_down) then 'prekoracenje u plus ili u minus.
'napon je preko 245V ili ispod 160V
gpio = %00100000 'palimo error (gpio.5) pin
result = 1
end if
end sub
main:
GPIO = 0 ' inicijalizacija GPIO porta
CMCON = 7 ' gasimo komparatore
TRISIO = 0 ' svi gpio su izlazni
TRISIO.ANS3 = 1 ' pin ANS3 je ulazni
ADCON0.VCFG = 0 ' Vdd as Vref
gpio = %00000000 ' gasimo sve izlaze
while true ' beginning of a endless loop
ad_tmp = ADC_read(ANS3) ' citamo vrijednost sa porta GP4 i rezultat smjestamo u temp
if is_error = 0 then ' provjeravamo jeli napon u granicama dozvoljenog
set_voltage ' podesavamo releje
end if ' '
wend ' endless loop
end.
program korektor
dim ad_tmp as word 'za smjestanje rezultata konverzije
const over_up as word = 770 'maksimalna vrijednost napona na oko 245V
const value_1 as word = 620 'za pad napona na 200V
const value_2 as word = 500 'za pad napona na 180V
const over_down as word = 480 'minimalna vrijednost napona na oko 160V
sub procedure set_voltage
if (ad_tmp < over_up) and (ad_tmp > value_1) then
gpio = %00000001 'prvi stepen (napon izmedju 220V i 245V) gpio.0 = 1
end if
if (ad_tmp < value_1) and (ad_tmp > value_2) then
gpio = %00000010 'drugi stepen (napon izmedju 180V i 200V) gpio.1 = 1
end if
if (ad_tmp < value_2) and (ad_tmp > over_down) then
gpio = %00000100 'treci stepen (napon izmedju 160 i 180V) gpio.2 = 1
end if
end sub
sub function is_error as byte
result = 0
if (ad_tmp > over_up) or (ad_tmp < over_down) then 'prekoracenje u plus ili u minus.
'napon je preko 245V ili ispod 160V
gpio = %00100000 'palimo error (gpio.5) pin
result = 1
end if
end sub
main:
GPIO = 0 ' inicijalizacija GPIO porta
CMCON = 7 ' gasimo komparatore
TRISIO = 0 ' svi gpio su izlazni
TRISIO.ANS3 = 1 ' pin ANS3 je ulazni
ADCON0.VCFG = 0 ' Vdd as Vref
gpio = %00000000 ' gasimo sve izlaze
while true ' beginning of a endless loop
ad_tmp = ADC_read(ANS3) ' citamo vrijednost sa porta GP4 i rezultat smjestamo u temp
if is_error = 0 then ' provjeravamo jeli napon u granicama dozvoljenog
set_voltage ' podesavamo releje
end if ' '
wend ' endless loop
end.
I još jedno pitanje. Kada je napon primara između 179 i 181 V tada led diode na GP1 i GP2 svijetle. Palo mi je na pamet da čitam stanje a/d pina nekoliko puta sa pauzama pa da uzmem srednju vrijednost, ili da samo napravim pauzu posle čitanja. Ili nešto treće?
Program je u MikroBasic Pro-u i testiran na EasyPic5.
[Ovu poruku je menjao deniah dana 21.03.2010. u 02:11 GMT+1]
[Ovu poruku je menjao deniah dana 21.03.2010. u 02:15 GMT+1]