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

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
แถว 12: แถว 12:
 
ให้เปิดไฟล์ <tt>defines.h</tt> และแก้ไขบรรทัดที่นิยามมาโครเกี่ยวกับ UART ให้เป็นดังนี้
 
ให้เปิดไฟล์ <tt>defines.h</tt> และแก้ไขบรรทัดที่นิยามมาโครเกี่ยวกับ UART ให้เป็นดังนี้
  
  #define BAUD_RATE_LOW_REG UBRR0
+
  #define BAUD_RATE_LOW_REG       UBRR0
  #define UART_CONTROL_REG UCSR0B
+
  #define UART_CONTROL_REG       UCSR0B
  #define ENABLE_TRANSMITTER_BIT TXEN0
+
  #define ENABLE_TRANSMITTER_BIT TXEN0
  #define ENABLE_RECEIVER_BIT RXEN0
+
  #define ENABLE_RECEIVER_BIT     RXEN0
  #define UART_STATUS_REG UCSR0A
+
  #define UART_STATUS_REG         UCSR0A
  #define TRANSMIT_COMPLETE_BIT TXC0
+
  #define TRANSMIT_COMPLETE_BIT   TXC0
  #define RECEIVE_COMPLETE_BIT RXC0
+
  #define RECEIVE_COMPLETE_BIT   RXC0
  #define UART_DATA_REG UDR0
+
  #define UART_DATA_REG           UDR0
  
 
จากนั้นเพิ่มคำสั่งสองบรรทัดนี้เข้าไปที่ท้ายสุดของไฟล์ <tt>defines.h</tt> เนื่องจากชิป ATMega168 ใช้ชื่อบิตสำหรับควบคุมการเขียน EEPROM ที่แตกต่างไปจากชิปตระกูล AVR เบอร์อื่น ๆ
 
จากนั้นเพิ่มคำสั่งสองบรรทัดนี้เข้าไปที่ท้ายสุดของไฟล์ <tt>defines.h</tt> เนื่องจากชิป ATMega168 ใช้ชื่อบิตสำหรับควบคุมการเขียน EEPROM ที่แตกต่างไปจากชิปตระกูล AVR เบอร์อื่น ๆ

รุ่นแก้ไขเมื่อ 05:03, 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 ต้องถูกกดค้างเอาไว้หลังจากรีเซ็ท