Member Login
 สมัครสมาชิกที่นี่
 เข้าระบบ:
ลืมรหัสผ่าน?
สถิติสมาชิก:
Total:16,618
Latest:
anuchakaewhin
Onlines:
บุคคลทั่วไป:30 

Category

การ SIMULATE วงจรไมโครคอนโทรลเลอร์ด้วยโปรแกรม Proteus

All Articles >> Circuit Designed >> - การ SIMULATE วงจรไมโครคอนโทรลเลอร์ด้วยโปรแกรม Proteus



บทความ การ SIMULATE วงจรไมโครคอนโทรลเลอร์ด้วยโปรแกรม Proteus



เริ่มต้นโดยการเปิดโปรแกรม Proteus ขึ้นมา

จะปรากฏดังภาพด้านล่าง ในไดอะล็อกบล็อก View Sample Designs ให้คลิก No


ก่อนที่เราจะทำการ simulate ได้นั้นเราต้องทำการวาดวงจรขึ้นมาก่อน เรามาเริ่มต้นวาดวงจรไมโครคอนโทรลเลอร์กันเลยนะ วงจรพื้นฐานที่นิยมกันมากที่สุดสำหรับการทดลองไมโครคอนโทรลเลอร์ก็คือ วงจรไฟวิ่ง มาเริ่มวาดกันเลยนะ

1. คลิกที่ปุ่ม component หมายเลข 1
2. คลิกที่ปุ่ม Pick Devices หมายเลข 2 จะปรากฏไดอะล็อกบล็อก Pick Devices ขึ้นมา
3. พิมพ์ชื่อ AT89C51 ในช่อง Keywords: หมายเลข 3


4. เลือก Devices AT89C51 คลิก OK จากนั้นคลิกซ้ายบริเวณพื้นที่ของการทำงานเราก็จะได้ AT89C51 เข้ามาอยู่ในพื้นที่ทำงาน ที่เราต้องการวาดวงจรดังภาพด้านล่าง
ถ้าเราต้องการขยับหรือเคลื่อนย้ายตัวอุปกรณ์ไปยังตำแหน่งที่เราต้องการให้คลิกขวาที่ตัวอุปกรณ์ที่เราต้องการขยับ ตัวอุปกรณ์ก็จะเปลี่ยนเป็นสีแดงจากนั้นคลิกซ้ายค้างที่ตัวอุปกรณ์และขยับไปยังตำแหน่งที่เราต้องการ เมื่อได้ตำแหน่งที่เราต้องการแล้วให้คลิกขวาบริเวณพื้นที่ว่าง สีแดงที่ตัวอุปกรณ์ก็จะหายไป หากต้องการลบตัวอุปกรณ์ให้คลิกขวาที่ตัวอุปกรณ์ที่เราต้องการลบ สีของตัวอุปกรณ์ก็จะเปลี่ยนเป็นสีแดง จากนั้นให้คลิกขวาที่ตัวอุปกรณ์อีกครั้งหนึ่งตัวอุปกรณ์ตัวนั้นก็จะหายไป



ต่อไปให้นำอุปกรณ์เบอร์ 74HC573 เข้ามาวางในพื้นที่ของการทำงาน โดยทำตามขั้นตอนที่ 1-4




ต่อไปให้เรานำอุปกรณ์ทุกตัวเข้ามาวางในพื้นที่ของการทำงานให้ครบทุกตัวโดยทำตามขั้นตอนที่ 1-4 อุปกรณ์ที่เราจะนำเข้ามาในวงจรตัวต่อไปได้แก่ Resistors Pack ให้เลือกแบบ RESPACK-8


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



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


ต่อไปเราจะนำ Resistor เข้ามาวางในวงจรของเราให้เลือกค่าตามหมายเลข 1-5 ดังภาพด้านล่าง แล้วนำอุปกรณ์เข้าไปวางในวงจร



ให้คลิกที่ และคลิกที่ตัวอุปกรณ์ Resistor จะปรากฏไดอะล็อกบล็อก Edit Component ขึ้นมา ในช่อง Resistance ให้ใส่ค่าความต้านทานเท่ากับ 220


ต่อไปให้นำ LED - RED มาวางในวงจร หรือ หากท่านผู้อ่านต้องการใช้สีอื่นที่มีมาให้ในโปรแกรม Proteus ก็สามารถเลือกใช้ได้


ต่อไปเราจะนำ POWER และ GND เข้ามาวางในวงจรดังวิธีต่อไปนี้
1. คลิกที่
2. เลือก POWER และ GND เข้ามาวางในวงจรตามลำดับ


ในการ SIMULATE วงจรเราไม่ต้องใส่วงจร Crystal ในวงจรก็ได้เพราะเราสามารถใส่ค่า Clock FreQuency ที่ตัวอุปกรณ์ของไมโครคอนโทรลเลอร์ได้เลยเพื่อความรวดเร็ว ตอนนี้เราก็ได้อุปกรณ์ครบทุกตัวแล้ว ต่อมาเราจะมาทำการลากเส้นสัญญาณเพื่อให้อุปกรณ์เชื่อมถึงกัน โดยคลิกที่ แล้วนำเมาส์ไปคลิกซ้ายที่ขาอุปกรณ์ที่เราต้องการให้เชื่อมถึงกันเป็นจุดเริ่มต้นแล้วลากไปที่ขาอุปกรณ์ตัวที่เป็นจุดสิ้นสุดและคลิกซ้ายเราก็จะได้เส้นสัญญาณที่เชื่อมต่อถึงกัน



ตอนนี้เราวาดวงจรเสร็จเรียบร้อยแล้วแต่ยังไม่สมบรูณ์แบบ เนื่องจากว่าหลักสำคัญของการทำงานของไมโครคอนโทรลเลอร์จะต้องมีการโปรแกรม การเขียน Code โปรแกรมการทำงานของไมโครคอนโทรลเลอร์สามารถเขียนได้หลายวิธี แต่ในที่นี้ผู้เขียนจะไม่กล่าวถึงหลักการเขียนโปรแกรมจะขอหยิบยกตัวอย่างของโปรแกรมมาให้ได้ใช้งานกันเลย และในบทความนี้ผู้เขียนจะกล่าวถึงวิธีการใช้โปรแกรม Keil uVision3 ในการสร้างไฟล์ HEX File เพื่อนำไปโปรแกรมให้กับ CPU

เมื่อเราเปิดโปรแกรม Keil uVision3 ขึ้นมาก็จะได้หน้าต่างของโปรแกรมเป็นดังภาพด้านล่างนี้


ต่อไปเราจะสร้าง Project ขึ้นมาสำหรับการเขียน Code โปรแกรมโดยเลือกที่ Project>>New Project

ให้เราตั้งชื่อ Project ในช่อง File name จากนั้นเลือกที่สำหรับจัดเก็บ Project และทำการ SAVE เป็น .uv2 จากนั้นจะปรากฏไดอะล็อกบล็อก Select Device for Target เพื่อให้เราเลือก CPU ในช่อง Data base ให้เลือก Atmel และเลือกเบอร์ AT89C51 จะเห็นว่าในช่อง Description จะแสดงรายละเอียดคุณสมบัติของตัว CPU ที่เราเลือก จากนั้นคลิก OK




จะปรากฏไดอะล็อกบล็อกถามว่าจะให้คัดลอก 8051 startup code รวมเข้ากับ Project หรือไม่ หน้าที่ของไฟล์นี้คือ เคลียร์หน่วยความจำต่าง ๆ
และตั้งค่าเริ่มต้นให้กับฮาร์ดแวร์เพื่อป้องกันความผิดพลาดที่อาจจะเกิดขึ้นได้จากข้อมูลที่ค้างใน CPU
ให้คลิก YES


ที่ช่อง Project Workspace ก็จะปรากฏไฟล์ STARTUP.A51 ขึ้นมาให้ จากนั้นให้เลือกที่ File>>New เราจะได้พื้นที่สำหรับการเขียน Codeโปรแกรมขึ้นมา สำหรับในบทความนี้ผู้เขียนขอหยิบยกตัวอย่างของโปรแกรมมาให้ผู้อ่านได้นำไปใช้เพื่อเป็นตัวอย่างได้เลย




หลังจากที่เราเขียนโปรแกรมเสร็จเรียบร้อยแล้วให้เรา SAVE เป็น .C และคลิกขวาที่ Target 1 เลือก Options for Target ‘Target 1’
จะปรากฏไดอะล็อกบล็อก Options for Target ‘Target 1’ คลิกที่แท็บ Target ให้ใส่ค่าความถี่คริสตอลที่ต้องการใช้ และ เช็คบล็อกในช่อง Use on-chip ROM (0x0-0xFFF) เพื่อใช้ ROM ภายใน



ต่อไปให้คลิกที่แท็บ Output เช็คบล็อกที่ช่อง Create HEX File เพื่อสร้าง HEX File คลิก OK



ต่อไปให้คลิกขวาที่ Source Group 1 เลือกที่ Add Files to Group ‘Source Group 1’


เลือกไฟล์.C ที่เรา SAVE ไว้ แล้วคลิก Add เราก็จะได้ไฟล์.C เพิ่มเข้ามาให้สังเกตดูที่ช่อง Project Workspace ต่อไปให้เราคลิก Close เพื่อปิดหน้าต่างนี้ไป



เราสามารถที่จะสร้าง Hex File ได้นั้นเราจะต้องมีไฟล์ STARTUP และไฟล์.C ถ้าหากกรณีที่เรายังไม่มีไฟล์ STARTUP เราสามารถที่จะ Add เพิ่มได้ ที่ไดอะล็อกบล็อก Add Files to Group ‘Source Group 1’ ที่ช่อง Look in: ให้เราเข้าไปเลือกที่ Keil>>C51>>Lib เลือก STARTUP.A51 คลิก Add ก็จะได้ไฟล์ STARTUP.A51 เข้ามา



ตอนนี้เราก็พร้อมที่จะสร้าง HEX File แล้ว ให้เราคลิกที่ Build Target ที่ช่อง Output Windows จะแสดงผลการคอมไฟล์ว่า

มีความผิดพลาดหรือไม่ ถ้าไม่มีความผิดพลาดเกิดขึ้น โปรแกรมก็จะสร้าง HEX file ที่เป็นชื่อเดียวกับ Project มีนามสกุลเป็น .HEX ขึ้นมาเก็บไว้ในที่ที่เรา SAVE Project นี้ เราก็สามารถนำ HEX file ไปใช้งานได้เลย




ต่อไปเราจะนำ HEX file ไปใช้กับโปแกรม Proteus เพื่อแสดงผลการทำงานของ CPU ให้เรากลับมาที่โปแกรม Proteus ที่เราสร้างวงจรของเราไว้ตั้งแต่ต้น คลิกที่ และคลิกซ้ายที่ตัว CPU AT89C51 จะปรากฏไดอะล็อกบล็อก Edit Component ขึ้นมา

ที่ช่อง Program File ให้คลิกที่ เพื่อเลือก HEX file ที่เราได้สร้างขึ้นมา และที่ช่อง Clock Frequency ให้เราใส่ค่าความถี่ที่เราใช้ ความถี่นี้ต้องเท่ากับความถี่ที่เรากำหนดไว้ในการเขียน Code โปรแกรม เสร็จแล้วคลิก OK
ต่อไปให้เราทดลอง RUN เพื่อดูผลการทำงานของ CPU





ผลที่ได้คือเราจะได้วงจรไฟวิ่ง LED จะติดวนจาก D1-D8 วนไปเรื่อยๆ จนกว่าเราจะหยุดการทำงาน

ถ้าหากว่าได้ทดลอง RUN แล้วผลการ RUN ไม่ได้ตามนี้ โดยที่ LED อาจจะติดและค้างอยู่ที่ดวงแรก หรือ ไฟติดแต่วิงเร็วเกินไปให้ทดลองเปลี่ยนค่า delay การหน่วงเวลา ในการเขียน Code ของโปรแกรม