Questions tagged «avr»

AVR是Atmel开发的8位和32位微控制器内核。AVR被选为流行的Arduino SBC的微控制器。

10
AVR的有效逆(1 / x)
我试图找到一种有效的方法来计算AVR上的逆(或近似)。 我正在尝试计算步进电机的脉冲周期,以便可以线性地改变速度。周期与速度(p = K/v)的倒数成正比,但我想不出一种快速计算此速度的好方法。 我的公式是 p = 202/v + 298; // p in us; v varies from 1->100 在Arduino上测试时,似乎完全忽略了该部分,而将其p固定为固定298(尽管在avr-gcc中可能会有所不同)。我还尝试过对v循环求和,直到超过202,然后对循环计数,但这非常慢。 我可以生成一个查找表并将其存储在闪存中,但是我想知道是否还有另一种方法。 编辑:也许标题应该是“有效划分” ... 更新:正如pingswept指出的那样,我将周期映射到速度的公式不正确。但是主要的问题是除法运算。 编辑2:在进一步调查中,除法在arduino上起作用,问题是由于上面的公式不正确以及其他地方的int溢出。

7
AVR随机数发生器
我已经阅读了TI(slaa338)的一份应用笔记,其中描述了一种用于生成“用于实数”(与“伪”数相对)的随机数的技术。它利用MSP430有点奇怪的时钟子系统来实现此目标。有谁知道可以在AVR(尤其是XMega的AVR)上实现的用于生成“真实”随机数的技术?

3
在没有已知参考的情况下监控电压
我正在使用一个电量耗尽的小型传感器平台。我希望能够在电压过低时触发警报。问题是,我用来测量电压的任何东西都将由相同的电压源供电。物有所值,我正在使用4xAA可充电电池(最初为4.8 V,但该系统似乎可以工作至2 V左右,包括XBee发射器)运行Arduino Pro-mini克隆(3.3 V)。 有人对如何工作有任何聪明的主意吗?似乎使用ATmega芯片的模拟输入的任何事物都只会将输入电压与其自身进行比较。也许要检查调节器和电池本身之间的区别?

4
有人移植了Arduino的QP状态框架吗?
在回顾我的数据记录项目的可能方法时,我发现“ C / C ++中的实用UML状态图”一书对于与Arduino进行更认真的工作非常有趣。QP是面向嵌入式系统的基于状态机的超轻型开源框架家族,它们在http://www.state-machine.com/上为其框架(GNU GPL2)分发代码和端口,其中它们具有一个使用WinAVR / Gnu C ++工具集的AVR和AVR mega的端口。 尽管特定于芯片的接头连接器合适,但是否有人创建了板BSP文件或对这些框架有任何经验?我只是从这本书开始,所以任何评论都将不胜感激。
12 arduino  avr 

5
设计使用寿命更长的电路
我已经学习了一段时间的图片微控制器,并且对处理数字电子学有相当多的了解。我从事过基本的电子项目,现在需要从事一些商业应用。 我的问题是关于如何设计和构建可靠而持久的电路。我建立了一个自动光控制器电路,该电路从LDR接收输入,并在七段式面板上显示模拟读数的值。然后,它进行一些计算并通过继电器控制光。该电路需要永久性接通(每天24小时)。最初几个月,电路工作正常,但是大约六个月后,它开始出现故障。它在7段显示器上显示了毫无意义的东西(它只显示了数字的一部分),然后点亮了指示灯LED上的灯泡,但没有接通继电器,这不是预期的行为。问题是它不会总是那样工作。有时它完美地工作。然后它再次开始出现故障。没有确切的工作顺序。 现在我的问题是为什么这些电路会以这种方式工作。我认为这可能是因为它无间断地全天候工作。这种应用程序需要全天候工作。我使用PIC是因为我只了解pic。atmal比pic更可靠吗?(我问,因为atmal在大多数自动化应用中使用的频率比图片使用的频率更高)我需要数字电子专家的一些建议。这种工业应用如何构建?有什么特别的规则要遵循吗?如何设计更可靠的电路?专家的任何建议或指导将不胜感激。谢谢... 编辑 正如答案中所建议的那样,我将通过提供其他资源来帮助找出设计中的错误来编辑答案。 下图描述了构建电路后的外观。这是一个12V中心抽头变压器,可为电路供电,使用半波整流器进行整流,然后使用7805 IC进行调节。 下面是原理图设计。 如果需要任何其他信息,我将提供所需的一切。如果需要该程序,我将其添加。该程序有点长,它使用中断。

4
AVR闪存损坏
这个问题与AVR的解码本身有关。 项目信息: 我们有一个使用ATMEGA644P的电池供电产品。该应用程序永久以睡眠模式运行,并且仅每秒唤醒一次(RTC)或触发两个外部中断线之一。 该器件具有一个非常简单的引导加载程序,该引导加载程序通过UART(使用RS232接口IC)进行通信。它只是一种方便的方法来更新固件,因此不需要硬件ISP编程器。(引导加载程序需要校验和安全的电报) 该设备设计为具有内部掉电禁用功能,因为它使功耗加倍,并且必须延长电池寿命(我猜应该使用外部掉电检测-重新设计正在进行中)。 问题: 每隔一个月设备就会停止工作,这些设备上不会执行固件更新。但是,在进一步检查之后,这些设备的闪存内容似乎已损坏。此外,其中一些设备的电池仍然不错,但我不想排除某些欠压情况。 这是原始闪存内容(左)与损坏的内容(右)的比较: 一些观察: 损坏的块始终至少包含一个闪存页面(256字节),并且是页面对齐的。换句话说:仅影响整个页面,不影响单个字节。 损坏的内容大部分时间读为0xFF,但也可能包含其他值或完全是“随机”的。 图像左侧的小条显示了所有受影响的区域。对于此设备,它大约占闪存总内容的十分之一。 我们有一台只影响单个页面的设备。 完全有理由认为,在写入闪存时出现欠压情况会损坏闪存内容。但是,这意味着必须执行一些闪存敏感指令。 可能是由于欠压导致控制器随机重启,并且引导加载程序代码在此期间的行为完全不可预测。引用另一个论坛中有关欠电压的消息: “不仅会执行闪存中的随机指令,而且还会执行随机的指令周期(不能保证闪存中的代码会正确读取和解释)。与此同时,单片机的其他部分可能无法按设计运行,包括保护机制。” 问题: 您是否认为“电压不足并执行某些指令以更改闪存页面中的数据期间的随机行为” -解释是否合理?如果真是这样,为什么我们一直没有看到这种错误,只是一些软件问题(堆栈溢出,无效的指针)的原因。 您还有其他想法会导致这种腐败吗?这可能是由EMI / ESD引起的吗?

2
直接从C源代码编程AVR EEPROM
在AVR C源代码中包含以下代码时,显然可以直接对保险丝进行编程,而无需额外的命令或.hex文件: #include <avr/io.h> FUSES = { .low = LFUSE_DEFAULT , .high = HFUSE_DEFAULT , .extended = EFUSE_DEFAULT , }; 在EEPROM中编程值是否有类似的技巧? 我已经检查了/usr/lib/avr/include/avr/fuse.h在哪里可以找到有关宏的一些注释,但是找不到类似的注释,/usr/lib/avr/include/avr/eeprom.h并且解释预处理器的内容有点超出我的范围了。 如果我可以在C源代码中包括默认EEPROM值,那将非常方便。有人知道如何做到这一点吗? 编辑1: 此FUSES技巧仅在ISP时执行,而不在RUN时执行。因此,在控制器中生成的汇编代码中没有对保险丝进行编程。相反,程序员会自动在额外的FUSES编程周期中循环。 编辑2: 我在Linux上使用avr-gcc和avrdude工具链。
11 avr  c  attiny  eeprom 

2
您如何确定新的微控制器是否有故障?
我从未处理过来自数码相机的故障部件,但是我收到的3台新Atmel ATmega164A一直表现出极其奇怪的性能。 我将其范围缩小到与时钟有关,结果表明,所谓的“经过工厂校准”的内部振荡器产生的时钟信号在650-700 kHz之间抖动,而不是原来的1 MHz。我能够写入校准字节以使其非常接近1 MHz(仍然有些抖动),并且大多数情况下都可以正常工作,但是UART的工作方式并不正常,无论它们似乎输出连续的短脉冲流您要求他们做什么。 我已经处理过此微控制器的低功耗版本(164P),零问题,并决定将其放下并检查时钟输出,以及其稳定的1 MHz且无抖动。我倾向于得出这些164A芯片有缺陷的结论,但是我还有其他测试可以尝试确认这一点吗? 编辑:只是以为我会描述我测量时钟的过程。我已经启用了时钟输出熔丝位,并使用逻辑分析仪以很高的速率测量了适当的引脚。我有一个程序可以写入校准寄存器,OSCCAL并且已经能够尝试并尝试将错误频率提高到1 MHz。 编辑#2:经过进一步调查,似乎在一定程序大小后,微控制器开始工作阈。一个带有一个源文件并闪烁一个LED的简单项目似乎没问题,但是编译并链接我的任何其他文件(例如UART库或任何其他文件)而没有对这些方法进行函数调用都会导致微控制器在上述行为。电源连接良好,已进行了正确的去耦。目前我没有时间进一步调试它,因此我们改用了低功耗版本。我不确定确切的问题可能出在哪里1)164A和164P不兼容代码2)这两个uC的编程步骤不同3)单元有故障。我对我们的电路板设计充满信心,并将排除电源问题。不幸的是,我不能真正选择正确的答案,所以我将这个问题保留原样-也许我 将来会再次回到该问题。感谢所有提供有见地的评论或答案的人,它们对于开箱即用的uC问题可能对其他人很有用。

1
Arduino Bootloader详细信息
有人可以解释一下Arduino引导程序的工作原理吗?我不是在这里寻找高层次的答案,我已经阅读了代码,并明白了要点。我还阅读了另一篇文章(我什至是其中的回应者之一)。 Arduino IDE和引导加载程序代码之间发生了许多协议交互,最终导致了许多内联汇编指令,这些指令通过在串行接口上​​传输的程序对闪存进行自编程。 我不清楚的是在第270行: void (*app_start)(void) = 0x0000; ...我将其识别为函数指针的声明以及对NULL的初始化。在引导加载程序将委托给用户加载的代码执行的位置,随后会调用app_start。 当然,某种程度上app_start需要某种方式获取非NULL值才能将它们全部组合在一起。我没有在引导加载程序代码中看到这一点...它是否与由引导加载程序加载的程序进行了神奇的链接?我认为引导加载程序的主要部分是芯片复位后进入软件的入口。 大约70行汇编中必须包含一个秘密的解码器环,该环告诉主程序app_start的实际位置在哪里?也许这是Arduino IDE所利用的一些隐性知识?我所知道的是,如果有人不将app_start更改为指向0以外的其他位置,则引导加载程序代码将永远永久旋转自身……那么诀窍是什么? 单独说明一下,引导加载程序代码是否有可能依赖于中断,还是不行吗? 编辑 我对尝试将引导加载程序移植到Tiny AVR(特别是ATTiny44A)感兴趣,该AVR没有单独的存储空间用于引导加载程序代码。对我来说显而易见的是,引导加载程序代码依赖于某些熔丝设置和芯片支持,我想我真的很想知道将引导加载程序移植到没有这些熔丝和硬件的芯片上需要做什么。支持(但仍然具有自编程功能)? 我以为我可以使用AVR307的实现将USI用作半双工UART(使用Timer0中断和引脚更改中断)。谁能提供有关如何为不支持引导加载程序的硬件编写/移植引导加载程序代码的指南? 我想我会将引导程序代码放在地址main的正常位置(例如0x029e或编译器放置main的任何地方)。然后,我将使引导加载程序代码中的“地址”添加一个偏移量,该偏移量使我刚好超过main的结尾,并将“ app_start”设置为该地址。我是在正确地考虑这个问题还是我完全错过了什么?谢谢! 编辑2 FWIW,我找到了一个文档化的程序,该程序用于将Arduino草图加载到ATTiny85上,这是我最初处理此问题的地方...我认为这很简洁

2
单元测试AVR汇编语言
您如何对汇编代码进行单元测试? 我正在将串行伺服控制器作为hexapod机器人项目的一部分进行工作,并且代码已经变得越来越复杂了;)无论如何,作为C ++服务器开发人员,我习惯于在日常工作中使用单元测试,并且因此一直在尝试对我的AVR汇编代码进行相同类型的测试。我已经找到了一种对我来说行得通的方法(请参阅此处),但是我对是否缺少任何标准工具或技术感兴趣。 更新:对于那些感兴趣的人,现在可以在此处找到伺服控制器的完整资源和单元测试。
11 avr  robotics  serial  servo 

10
Linux / Mac AVR编程套件?
我已经编码和使用Arduino已有相当一段时间了。但是,我已经准备好使用没有arduino引导程序的直接AVR芯片。我的问题是这样做的资源是什么? 我想使用linux / mac,所以winavr和avrstudio一样是无法显示的。如果没有我想要的东西,那么我将购买Windows虚拟机。但是直到我确定为止。我想要的是某种使用avr-gcc的IDE。 作为这个问题的补充,有人有任何好的资源可以学习Avr的C语言吗?具体来说,如何为各种不同的芯片配置Makefiles等?
11 atmega  avr  linux  osx 

5
监视时钟周期以获取arduino / AVR上的代码?
是否可以监视代码块并确定代码在Arduino和/或AVR atmel处理器上执行的处理器时钟周期数?或者,我应该监视代码运行前后经过的微秒吗?注意:我不关心实时(例如,经过了多少实际秒数),而我担心的是“此代码需要CPU多少个时钟周期” 我可以提出的当前解决方案是来自time.c: #define clockCyclesPerMicrosecond() ( F_CPU / 1000000L ) #define clockCyclesToMicroseconds(a) ( (a) / clockCyclesPerMicrosecond() ) connection.c添加: #define microsecondsToClockCycles(a) ( (a) * clockCyclesPerMicrosecond() ) 通过这个帐户,我可以通过监视经过的微秒来计算经过的时钟周期,然后将其传递给microsecondsToClockCycles()。我的问题是,有没有更好的方法? 旁注:是否有足够的资源来监视AVR的性能。lmgtfy.com和各种论坛搜索都没有提供任何明显的结果,除了探索计时器 谢谢
11 arduino  avr  atmel  timer 

2
有没有一种方法不必轮询AVR的UART?
我正在通过UART从另一个AVR接收数据。但是我在做其他事情,所以不想一直不断轮询UART。我知道有中断,但只能看到一个要接收的中断,我认为仍然需要轮询才能完成传输。
10 avr  embedded 


2
有什么理由不在AVR上使用Timer0?
只是一个基本问题...对于arduino / avr / ATMega328,我发现了许多使用Timer1的示例(甚至有一个完整的库),但很少有使用Timer0(或Timer2)的示例。 现在,我知道使用这些定时器中的任何一个来控制ISR方法都将禁止在其相关引脚上使用PWM,但是是否有特定的原因使人们似乎远离Timer0?它是否在内部用于其他不应该惹的麻烦? 我当前的应用程序可以使用Timer1很好,我只是想知道我是否缺少其他一些经常被忽略的计时器。

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.