มีเรื่องให้ช่วยหน่อยคับผม T_T

Started by pomcoe, February 12, 2013, 11:47:21 AM

Previous topic - Next topic

JENG

ผมตัดออกให้ดูง่ายๆนะไม่รู้ว่าตรงตามความต้องการหรือป่าว
คือเมื่อมีการตรวจจับสัญญานได้ว่า ((vinfa1>=1.2)&&(vinfa1<=2 ))
ผมสมมุติอยู่ใน Task2 ตัวแปร ADC_CH1,ADC_CH2;

ถ้าอยู่ใน RANGE ให้หน่วงก่อนทำงานเป็นเวลา 1 วินาที ถ้า ไม่อยู่
ใน RANGE เกิน 1 วินาที ให้ RESET Counter

ถ้าเกิน 1 วินาที ให้สั่งเปิด OUTPUT และจะมี TASK3 เป็นตัวจัดการปิด
OUTPUT โดยอัตโนมัติหลัง 4 วินาที พอมองออกมั๊ย

ผมมั่วๆเอาน่าจะพอเป็นแนวได้

unsigned char ADC_CH1,ADC_CH2;

//Tick
void Tick(void){
    //set timer 10ms tick
}

//Task1
void Task1(void){
    //read adc and calculat send to ADC_CH1,ADC_CH2;
}

//Task2
unsigned int RB0_CNT2,RB1_CNT2;
void Task2(void){

    if(ADC_CH1){                //adc in range
        if(RB0_CNT2++>=100){
            RB0_CNT2 = 0;
            RB0 = 1;
        }
    }else{
        RB0_CNT2 = 0;
    }

    if(ADC_CH2){                //adc in range
        if(RB1_CNT2++>=100){
            RB1_CNT2 = 0;
            RB1 = 1;
        }
    }else{
        RB1_CNT2 = 0;
    }

}

//Task3
unsigned int RB0_CNT3,RB1_CNT3;
void Task3(void){

    if(RB0){
        if(RB0_CNT3++>=400){
            RB0_CNT3 = 0;
            RB0 = 0;
        }
    }

    if(RB1){
        if(RB1_CNT3++>=400){
            RB1_CNT3 = 0;
            RB1 = 0;
        }
    }

}

//Main Program
int main(void){

for(;;){
        Tick();         //tick 10ms
        Task1();        //read adc and cal.
        Task2();        //delay befor execute 1sec
        Task3();        //auto turn off after 4sec
}

}
สามารถติดตาม electoday ได้ที่

Facebook
www.facebook.com/groups/coopmicro

Google+
https://plus.google.com/communities/103482067769375459277

☺☺☺ความรู้ และความฉลาด ไม่ใช่สิ่งเดียวกัน จะมีประโยชน์อะไร ถ้าฉลาดแต่อยู่ในกะลา☺☺☺

pomcoe

Quote from: ozuke on February 17, 2013, 03:54:21 PM
Quote from: pomcoe on February 17, 2013, 02:08:35 PM
เอ่อ มัน Run ไม่ผ่านอะคับ
ติดที่ a=read_adc(0)*0.004888; อะคับ

มันคือแนวคิด ครับ ถ้าอยากให้รันได้ต้องอ่านแล้วทำความเข้าใจครับ
นี่แสดงว่าไม่ยอมอ่าน ไม่ยอมทำความเข้าใจรึปล่าว หรือมันไม่รู้เรื่องจริงๆ
ถ้าอ่านนิด ทำความเข้าใจหน่อยมันก็ทำได้แ้ล้วครับ

1.สั่ง LOW pin_b1,pin_b0
2.อ่าน adc 0 แล้วมาคำนวนเป็นโวลต์เก็บไว้ที่ตัวแปร a
2.1 ถ้า a มากกว่า 1.2 และน้อยกว่า 2 ให้ pin_b0 เป็น high
3.อ่าน adc 1 แล้วมาคำนวนเป็นโวลต์ เก็บไว้ที่ตัวแปร a
3.1 ถ้า a มากกว่า 1.2 และน้อยกว่า 2 ให้ ยin_b1 เป็น high
4.delay 4000 ms
5.กลับไปทำข้อ 1.

โชคดีครับ
ถ้าผมบอกมากกว่านี้ มันก็ไม่ต่างอะไรกันกับลอกการบ้านส่ง
ผมอยากให้คุณเข้าใจ มากกว่า การได้ส่งงานแบบไม่รู้เรื่อง
คิดว่าคงเข้าใจผมนะ

ขอโทษนะคับผมรีบโพสต์เกินไป
 

pomcoe

 คือว่าผมจะเอาไฟจาก 5V ไปติ๊กให้มีการหน่วงเวลา 5 วินาที ใครมีวงจร รบกวนหน่วยนะคับ

ขอบคุณมากคับ    :) :)


AppleIIe

"Stay Hungry, Stay Foolish"
จงกระหาย และ ทำตัวโง่ให้ตลอดเวลา
"Innovation distinguishes between a leader and a follower."
นวัตกรรมแยกผู้นำกับผู้ตามออกจากกัน

คนฉลาด...ต้องโง่เป็น คนโง่ไม่เป็น...จะไม่มีทางฉลาด

mviboolr

ขอรายละเอียดมากกว่านี้ได้ม๊ยครับอ่านแล้วยังไม่เข้าใจ เพราะถ้า trig เฉยๆ ก็ใช้ monostable 555 ก็ได้

pomcoe

Quote from: mviboolr on March 05, 2013, 09:43:07 AM
ขอรายละเอียดมากกว่านี้ได้ม๊ยครับอ่านแล้วยังไม่เข้าใจ เพราะถ้า trig เฉยๆ ก็ใช้ monostable 555 ก็ได้

เอ่อ ก็แค่จ่ายไฟ 5V ไปติ๊กทีนึง

  แล้วสั่งให้หน่วงการทำงาน ประมาณ 5 วิอะคับ


pomcoe