woah! cool lagi to bai red_horse! perti najud nakong suyaa. pinaka-imba na akong nabuhat kay line-follower raman to, 3 pajud mi gatabang ug himu. hahahaha
bai red_horse, naa ko problem ba, mayta ug naa kay time sa pagtubag. ug sa ubang mga masters diha, mangayo lang pud ko ug tabang.
gamit ani kay PIC18F4550, 8MHz, Vs = 5V. ang program kay dapat after 30secs, ang highest x reading within that 30secs kay mu-determine kung unsa na LED ang mu-ON.
conditions:
x_max < 0 =============== RC0 = 0, RC4 = 0, RC7 = 0
1 >= x_max < 2 (volts) ===== RC0 = 0, RC4 = 0, RC7 = 1
2 >= x_max < 3 (volts) ===== RC0 = 0, RC4 = 1, RC7 = 0
x_max >= 3 (volts) ======== RC0 = 1, RC4 = 0, RC7 = 0
after 30secs kay restart napud.
ang problema kay dili jud mu-work ang akong gihimu na program. ako gi-paste ang akong code na nahimu ug ang schematic niya.
Code na akong nabuhat: (mikroC 8.2.0.0 akoang gamit. dili katong mikroC PRO)
//start
unsigned int cnt;
unsigned long x, x_max;
void interrupt() {
cnt++; // Increment value of cnt on every interrupt
TMR0L = 96;
INTCON = 0x20; // Set T0IE, clear T0IF
}
void readData() {
x = Adc_read(0);
//y = Adc_read(1);
// z = Adc_read(2);
}
void main(){
CMCON = 0x07;
ADCON1 = 0x1C;
TRISA = 0x0F;
TRISB = 0x3F;
TRISC = 0x00;
PORTC = 0x00;
T0CON = 0xC7; // Set TMR0 in 8bit mode, assign (256) prescaler to TMR0
TMR0L = 96; // Timer0 initial value
INTCON = 0xA0; // Enable TMRO interrupt
cnt = 0; // Initialize cnt
x_max = 0;
while(1){
readData();
if(x > x_max){
x_max = x;
}
else if(cnt==1470){ // 256*4*(1/8000000)*(256-96)*1470 = 30secs
cnt = 0;
if((x_max>=205)&&(x_max<410)){ // 1 >= x_max < 2 (volts)
PORTC.F0 = 0;
PORTC.F4 = 0;
PORTC.F7 = 1;
}
else if((x_max>=410)&&(x_max<615)){ // 2 >= x_max < 3 (volts)
PORTC.F0 = 0;
PORTC.F4 = 1;
PORTC.F7 = 0;
}
else if(x_max>=615){ // x_max >= 3 (volts)
PORTC.F0 = 1;
PORTC.F4 = 0;
PORTC.F7 = 0;
}
else{
PORTC.F0 = 0;
PORTC.F4 = 0;
PORTC.F7 = 0;
}
x_max = 0;
}
}
}
//end