Post on 27-Jan-2021
By Panyayot Chaikan Page 1 of 13 Lab3_HW_2_2553
Lab 1 : การใชงานภาษาแอสเซมบลีก้ับซีพียู AVR 1.1 แนะนําซีพียู AVR
ไมโครคอนโทรลเลอร เปนหนวยประมวลผลขนาดเล็ก ซ่ึงรวมเอาความสามารถของไมโครโพรเซสเซอรกับอุปกรณเชือ่มตอภายนอก เชนหนวยความจํา อุปกรณอินพุตเอาตพุต วงจรกําเนิดสัญญาณนาฬิกา เขามารวมอยูภายในไอซีชิพเพียงตัวเดยีว สงผลใหระบบควบคุมซึ่งใชไมโครคอนโทรลเลอรเปนหนวยประมวลผลมีขนาดของวงจรควบคมุเล็กและสะดวกตอการใชงาน แมวาระบบไมโครคอนโทรลเลอรจะมีหลายๆ อุปกรณอยูภายในไอซีชิพตัวเดยีว แตก็มีความสามารถจาํกัด เมื่อเทียบกับระบบซึ่งใชไมโครโพรเซสเซอร ยกตัวอยางเชน หนวยความจํา จะมใีหใชเพียงไมมากนกั ดังนัน้ระบบไมโครคอนโทรลเลอรจะเหมาะสมสาํหรับการควบคุมงานที่ไมซับซอนและตองการความสามารถในการประมวลผลที่ไมสูงมากนกั ยกตัวอยางเชนในระบบ Embedded system หรือระบบสมองกลฝงตัว เชนเครื่องซักผา เตาอบไมโครเวฟ เครื่องปรับอากาศ เปนตน สถาปตยกรรมของไมโครคอนโทรลเลอรที่ใชงานอยูในปจจุบันมใีหเลือกใชงานมากมายหลายตวั ยกตวัอยางเชน
- MCS-51 (8-bit) ออกแบบโดย intel - MCS-96 (16-bit) ออกแบบโดย intel - PIC ออกแบบโดย Microchip Technology - AVR ออกแบบโดย Atmel - ARM ออกแบบโดย ARM Holdings - 68HC11 ออกแบบโดย Motorola - Rabbit 2000 ออกแบบโดย Rabbit Semiconductor
ในอดีต ไมโครคอนโทรลเลอรที่นิยมใชงานกันคือตระกูล MCS-51 แตในปจจุบนัความตองการความสามารถในการประมวลผลมีเพิ่มขึ้น ทําใหมีสถาปตยกรรมอื่นๆ ที่มีประสิทธิภาพสูงกวาเริ่มไดรับความนิยมในการใชงานขึ้นมาแทนในแลบนี้จะสอนใหนักศึกษาไดเรียนรูสถาปตยกรรม AVR เนื่องจากมีประสิทธิภาพที่สูง และมรีาคาถูกกวาสถาปตยกรรมอื่นในราคาที่ใกลเคียงกัน นอกจากนี้ยังมขีอดีคือมี ฟรีแวรหลายตวัใหใชงานสําหรับพัฒนาระบบไดทั้งภาษาระดับต่ําคือภาษาแอสเซมบลี้และภาษาระดบัสูงเชน ภาษาซี เปนตน
By Panyayot Chaikan Page 2 of 13 Lab3_HW_2_2553 สถาปตยกรรมของ AVR แบงออกเปน 2 ตระกูลคือ
- 8-bit AVR - 32-bit AVR ในแลบนีจ้ะกลาวถึงสถาปตยกรรมของ AVR ขนาด 8 บิตเทานั้น โดยในสถาปตยกรรม AVR
ออกแบบโดย ATMEL เมื่อป 1996 เปนซีพียูแบบ RISC (Reduced Instruction Set Computer) มีสถาปตยกรรมการตอหนวยความจําแบบ Harvard ซ่ึงแยกหนวยความจําโปรแกรมและหนวยความจําขอมูลออกจากกนัโดยเด็ดขาด ดังแสดงในรูปที ่ 1.1 โดยใชหนวยความจําแบบ Flash สําหรับเปนหนวยความจําโปรแกรม และใชหนวยความจําแบบ SRAM สําหรับหนวยความจําขอมูล และนอกจากนี้ยังมหีนวยความจําแบบ EEPROM ซ่ึงสามารถเก็บขอมูลเอาไวไดโดยไมจําเปนตองมีไฟเลีย้งอีกดวย
รูปที่ 1.1 เปรียบเทียบการจดัการหนวยความจําของสถาปตยกรรมแบบ Von-Neumann และ Harvard จากรูปที่ 1.1 จะเห็นวาโพรเซสเซอรที่ใชสถาปตยกรรมแบบ Harvard จะแยกหนวยความจําสําหรับ
เก็บขอมูลออกจากโปรแกรมอยางชัดเจน สถาปตยกรรม AVR และ MCS-51 จะใชรูปแบบนี้ในการจัดการหนวยความจํา สวนสถาปตยกรรมแบบ Von-neumann การตัดสินใจวาจะเก็บโปรแกรมหรือขอมูลจะแบงเก็บอยางไรจะทําไดอยางอิสระ โดยขึน้อยูกับโปรแกรมเมอร หรืออาจจะเปนระบบปฏิบัติการเปนผูดําเนินการให
ลักษณะเดนของสถาปตยกรรม AVR คือ คําสั่งสวนใหญสามารถทํางานไดเสร็จภายใน 1 clock cycle ตัวซีพียู AVR ขนาด 8 บิตจะแบงออกเปนประเภทการใชงานได 5 กลุม ไดแก
- tinyAVR เปนซีพียูในรุนเล็ก ซ่ึงตองการความเล็กกะทัดรัดของวงจร โดยเหมาะกับระบบควบคุมขนาดเล็กๆ ที่ตองการหนวยความจําและวงจรสนับสนุนไมมากนัก ซีพียใูนรุนนี้จะมีราคาถูกกวากลุมอื่น
- megaAVR จะมีช่ืออีกอยางวา ATmega โดยมีวงจรสนับสนุนภายในเพิม่เติมตลอดจนเพิ่มขนาดของหนวยความจําใหใชงานมากกวาตระกลู Tiny เหมาะกับงานควบคมุทั่วๆ ไป
By Panyayot Chaikan Page 3 of 13 Lab3_HW_2_2553
- XMEGA เพิ่มความละเอียดของวงจร A/D จากปกติมีความละเอียด 10 บิตในรุนเล็กกวาเปน 12 บิต และวงจร DMA controller ซ่ึงชวยลดภาระของซีพียูในการควบคุมการรับสงขอมูลระหวางอุปกรณ I/O กบัหนวยความจํา
- FPSLIC (AVR core with FPGA) สําหรับงานที่ตองการควบคุมทีต่องการความยืดหยุนในขั้นตอนการออกแบบและพฒันา โดยผูออกแบบสามารถออกแบบวงจรในระดับฮารดแวรเพิ่ม เติมดวยภาษาบรรยายฮารดแวร (HDL: Hardware Description Language) เชน ภาษา VHDL หรือภาษา Verilog และใหวงจรที่ออกแบบทํางานรวมกับซีพียู AVR core
- Application Specific AVR เปนซีพียูที่ออกแบบมาโดยเพิม่วงจรควบคุมเฉพาะดานเขาไปซึ่งไมพบในซีพียกูลุมอื่นๆ เชนวงจร USB controller หรือวงจร CAN bus เปนตน
ซีพียู AVR มีใหเลือกใชงานหลายเบอร แตละเบอรจะมีขนาด ราคา ความสามารถ และขนาด
หนวยความจําตลอดจนถึงวงจรสนับสนุนภายในทีแ่ตกตางกันออกไป ในหวัขอแลบ ป 3 เทอม 2 นี้ จะเลือกใชซีพียูรุน ATmega328P ใหนกัศึกษาใชเปนหลัก ซ่ึงมีคุณสมบตัิดังนี ้
- หนวยความจําโปรแกรมแบบ FLASH ขนาด 32 กิโลไบต - หนวยความจําขอมูลแบบ SRAM ขนาด 2 กิโลไบต - หนวยความจําขอมูลแบบ EEPROM ขนาด 1 กิโลไบต - สนับสนุนการเชื่อมตอแบบ I2C bus - พอรตอินพุตเอาตพุตจํานวน 23 บิต - วงจรสื่อสารอนุกรม - วงจรนับ/จับเวลาขนาด 8 บิต จํานวน 2 ตัว และขนาด 16 บิตจํานวน 1 ตัว - สนับสนุนชองสัญญาณสําหรับสราง Pulse Width Modulation (PWM) จํานวน 6 ชองสัญญาณ - วงจรแปลงอนาลอกเปนดิจิตอลขนาด 10 บิตในตวัจํานวน 8 ชอง - ทํางานไดตั้งแตยานแรงดัน 1.8-5.5 Volts - ความถี่ใชงานสูงสุด 20 MHz
รูปที่ 1.2 ซีพียู ATMEGA328P แบบตัวถัง PDIP ขนาด 28 ขา
By Panyayot Chaikan Page 4 of 13 Lab3_HW_2_2553
รูปที่ 1.3 โครงสรางภาษาแอสเซมบลี้ของสถาปตยกรรม AVR 1.2 แนะนําภาษาแอสเซมบลี้ของ AVR
โครงสรางภาษาแอสเซมบลี้ของ AVR แสดงใหเห็นดังรูปที่ 1.1 ซ่ึงจะเห็นวามีความแตกตางจากภาษาแอสเซมบลี้ของสถาปตยกรรมอื่นๆ ไมมากนัก ในการเขียนโปรแกรมภาษาแอสเซมบลี้ เราจะตองทําการใชชุดคําสั่งของซีพียูในการเขาถึงหนวยความจําและขอมูลในรีจิสเตอรโดยตรง สงผลใหภาษาแอสเซมบลี้มีความยุงยากในการใชงานมากกวาระดับสงูทั่วไป อยางไรก็ดีภาษาแอสเซมบลี้มีขอดีกวาภาษาอื่นตรงที่ขนาดของโปรแกรมมีขนาดเล็กมาก และมีความเร็วในการทํางานที่สูงกวาภาษาอื่นๆ การเรียนรูภาษาแอสซมบลี้ ชวยใหนกัศึกษาสามารถเขาใจการทํางานภายในของไมโครโพรเซสเซอรไดเปนอยางดี การเขาใจภาษาแอสเซมบลี้จะชวยใหนกัศึกษาสามารถที่จะดีบกั (Debug) เพือ่ทําการตรวจสอบการทํางานของโปรแกรมในกรณีที่โปรแกรมที่เขียนขึ้นดวยภาษาระดับสูงมปีญหาได สําหรับรายละเอยีดเชิงลึกในการเขียนโปรแกรมภาษาแอสเซมบลี้ ขอใหนกัศึกษาไดศึกษาจากเอกสาร AVR Assembler User Guide ในเอกสารแลบนี้จะทําการยกตวัอยางการเขียนภาษาแอสเซมบลี้อยางงายเพื่อเปนพืน้ฐานในการนาํซีพียูไปประยกุตใชงานระดบัสงูขึ้นในโอกาสตอไป
การเขียนโปรแกรมภาษาแอสเซมบลี้ จะตองทําการเขาถึงรีจิสเตอรของซีพียูโดยตรง ซีพียู AVR มีรีจิสเตอรใชงานทั่วไปจํานวน 32 ตัวคือ R0-R31 ในการเขียนโปรแกรม แนะนําใหนกัศึกษาใชงานรีจิสเตอรตั้งแต R16 เปนตนไป นอกจากนี้ รีจิสเตอร R26-R31 ยังสามารถนํามาทําเปนรีจิสเตอรขนาด 16 บิต ไดจํานวน 3 ตัวคือ รีจิสเตอร X, Y และ Z รูปที่ 1.4 และ 1.5 แสดงชุดคําสัง่ของสถาปตยกรรม AVR
สวน Data Segment ซึ่งเก็บอยูใน SRAM
สวน Data Segment ซึ่งเก็บอยูใน EEPROM
สวน Code Segment ซึ่งเก็บอยูใน Flash memory
label
สวนอธิบาย (Comment) จะอยูหลังเครื่องหมาย semicollon
By Panyayot Chaikan Page 5 of 13 Lab3_HW_2_2553
รูปที่ 1.4 ชุดคําสั่งของ AVR
By Panyayot Chaikan Page 6 of 13 Lab3_HW_2_2553
รูปที่ 1.5 ชุดคําสั่งของ AVR (ตอ)
By Panyayot Chaikan Page 7 of 13 Lab3_HW_2_2553 1.3 แนะนําซอฟตแวร AVRStudio
โปรแกรม AVRStudio เปนซอฟตแวรทีพ่ัฒนาโดย ATMEL ซ่ึงแจกจายใหใชงานไดฟรี ซ่ึงใชเปนสภาพแวดลอมในการพฒันาโปรแกรมดวยภาษาแอสเซมบลี้หรือภาษาซีก็ได ในแลบนี้จะยกตัวอยางการใชซอฟตแวร AVRStudio ในการพัฒนาโปรแกรมภาษาแอสเซมบลี้ เรียกใชงานโปรแกรมจาก Start menu->All Programs->ATmel AVR Tools->AVR Studio 4 โปรแกรมจะแสดงหนาตาง ดังรูป ใหเลือกกดปุม New Project เลือกสรางโปรเจกตดวยภาษาแอสเซมบลี้ ดังรูป โดยปอนชื่อโปรเจกตลงไป
By Panyayot Chaikan Page 8 of 13 Lab3_HW_2_2553 เลือกซีพียูรุน ATmega328P และสภาพแวดลอม AVR Simulator2 จากนั้นกดปุม Finish จะขึ้นสภาพแวดลอมการพฒันาโปรแกรมดังรูป
By Panyayot Chaikan Page 9 of 13 Lab3_HW_2_2553 1.4 แนะนําซอฟตแวรชุด Proteus
เปนซอฟตแวรสําหรับจําลองการทํางานของวงจรไฟฟา ซ่ึงสามารถจําลองการทํางานของวงจรไดตั้งแตวงจรอนาลอก วงจรดจิิตอลตลอดจนถึงไมโครโพรเซสเซอรและไมโครคอนโทรลเลอร โดยผูทดลองสามารถนําไฟลนามสกุล .HEX ซ่ึงไดจากการแอสเซมเบลอรโปรแกรมที่เขียนขึ้นดวยภาษาแอสเซมบลี้มาทําการจําลองบนสภาพแวดลอมการเชื่อมตอไมโครคอนโทรลเลอรกับอุปกรณภายนอกเสมือนจรงิได ตัวชุดโปรแกรม Proteus ประกอบไปดวยซอฟตแวรยอยหลายตัว ในแลบนี้จะใชโปรแกรมยอยช่ือ ISIS ในการจําลองการทํางานของไมโครคอนโทรลเลอร AVR
รูปที่ 1.6 โปรแกรม ISIS 7.0 สําหรับจําลองการทํางานของไมโครคอนโทรลเลอร
1.5 การทดลอง 1.5.1 การออกแบบวงจรอานคาจากสวิทชและแสดงผลออกทาง 7-segment LED
ใหนกัศึกษาเปดโปรแกรม ISIS คลิกเลือก New Design เลือกขนาดของกระดาษเปน Landscape A4ทําการวาดวงจรเพื่อทําการอานคาจากสวิทชดังรูปที่ 1.7 กดปุม จากนั้นดับเบิลคลิกที่ เพื่อเลือกใชอุปกรณจากไลบรารีตอไปนี้
Category Sub-Category Device คําอธิบาย Microprocessor ICs AVR Family ATMEGA328P ไมโครคอนโทรลเลอร AVR Optoelectronics 7-Segment Displays 7-SEG-COM-CAT ชนิด Common Cathode Switches & Relays Switches DIPSW-4 Dip Switch 4 ตัวใน 1 package Resistors Generic RES ตัวตานทาน
ปุม Play เพื่อเริ่มการจําลองการทํางาน
By Panyayot Chaikan Page 10 of 13 Lab3_HW_2_2553
รูปที่ 1.7 วงจรอานคาจากสวทิชแสดงผลทาง 7-segment LED
รายการ ลายเซ็น วัน-เดือน-ป
#checkpoint1 วาดวงจรดังรูปที ่1.7 โดยใชโปรแกรม ISIS7.0 1.5.2 การเขียนโปรแกรมภาษาแอสเซมบลี้เพื่ออานคาจากสวิทชแสดงผลทาง 7-segment LED
เขียนโปรแกรมภาษาแอสเซมบลี้เพื่อใชควบคุมไมโครคอนโทรลเลอรของวงจรในรปูที่ 1.7 โดยตวัโปรแกรมแสดงใหเห็นในรปูที่ 1.8 การทํางานของตัวโปรแกรม จะทาํการอานคาจากดิปสวิทชขนาด 4 บิตเขามาทางพอรต C บิตที่ 0-3 และทําการแปลงคาไบนารีที่ได ซ่ึงมีคา 0-15 ไปแสดงผลทางแอลอีดี 7 เซกเมนต คา 0-F ใหนักศึกษาเขียนโปรแกรมภาษาแอสเซมบลี้ดวย AVR Studio จากนั้นใชคําสั่ง Build เพื่อแปลงภาษาแอสเซมบลี้ใหเปนภาษาเครื่องของ AVR ซ่ึงจะไดไฟลเอาตพุตนามสกุล .HEX
By Panyayot Chaikan Page 11 of 13 Lab3_HW_2_2553
รูปที่ 1.8 โปรแกรมภาษาแอสเซมบลี้สําหรับอานคาจากสวิทชแสดงผลทาง 7-segment LED
ในการใชซอฟตแวร ISIS ทําการจําลองการทํางานของโปรแกรมภาษาแอสเซมบลี้ที่เขียนขึ้นนั้นสามารถทําไดโดยคลิกขวาทีต่ัวไมโครคอนโทรลเลอร เลือก popup menu ช่ือ Edit Properties จะขึ้น ไดอะลอกบอกซดังรูปที่ 1.9 ซ่ึงผูทดลองตองระบุช่ือไฟลนามสกุล .HEX ที่ไมโครคอนโทรลเลอรจะตองโหลดขึ้นมาจําลองการทํางาน และใหส่ังทาํการดิสเอเบิลการรีเซ็ทซีพียูจากภายนอกดวย จากนัน้กดปุม เพื่อเร่ิมจําลองการทํางานของซีพียู
By Panyayot Chaikan Page 12 of 13 Lab3_HW_2_2553
รูปที่ 1.8 การเซ็ทคาควบคุมไมโครคอนโทรลเลอรในโปรแกรม ISIS
รายการ ลายเซ็น วัน-เดือน-ป #checkpoint2 ทดสอบจําลองการทํางานของโปรแกรมภาษาแอสเซมบลี้กับโปรแกรม ISIS7.0
1.5.3 โจทยปญหาการออกแบบวงจรและเขียนโปรแกรมภาษาแอสเซมบลี้
จงออกแบบวงจรไมโครคอนโทรลเลอร AVR สําหรับอานคาจากดิปสวทิช 4 ตัว และแสดงผลคาตัวเลขที่อานจากสวิทชออกสูแอลอีดี 7 เซกเมนต 2 หลัก โดยกําหนดใหคา 4 บิตที่อานจากสวิทชเปนตวัเลขจํานวนเต็มแบบมีเครื่องหมาย โดยการทํางานของโปรแกรมจะแสดงผลตามตารางที่ 1.1
ระบุช่ือไฟลนามสกุล .HEX
ดิสเอเบิลการรับสัญญาณรีเซ็ทจากภายนอก
เลือกวงจรกําเนิดสัญญาณนาฬิกาภายในซีพียู 8 MHz
By Panyayot Chaikan Page 13 of 13 Lab3_HW_2_2553
ตารางที่ 1.1 การแสดงผลของแอลอีดีเมื่อมอิีนพุตสภาวะตางๆ
อินพุตที่อานจากสวิทช คาที่แสดงผลบนแอลอีดี 7 เซกเมนตจํานวน 2 หลัก
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
รายการ ลายเซ็น วัน-เดือน-ป #checkpoint3 วงจรที่ออกแบบโดย ISIS7.0 #checkpoint4 ทดสอบโปรแกรมภาษาแอสเซมบลี้กับวงจรที่ออกแบบดวย โปรแกรม ISIS7.0
------------------------------