ขอคำปรึกษาเรื่องโปรเจคหน่อยครับ
หน้า: [1]   ลงล่าง
  พิมพ์  
ผู้เขียน หัวข้อ: ขอคำปรึกษาเรื่องโปรเจคหน่อยครับ  (อ่าน 5106 ครั้ง)
Dumrong007
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 87


อีเมล์
« เมื่อ: พฤศจิกายน 25, 2011, 09:54:06 AM »

---พอดีได้ทำโปรเจค เรื่องเครื่องตั้งเวลาเปิด-ปิดปั้มน้ำและควบคุมทางน้ำได้(ควบคุมทางน้ำ หมายถึง สมมุติว่าปั้มน้ำต่อท่อส่งไว้ 4 ท่อ แต่เราต้องการให้ท่อที่ 1 กับ 4 มันไหล อีก 2 ท่อปิดไว้ แต่ต้องควมคุมโดยโมโครคอนโทรลเลอร์)
ต้องเขียนโปรแกรมประมาณใหนครับ (PIC CCS)

 ฉงน ฉงน


บันทึกการเข้า

kiano♥
kiano555@gmail.com
กลุ่มสนับสนุนLSV+มีน้ำใจ
member
****

คะแนน337
ออฟไลน์ ออฟไลน์

กระทู้: 570


การให้น่าภูมิใจกว่าได้รับ Line ID : Tech64

kiano555@windowslive.com kiano555@yahoo.com
เว็บไซต์ อีเมล์
« ตอบ #1 เมื่อ: พฤศจิกายน 25, 2011, 10:48:50 AM »

1. ออกแบบและเขียนแผนผังระบบน้ำ ท่อน้ำ, ปั๊มน้ำ, ตัวควบคุมทางน้ำ (โซลีนอย) อื่นๆ
2. ออกแบบวงจรไฟฟ้ากำลัง สำหรับควบคุมอุปกรณ์ต่างๆ เช่น ปั๊มน้ำ, โซลีนอย อื่นๆ
3. ออกแบบวงจรควบคุม (Microcontroller)
4. ออกแบบโฟว์ชาร์ทการทำงานของโปรแกรมควบคุม เงื่อนไขต่างๆของการทำงาน พิจารณาความเป็นไปได้และปัญหาที่จะเกิดของโฟว์ชาร์ท
5. เขียนโปรแกรมตามโฟวชาร์ทที่ออกแบบไว้ ทดลองโปรแกรมทีละส่วน แก้ปัญหาของโปรแกรม ในกรณีทำงานไม่ตรงตามคอนเซปให้ย้อนกลับไปแก้ที่โฟว์ชาร์ท
6. ทดลองรันโปรแกรม ระบบควบคุม แก้ไขปัญหาในกรณีที่มีปัญหา
7. บันทึกผลการทดลอง, ปัญหา, การสิ้นเปลืองพลังงาน, ผลกระทบต่อสิ่งต่างๆ เช่น ค่าไฟฟ้า, อายุการใช้งานของอุปกรณ์, ความร้อน, เสียง, อื่นๆ
8. จบโปรเจค
บันทึกการเข้า
Dumrong007
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 87


อีเมล์
« ตอบ #2 เมื่อ: พฤศจิกายน 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();
   }
}

ผมจะใช้โปรแกรมนี้ทำโปรเจค  ยังด้อยประสบการณ์เลยออกมาได้แค่นี้
บันทึกการเข้า
kiano♥
kiano555@gmail.com
กลุ่มสนับสนุนLSV+มีน้ำใจ
member
****

คะแนน337
ออฟไลน์ ออฟไลน์

กระทู้: 570


การให้น่าภูมิใจกว่าได้รับ Line ID : Tech64

kiano555@windowslive.com kiano555@yahoo.com
เว็บไซต์ อีเมล์
« ตอบ #3 เมื่อ: พฤศจิกายน 26, 2011, 10:27:12 AM »

ทำไมเวลามันนับไปเรื่อยๆ ถึงประมาณ 200 กว่า มันก็เริ่มนับใหม่ละครับ
- เพราะกำหนดตัวแปร char c เป็น 8 บิตจึงมีค่าสูงสุดแค่ 256 ค่า

แล้วถ้าจะใส่ปุ่ม START,ปุ่มเซตค่าเวลา มันต้องทำไงครับ
- ต้องกำหนดตัวแปรเพิ่มขึ้นมาอีก เพื่อเก็บค่าต่างๆ เช่น นาที ชั่วโมง (สำหรับการนับเวลา)  นาที ชั่วโมง (สำหรับการตั้งเวลา) ถ้าได้ค่าพวกนี้แล้ว ก็นำไปคำนวนในฟังก์ชั่นอินเตอร์รัพ เช่น c นับไปได้ 60 ค่าแล้ว นาทีเพิ่ม 1 ค่า แล้วก็ตรวจสอบกับเวลาที่ตั้งไว้ด้วย ถ้าตรงกัน นั่นก็คือสั่งงานออกทางเอาพุต

บอกไปแล้ว ว่าให้เขียนเป็นโฟล์วชาร์ทก่อน จะได้ไม่งง และคิดแก้ปัญหา หรือเพิ่มฟังก์ชั่นได้ถูกจุด ข้ามขั้นตอนก็งี้แหละ
บันทึกการเข้า
Dumrong007
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 87


อีเมล์
« ตอบ #4 เมื่อ: ธันวาคม 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 ตรงไหนแล้วก้อ ปุ่ม เซตเวลาด้วยครับ  ช่วยหน่อยนะครับ ไปไม่เป็นจริงๆๆ
บันทึกการเข้า
JUB
Full Member
member
**

คะแนน81
ออฟไลน์ ออฟไลน์

กระทู้: 1157



« ตอบ #5 เมื่อ: ธันวาคม 12, 2011, 01:16:55 PM »

อ้างถึง
kiano♥ ให้เขียนเป็นโฟล์วชาร์ทก่อน จะได้ไม่งง และคิดแก้ปัญหา หรือเพิ่มฟังก์ชั่นได้ถูกจุด ข้ามขั้นตอนก็งี้แหละ
Smiley
บันทึกการเข้า
หน้า: [1]   ขึ้นบน
  พิมพ์  
 
กระโดดไป: