Arduino bootloader hex code 就位在 arduino 安裝目錄下的 \hardware\arduino\avr\bootloaders 中
至於要選擇那一個檔案, 參考 boards.txt 裡的設定
例如 Arduino Uno:
..
uno.bootloader.tool=avrdude
uno.bootloader.low_fuses=0xFF
uno.bootloader.high_fuses=0xDE
uno.bootloader.extended_fuses=0x05
uno.bootloader.unlock_bits=0x3F
uno.bootloader.lock_bits=0x0F
uno.bootloader.file=optiboot/optiboot_atmega328.hex
...
2016年3月21日 星期一
2015年9月18日 星期五
ATMEGA328 port 的操作
原因: 使用 arduino 的 digitalWrite() 及 digitalRead() 的速度不夠快, 直接對 register 控制.
用到的 register:
PORTD: set data output
DDRD : set input/output mode
PIND : read data input . if write 1 , the port will toggle.
方法:
-- 找出對應的 pin 腳 --
input pin:
digital pin 6, PORTD6
output pin:
digital pin 2, PORTD2
-- 設定 --
output mode:
DDRD |= (0x04); // 1: output, 0:input
input mode:
DDRD &= (~0x40)
PORTD |= (0x40); // input pull-high
-- 讀值 --
Data = PIND; // read PORTD input data
ex: // 反向輸出
..
noInterrupts();
while(1){
if(PIND & 0x04){
PORTD &= (~0x40);
}
else{
PORTD |= (0x40);
}
}
用到的 register:
PORTD: set data output
DDRD : set input/output mode
PIND : read data input . if write 1 , the port will toggle.
方法:
-- 找出對應的 pin 腳 --
input pin:
digital pin 6, PORTD6
output pin:
digital pin 2, PORTD2
-- 設定 --
output mode:
DDRD |= (0x04); // 1: output, 0:input
input mode:
DDRD &= (~0x40)
PORTD |= (0x40); // input pull-high
-- 讀值 --
Data = PIND; // read PORTD input data
ex: // 反向輸出
..
noInterrupts();
while(1){
if(PIND & 0x04){
PORTD &= (~0x40);
}
else{
PORTD |= (0x40);
}
}
訂閱:
文章 (Atom)