หัวข้อ: ขอคำปรึกษาเรื่องโปรเจคหน่อยครับ เริ่มหัวข้อโดย: Dumrong007 ที่ พฤศจิกายน 25, 2011, 09:54:06 am ---พอดีได้ทำโปรเจค เรื่องเครื่องตั้งเวลาเปิด-ปิดปั้มน้ำและควบคุมทางน้ำได้(ควบคุมทางน้ำ หมายถึง สมมุติว่าปั้มน้ำต่อท่อส่งไว้ 4 ท่อ แต่เราต้องการให้ท่อที่ 1 กับ 4 มันไหล อีก 2 ท่อปิดไว้ แต่ต้องควมคุมโดยโมโครคอนโทรลเลอร์)
ต้องเขียนโปรแกรมประมาณใหนครับ (PIC CCS) shocked2 shocked2 หัวข้อ: Re: ขอคำปรึกษาเรื่องโปรเจคหน่อยครับ เริ่มหัวข้อโดย: kiano♥ ที่ พฤศจิกายน 25, 2011, 10:48:50 am 1. ออกแบบและเขียนแผนผังระบบน้ำ ท่อน้ำ, ปั๊มน้ำ, ตัวควบคุมทางน้ำ (โซลีนอย) อื่นๆ
2. ออกแบบวงจรไฟฟ้ากำลัง สำหรับควบคุมอุปกรณ์ต่างๆ เช่น ปั๊มน้ำ, โซลีนอย อื่นๆ 3. ออกแบบวงจรควบคุม (Microcontroller) 4. ออกแบบโฟว์ชาร์ทการทำงานของโปรแกรมควบคุม เงื่อนไขต่างๆของการทำงาน พิจารณาความเป็นไปได้และปัญหาที่จะเกิดของโฟว์ชาร์ท 5. เขียนโปรแกรมตามโฟวชาร์ทที่ออกแบบไว้ ทดลองโปรแกรมทีละส่วน แก้ปัญหาของโปรแกรม ในกรณีทำงานไม่ตรงตามคอนเซปให้ย้อนกลับไปแก้ที่โฟว์ชาร์ท 6. ทดลองรันโปรแกรม ระบบควบคุม แก้ไขปัญหาในกรณีที่มีปัญหา 7. บันทึกผลการทดลอง, ปัญหา, การสิ้นเปลืองพลังงาน, ผลกระทบต่อสิ่งต่างๆ เช่น ค่าไฟฟ้า, อายุการใช้งานของอุปกรณ์, ความร้อน, เสียง, อื่นๆ 8. จบโปรเจค หัวข้อ: Re: ขอคำปรึกษาเรื่องโปรเจคหน่อยครับ เริ่มหัวข้อโดย: Dumrong007 ที่ พฤศจิกายน 26, 2011, 09:40:30 am ขอสอบถามเรื่องโปรแกรมหน่อยครับ โปรแกรมตั้งเวลานับถอยหลังเหมือนที่เคยทำ แต่คราวนี้ใช้ ccs
คือว่า...ทำไมเวลามันนับไปเรื่อยๆ ถึงประมาณ 200 กว่า มันก็เริ่มนับใหม่ละครับ แล้วถ้าจะใส่ปุ่ม START,ปุ่มเซตค่าเวลา มันต้องทำไงครับ timer1 16f877a //**********************// //Timer1 16f877 Segment // //**********************// #include <16f877.h> #fuses HS,NOLVP,NOWDT,NOPROTECT #use delay (clock = 20M) char segment[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x27,0x7f,0x6f,}; unsigned int tick=0; char c; #int_timer1 void timer1_ISR(void) { tick++; if(tick>=20) { c++; tick=0; } } //****************************************** void delay() { delay_ms(50); } void main() { enable_interrupts(GLOBAL); enable_interrupts(INT_TIMER1); setup_timer_1(T1_internal| T1_DIV_BY_4); set_timer1(0); set_tris_c(0x00); set_tris_b(0x00); while(1) { output_b(segment[c/1000]); output_high(pin_c0); output_low(pin_c1); output_low(pin_c2); output_low(pin_c3); delay(); output_b(segment[c/100]); output_high(pin_c1); output_low(pin_c0); output_low(pin_c2); output_low(pin_c3); delay(); output_b(segment[c/10%10]); output_high(pin_c2); output_low(pin_c0); output_low(pin_c1); output_low(pin_c3); delay(); output_b(segment[c%10]); output_high(pin_c3); output_low(pin_c0); output_low(pin_c1); output_low(pin_c2); delay(); } } ผมจะใช้โปรแกรมนี้ทำโปรเจค ยังด้อยประสบการณ์เลยออกมาได้แค่นี้ หัวข้อ: Re: ขอคำปรึกษาเรื่องโปรเจคหน่อยครับ เริ่มหัวข้อโดย: kiano♥ ที่ พฤศจิกายน 26, 2011, 10:27:12 am ทำไมเวลามันนับไปเรื่อยๆ ถึงประมาณ 200 กว่า มันก็เริ่มนับใหม่ละครับ
- เพราะกำหนดตัวแปร char c เป็น 8 บิตจึงมีค่าสูงสุดแค่ 256 ค่า แล้วถ้าจะใส่ปุ่ม START,ปุ่มเซตค่าเวลา มันต้องทำไงครับ - ต้องกำหนดตัวแปรเพิ่มขึ้นมาอีก เพื่อเก็บค่าต่างๆ เช่น นาที ชั่วโมง (สำหรับการนับเวลา) นาที ชั่วโมง (สำหรับการตั้งเวลา) ถ้าได้ค่าพวกนี้แล้ว ก็นำไปคำนวนในฟังก์ชั่นอินเตอร์รัพ เช่น c นับไปได้ 60 ค่าแล้ว นาทีเพิ่ม 1 ค่า แล้วก็ตรวจสอบกับเวลาที่ตั้งไว้ด้วย ถ้าตรงกัน นั่นก็คือสั่งงานออกทางเอาพุต บอกไปแล้ว ว่าให้เขียนเป็นโฟล์วชาร์ทก่อน จะได้ไม่งง และคิดแก้ปัญหา หรือเพิ่มฟังก์ชั่นได้ถูกจุด ข้ามขั้นตอนก็งี้แหละ หัวข้อ: Re: ขอคำปรึกษาเรื่องโปรเจคหน่อยครับ เริ่มหัวข้อโดย: Dumrong007 ที่ ธันวาคม 12, 2011, 12:03:19 am พอจะได้แล้วครับพี่ แต่ติดอยู่นิดหน่อย
//**********************// //Timer1 16f877 Segment // //**********************// #include <16f877.h> #fuses HS,NOLVP,NOWDT,NOPROTECT #use delay (clock = 20M) char segment[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x27,0x7f,0x6f,}; unsigned int tick=0; int a,b,c=6,d; int start; #int_timer1 void timer1_ISR(void) { tick++; if(tick>=20) { d--; tick=0; } else if(d<=0) { d=9; c--; } else if(c<=0) { c=5; b--; } else if(b<=0) { b=9; a--; } else if(a<=0) { a=0; } } //****************************************** void delay() { delay_ms(50); } void main() { enable_interrupts(GLOBAL); enable_interrupts(INT_TIMER1); setup_timer_1(T1_internal| T1_DIV_BY_4); set_timer1(0); set_tris_b(0x00); while(1) { output_b(segment[a]); output_low(pin_D0); delay(); output_b(segment); output_low(pin_D1); delay(); output_b(segment[c]); output_low(pin_D2); delay(); output_b(segment[d]); output_low(pin_D3); delay(); /* if(!input(pin_d7)) { d++; } else if(!input(pin_d6)) { d--; } */ } } ไม่รู้จะใส่ปุ่ม Start ตรงไหนแล้วก้อ ปุ่ม เซตเวลาด้วยครับ ช่วยหน่อยนะครับ ไปไม่เป็นจริงๆๆ หัวข้อ: Re: ขอคำปรึกษาเรื่องโปรเจคหน่อยครับ เริ่มหัวข้อโดย: JUB ที่ ธันวาคม 12, 2011, 01:16:55 pm อ้างถึง kiano♥ ให้เขียนเป็นโฟล์วชาร์ทก่อน จะได้ไม่งง และคิดแก้ปัญหา หรือเพิ่มฟังก์ชั่นได้ถูกจุด ข้ามขั้นตอนก็งี้แหละ :) |