ผลต่างระหว่างรุ่นของ "กลไกบูทโหลดเดอร์และการโปรแกรมไมโครคอนโทรลเลอร์ผ่าน UART"

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
แถว 7: แถว 7:
  
 
== ปรับแก้ไขโปรแกรมตัวอย่าง ==
 
== ปรับแก้ไขโปรแกรมตัวอย่าง ==
โปรแกรมจาก Atmel ต้องถูกแก้ไขให้สอดรับกับวงจรที่ออกแบบขึ้น รวมถึงแก้ไขโค้ดบางอย่างที่ให้โปรแกรมคอมไพล์ได้อย่างถูกต้องสำหรับชิป ATMega168
+
โค้ดตัวอย่างจาก Atmel มาพร้อมกับเชลล์สคริปต์ <tt>preprocessor.sh</tt> ที่ใช้สำหรับสร้างไฟล์ <tt>defines.h</tt> ขึ้นมาเพื่อควบคุมการสร้างบูทโหลดเดอร์ให้สอดคล้องกับวงจรที่ออกแบบขึ้น ให้รันสคริปต์นี้โดยระบุรุ่นของชิป ขนาดของบูทโหลดเดอร์ หมายเลขพอร์ทที่ใช้กำหนดเงื่อนไขการเข้าบูทโหลดเดอร์ ความถี่สัญญาณนาฬิกา และบอดเรทสำหรับพอร์ทอนุกรม แล้วบันทึกผลลัพธ์ที่ได้ไว้ในไฟล์ <tt>defines.h</tt>
  
=== ทำให้โค้ดคอมไพล์ได้ ===
+
เพิ่มคำสั่งสองบรรทัดนี้เข้าไปที่ท้ายสุดของไฟล์ <tt>defines.h</tt> เนื่องจากชิป ATMega168 ใช้ชื่อบิตสำหรับควบคุมการเขียน EEPROM ที่แตกต่างไปจากชิปตระกูล AVR เบอร์อื่น ๆ
ให้เปิดไฟล์ <tt>defines.h</tt> และแก้ไขบรรทัดที่นิยามมาโครเกี่ยวกับ 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
 
 
 
จากนั้นเพิ่มคำสั่งสองบรรทัดนี้เข้าไปที่ท้ายสุดของไฟล์ <tt>defines.h</tt> เนื่องจากชิป ATMega168 ใช้ชื่อบิตสำหรับควบคุมการเขียน EEPROM ที่แตกต่างไปจากชิปตระกูล AVR เบอร์อื่น ๆ
 
  
 
  #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:30, 20 กรกฎาคม 2559

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

บูทโหลดเดอร์สำหรับชิป AVR

ศึกษาเอกสารเกี่ยวกับ Self-Programming บนชิป AVR และดาวน์โหลดโปรแกรมตัวอย่างจากลิ้งค์ต่อไปนี้

ปรับแก้ไขโปรแกรมตัวอย่าง

โค้ดตัวอย่างจาก Atmel มาพร้อมกับเชลล์สคริปต์ preprocessor.sh ที่ใช้สำหรับสร้างไฟล์ defines.h ขึ้นมาเพื่อควบคุมการสร้างบูทโหลดเดอร์ให้สอดคล้องกับวงจรที่ออกแบบขึ้น ให้รันสคริปต์นี้โดยระบุรุ่นของชิป ขนาดของบูทโหลดเดอร์ หมายเลขพอร์ทที่ใช้กำหนดเงื่อนไขการเข้าบูทโหลดเดอร์ ความถี่สัญญาณนาฬิกา และบอดเรทสำหรับพอร์ทอนุกรม แล้วบันทึกผลลัพธ์ที่ได้ไว้ในไฟล์ defines.h

เพิ่มคำสั่งสองบรรทัดนี้เข้าไปที่ท้ายสุดของไฟล์ defines.h เนื่องจากชิป ATMega168 ใช้ชื่อบิตสำหรับควบคุมการเขียน EEPROM ที่แตกต่างไปจากชิปตระกูล AVR เบอร์อื่น ๆ

#define EEMWE EEMPE
#define EEWE  EEPE