步骤1:什么是AVR,为什么要使用IC是?
AVR是一个微控制器,可用于使用软件控制电流。它可用于切换设备,使用脉冲宽度调制控制它们,从传感器读取值以及处理数据以与其环境交互。
例如,ATMega328的尺寸不到1平方厘米,但包含23个IO引脚。它也仅需要1.8-5.5V即可运行。
这可以帮助您缩小Arduino项目,以创建可穿戴技术或更小巧,更美观的机器人。
AVR芯片可以使用多种硬件进行编程,从简单的串行电缆到专用的AVR编程器和开发站。
虽然每种方法都有其自身的优势缺点和缺点,我将重点介绍使用Arduino。
Arduino是一个大型的微控制器原型开发平台。 Arduino Uno的IO引脚已断开,并连接了插头。它完全包含运行板载微控制器所需的所有部件,例如晶体和电源调节。它还具有自己的IDE和与C十分相似的编程语言。使用该程序,可以将新软件刷新到AVR芯片上。
IDE包含一个名为ArduinoISP的程序,该程序应该做到这一点。不幸的是,它非常挑剔,很少与Arduino的某些型号一起使用。在该位置可以找到Adafruit制作的程序的变体,其工作更加一致。
如果您使用的是Arduino Uno,那么我建议使用后者,因为我对官方程序有很多麻烦。/p》
第3步:编程
可以用各种不同的方式对AVR芯片进行编程。
安装Arduino Bootloader使用IDE和语言
使用程序集。尽管这可能很难读取和写入,但它可能非常有效。
使用Atmel的官方IDE Atmel Studio,但仅适用于Windows,不适用于Linux或Mac
在您喜欢的C或文本编辑器中创建程序,然后使用avr-gcc进行编译和刷新和avrdude。
这在可读性和效率之间以及所有平台上都实现了很好的折衷。
我将详细介绍第四个也是最后一个选项。
许多编辑器都将为此工作,因为您只需编写C程序即可:Eclipse,notepad ++,vi以及更多其他程序
请下载附件中的led_flash.c文件和makefile。
我为此项目使用了ATTiny 85。
我将首先解释代码。
第一行代码是:
#include
这会将与您的AVR芯片有关的常数导入程序。编译程序时,必须指定要使用的AVR芯片的类型。
下一次导入:
#include
这包括
下一步是一些定义:
#define shift_light_up(port) port 《《 1 #define shift_light_down(port) port 》》 1
定义宏以在链上上下移动光。
#define register_set_output(register) register = 0b11111111
#define enable_first_light(port) port = 0b00000001
定义宏以设置要输出的整个寄存器并启用第一盏灯。
这些定义实质上是创建宏,因此我们不需要稍后再使用代码。可以使代码比以前更具可读性。
将寄存器设置为二进制全1会导致所有引脚成为输出而不是输入。
然后,端口设置引脚的值是高还是低。
端口《《1将使能的引脚移位1位。端口》》 1沿相反方向移动它。
boolean is_last_pin(uint8_t *port){
if((*port & 0b00010000) 》 0)
return true;
else return false;
}
boolean is_first_pin(uint8_t *port){
if((*port & 0b00000001) 》 0)
return true;
else return true;
}
两个功能可以轻松测试当前灯是否使用第一个或最后一个引脚。
int main (void){
register_set_output(DDRB); // Set it all to output
enable_first_light(PORTB); // Set the first light to on
boolean up = true;
while(true){
_delay_ms(100); // Dependent on the chip‘s clock speed, speed must be set
if(is_first_pin(&PORTB) == true) //check if it is at the start
up = true;
else if(is_last_pin(&PORTB) == true) // check if it is at the end
up = false;
if(up == true)
PORTB = shift_light_up(PORTB); // Shift our light up
else
PORTB = shift_light_down(PORTB); // Shift our light down
}
}
这是我们函数的主要部分。芯片启动时会调用int main(void)函数。我们首先使寄存器B为所有输出。然后,我们打开第一个指示灯,并声明一个布尔值,该布尔值记住要走的方向。每个循环首先延迟0.2秒,然后检查方向是否需要更改。最终,它会沿给定的方向移动光并重复循环。
就是这样!
上一步:makefile自动执行编译和刷新过程
第4步: Makefile
Make用于自动生成程序。您可以设置一个makefile以使整个过程成为一个命令,即“ make program”。
使用make create宏可以轻松运行与构建项目有关的命令集合。
第一个命令是默认调用的命令,因此首先拥有一个帮助宏可能会很有用。
help:
@echo ’Help details:‘
@echo ’hex: compile hex file‘
@echo ’flash: install hex file‘
@echo ’program: compile hex and install‘
这总是提醒您如何设置程序,而不需要
此makefile的下一部分是十六进制。
hex:
avr-gcc -Os -DF_CPU=8000000 -mmcu=attiny85 -c led_flash.c
avr-gcc -DF_CPU=8000000 -mmcu=attiny85 -o led_flash.elf led_flash.o
avr-objcopy -O ihex led_flash.elf led_flash.hex
rm led_flash.o
rm led_flash.elf
这完成了编译芯片的整个过程。为AVR编译程序的过程有点困难且漫长,但是这部分使您无需记住过程的每个部分。该编译过程中要记住的最重要的部分是--mmcu = attiny85和led_flash。这些将需要根据您自己的项目进行更改。如果您使用不同的AVR芯片,只需将attiny85更改为您使用的类型。如果您的文件未命名为led_flash.c,则使用文件名更改led_flash的所有实例。
最后,DF_CPU = 8000000定义了微控制器中的时钟速度。除非将其设置为正确的值,否则许多项目(例如延迟)将无法正常工作。如果您使用其他芯片,或以任何方式修改速度,请查阅AVR芯片的数据表。
flash:
avrdude -c arduino -p attiny85 -P /dev/tty.usbmodemfd121 -U flash:w:led_flash.hex
这会将程序安装到AVR芯片上。请注意:
-c arduino -p attiny85 -P/dev/tty.usbmodemfd121
这将设置pro的类型
步骤5:刷新和编译
现在您已经有了makefile设置以及编程硬件设置,只需键入
make program
,这将编译代码并在AVR上安装该程序。
恭喜!
步骤6:最终电路
最终电路使用许多电阻器和LED,但仅一步之遥,即可将芯片放入实际电路中。
只需将5V +连接到VCC引脚,将地连接到GND,然后将IO引脚连接到一排LED
将电路焊接到原型板并构建一个一个有趣的容器,向您的朋友和同事展示您的新技能。
责任编辑:wv
-
AVR-GCC
+关注
关注
0文章
4浏览量
8562 -
Arduino
+关注
关注
188文章
6469浏览量
186969
发布评论请先 登录
相关推荐
评论