Thai microtron community

Electronic Knowledge Base => Microcontoller & Electronics => Topic started by: banthom on November 30, 2009, 08:30:50 PM



Title: ช่วยดู Code ทางนี้ให้หน่อยครับ
Post by: banthom on November 30, 2009, 08:30:50 PM
ผมได้ลองต่อวงจรตามรูปในโปรแกรม Proteus และลองเขียน Code ง่าย ๆ เป็นการจำลอง Traffic Light ซึ่งเมื่อ Run ในโปรแกรม Proteus แล้วก็ใช้งานได้เป็นปกติ ไฟจะติดตามที่ต้องการ คือ แดง---->เขียว---->เหลือง และก็วนไปแบบนี้เรื่อย ๆ แต่ปัญหาคือ เมื่อผมลองต่อวงจรใช้งานจริง ๆ และก็อัด Code เข้า PIC12F629 ได้ตามปกติ แต่ผลปรากฎว่า เมื่อจ่ายไฟ (5v) แล้วไม่เป็นไปอย่างที่ต้องการเลยครับ คือไม่มีหลอด LED ดวงไหนติดเลยสักหลอด ลองแล้วลองอีกก็ทำไม่ติดสักทีครับ หลอดก็ไม่เสีย แต่พอลองใน Proteus กลับใช้งานได้ตามปกติ เลยไม่ทราบสาเหตุครับว่าเกิดจากอะไร แต่รับรองครับว่าต่อวงจรไม่ผิดและก็ PIC12F629 ไม่เสียครับ เพราะว่าลองเอา Code Remote ที่เคยทำไว้ลองอัดดูแล้วก็นำไปลองก็ใช้งานได้ตามปกติครับ

(http://image.ohozaa.com/i3/traffic.png)

-------------------------------------------------
#include <12F629.h>
#fuses HS,NOWDT,NOPUT,NOPROTECT
#use delay (clock=4000000)

void main()
{ while(1)
   {  output_high(pin_A0);
      delay_ms(20000);
      output_low(pin_A0);
      delay_ms(100);
      output_high(pin_A2);
      delay_ms(15000);
      output_low(pin_A2);
      delay_ms(100);
      output_high(pin_A1);
      delay_ms(3500);
      output_low(pin_A1);
      delay_ms(100);
     }
}
-----------------------------------------
ไม่ทราบว่าผมผิดพลาดไปตรงใหนครับ ช่วยแก้ปัญหาให้ผมทีครับ


Title: Re: ช่วยดู Code ทางนี้ให้หน่อยครับ
Post by: smitdh on November 30, 2009, 10:27:14 PM
ดูจากโปรแกรมแล้วคุณใช้ clock 4MHz
ต้องใช้เป็น #fuses XT ครับ


Title: Re: ช่วยดู Code ทางนี้ให้หน่อยครับ
Post by: banthom on December 01, 2009, 01:26:02 AM
ขอบคุณมากครับอาจารย์ที่ให้ข้อคิด ผมได้แก้ไข Code ใหม่เป็นดังนี้

---------------------------------------------------------------------------------------------------------------
#include <12F629.h>
#FUSES NOWDT, INTRC, NOCPD, NOPROTECT, NOMCLR, NOPUT, NOBROWNOUT, BANDGAP_HIGH
#use delay(clock=4000000)

void main()
{ while(1)
   {  output_high(pin_A0);
      delay_ms(30000);
      output_low(pin_A0);
      delay_ms(100);
      output_high(pin_A2);
      delay_ms(25000);
      output_low(pin_A2);
      delay_ms(100);
      output_high(Pin_A1);
      delay_ms(5000);
      output_low(Pin_A1);
      delay_ms(100);
     }
}
------------------------------------------------
ใช้งานได้ตามที่ต้องการแล้วครับ