Znam da ima puno gresaka, program nije moj vec iz pomenute knjige, nista polako cu da popravljam. AD konvertor je po semi na pinu RA1 ali na pcb je na RA4 tako da to treba da pise ADCIN 4, AD_Rez * 5* 100, to sam ispravio. I ovo Port D umesto port C, i DQ je na Portc.2 a ne na porte.2 tako da program zasad izgleda ovako (naravno ima jos gresaka):
'Program korektor napona.
'Meri mrezni napon i zavisno od rezultata merenja
'ukljucuje odgovarajuci relej i tako na autotransformatoru
'bira odgovrajuci izvod zavisno od mreznog napona.
Define ADC_BITS 10 ' Broj bita
Define ADC_CLOCK 1 ' Klok (0=Oscilator /8)
AD_Rez var word ' Rezultat AD konverzije
Napon var word ' Promenljiva za dobijanje napona
TRISA = %11111111 ' Port A je ulazni
TRISC = 0 ' Port D je izlazni
ADCON1 = %10000010 ' Port A je u analognom modu, 0 i 5V su
' referentni naponi a rezultat je desno formatiran.
Dummy var byte ' Promenljiva za 32 bitno delenje i mnozenje
symbol DQ = portc.2 ' DQ linija za termometar
symbol Greska = portb.5 'LED 7 dioda greske
symbol Rucni = portb.4 'LED 8 dioda rucni rad
symbol Rucni_rad = portb.2 'Linija za identifikaciju rucnog rada PRekidac
temperatura Var Word ' Izracunata temperatura
temper1 Var Word ' Izracunata temperatura
count_remain Var Byte ' Ostatak
count_per_c Var Byte ' Po stepenu C
Pocetak:
'----------------MERI TEMPERATURU--------------------------------------
OWOut DQ, 1, [$CC, $44] ' Start merenja temperature
Sacekaj:
OWIn DQ, 4, [count_remain] ' Provera da li jos traje
IF count_remain = 0 Then Sacekaj
OWOut DQ, 1, [$CC, $BE] ' Procitaj temperaturu
OWIn DQ, 0, [Temperatura.LOWBYTE, Temperatura.HIGHBYTE, Skip 4, count_remain, count_per_c]
Temperatura = (((Temperatura >> 1) * 100) - 25)+ (((count_per_c - count_remain)*100) / count_per_c)
Temper1 = Temperatura / 100
If Temper1 < 70 Then Radi
High Greska
pause 500
Low Greska
pause 500
High Greska
pause 500
Low Greska
pause 500
High Greska
pause 500
Low Greska
pause 500
PortD = $00
Goto Pocetak
'-------------RAD KOREKTORA------------------------------------------
Radi:
' Procitaj 1 kanal na RA2 i prikazi
ADCIN 4, AD_Rez ' Izvrsi konverziju na RA4 i 16 bita i rezultat smesti u AD_Rez.
Dummy = AD_Rez * 5 * 100
Napon = Div32 1023
Pause 5000 ' Pauza 10 sec
' - - - - Napon 180 - 190 - - - - - - - - - - - - - - - - - -
If AD_Rez > 731 Then RE2
PortD = $01
Goto REE
' - - - - Napon 190 - 200 - - - - - - - - - - - - - - - - - -
RE2: If AD_Rez > 775 Then RE3
PortD = $02
Goto REE
' - - - - Napon 200 - 210 - - - - - - - - - - - - - - - - - -
RE3: If AD_Rez > 811 Then RE4
PortD = $04
Goto REE
' - - - - Napon 210 - 220 - - - - - - - - - - - - - - - - - -
RE4: If AD_Rez > 867 Then RE5
PortD = $08
Goto REE
' - - - - Napon iznad 220 - - - - - - - - - - - - - - - - - -
RE5: PortD = $10
Pause 2000 ' Pauza 2 sekunda
REE:
Goto Pocetak ' Kreni ponovo na merenje
'------------RUCNI RAD----------------------------
Iskljucen:
PortC = $10
Rucni = 1
Return
End ' Kraj programa
Sad verovatno fali jos da pin 2 portaB bude ulaz a 4 i 5 izlaz i PortC treba da bude ulaz tacnije portc.2. Ovaj deo za temperaturu dali je dobar?