เขียนโปรแกรม VB6 Interface AVR ATMEGA16

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

สำหรับการทดลองนี้ผมยังคงใช้ ATMEGA16 คู่กับ CodeVisionAVR อีกตามเคยสำหรับวงจรก็ตามรูปที่ 1 เลยครับ จะใช้วิธีต่อลงแผ่นปริ๊นอเนกประสงค์เอาหรือทำ PCB ก็แล้วแต่สะดวกเลยครับ และ Tool ที่ใช้ในการเขียนโปรแกรมผมใช้ Visual Basic V6 ครับ สำหรับการทดลองนี้ผมก็ได้ CodeWizardAVR มาช่วยจัดการ initial ค่าต่างๆ ทำให้เขียนโปรแกรมได้ง่ายขึ้น

null

รูปที่ 1 วงจรที่ใช้ในการทดลอง

ในการทดลองนี้ผมจะให้ไมโครคอนโทรลเลอร์รับค่ามาจากคอมพิวเตอร์แล้วแสดงผลที่ 7 Segment , LED และควบคุม Relay ผมออกแบบให้มี SW1-SW4 รับค่าจากการกดไปแสดงที่คอมพิวเตอร์ได้ในส่วนของโปรแกรม VBจะมีส่วน GUI ที่เป็น Input และ Output ส่วนที่เป็น Input ได้แก่

  • TxtValue.text – TextBox ไว้รับข้อมูลจาก User ไปแสดงผลที่ 7Segment
  • Command1 – CommandButton ใช้กดส่งข้อมูลจาก TxtValue.text ออกไปยัง Serial Port
  • Command2….Command5 – CommandButton ใช้กดส่งข้อมูลปิด/เปิด LED
  • Command6….Command7 – CommandButton ใช้กดส่งข้อมูลปิด/เปิด Relay

ส่วนที่เป็น Output

  • Shape1…..Shape4 – Shape จะติดสว่างเมื่อกดสวิตช

หลักการมีอยู่ว่าผมตั้ง Timer3 ไว้ให้ทำงานวนลูปไปถามไมโครคอนโทรลเลอร์ว่ามีการกดสวิตช์หรือไม่ หลังจากที่ไมโครคอนโทรลเลอร์ได้ค่า Command ที่ถูกส่งมาจาก RS232 แล้วก็จะส่งสถานะของสวิตช์กลับไป โดย Timer3 กำหนดให้มี Interval = 150mS โปรแกรมจะรับส่งข้อมูลอยู่ตลอดเวลาเสมือนว่า Real-Time สำหรับ Command ที่ใช้ส่งไปยัง ATMEGA16 เป็น Command ที่ตั้งขึ้นมาเองง่ายๆเป็น ASCII Code

MSComm1.Output = “:RD03″ + vbCrLf

ในฝั่งของไมโครคอนโทรลเลอร์จะตอบกลับไปด้วย Command ตัวเลขสีแดง “1101″ ที่ต่อท้ายจาก RD03 หมายถึงค่าที่อ่านได้จากสวิตช์ทั้ง 4 ตัว

“;RD031101” + CrLf

ในการทำงาน Timer3 จะวนอ่านข้อมูลไป แต่เมื่อมีการกดปุ่ม Edit (Command1) จะส่งตัวเลขใน TxtValue.text ไปยัง ATMEGA16

MSComm1.Output = “:WR01″ + TxtValue.Text + vbCrLf

เมื่อมีการกดปุ่ม Command2 หรือ Command5 (CommandButton) จะ ส่งข้อมูลปิด/เปิด LED ไปยัง ATMEGA16

เมื่อมีการกดปุ่ม Command6 หรือ Command4 (CommandButton) จะ ส่งข้อมูลปิด/เปิด RELAY ไปยัง ATMEGA16

Private Sub LEDcmd()
Dim buff As Integer
If RELAY Then buff = 1
If LED1 Then buff = buff + 2
If LED2 Then buff = buff + 4MSComm1.Output = “:WR02″ + CStr(buff) + vbCrLf
End Sub

ทำการทดลอง

ต่อสาย RS232 จากบอร์ดไปยังคอมพิวเตอร์ เปิดโปรแกรม ตั้งค่าการสื่อสารดังรูป

กด CommPort —> Port Open เริ่มต้นการสื่อสาร

เริ่มทำการทดลองโดยการใส่ตัวเลข “+0089″ แล้วกดปุ่ม Edit จะเห็นที่ 7 Segment แสดงผล 89 ทำการทดลอง LED ต่อ กดปุ่ม LEDx ON/OFF ทำการตอบสนองถูกต้อง กดปุ่ม Relay3 ON/OFF ทำการตอบสนองถูกต้อง อันสุดท้ายทำการกดปุ่ม SW1 และ SW4 ที่หน้าจอ VB Shape1 และ Shape4 จะเปลี่ยนเป็นสีเขียว เมื่อปล่อยมือจะกลับเป็นสีแดง

สำหรับ Code ของ Visual Basic ที่ใช้ในการทดลองนี้ผมดัดแปลงมาจาก Sample ที่อยู่ใน MSDN ส่วน Code ที่ผมแก้ใหม่ ใช้ในการทดลองสามารถดาวน์โหลดได้ข้างล่างนี้ี่ครับ

Download

Visual Basic6 Code Mscomm.zip

CodeVisionAVR Code Code_cvavr_232.zip

หากมีข้อสงสัย Comment ได้เลยนะครับ

บทความอื่นๆที่เกี่ยวข้อง

3 thoughts on “เขียนโปรแกรม VB6 Interface AVR ATMEGA16

  1. สวัสดีครับ

    ขอโทษครับ
    ผ่าน RS232 port
    คือว่า ผมอยากได้ วงจร และ code ที่เป็น I/O 8 ช่อง

    รบกวนด้วยครับ

    ด้วยความนับถือ
    ขอบคุณครับ

Leave a Reply