還在讀書的時候,一次課程設計用到了ATmega128的片子,感覺還不錯。后來玩單片機就收藏了兩塊mega128的核心板。在玩Arduino以后,一直想把這兩塊閑置多年mega128的板子也用起來。趁著過年這幾天比較閑,簡單搞了一下。
一、制作屬于ATmega128的bootloader
源代碼需要在Arduino IDE自帶的通用bootloader上修改幾處,當然也可以直接使用已經編譯好的boot_mega128.hex文件。
二、硬件連接
用杜邦線連接USBtinyISP 的 JP1(ISP6)和開發板的ISP接口(暫時只測試了 USBtinyISP)。
三、Arduino開發環境設置
參考:
進入Arduino IDE目錄
修改 /hardware/arduino/boards.txt (1.0.5在該路徑下)
在最后添加:
###############################################################
atmega128A.name=Custom ATmega 128A_8MHz
atmega128A.upload.using=avrispmkii
atmega128A.upload.maximum_size=126976
atmega128A.bootloader.low_fuses=0xFF
atmega128A.bootloader.high_fuses=0xCA
atmega128A.bootloader.extended_fuses=0xFF
atmega128A.bootloader.path=mega128
atmega128A.bootloader.file=boot_mega128.hex
atmega128A.bootloader.unlock_bits=0x3F
atmega128A.bootloader.lock_bits=0x0F
atmega128A.build.mcu=atmega128
atmega128A.build.f_cpu=8000000L
atmega128A.build.core=arduino
atmega128A.build.variant=mega128
##############################################################
設置后可在Arduino IDE 的菜單“工具”—> “板卡”下看到對應的“Custom ATmega 128A_8MHz”選項。
atmega128A.upload.using=avrispmkii
atmega128A.upload.maximum_size=126976
atmega128A.bootloader.low_fuses=0xFF
atmega128A.bootloader.high_fuses=0xCA
atmega128A.bootloader.extended_fuses=0xFF
atmega128A.bootloader.path=mega128
atmega128A.bootloader.file=boot_mega128.hex
atmega128A.bootloader.unlock_bits=0x3F
atmega128A.bootloader.lock_bits=0x0F
atmega128A.build.mcu=atmega128
atmega128A.build.f_cpu=8000000L
atmega128A.build.core=arduino
atmega128A.build.variant=mega128
##############################################################
設置后可在Arduino IDE 的菜單“工具”—> “板卡”下看到對應的“Custom ATmega 128A_8MHz”選項。
三、設置Arduino引腳定義
在/hardware/arduino/variants文件夾下新建一個文件夾mega128
在mega128里面新建一個pins_arduino.h,內容略,可根據實際開發板資源調整。
目前所用atmega128的arduino pin mapping 定義如下:
arduino io
|
主芯片 IO 口
|
外部資源 1
|
外部資源 2
|
外部資源 3
|
外部資源 4
|
0
|
PA0/A/D0
|
流水燈(D1)
|
數碼管(位 1)
|
LCD1602(D0)
|
LCD12864(D0)
|
1
|
PA1
|
流水燈(D2)
|
數碼管(位 2)
|
LCD1602(D1)
|
LCD12864(D1)
|
2
|
PA2
|
流水燈(D3)
|
數碼管(位 3)
|
LCD1602(D2)
|
LCD12864(D2)
|
3
|
PA3
|
流水燈(D4)
|
數碼管(位 4)
|
LCD1602(D3)
|
LCD12864(D3)
|
4
|
PA4
|
流水燈(D5)
|
數碼管(位 5)
|
LCD1602(D4)
|
LCD12864(D4)
|
5
|
PA5
|
流水燈(D6)
|
數碼管(位 6)
|
LCD1602(D5)
|
LCD12864(D5)
|
6
|
PA6
|
流水燈(D7)
|
數碼管(位 7)
|
LCD1602(D6)
|
LCD12864(D6)
|
7
|
PA7
|
流水燈(D8)
|
數碼管(位 8)
|
LCD1602(D7)
|
LCD12864(D7)
|
8
|
PB0/SS
|
步進電機
|
|
|
|
9
|
PB1/SCK
|
步進電機
|
|
|
|
10
|
PB2/MOSI
|
步進電機
|
|
|
|
11
|
PB3/MISO
|
步進電機
|
|
|
|
12
|
PB4/OC0
|
直流電機
|
PWM(D9)
|
|
|
13
|
PB5/OC1A
|
LCD1602(RS)
|
LCD12864(RS)
|
|
|
14
|
PB6/OC1B
|
LCD1602(RW)
|
LCD12864
|
|
|
15
|
PB7/OC1C
|
LCD1602(EN)
|
(RW)
|
|
|
16
|
PC0/A8
|
數碼管(段 A)
|
LCD12864(EN)
|
|
|
17
|
PC1
|
數碼管(段 B)
|
|
|
|
18
|
PC2
|
數碼管(段 C)
|
|
|
|
19
|
PC3
|
數碼管(段 D)
|
|
|
|
20
|
PC4
|
數碼管(段 E)
|
|
|
|
21
|
PC5
|
數碼管(段 F)
|
|
|
|
22
|
PC6
|
數碼管(段 G)
|
|
|
|
23
|
PC7
|
數碼管(段 dp)
|
|
|
|
24
|
PD0/SCL/INT0
|
矩陣鍵盤(行 1)
|
按鍵 K17
|
AT24C02(SCL)
|
|
25
|
PD1/SDA/INT1
|
矩陣鍵盤(行 2)
|
按鍵 K18
|
AT24C02(SDA)
|
|
26
|
PD2/RXD1/INT2
|
矩陣鍵盤(行 3)
|
按鍵 K110
|
PSII(DAT)
|
紅外線接收
|
27
|
PD3/TXD1/INT3
|
矩陣鍵盤(行 4)
|
按鍵 K20
|
PSII(CLK)
|
|
28
|
PD4/ICP1
|
矩陣鍵盤(列 1)
|
|
|
|
29
|
PD5/XCK1
|
矩陣鍵盤(列 2)
|
|
|
|
30
|
PD6/T1
|
矩陣鍵盤(列 3)
|
|
|
|
31
|
PD7/T2
|
矩陣鍵盤(列 4)
|
|
|
|
32
|
PE0/RXD0/PDI
|
串口(RXD)
|
|
|
|
33
|
PE1/TXD0/PDO
|
串口(TXD)
|
|
|
|
34
|
PE2/XCK0/AIN0
|
DS1302(SCLK)
|
|
|
|
35
|
PE3/OC3A/AIN1
|
DS1302(I/0)
|
|
|
|
36
|
PE4/OC3B/INT4
|
DS1302(RST)
|
|
|
|
37
|
PE5/OC3C/INT5
|
空閑
|
|
|
|
38
|
PE6/T3/INT6
|
DS18B20
|
|
|
|
39
|
PE7/ICP3/INT7
|
蜂鳴器
|
|
|
|
40
|
PF0/ADC0
|
ADC 輸入
|
|
|
|
41
|
PF1/ADC1
|
數碼管段選鎖存
|
|
|
|
42
|
PF2
|
數碼管位選鎖存
|
|
|
|
43
|
PF3
|
流水燈鎖存
|
|
|
|
44
|
PF4
|
JTAG(TCK)
|
|
|
|
45
|
PF5
|
JTAG(TMS)
|
|
|
|
46
|
PF6
|
JTAG(TDO)
|
|
|
|
47
|
PF7
|
JTAG(TDI)
|
|
|
|
48
|
PG0/WR
|
空閑
|
|
|
|
49
|
PG1/RD
|
空閑
|
|
|
|
50
|
PG2/ALE
|
空閑
|
|
|
|
51
|
PG3/TOSC2
|
空閑
|
|
|
|
52
|
PG4/TOSC2
|
空閑
|
|
|
|
引腳定義參考開發板為博科電子的BK-AVR128,實物圖片如下:
實際手里用的是這塊:
通過Arduino IDE 把準備好的 bootloader 寫入mega128。使用 USBtinyISP 的好處是不需要選擇連接端口,直接寫就行了。
寫好bootloader以后,你的單片機開發板就變為 Arduino 了。雖然官方的FAQ里仍然強調 Arduino “只是一塊AVR開發板”……
四、測試
寫好bootloader以后,你的單片機開發板就變為 Arduino 了。雖然官方的FAQ里仍然強調 Arduino “只是一塊AVR開發板”……
四、測試
測試程序:
int ledPin =12;
void setup() {
// put your setup code here, to run once:
pinMode(ledPin,OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(ledPin,HIGH);
delay(1000);
digitalWrite(ledPin,LOW);
delay(1000);
}
int ledPin =12;
void setup() {
// put your setup code here, to run once:
pinMode(ledPin,OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(ledPin,HIGH);
delay(1000);
digitalWrite(ledPin,LOW);
delay(1000);
}
好吧,現在可以用ATmega18A開始Arduino的玩弄時間了。
PS: avrdude 真心不會用,avrdude-GUI 也不會!
PS: avrdude 真心不會用,avrdude-GUI 也不會!