ผลต่างระหว่างรุ่นของ "กลไกบูทโหลดเดอร์และการโปรแกรมไมโครคอนโทรลเลอร์ผ่าน UART"
Chaiporn (คุย | มีส่วนร่วม) |
Chaiporn (คุย | มีส่วนร่วม) |
||
แถว 6: | แถว 6: | ||
* [http://www.atmel.com/Images/AVR109.zip ซอร์สโค้ดตัวอย่างตามเอกสาร AVR109] | * [http://www.atmel.com/Images/AVR109.zip ซอร์สโค้ดตัวอย่างตามเอกสาร AVR109] | ||
− | + | == ปรับแก้ไขโปรแกรมตัวอย่าง == | |
โปรแกรมจาก Atmel ต้องถูกแก้ไขให้สอดรับกับวงจรที่ออกแบบขึ้น รวมถึงแก้ไขโค้ดบางอย่างที่ให้โปรแกรมคอมไพล์ได้อย่างถูกต้องสำหรับชิป ATMega168 | โปรแกรมจาก Atmel ต้องถูกแก้ไขให้สอดรับกับวงจรที่ออกแบบขึ้น รวมถึงแก้ไขโค้ดบางอย่างที่ให้โปรแกรมคอมไพล์ได้อย่างถูกต้องสำหรับชิป ATMega168 | ||
+ | === ทำให้โค้ดคอมไพล์ได้ === | ||
ให้เปิดไฟล์ <tt>defines.h</tt> และแก้ไขบรรทัดที่นิยามมาโครเกี่ยวกับ UART ให้เป็นดังนี้ | ให้เปิดไฟล์ <tt>defines.h</tt> และแก้ไขบรรทัดที่นิยามมาโครเกี่ยวกับ UART ให้เป็นดังนี้ | ||
แถว 24: | แถว 25: | ||
#define EEMWE EEMPE | #define EEMWE EEMPE | ||
#define EEWE EEPE | #define EEWE EEPE | ||
+ | |||
+ | === ตรวจสอบขาอินพุทสำหรับควบคุมการเข้าบูทโหลดเดอร์ === | ||
+ | พิจารณามาโครที่ระบุเงื่อนไขการเข้าบูทโหลดเดอร์ในไฟล์ <tt>defines.h</tt> | ||
+ | |||
+ | #define PROGPORT PORTD | ||
+ | #define PROGPIN PIND | ||
+ | #define PROG_NO PD4 | ||
+ | |||
+ | แก้ไขนิยามให้สอดคล้องกับวงจรที่ออกแบบไว้ โดยเงื่อนไขการเข้าบูทโหลดเดอร์คือสวิตช์ USER ต้องถูกกดค้างเอาไว้หลังจากรีเซ็ท |
รุ่นแก้ไขเมื่อ 05:01, 20 กรกฎาคม 2559
ชิปไมโครคอนโทรลเลอร์ที่นำมาใช้นั้นต้องอาศัยการโปรแกรมผ่านเครื่องโปรแกรมชิป วิกินี้จะอธิบายถึงการเตรียมและบรรจุบูทโหลดเดอร์ลงไปในชิปเพื่อให้ตัวชิปสามารถโหลดโปรแกรมผ่านทางพอร์ทอนุกรมของคอมพิวเตอร์โดยไม่ต้องอาศัยเครื่องโปรแกรมชิปอีกต่อไป
เนื้อหา
บูทโหลดเดอร์สำหรับชิป AVR
ศึกษาเอกสารเกี่ยวกับ Self-Programming บนชิป AVR และดาวน์โหลดโปรแกรมตัวอย่างจากลิ้งค์ต่อไปนี้
ปรับแก้ไขโปรแกรมตัวอย่าง
โปรแกรมจาก Atmel ต้องถูกแก้ไขให้สอดรับกับวงจรที่ออกแบบขึ้น รวมถึงแก้ไขโค้ดบางอย่างที่ให้โปรแกรมคอมไพล์ได้อย่างถูกต้องสำหรับชิป ATMega168
ทำให้โค้ดคอมไพล์ได้
ให้เปิดไฟล์ defines.h และแก้ไขบรรทัดที่นิยามมาโครเกี่ยวกับ UART ให้เป็นดังนี้
#define BAUD_RATE_LOW_REG UBRR0 #define UART_CONTROL_REG UCSR0B #define ENABLE_TRANSMITTER_BIT TXEN0 #define ENABLE_RECEIVER_BIT RXEN0 #define UART_STATUS_REG UCSR0A #define TRANSMIT_COMPLETE_BIT TXC0 #define RECEIVE_COMPLETE_BIT RXC0 #define UART_DATA_REG UDR0
จากนั้นเพิ่มคำสั่งสองบรรทัดนี้เข้าไปที่ท้ายสุดของไฟล์ defines.h เนื่องจากชิป ATMega168 ใช้ชื่อบิตสำหรับควบคุมการเขียน EEPROM ที่แตกต่างไปจากชิปตระกูล AVR เบอร์อื่น ๆ
#define EEMWE EEMPE #define EEWE EEPE
ตรวจสอบขาอินพุทสำหรับควบคุมการเข้าบูทโหลดเดอร์
พิจารณามาโครที่ระบุเงื่อนไขการเข้าบูทโหลดเดอร์ในไฟล์ defines.h
#define PROGPORT PORTD #define PROGPIN PIND #define PROG_NO PD4
แก้ไขนิยามให้สอดคล้องกับวงจรที่ออกแบบไว้ โดยเงื่อนไขการเข้าบูทโหลดเดอร์คือสวิตช์ USER ต้องถูกกดค้างเอาไว้หลังจากรีเซ็ท