โดยกลุ่มผม นำ Optical Encoder และ วงจรภายใน ของเมาส์ชนิดลูกกลิ้ง มาประกอบใช้ในการวัดความเร็วลม และเมื่อนำ Ossiloscope มาวัดหาสัญญาณพบว่าเมื่อ เฟืองของเมาส์ หมุนไป 1 เฟือง เกิดสัญญาณพัลส์มากว่าหนึ่งสัญญาณ และหมุนเฟืองไปเรื่อยๆ พบว่ามีการเปลี่ยนแปลงสัญญาณที่ไม่แน่นอน ซึ่งเป็นรหัสในการบอกตำแหน่งในการเลื่อนของเมาส์ จึงทำให้ต้องมีการดัดแปลงวงจรของเมาส์เพื่อให้เหมาะแก่การใช้งานในการที่จะวัดความเร็วลม โดยให้ 1 เฟือง เท่ากับ 1 พัลส์ ใน 1 รอบ จะมี 36 เฟือง เมื่อหมุนครบ 1 รอบจะเกิดพัลส์ 36 พัลส์ และนำค่าที่ได้มาเข้าไปทาง input ของ control board และนำไปเขียนโปรแกรมต่อไป
ภาพนี้แสดง การใช้ใบพัดในการวัดความเร็วลม โดยผ่าน Optical Encoder แล้วนำสัญญาณพัลส์ input ไปยัง control board
ภาพนี้แสดง การต่อใบพัดให้เข้ากับเฟือง
__________________________________________________________
2.ส่วนประกอบของ control board
ส่วนประกอบของ Control Board
1. MCS-51 #AT89S8252 Microcontroller
2. Input 9-12V DC or AC Power Supply
3. 72IOZ80 EXP 34 PIN Interface
4. EXP 20 PIN Emulate (AT89C1051, AT89C2051, AT89C4051) Interface
5. Reset Switch
6. On-Board Download (ET-PSPI) Interface
7. IC #75176 for RS422 / RS485 Communication
8. RS422/RS485 Communication Interface
9. RTC #DS1307
10. RS232 Communication Interface
11. EEPROM #24XX
12. 4 Bit LCD (Character) Interface
13. 12 Bit 2 Channel Analog to Digital Interface
14. ADC #LTC1298
15. Status LED สีเขียวแสดงสถานะของการดาวน์โหลด และสีแดงแสดงสถานะของไฟเลี้ยงบอร์ด
ในส่วนของผังวงจร แสดงได้ดังนี้
___________________________________________________________
3.การเขียนโปรแกรมเพื่อให้หน้าจอ LCD แสดงผล
การเขียนโปรแกรมเพื่อให้หน้าจอ LCD แสดงผล
- โปรแกรมที่ใช้คือ C51 v808a ของ KEIL uvision3
- เมื่อ เขียนโปรแกรมเสร็จแล้ว นำไป สร้างเป็น HEX.file
- แล้วนำไปโหลดลงตัว AT 89S8252(Control Board)
__________________________________________________
4.การเขียนคำสั่งในภาษาC
- เขียนโปรแกรมให้จอ LCD แสดงผล เป็นตัวอักษรที่อยู่กับที่
#include
void lcd_command(unsigned char com);
void lcd_text(unsigned char text);
void delay_lcd(unsigned int time);
void lcd_init(void);
void clrs(void);
sbit e = P1^2;
sbit rs = P1^3;
void main(void)
{delay_lcd(500);
lcd_init();
lcd_text('S');
lcd_text('A');
lcd_text('M');
lcd_text('R');
lcd_text('A');
lcd_text('E');
lcd_text('N');
lcd_text('G');
lcd_text(' ');
lcd_text(' ');
lcd_text('T');
lcd_text('E');
lcd_text('M');
lcd_text('R');
lcd_text('A');
lcd_text('M');
while(1)
{
}
}
void lcd_command(unsigned char com)
{
unsigned char buff;
buff = com & 0xf0;
rs = 0;
e = 1;
P1 = (P1 & 0x0f)buff;
delay_lcd(1);
e = 0;
delay_lcd(1);
buff = (com & 0xff)<<4;
rs = 0;
e = 1;
P1 = (P1 & 0x0f)buff;
delay_lcd(1);
e = 0;
delay_lcd(1);
}
void lcd_text(unsigned char text)
{
unsigned char buff;
buff = text & 0xf0;
rs = 1;
e = 1;
P1 = (P1 & 0x0f)buff;
delay_lcd(1);
e = 0;
delay_lcd(1);
buff = (text & 0x0f)<<4;
rs = 1;
e = 1;
P1 = (P1 & 0x0f)buff;
delay_lcd(1);
e = 0;
delay_lcd(1);
}void lcd_init()
{
delay_lcd(50);
lcd_command(0x33);
delay_lcd(50);
lcd_command(0x32);
delay_lcd(50);
lcd_command(0x28);
delay_lcd(50);
lcd_command(0x0C);
}
void delay_lcd(unsigned int time)
{
unsigned int x;
for(x=0;x < time;x++);
}
- เขียนโปรแกรมให้จอ LCD แสดงผล เป็นการแสดงผลการเปลี่ยนไปของตัวเลข 0001-1500 วน loop ไปเรื่อยๆ
#include
sbit e = P1^2;
sbit rs = P1^3;
unsigned int value;
code unsigned char number[]={'0','1','2','3','4','5','6','7','8','9'};
void lcd_command(unsigned char com);
void lcd_text(unsigned char text);
void delay_lcd(unsigned int time);
void lcd_init(void);
void lcd_clr(void);
void clrs(void);
void get_bcd(unsigned int k);
unsigned char a,b,c,d;
void main(void)
{
delay_lcd(500);
lcd_init();
lcd_text('S');
lcd_text('A');
lcd_text('M');
lcd_text('R');
lcd_text('A');
lcd_text('E');
lcd_text('N');
lcd_text('G');
delay_lcd(5000);
lcd_clr();
lcd_command(0x80);
delay_lcd(50);
value=0;
while(1)
{
while(value<=1500)
{
get_bcd(value);
lcd_command(0x80);
delay_lcd(50);
lcd_text(number[a]);
lcd_text(number[b]);
lcd_text(number[c]);
lcd_text(number[d]);
delay_lcd(5000);
++value;
}
value=0;
}
}
void lcd_command(unsigned char com)
{
unsigned char buff;
buff = com & 0xf0;
rs = 0;
e = 1;
P1 = (P1 & 0x0f)buff;
delay_lcd(1);
e = 0;
delay_lcd(1);
buff = (com & 0xff)<<4;
rs = 0;
e = 1;
P1 = (P1 & 0x0f)buff;
delay_lcd(1);
e = 0;
delay_lcd(1);
}
void lcd_text(unsigned char text)
{
unsigned char buff;
buff = text & 0xf0;
rs = 1;
e = 1;
P1 = (P1 & 0x0f)buff;
delay_lcd(1);
e = 0;
delay_lcd(1);
buff = (text & 0x0f)<<4;
rs = 1;
e = 1;
P1 = (P1 & 0x0f)buff;
delay_lcd(1);
e = 0;
delay_lcd(1);
}void lcd_init()
{
delay_lcd(50);
lcd_command(0x33);
delay_lcd(50);
lcd_command(0x32);
delay_lcd(50);
lcd_command(0x28);
delay_lcd(50);
lcd_command(0x0C);
}
void delay_lcd(unsigned int time)
{
unsigned int x;
for(x=0;x < time;x++);
}
void lcd_clr(void)
{
lcd_command(0x01);
delay_lcd(50);
}
void get_bcd(unsigned int k)
{a=b=c=d=0;
a=k/1000;
k%=1000;
b=k/100;
k%=100;
c=k/10;
k%=10;
d=k;
}
____________________________________________________
ไม่มีความคิดเห็น:
แสดงความคิดเห็น