Questions tagged «atmega»

ATMega是Atmel微控制器AVR系列的一个家族。这是Arduino原型平台的主要微控制器。请在您的问题中指定特定的零件号。

7
我如何让atmega328依靠电池运行一年?
情境 我为宿舍创建了一个漂亮的电子门锁。当前它是一个带伺服[解锁]门的Arduino Diecimila。它具有一个带有3x4按钮和5个LED的数字键盘(2个意向对和一个LED)。它目前还可以在手机充电器上运行。 我现在已经对其进行了重新设计,使其可以在独立的Arduino(ATmega328)上运行,但是我真的很希望它可以在AA电池甚至9V电池上运行。 对于软件部分,我认为我可以sleep在循环方法内放置一定时间的调用,以保持ATmega功耗尽可能低。并让LED的“闪烁”时间尽可能长。 问题1 如果在板子进入休眠状态的几毫秒内按下一个按钮,它会被“记住” /“保持”直到它退出睡眠状态,然后在按下按钮时被拿起吗? 在睡眠状态下处理此按钮的最佳方法是什么?我可以将其编码以在按钮活动时唤醒,还是必须让它休眠10毫秒。在每个循环中? 问题2 如何计算要在10个月内使用此设备需要使用几节AA电池的数学方法? 另外,我不知道如何测量每分钟左右的平均用电量,因为它会快速交替等。 设备

7
如果我省略I2C线路上的上拉电阻会怎样?
刚才我意识到I 2 C数据和时钟线(SDA和SCL)必须具有上拉电阻。 好了,根据下面的示意图,我已经使用DS1307 RTC构建了几个时钟(请参见数据表)。注意,我省略了两个上拉电阻。 两个时钟都可以正常工作,其中一个时钟已经工作了3个月以上。那怎么可能?无论如何,我想知道: 省略I 2 C上拉时会发生什么? 缺少上拉电阻是否可能损坏板上的这两个IC中的任何一个? 我得到的答案可以解决我将ATmega328P连接到DS1307 RTC的特定情况,就像我提供的原理图一样,但是如果问题不是太广泛,那么了解通常省略上拉电阻会发生什么会有所帮助。 ,即在I 2 C操作的其他情况下。 PS。我确实在网上搜索以找到答案,但是可以找到有关确定引体向上尺寸的文章。 更新:我使用的是Arduino IDE 1.03,并且我的固件使用DS1307RTC Arduino库(通过其功能RTC.read()和RTC.write())处理RTC 。该库反过来又Wire.h用来与RTC对话。 更新2:下面是一系列示波器镜头,它们帮助我解释了I 2 C 如何在没有外部上拉电阻的情况下工作。 更新3(在添加I 2 C上拉之后):以下是在I 2 C线(在同一板上)上添加适当的(4K7)上拉电阻后拍摄的另一系列示波器。上升时间从大约5 µs降至290 ns。I 2 C现在更加快乐。
33 atmega  i2c  pullup  rtc 

5
ATMega8:为什么必须连接VCC和AVCC?
我经常读到,将VCC与AVCC连接是一种好习惯。即使在ATMega8数据表中也是如此: AVCC是A / D转换器,端口C(3..0)和ADC(7..6)的电源电压引脚。即使不使用ADC,它也应从外部连接到VCC。如果使用ADC,则应通过低通滤波器将其连接到VCC。请注意,端口C(5..4)使用数字电源电压VCC。 但是我无处可寻地解释为什么必须将它们连接起来。无需连接VCC和AVCC即可使LED闪烁的简单电路。 我只需要接受它,还是有充分的理由?
20 avr  atmega  basic 

5
如何在ATmega16上读取数字输入?
要读取ATmega16上的数字输入(按钮),我该怎么办?我必须启用上拉电阻还是可以使用10 kohm电阻?一些简单的代码是什么?只需简单的“在按下时打开LED指示灯”即可。 有初学者的教程吗?我曾尝试使用谷歌搜索和AVR Freaks,但是所有事情都演变成一场战斗,我没有得到答案。我真的还没有找到关于这些东西的任何教程。大量的特定信息,但是关于我的AVR微控制器却并非如此简单...
18 avr  atmega 

6
将ATMega328与内部振荡器一起使用?
我有一个我认为最适合ATMega328P的项目。但是,在我见过的每个简单项目中,人们总是连接一个16MHz的外部振荡器。从我所看到的,它应该有一个8MHz的内部振荡器。我的项目不需要大量的处理能力,时序也不需要非常精确(除了UART和I2C)。我也有一个程序员,所以我不必担心引导程序。 我是否有理由使用外部振荡器?
18 avr  atmega  oscillator  clock 

9
实时读取大量的模拟传感器
我正在尝试构建一个像吉他一样脖子的类MIDI控制器。在那个脖子上,有巨大的压力传感器矩阵。控制器将模拟3个字符串。 它的工作方式是:有3条长条状的双面铜带(宽度为0.5厘米,与脖子长一样),它们与电源(可能是3.3V或5V,暂时无关紧要)相连。在这些条带上是一层Velostat,可根据压力改变电阻率。在速凝器的顶部将是另一层连接到某物的铜带行或单元,其通过速凝器层吐出电压读数。由于脖子长约40厘米,因此将至少有80行。 如果您将底部的3条铜带想象成沿着脖子的图表列,则传感器将是单元格还是行,具体取决于测量方法(我认为一个人也可以多路复用这些列,然后有一些特殊条件可能会使此操作变得更容易:由于这是一个类似吉他的控制器,因此不需要测量每个交互!只有最接近控制器主体的触摸才重要。8位的分辨率也应该足够准确。255个压力水平可能仍然超出了需要。 现在的困难点: 测量必须足够实时,以检测锤击等。(不知道需要多高的采样率-为了获得良好的测量和可玩性,需要以几kHz的频率估算),并且控制器的数字输出应为MIDI(在3个单独的通道上-每个字符串一个)或可以用Raspberry Pi处理的数字信号。 现在,由于我的知识真的很有限,所以我想不出合适的工具来完成这项工作。我所知道的是:有可能。有一个相似但不同的控制器,它使用了非常相似的技术(我实际上对其进行了逆向工程,直到我注意到他们拥有专利,并且关于其操作方式的信息并不像我想的那样神秘),这称为ROLI海岸。 TL; DR: 大约240个传感器 可以分成80组,由同一条线路供电 这是一个实时应用程序,我需要从触摸的每个传感器获取压力(某些条件适用,请参见上文) 在此先感谢您,我知道这里有很多书。我很感谢您的任何建议,如果您能帮助我完成我打算制造的可怕混乱,我将非常高兴! 到目前为止,我想到的是: 多行和多行复用,使用MCP3008或更大的ADC读取每个单元并链接(菊花链或类似树的)ATmega,这只会将位置最低的交互作用推向最终信号,但是从我的计算来看,这可能会成为瓶颈通讯开销。还有一个较早的型号包括带状电位器,由于设计不好(多次尝试,效果还不够好),我已将其丢弃。 编辑/更新: 感谢到目前为止的好建议!多亏了他们,我现在能够更清楚地表达我的问题: 我有一个80行* 3列的压力传感器矩阵。当人与传感器矩阵进行交互时,附近的多个传感器将仅沿一列进行触摸。列是机械分离的。传感器的电阻介于100 Ohm和1 kOhm之间。所有这些传感器都需要以8位的深度进行读取,处理并以至少1 kHz的速率发送结果。因此,一次读取/处理所需的时间不到一毫秒。每列的最终输出需要为:对于float32为4个字节,对于uint8为1个字节。float32将指示沿该列的第一次互动的平均位置。交互被定义为压力高于某个阈值的连续传感器簇。这是处理混在一起的地方:色谱柱将向下移动,直到读数超过阈值。然后将其视为交互的开始。存储每个传感器的压力和位置,直到第一个传感器下降到阈值以下(最多(可能)有四个)连续传感器为止。从记录的交互的所有传感器中,将只处理两个传感器-读取最高压力(最低电阻)的传感器,而直接读取最高压力或最高压力的传感器。浮点位置是通过将两个传感器位置的压力加权平均后得出的。交互的总压力将只是两个夹在0和255之间的压力之和(将unit8的两个压力相加到uint16中并除以2而不舍入,丢弃不需要的位-这应该很快)。这需要在每一列上进行。然后将15字节大小的结果通过SPI发送到充当合成器的小型计算机(Raspberry Pi B3)。我对传输的方法没有兴趣。如果SPI不是适合该工作的工具,我愿意采用Raspberry Pi可以处理的任何通信方法。由于这是一种音乐互动应用程序,因此延迟至关重要。 我的确切问题是:可以用一个微控制器解决这个问题而又不会花很多钱吗?我买不起价值数百美元的集成电路用于一个业余项目。您会推荐什么硬件?我需要警惕一些非显而易见的警告吗? 到目前为止,我从答案中得出的方法是分别给每一列供电,然后用5个通过SPI连接到Arduino的16通道ADC(ADS7961)读出行。我担心这可能不是最简单/最便宜的方法,或者不够快而无法达到> 1 kHz的速率。 免责声明:在电气工程方面,我通常是一名理论化学家,并且是一名糟糕的业余爱好者,我所知道的一切都是自学成才的,并且没有任何专业背景(这又是我寻求知识渊博的人的帮助的原因)。我确实知道围绕软件的方式。关于软件的任何事情,我都会花足够的时间解决。另外,我是德国人,所以请原谅语法缺陷。

2
如何使用我的SMD Arduino来编程单独的DIP ATmega328?
我有一个带有表面贴装(SMD)微控制器的arduino: 我知道如何将DIP arduino用作DIP ATmega328的程序员。这很容易-您只需将微控制器放入支架即可。 但是,对于表面贴装的Arduino来说,这并不明显。拆焊微控制器是一种方法,但这是棘手的且具有破坏性。 我可以使用此Arduino作为DIP ATmega328的程序员而不会严重损坏开发板吗?如果是这样,怎么办?

2
防止AVR闪存通过ISP读取?
我正在尝试保护整个闪存免于通过ISP读取。它具有引导程序,能够自编程应用程序部分。 将锁定字节设置为: LB1/LB2 不会让用户使用引导加载程序上传新固件。 BLB12/BLB11BLB01&BLB02如果我没有记错的话,也不会阻止通过ISP读取闪存。 因此,有没有办法让用户通过自定义引导加载程序更新固件并保护闪存不被同时读取?
15 avr  atmega  protection 

1
V-USB如何固定ATmega328p的内置SPI?
我正在研究一个V-USB项目,该项目使用ATmega328p显示为键盘。USB部分运行良好(这不是我的第一个V-USB项目),但是当我使用来启动V-USB堆栈后usbInit(),对SD卡库的所有调用都会失败。如果我之前调用过相同的函数usbInit(),那么一切都将完美运行。 我使用了一个名为Diavolino的Arduino克隆,但没有Arduino /接线框架。我将USB连接到数字I / O 2和3,将SD卡连接到10-13(内置SPI线)。 我浏览了SD卡库,发现除了之外没有使用任何中断或寄存器的迹象SPxx。我也grep想过V-USB代码,但它甚至没有触及SPxx寄存器。 问题的第一个迹象是当设备应该访问SD卡时断开连接时。然后,我将usbPoll()其wdt_reset()调用到所有SD卡处理循环中,发现在写入的情况下,卡发送完最后两个字节(CRC-16)后将永远等待卡的确认。 我使用的SD卡库是sd_rawRoland Riegel提供的。
14 avr  atmega  spi  usb-device  sd 

3
用MOSFET和微控制器驱动直流电动机?
我正在开发一个使用Atmega328微控制器,功率为3.3V的纳米四轴飞行器以及非常小的有刷直流电动机。这些电机使用的平均电流约为3.7V时为800mA。 最初,为了驱动它们,我使用了L293D电机驱动器,但是该组件效率很低。电动机以最大功率运行时测得的电流约为500mA,因此推力远低于应有的水平。 现在,要解决此问题,我将用4个逻辑电平MOSFET替换该电机驱动器。经过长时间的搜索,我找到了这个(2SK4033)。 你知道它是否应该工作吗?我必须与二极管一起使用吗?如果答案为“是”,那么这个(MBR360RLG)怎么办? 我之所以选择这些组件也是因为我可以从同一家在线商店购买它们。

1
如何从使用Arduino作为编程器切换到外部编程器?
从Arduino过渡到普通AVR微控制器和最少支持组件的三部分系列的第二部分(第一部分,第三部分) 我已经看到很多人在Internet上提出这个问题,所以这里是: 我已经知道如何使用Arduino作为程序员来编程和使用准系统ATmega328。我现在想开始在Arduino IDE中使用外部编程器。 在过渡过程中我应该如何进行?我应该学什么?(如果提供一些部分的迷你教程作为答案的一部分,那将是很好的)

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

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问题可能对其他人很有用。

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

2
未使用的模拟输入该怎么办?
我正在使用ATmega328p atmel微控制器开发应用程序。我从28 PDIP版本开始,但是现在我想使用32 TQFP,在编译Altium项目后,我注意到它有2个额外的输入。 这些输入是ADC7:6,它们“用作A / D转换器的模拟输入。这些引脚由模拟电源供电,并用作10位ADC通道”,根据数据手册。 我在网上阅读过一些人使用ADC并具有浮动输入时得到未知结果的信息。我读到的它们是激活下拉电阻,但我看不到如何配置它们(因为它们不属于I / O端口)。另外,我的应用程序甚至根本不使用A / D转换器。 最佳做法是什么?我应该连接一个外部下拉电阻吗?忽略Altium错误?

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.