0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用Arduino和AVR-gcc进行AVR编程

454398 来源:网络整理 作者:佚名 2019-11-08 16:54 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

步骤1:什么是AVR,为什么要使用IC是?

AVR是一个微控制器,可用于使用软件控制电流。它可用于切换设备,使用脉冲宽度调制控制它们,从传感器读取值以及处理数据以与其环境交互。

此外,AVR芯片非常小。它是控制Arduino的芯片。

例如,ATMega328的尺寸不到1平方厘米,但包含23个IO引脚。它也仅需要1.8-5.5V即可运行。

这可以帮助您缩小Arduino项目,以创建可穿戴技术或更小巧,更美观的机器人

步骤2:编程器硬件

使用Arduino和AVR-gcc进行AVR编程

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

    浏览量

    8753
  • Arduino
    +关注

    关注

    190

    文章

    6515

    浏览量

    195932
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    AVR-IoT蜂窝迷你开发板技术解析与应用指南

    Microchip Technology AVR-IoT蜂窝迷你开发板 (EV70N78A) 是一个完整的平台,可用于评估和开发物联网解决方案。它采用AVR128DB48 avr®微控制器
    的头像 发表于 10-14 14:57 343次阅读
    ‌<b class='flag-5'>AVR</b>-IoT蜂窝迷你开发板技术解析与应用指南

    探索AVR64DD32 Curiosity Nano:一款强大的AVR DD系列评估平台

    AVR64DD32板可轻松访问AVR64DD32的特性,由MPLAB® X IDE和Microchip Studio提供支持,从而将该器件集成到定制设计中。Curiosity Nano评估板包括板载调试器,无需外部工具即可对AVR
    的头像 发表于 10-13 15:45 406次阅读
    探索<b class='flag-5'>AVR</b>64DD32 Curiosity Nano:一款强大的<b class='flag-5'>AVR</b> DD系列评估平台

    Microchip AVR32DD/AVR16DD微控制器:高性能与低功耗的完美结合

    Microchip Technology AVR32DD和AVR16DD 8位微控制器基于AVR® CPU(带硬件乘法器,在1.8V至5.5V整个电源电压范围内运行时钟速度高达24MHz
    的头像 发表于 10-13 13:44 452次阅读

    Microchip AVR64DD14/20 微控制器:高集成度与低功耗的完美结合

    Microchip Technology AVR64DD14/20微控制器是avr® DD系列微控制器的一部分,使用avr® CPU和硬件乘法器。 Microchip Technology此款器件
    的头像 发表于 10-13 11:38 386次阅读
    Microchip <b class='flag-5'>AVR</b>64DD14/20 微控制器:高集成度与低功耗的完美结合

    AVR® DD微控制器系列技术解析:架构与功能特性

    Microchip Technology AVR16/32DD28/32 avr® DD微控制器采用avr CPU,硬件乘数运行时钟速度高达24MHz,具有高达32KB的闪存,以及高达4KB的SRAM和256字节的EEPROM。
    的头像 发表于 10-11 15:54 412次阅读
    <b class='flag-5'>AVR</b>® DD微控制器系列技术解析:架构与功能特性

    AVR64EA48 Curiosity Nano评估套件技术解析与应用指南

    MPLAB® XIDE和Microchip Studio提供支持,可轻松访问AVR64EA48的特性,从而将该器件集成到定制设计中。Curiosity Nano系列评估板包括一个板载调试器。无需外部工具即可对AVR64EA48进行
    的头像 发表于 10-11 14:48 295次阅读
    <b class='flag-5'>AVR</b>64EA48 Curiosity Nano评估套件技术解析与应用指南

    Microchip AVR32EA 系列微控制器:高性能与低功耗的完美融合

    Microchip Technology AVR32EA28/32/48微控制器是 AVR® EA系列的一部分,采用带硬件乘法器的AVR CPU,时钟运行速度达20MHz。AVR EA
    的头像 发表于 10-10 15:16 391次阅读
    Microchip <b class='flag-5'>AVR</b>32EA 系列微控制器:高性能与低功耗的完美融合

    AVR64EA微控制器:高性能与灵活性的完美结合

    Microchip Technology AVR64EA28/32/48 AVR® EA微控制器为AVR CPU配备了以高达20MHz的时钟速度运行的硬件乘法器。AVR EA系列具有灵
    的头像 发表于 10-10 11:32 378次阅读
    <b class='flag-5'>AVR</b>64EA微控制器:高性能与灵活性的完美结合

    AVR16EB32 Curiosity Nano评估套件技术解析与应用指南

    Microchip Technology AVR16EB32 Curiosity Nano评估套件(EV73J36A)是一款硬件平台,用于评估AVR ® EB系列微控制器。 该板安装有AVR16EB32微控制器(MCU),并包含
    的头像 发表于 10-10 09:39 384次阅读
    <b class='flag-5'>AVR</b>16EB32 Curiosity Nano评估套件技术解析与应用指南

    AVR64DU32 Curiosity Nano评估套件技术解析与应用指南

    Microchip Technology AVR64DU32 Curiosity Nano评估套件是一款用于评估AVR^®^ DU系列微控制器的硬件平台。此评估套件配有完全集成的编程器和调试器,可
    的头像 发表于 10-09 15:21 357次阅读
    <b class='flag-5'>AVR</b>64DU32 Curiosity Nano评估套件技术解析与应用指南

    Microchip Technology AVR® DU微控制器数据手册

    Microchip Technology AVR^®^ DU微控制器采用AVR^®^ CPU,其硬件乘法器运行时钟速度高达24MHz。这些MCU具有16KB/32KB/64KB闪存、2KB/4KB
    的头像 发表于 10-09 15:15 334次阅读
    Microchip Technology <b class='flag-5'>AVR</b>® DU微控制器数据手册

    AVR32SD20/28/32微控制器技术解析与应用指南

    模拟功能和高级数字外设。AVR SD提供双核锁步CPU、闪存上的单错误校正和双错误检测 (SECDED) ECC、EEPROM/SRAM、用于功能安全的错误控制器以及用于安全的编程和调试接口禁用
    的头像 发表于 09-29 09:58 501次阅读
    <b class='flag-5'>AVR</b>32SD20/28/32微控制器技术解析与应用指南

    《ESP32S3 Arduino开发指南》第二章 Arduino基础知识

    IDE开发,这对于开发板来说极易掌握,同时又有足够的灵活性。Arduino语言是基于Wiring语言开发的,是对AVR-GCC库的二次封装,并不需要太多的单片机基础和编程基础,只要简单的学习后就可以快速
    发表于 05-13 09:28

    AVR单片机的优势与不足

    在当今电子科技领域,AVR 单片机凭借诸多突出特性,在各类电子设备开发中占据了一席之地,展现出独特的魅力与价值。 其一,AVR 单片机最为亮眼的当属其卓越的性能表现。AVR 单片机的指令以字作为
    的头像 发表于 02-04 17:41 1126次阅读

    AN4875-AVR DD系列单片机入门

    电子发烧友网站提供《AN4875-AVR DD系列单片机入门.pdf》资料免费下载
    发表于 01-21 14:37 0次下载
    AN4875-<b class='flag-5'>AVR</b> DD系列单片机入门