如何从Arduino毕业,直接使用微控制器?


19

我一直在从事Arduino项目。在使用Arduino使一切正常工作之后,我想转到不使用Arduino的解决方案。也就是说,我想使用不涉及Arduino板的微控制器。这将允许使用单板无屏蔽解决方案。

我知道有一些方法可以在面包板上制作自己的Arduino,但这并不是我真正想做的。

我不是很确定如何做到这一点。

除非有更好的选择,否则我倾向于使用Arduino使用的ATmega328。我了解开发工具是免费提供的,或者至少不是很昂贵。

出于这个问题的目的,假设我可以为电路提供+ 5V的电压。

我的第一个问题是如何对MCU进行编程。我相信有两种选择:

  1. 购买一个编程器,对MCU进行编程,然后将芯片放入我的电路中。
  2. 设计我的电路以包括对在线编程的支持。

我假设如果我选择选项#1,那就像在电路中插入已编程的芯片一样简单。我什么都不需要了 当然,更改软件会很不方便。

但是对于选项2,我不确定我需要什么。从我读过的书中,我认为我需要编程电缆和板上的连接器(什么类型?)。然后我想我(正确地)将连接器连接到ATmega上的某些引脚。

无论哪种方式,我都需要Atmel工作室。

其次,除了电源之外,Arduino上我绝对需要什么吗?我想也许是复位开关?


2
您可以使用Arduino对AVR进行编程。我个人喜欢使用命令行工具和Makefile,而不是IDE。
jippie

1
这个问题可能更适合Arduino Stack Exchange。arduino.stackexchange.com 现在处于公开测试阶段
akellyirl 2014年

4
但是我的目标是没有arduino的设计。
里克

“ arduino上有我绝对需要的东西吗?” 我认为您将需要UART(又名串行端口)引脚,这对于调试非常方便。
vvy

绝对不需要Atmel工作室。我从命令行(和文本编辑器)对芯片进行编程。尽管获赠大型项目,但Atmel工作室肯定会让它变得更轻松
Chris Laplante 2014年

Answers:


10

欢迎来到爱特梅尔的美好世界。让我根据您的业余爱好和专业经验为您的问题提供一些答案。

不要打扰任何BUT在线编程。除非您是理想的编码器,否则每次想编程时都要移出芯片是一场噩梦。我建议将AVRISPmkII作为入门级编程工具。缺点是不支持硬件调试。另一种选择是龙,但我对此没有经验。我可以说JTAGICEmk3是一个功能强大的调试工具。

Atmel Studio非常适合编程。实际上,这是我最喜欢的嵌入式开发环境。您可以使用CLI工具(例如AVRDUDE和AVR-GCC),但IDE会为您完成这些工作。

综上所述:

购买仅用于编程(轻松,即插即用)或DRAGON(我无法提供建议)的AVRISP。

在您的电路板上,将ICSP引脚引出到6引脚双排0.100“接头连接器上-连接在本数据表中进行了描述。

不需要重置开关。


1
使用EvUSBasp取得了出色的效果。
伊格纳西奥·巴斯克斯

拔出板上的ICSP引脚后,是否必须将它们专用于在线编程,还是可以将它们用作GPIO引脚?
里卡多

2
您可以将它们用作GPIO,因为它们与SPI共享功能。程序员将芯片置于复位状态,然后与其通信。
HL-SDK

1
有关开始微控制器编程的相关教程系列。他们使用AVRMega并完成ISP接线过程,并​​使用豪华的C代码使LED闪烁。
MDMoore313 2014年

1
@ HL-SDK是正确的,只有RESET引脚确实真正需要专用于ICSP,但是其他引脚也需要谨慎,即它们可能应该用作输出引脚而不是输入引脚(因此信号不会不会在ICSP模式下受到外部电路的干扰),并且应将对它们的任何连接设计为对编程流量向其发送的任何随机信号组合均不产生不利影响。
microtherion 2014年

10

您不必一次全部“毕业”。这是我的转换方式:

首先,我继续使用Arduino,但将对Arduino库的调用转换为寄存器读和写,一次一行,以查看我的程序是否仍然有效。通过这种方式,我习惯了使用寄存器,并发现它们与Arduino的工作方式并不是完全不连续的。诸如digitalWrite()之类的Arduino函数只需操纵寄存器-您可以在草图中自由地对其进行读写操作。

我的下一步是将ATTiny 85放在面包板上,并以Arduino作为ISP(http://highlowtech.org/?p=1695)对其进行编程。如果您购买面包板电源并使用ATTiny的内部振荡器,则只需很少的布线即可。我使用Arduino IDE进行编译,但尽可能多地使用寄存器。

然后,我安装了免费的Crosspack命令行工具链,并编译了一个程序。经过更多的试验和错误之后,我设法仅使用avrdude对ATTiny进行了编程,完全不在Arudino生态系统中。

只要仅使用命令行工具就能使自己眼花blink乱,那么您就可以摆脱Arduino的束缚。探索各种外围设备及其寄存器,这很快就会很自然。

毕竟,我经常发现自己使用Arduino,因为它速度更快。我发现仔细研究寄存器描述有点糟;如果没有必要,这样做是没有意义的。不过,很高兴知道该怎么做。


8

我同意HL-DSK的上述评论。我会花掉多余的钱,并得到一个具有调试功能的程序员。我用的是JTAGICE3,大约110美元的数字密钥。

此处阅读ISP编程。它将向您展示如何建立SPI连接。您芯片上的SPI连接将在ATmega数据表中。在第2页上查找MISO / MOSI / SCK / RESET引脚。程序员需要能够控制复位线。切记在复位线上使用一个上拉电阻,以便在断开编程器连接后,您的芯片将运行。

在此处获取2x3标头。或使用分离式标题制作自己的标题。


2
我将第二次获得具有调试支持的程序员。本月初,我被PIC32项目深深吸引,没有任何低水平的经验。即使有人编写最低级别的敲打功能,我什至也不想考虑如果我只需要看到一个红色/绿色的LED灯就很难找出问题所在。
Dan Neely 2014年

一旦有了专业工具,就再也没有回头路了。
马特·杨

7

Arduino和裸露的ATmega328之间的区别只有两件事。Arduino Bootloader和Arduino库。您可以使用裸露的C或C ++编写Arduino代码,而无需使用任何库。您也可以改用汇编。引导加载程序使您可以通过串行加载新代码,而无需经历(稍微)更复杂的在线串行编程(基本上是SPI)。

您几乎可以将标准编程库和avr-gcc用于任何IDE。与其他人的说法相反,对Arduino进行编码基本上就像对裸露的微控制器进行编码一样,以牺牲一些性能为代价增加了一些便利。


4
但您也可以将Arduino引导程序和库与裸露的ATmega328一起使用。
伊格纳西奥·巴斯克斯

@ IgnacioVazquez-Abrams可以将其转换为裸眼的arduino,natch。
路人2014年

5

我购买了预先引导加载的Atmega328P芯片,并使用FTDI电缆avrdude在线对其进行编程,与对Arduino进行编程的方式相同。我喜欢Eclipse IDE,但是您可以使用任何喜欢的环境-Atmel Studio,Arduino IDE,emacs或赤脚在命令行上。

该电路板正在施工中,该电路板已经足够完善,可以使用Hello程序进行测试,并使用电缆进行编程,电源和端子连接。它仍然需要电源- 在我的情况下,LM2936超低静态电流稳压器和电池连接器-以及该项目所需的任何其他板载组件和板外连接:

NotDuino

由于您拥有Arduino,因此可以使用Arduino安装引导加载程序,从而节省一些钱并使用未编程的芯片。漂亮的蓝色针脚标签有助于降低我的傻瓜率!我使用16MHz的晶体,但是如果可以使用内部振荡器运行,则零件数将减少3(xtal和2个电容器)。


2

为了从提供硬件且软件为C语言覆盖的Arduino迁移,我想提出一些建议。我看到人们发布了一些有用的答案,但是我一直在你身边,我会做的事情有些不同。

  1. 选择一个调试器。调试器使您能够对微控制器进行编程以及进行调试(包括“逐步”处理)和“断点”(使您能够在特定的代码行中暂停程序以检查代码的作用)的能力。ISP(在线编程)是一个串行接口,使用3个引脚是好的,但不能提供初学者想要的全部功能。JTAG接口使用4个引脚,这些引脚在使用断点和填充方面提供了基本的完整功能。人们通常更倾向于ISP,因为它“相对”更容易设置,但是如果您问我,JTAG的设置并不困难,但这也取决于个人喜好。还有调试线 在本次讨论中我将跳过该接口,因为您宁愿使用ISP而不是调试线路。
  2. 购买同时具有ISP和JTAG功能的调试器。我认为您一次购买但购买商品,如果您希望更改设计,这会在将来对您有所帮助。我推荐AVR Dragon或JTAGICE。两者都通过USB连接到PC,并且都提供ISP和JTAG。JTAGICE比AVR Dragon贵一点,但我绝对推荐AVR Dragon。
  3. 您会发现大多数Atmel微控制器都具有ISP功能,但很少有JTAG。诸如AT90S2313或ATTINY系列之类的小型微控制器使用ISP系列,因为它们体积很小。但是,如果您不仅希望使几个LED闪烁,而且还希望与LCD屏幕或小键盘或其他接口连接,那么我建议您使用更大的微控制器。如果您使用的是5V电源,我建议您使用ATMega8甚至ATMega16或ATMega128(我的最爱)。ATMega16和ATMega128具有ISP和JTAG接口。
  4. 就IDE而言,我曾经使用Code vision和AVR Studio,但我建议使用Atmel Studio 6.0或更高版本,以满足您的所有需求。

我有一些我自己学到的原理图,这样您就可以与微机建立一个干净流畅的界面。让我知道您是否需要帮助。


1

诚实的忠告

Arduino适用于初学者,有两种方法可以解决

方法1:了解微控制器/处理器的工作方式(首选方法)

爱特梅尔8051

我的意思是学习微型p / c的体系结构和汇编代码(或裸机)。如果您需要一个起点,我建议您使用Atmel 8051,它是具有最简单的体系结构和汇编指令集的8位微控制器。任何其他现代的32位或64位处理器都具有从中衍生的体系结构形式。这个微控制器仍然是我研究生课程的一部分,因为它是一个很好的起点,并且有很多文献可供参考。

哦,并出售用于创建ISP板的套件(带有加工套件的完整组装套件,将焊料组件焊接到板套件上,您可以自己构建开发板,只需要几条IC和RS-232电缆/插座)。

由于技术含量低,所有组件都将很便宜。

方法2:跳到硬件-软件方法(不太可取)

树莓派 比格犬骨黑

对于懒散的人来说,这是一种方法,他们懒散地进行了一些组装并“挖了”,或者是那些想要转移到更多软件而不是硬件的人们。我建议转到使用ARM处理器的Raspberry Pi或BeagleBoneBlack之类的业余爱好者委员会,并开始进行具有创造力的项目。


0

您可以使用Arduino开发板,而无需使用沙箱库和环境,您可以自己直接编写所有程序。如果要通过串行/ uart使用其引导加载程序进行编程,则可以正常工作。但是大多数/所有的avr部件也可以用另一种方式编程,而该部件保持复位状态,这意味着它不是可砌的。从arduino或其他微控制器中插入bang spi或使用某种风格的ftdi中断都是很容易的。sparkfun有arduino和non-arduino板(例如32u),它的spi头很明显。和ftdi分支板,您可以使用ftdi的库或linux随附的ftdi库轻松地进行邦定。

每个部分的文档均显示了引导选项和闪存编程选项。是的,购买一些零件并制作自己的分线板也不难。在您使用现有的分组讨论或简单的评估板之前,我不会这样做,然后在需要时将其克隆。理想情况下,首先需要一个带有内部rc振荡器的零件,基本上是电源,地和编程引脚。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.