TA的每日心情 | 开心 2014-1-17 23:05 |
---|
签到天数: 9 天 连续签到: 1 天 [LV.3]偶尔看看II
|
本帖最后由 东隅 于 2013-7-27 15:04 编辑
暑假来临,闲来无事,听有同学在玩arduino,挺想尝试看看,但是不想买啊,正好手中有一套ATmege128的开发板。以前听过arduino是由avr封装而成,于是就想把这avr开发板改造下。GOOGLE了下,还是有办法的。 其实Arduino,就是在AVR单片机上烧录了一个bootloader,在通过arduino集成开发环境与单片机进行通讯,继而进行片上编程。
转载请注明原文地址:
http://blog.csdn.net/canyue102/article/details/9451771
AVR环境:
编译环境: ubuntu + avr-gcc
烧写工具: avrdude+usbasp
具体步骤查看上一篇博客。
avr环境多种多样,在linux下还可以用eclipse集成环境。在window下推荐用WINAVR,其实本质上和linux下一样是用avr-gcc,烧写工具用prgisp.当然有了avr jtag仿真器就更好了,不用usbasp.
下载arduino工具:
arduino.cc/en/Main/Software
我下载的linux 64位版本,下载后解压到主目录下。
开发板:
BK-AVR128开发板
一、制作属于atmega128的bootloader
代码主要是arduino工具自带的,编译时有点问题,我改了几处。
可以直接到我的资源里面下载编译好的hex文件直接烧写到单片机就可以了:
download.csdn.net/detail/canyue102/5809329
源代码boot _mega128.c 代码太长粘帖不了,详见博客
编译: avr-gcc -mmcu=atmega128 -Wall -Os -o boot_mega128.o boot_mega128.c
avr-objcopy -j .text -j .data -O boot_mega128.o boot_mega.hex
烧写:
用usbasp连接电脑和开发板
sudo avrdude -p m128 -c usbasp -P usbasp -Uefuse:w:0xff:m -Uhfuse:w:0xca:m -Ulfuse:w:0xff:m -Ulock:w:0x3F:m
sudo avrdude -p m128 -c usbasp -e -U flash:w:boot_mega128.hex -Ulock:w:0x0F:m
二、Arduino开发环境设置 参考:
arduinoexplained.blogspot.com/2012/03/custom-board-programming-on-arduino-10.html
解压刚才下载的arduino
进入该目录
修改/hardware/arduino/avr/boards.txt
在最后添加:- ###############################################################
- atmega128A.name=Custom ATmega 128 Breakout Board using AVRISP
- 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=atmega
- 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=standard
- ##############################################################
复制代码 三、设置arduino引脚定义
在网上没有找到atmega128的arduino pin mapping,于是自己写了一个
在/hardware/arduino/avr/variant文件夹下新建一个文件夹mega128
在mega128里面新建一个pins_arduino.h
代码太长发不了贴,详见原博客再将boards.txt的
atmega128A.build.variant=standard
改为
atmega128A.build.variant=mega128
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
| 空闲
|
|
|
|
四、 最后启动arduino开发环境:
sudo ./arduino
测试程序:- 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);
- }
复制代码 点击upload则在开发板上开始一个一闪一闪的led。第12pin是PB4开发板上正好对应一个LED。
好吧,可是开始arduino的开发之旅了。要学好arduino还是要花很多精力和时间的。
|
|