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

  • 73 Replies
  • 15503 Views
*

Offline JENG

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

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

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

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

Code: [Select]
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

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

เอ่อ มัน 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.

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

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

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

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

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

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

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

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

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

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


ซึ่งไฟ output 5V จาก PIC  อะคับที่ไปติ๊ก

*

Offline top

  • **
  • 47
    • View Profile
ให้ PIC  Tric & Delay 5 Sec. ได้มั้ยครับ :)