Questions tagged «atmega»

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

3
正确使用引脚更改中断
我正在尝试使用引脚更改中断来检测按下的按钮。到目前为止,我从未使用过此类中断,并且存在一些问题,因此我想确定这是否正确。 如果我正确地获得了数据表,则必须执行以下操作以使用引脚更改中断: 在PCMSK寄存器中设置要控制的PIN 启用PIN寄存器以进行引脚更改中断控制(PCICR) 启用中断 使用相应的中断向量 项目:简单的Moodlamp,通过4个按钮控制颜色。 设定: Atmega168A-PU 4个迷你按钮开关 MOSFETs控制我的3瓦RGB LED 这是我正在使用的代码无法正常工作: #include <avr/io.h> #include <stdint.h> #include <avr/interrupt.h> #include <util/delay.h> #define BUTTON1 (1<<PC5) #define BUTTON2 (1<<PC4) #define BUTTON3 (1<<PC3) #define BUTTON4 (1<<PC2) #define GREEN (1<<PB1) #define BLUE (1<<PB2) #define RED (1<<PB3) void init() { // enable LED DDRB |= …


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

3
这个AVR微控制器的电路最少需要什么零件?
我的Arduino Uno有一个ATMEGA328P-PU微控制器,板上还有许多其他东西。我想在不使用Arduino软件的情况下对芯片进行编程,而对其他组件的数量最少。我最终希望在不使用Arduino的情况下创建东西,并且想了解板上的其他部分,并根据需要将它们添加回去。我对C和gcc很满意,所以我可能可以弄清楚软件部分。但是,除了下面的这两个产品之外,我还需要带微控制器吗? Atmel编程器 微控制器

2
需要帮助了解AVR ATMEGA / ATTINY计时器镜像输出
我正在尝试使用Atmel AVR微控制器的Timer1(用于Arduino的AtMega328或ATTiny85)来输出两个彼此互为镜像的时钟信号。我试图生成的频率是一个1 MHz到2 MHz或更高的变量,除非使用控制器中几乎不需要执行的其他任何操作,否则它们太高了,无法使用代码来切换输出引脚。因此,我想直接在关联的引脚上使用计时器输出。我正在使用GCC工具链,因此不受arduino库或语言的限制。 Atmega328中的Timer1有两个与之相关的引脚,我可以从中获得两个相同的1MHz至2MHz信号。尽管数据表似乎说我可以得到一个反相波形,但它使我感到困惑。通过使用Timer1的PWM设置,我还能够获得两个在1 MHz时占空比不同的信号,但是两个信号同时变为高电平,而较短的信号则较早变为低电平。这不适合我的项目。我什至不需要PWM脉冲宽度变化,仅需要两个相位相同的相同“时钟”类型信号即可。 我并不是要有人为此写代码,我只需要有人告诉我定时器的哪个模式/标志应该在与定时器相关的两个引脚之一上给我一个简单的反相波形。如果可能的话,我想避免对其中一个输出使用外部反相电路,除非这是唯一的选择。 如果在ATTiny中完全可行,那就更好了。ATTiny也有2个与一个定时器相关的引脚,但是我不确定它具有与ATMega相同的选项。 我已经在PCB上连接了20 MHz晶体和电容器,并且ATMega328上的20 MHz时钟工作可靠。在ATTiny85 PCB上,我有一个8 MHz的晶体,该晶体也能可靠地工作。 请帮忙。谢谢。 更新:到目前为止,答案和评论中存在一些无效的假设,所以也许我应该澄清一下:请注意,在我的原始帖子中,我已声明我使用的是20 MHz时钟,而不是8 MHz,并且不需要PWM。 提供足够高输出频率的唯一模式似乎是CTC模式,因为PWM模式不适用于2 MHz输出。有没有办法在CTC模式下将定时器1的输出A或输出B反相? 我现在已经切换到标准的Arduino Uno(ATMega328,16 MHz)而不是我自己的20 MHz板上来检查我的代码,这是我的代码,用于在CTC模式下从9和10引脚(定时器)获得一个稳定的2 MHz稳定时钟1个输出引脚: #define tick 9 #define tock 10 void setup() { pinMode(tick, OUTPUT); pinMode(tock, OUTPUT); TCCR1A = _BV(COM1A0) | _BV(COM1B0) ; // activate both output pins TCCR1B = …

4
在ATMega328p上使用16 MHz晶体
我如何在ATMega328p上设置保险丝位以使用16MHz晶体?我独自尝试了此操作,并杀死了我拥有的最后一个atmega。这次我需要一些建议。 我正在使用的水晶是这个 我假设这是数据手册中列出的“全摆幅晶体振荡器”,因此CKSEL3..1应该为011。 然后,我需要设置启动时间。我假设“晶体振荡器,缓慢上升的功率”是比较安全的选择,因此CKSEL0应该为1,SUT1..0应该为11。 我不想将时钟除以8,所以CKDIV8应该为1 CKOUT我将保留默认值1 如果我的假设正确(以及如何验证?),我的lfuse位设置将为0xf7。 我这样做对吗? 这没用。看这里
10 atmega 

2
ATMega328外部AREF连接
根据ATMega328数据表,第24.9.1节: 如果将外部基准电压施加到AREF引脚,则可能不使用内部基准电压选项。 从Arduino 参考页面: 或者,您可以通过5K电阻将外部基准电压连接到AREF引脚,从而可以在外部和内部基准电压之间切换。注意,由于AREF引脚上有一个内部32K电阻,该电阻会改变用作参考电压。这两个用作分压器,因此,例如,通过电阻器施加的2.5V电压将在AREF引脚上产生2.5 * 32 /(32 + 5)=〜2.2V。 ATMega328数据手册在表29.16 ADC特性中确认了“内部32k电阻”参考,参考输入阻抗= 32 kOhm。 话虽如此,以上两种说法似乎在某种程度上是对立的。我有一个应用程序,其中一些传感器输出0-5V满量程,另一些传感器输出0-1.8V满量程。当对1.8V传感器进行采样并切换至5V传感器的内部AVCC参考电压时,分辨率的提高将有利于该应用。 Arduino参考页建议这样做是可行的,因为您已通过5kOhm串联电阻耦合到1.8V AREF,并考虑到内部32kOhm电阻隐含的分压器。这只是来自Arduino参考的不好建议,还是做这种事情实际上是一种普遍的做法?Atmel的陈述是否仅限于在没有外部限流电阻的情况下施加到AREF的外部电压(如果是,则考虑内部32k电阻)? 顺便说一句,显然,使用适当构建的运算放大器将1.8V信号缩放至5V可以达到类似的结果,但是如果同样可以由板载ADC处理的话,那么增加的复杂性和部件似乎很浪费。通过利用可变参考电压。同样,如果您可以使自己确信所感测的信号不会超过1.1V,则可以利用内部参考电压。再次,对我来说,使用为低压传感器供电的1.8V调节器来设置参考值似乎更为优雅。

1
ATmega的新“ PB”变体在掉电检测器中是否有错误?
多年来,我们已经在许多产品中成功使用了ATmega48 / 88/168/328微控制器。现在,我们已经考虑从A和PA变体切换到新的PB变体(因为在新产品中我们将需要额外的引脚,计时器和UART,因为它变得更便宜,并且因为似乎旧的变体将不再使用),所以我们换了一个ATmega328PB的ATmega328A。断电后,它似乎经常出现混乱。这些问题从未在旧版本中出现过。 定期停电对于我们产品的用例而言是正常的。我们使用一个开关电源(像这样),将其设置为5V,并在ATmega的VCC上使用220µF的电容器,以使SRAM在几分钟内保持断电状态,以存储非任务状态的内部状态。至关重要,但可以通过在重新启动后立即使用来显着提高用户体验(这些状态经常变化足以使EEPROM不适用)。这一直有效。 但是,使用新的ATmega328PB,在电源中断后,芯片复位,而在MCUSR中没有找到复位条件,时钟似乎变得一团糟。 每个保险丝都设置了欠压检测器。我们尝试了所有可用的bodlevel,所有这些错误都发生了。 我们使用外部20 MHz,每个保险丝也正确设置。 我们尝试了3种不同的芯片,所以这不是一次焊接或其他硬件故障。 发生错误后,时钟通常设置为慢2.5倍,表明MCU由8 MHz内部振荡器提供时钟。但是,有时放慢速度约为6倍。这意味着更改时钟分频器不会是软件错误,因为我无法通过软件设置保险丝,并且时钟分频器无法将时钟除以2.5或6。 因此,我的第一个怀疑是新的“时钟故障检测”保险丝。但是,无论打开还是关闭,其行为都保持不变。 为了排除软件的特殊性,我从头开始编写了一个简单的测试程序,该程序除了从计时器中断中以100 Hz的频率切换输出外,不执行其他任何操作,并在每次重启后以LED指示激活了哪些复位条件(如从MCUSR读取)。其余的硬件也被删除,只有单片机和调节器在那里(指示器指示灯带有串联电阻)。 结果 大约有2/3的时间,没有发生任何有趣的事情。停电后,单片机将恢复工作,掉电复位和加电复位指示灯均亮起。 (在图像上,红色是切换的引脚,蓝色是VCC。在此图像上,清晰可见2.7 V的欠压。我对其他欠压设置进行了相同的测试,结果完全相同,所以我将省略那些图片) 大约1/3的时间,上述错误发生,而当电力又回来了,没有掉电复位,上电复位指标都亮了起来!输出是不同的,好像MCU在用奇怪的时钟滴答作响。它并不混乱,但是,它以相同的频率不断滴答作响。 有趣的是,在这种情况下,掉电检测器似乎是完全不活动的,因为在下一次电源中断后(有时恢复了正确的时钟,有时没有恢复正确的时钟),在掉电检测器之后,输出仍保持良好的切换。超出级别。在这种情况下,时钟有时会变快,而其他时候会变慢: 在这些测试中,我使用了16K CK / 14CK + 4.1 ms作为启动延迟(但是65 ms的延迟不能避免这些问题)。 这是放大的图片,您可以清楚地看到VCC在2 ms内在5 V下达到稳定状态: 在上图中,mcu正确启动。 有趣的是,如果没有,电源电压甚至更快地上升到稳定的5 V(似乎MCU的许多部分都没有上电,因此在启动期间消耗的电流更少) 以下是失败的开始的图像: 请注意,在电源电压稳定后超过85毫秒后,软件将开始运行,而不是需要10.5毫秒。用于启动延迟的保险丝仍然相同,为16K CK / 14CK + 4.1 ms。 还需要注意的是,在电源关闭后,VCC稳定在1.1至1.2伏左右(旧的ATmega328A变型下降至0.6-0.7伏左右)。它保持了几分钟。如果我等待足够长的时间(大约半小时或更长时间),则MCU总是可以正确启动!因此,看来问题在于周围有1.1伏特,根据数据表,这不能保证足以进行上电复位。但这足以进行掉电复位! 除这些情况外,掉电检测器工作正常。它在第一张图像上可见(达到bodlevel时输出信号停止,并且由于mcu的部分关闭,电压降变慢)。当我将VCC降低到略低于bodlevel并使其再次爬回时,我进行了测试,在这种情况下,mcu总是正确地重新启动,只有掉电的复位指示灯亮起。 我是否错过了明显的东西,或者ATmega328PB的掉电检测器是否存在严重的错误? 编辑: 有趣的是,以上问题仅在我在调节器之前中断电源时出现。如果我在调节器(或使用实验室电源)之后中断它,则永远不会发生问题。好像上升的电压形状引起了问题。但是,正如您从上一张图像中看到的那样,电压上升相当不错,并且很快就稳定下来。 编辑2 我用16 MHz而不是20 …

1
ATmega328上的AVR计时器加速
当在ATmega328上以64的时钟预分频器运行时,我的一个定时器在执行的特定时间由于未知原因而加速。 我在ATmega328上使用了两个定时器来生成TLC5940所需的时钟(请参见下面的原因;这与问题无关紧要)。TIMER0使用快速PWM开启生成时钟信号OC0B,其设置如下: TCCR0A = 0 |(0<<COM0A1) // Bits 7:6 – COM0A1:0: Compare Match Output A Mode |(0<<COM0A0) // |(1<<COM0B1) // Bits 5:4 – COM0B1:0: Compare Match Output B Mode |(0<<COM0B0) |(1<<WGM01) // Bits 1:0 – WGM01:0: Waveform Generation Mode |(1<<WGM00) ; TCCR0B = 0 |(0<<FOC0A) // Force Output Compare A …
9 avr  atmega  spi  timer 

1
用合成的ROM内核模拟一个简单的测试台
我对FPGA领域是一个全新的领域,并认为我将从一个非常简单的项目开始:一个4位7段解码器。我纯粹用VHDL编写的第一个版本(基本上是单个组合select,不需要时钟),并且似乎可以使用,但我也想尝试使用Xilinx ISE中的“ IP内核”功能。 因此,现在我正在使用“ ISE Project Explorer” GUI,并使用ROM内核创建了一个新项目。生成的VHDL代码为: LIBRARY ieee; USE ieee.std_logic_1164.ALL; -- synthesis translate_off LIBRARY XilinxCoreLib; -- synthesis translate_on ENTITY SSROM IS PORT ( clka : IN STD_LOGIC; addra : IN STD_LOGIC_VECTOR(3 DOWNTO 0); douta : OUT STD_LOGIC_VECTOR(6 DOWNTO 0) ); END SSROM; ARCHITECTURE SSROM_a OF SSROM IS -- …

5
从带有ATmega32的嵌入式C(ATmega AVR系列)开始
我周围有一块ATmega32板,我认为从微控制器开始是完美的。我曾经在嵌入式C中做过些小事(那是在我获得此板时),但是由于某些原因,流程停止了。现在我有两个问题: 对于AVR系列,以C开始的最佳免费资源是什么。我知道AVR-GCC,但正在寻找一些入门指南或免费书籍。 我应该直接跳到C还是先通过ASM?我看到周围有很多asm书。那么什么是更好的选择? 在Internet上搜索时,我在http://retrointerface.com/?p=30上找到了ATmega32的Arduino引导加载程序,但问题是我不愿对保险丝位和所有器件进行修补。这样做安全吗?
9 avr  atmega  books  c 

2
UART的最低ATMega328速度
我正在设计一个低功耗项目,该项目将使ATMega328低速运行以降低功耗。 当前的计划是将UART连接到RF Link接收器,以1200baud的速率进行通信。 不过,我想知道的是,我能以最低速度运行ATMega328,但仍能运行1200baud UART。1MHz足够快吗?

2
PIC12F675 GP4不起作用
我正在为一个项目使用PIC12F675,除一件事情外,其他所有东西都工作正常。GP4不能用作数字IO。我已经看了很多配置和代码,但是找不到任何东西。 配置: #pragma config FOSC = INTRCCLK #pragma config WDTE = OFF #pragma config PWRTE = OFF #pragma config MCLRE = OFF #pragma config BOREN = ON #pragma config CP = OFF #pragma config CPD = OFF 码: #include <xc.h> #include <math.h> #include "config.h" #define _XTAL_FREQ 4000000 void delay(unsigned int …
9 pic  c  embedded  programming  audio  oscillator  spark  dc-dc-converter  boost  charge-pump  eagle  analog  battery-charging  failure  humidity  hard-drive  power-supply  battery-charging  charger  solar-energy  solar-charge-controller  pcb  eagle  arduino  voltage  power-supply  usb  charger  power-delivery  resistors  led-strip  series  usb  bootloader  transceiver  digital-logic  integrated-circuit  ram  transistors  led  raspberry-pi  driver  altium  usb  transceiver  piezoelectricity  adc  psoc  arduino  analog  pwm  raspberry-pi  converter  transformer  switch-mode-power-supply  power-electronics  dc-dc-converter  phase-shift  analog  comparator  phototransistor  safety  grounding  current  circuit-protection  rcd  batteries  current  battery-operated  power-consumption  power-electronics  bridge-rectifier  full-bridge  ethernet  resistance  mosfet  ltspice  mosfet-driver  ftdi  synchronous  fifo  microcontroller  avr  atmega  atmega328p  verilog  error  modelsim  power-supply  solar-cell  usb-pd  i2c  uart 

1
UART发生意外的Atmega16响应
UART发生意外的Atmega16响应 问题摘要 我已经用代码刷新了Atmega16,这应该导致Atmega16通过终端发送回我发送给它的任何字符。我得到了答复,但是我发送的角色很少。通过更改波特率,我可以看到正确的输出,但是我不明白为什么正确的波特率有效。 更多详情 我正在尝试自己学习更多有关固件编程的信息,因为我很喜欢。到目前为止,在uni上进行的固件编程中,我们已经获得了框架代码文件,这些文件可以完成许多外围设备接口并为我们设置了文件,但是我想自己学习一下。在整个帖子中,我对我在这里所做的事情有一些疑问,但我将在最后逐条列出。如果您对我的知识有任何误解或潜在的空白,我将不胜感激您可能会提供的任何意见。 编码 我纷纷亮出到我Atmega16的代码“在AVR-GCC使用USART”取几乎行线从教程发现此页面上。我只添加了F_CPU的#define。原始代码没有针对F_CPU的#define,因此我的代码无法在AtmelStudio 7中进行编译。有人可以解释为什么作者未在原始文件中定义F_CPU吗?我猜他们可能正在使用Atmel Studio 7以外的其他工具或编译器,但我不能肯定地说。 #include <avr/io.h> #define F_CPU 7372800 //this was chosen because the tutorial states this is the frequency we want to operate at #define USART_BAUDRATE 9600 #define BAUD_PRESCALE (((( F_CPU / 16) + ( USART_BAUDRATE / 2)) / ( USART_BAUDRATE )) - …

2
需要帮助逆向工程和了解小电路
我是一名电子学生,有一天我打开了家里有的电表EM21,发现它的主体由两个主要部分组成: 电表主体,连接到电网并测量电压和电流(理论上,它具有电表的所有智能功能) LCD显示屏向用户显示有关测量的实时信息(哑屏,具有足够的智能来控制LCD,按钮并使用感应功能请求车身提供电压/电流/功率信息) 令人敬畏的是,LCD组件由人体供电,并与人体进行通信,仅使用感应(非接触式)。 [LCD with buttons]-----coil <magnetism magic> coil-----[meter body] 在几个小时内,我试图使电路反向,该电路利用耦合为带有按钮的LCD屏幕提供能量,同时将该耦合用作非接触式通信通道。 这是最终结果: 模拟此电路 –使用CircuitLab创建的原理图 谢谢晶体管和/ u / eyal0 @ Reddit整理了连接 这些是真正的吞噬电路的照片: 前(在一个选项卡中打开) BACK(在另一个选项卡中打开,然后在两者之间上下班,它们彼此对齐) 前标签 PWR SRC用于为电路供电(主体通过其为LCD电路供电)的线圈 (您可以检查我是否正确地获得了图表?) 谢谢/ u / InductorMan @ Reddit指出我在图中出现的C4 / R4错误。 我对此有一些疑问,对此我找不到答案: 线圈如何为ATMEGA提供直流电流?VCC如何直接连接到线圈的一端,而不会油炸ATMEGA? Q1的作用是什么? 什么是WB2组件? 哪些ATMEGA引脚用于通信?我怎样才能(用示波器)“监听”他们并发现通信协议? AVCC和AREF在图中的接线方式如何? 如何轻松找到电容器和齐纳二极管的值? 谢谢! 链接:有关Reddit的持续讨论

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.