Questions tagged «avr»

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

2
烧录引导程序后ATTiny85不工作
我的ATTiny85有问题。我应该提到我使用Arduino作为ISP对其进行编程。 在我决定将时钟速度从1MHz提升到20MHz之前,我的ATTiny工作良好,因此我从Boards菜单中选择了20MHz的ATTiny85,然后单击Tools> Burn Bootloader。但这很愚蠢,因为现在我的ATTiny根本不起作用。我无法在上面上传草图,如果尝试,我会收到以下消息: avrdude: Yikes! Invalid device signature. Double check connections and try again, or use -F to override this check. 所以我想问的是,有没有办法重置我所做的事情?甚至更好,使其工作在20MHz?

2
AVR中断服务例程的执行速度未达到预期的速度(指令开销?)
我正在开发一个具有7个输入的小型逻辑分析仪。我的目标设备是ATmega168时钟频率为20MHz的设备。为了检测逻辑更改,我使用了引脚更改中断。现在,我试图找出可以检测到这些引脚变化的最低采样率。我确定的最小值为5.6 µs(178.5 kHz)。低于此速率的每个信号我都无法正确捕获。 我的代码是用C(avr-gcc)编写的。我的例程如下所示: ISR() { pinc = PINC; // char timestamp_ll = TCNT1L; // char timestamp_lh = TCNT1H; // char timestamp_h = timerh; // 2 byte integer stack_counter++; } 我捕获的信号变化位于pinc。为了对其进行本地化,我有一个4字节长的时间戳值。 在数据表中,我读到了中断服务程序需要5个时钟周期才能进入,而5个时钟周期则可以返回主程序。我假设我的每个命令ISR()要花1个时钟来执行;因此总而言之,应该有5 + 5 + 5 = 15时钟的开销。一个时钟的持续时间应根据20MHz的时钟速率而定1/20000000 = 0.00000005 = 50 ns。那么,以秒为单位的总开销应为:15 * 50 ns = 750 ns = …

3
检查RTC上的备用电压会耗尽备用电池吗?
我正在开发一个ATMega项目,该项目将节省时间,因此我正在尝试使它具有软件时间(基于millis()),DS1307或DS3231(ChronoDot)RTC的选项。 最基本的说,我想做的是提供一个可焊接的ChronoDot头,然后用某种方式在软件中检测是否已连接ChronoDot并切换为使用它。通常,检查DS1307或DS3231是否存在(因为它们使用相同的I2C寄存器)通常很容易,但是在进行最初的检查后,它们之间确实确实有些偏离,并且后者具有更多功能。所以我仍然想确定连接了哪个。通常,我计划直接在板上放置一个作为默认选项的DS1307焊料,而DS3231支持将仅通过双4引脚接头连接器提供完整的ChronoDot。ChronoDot本质上适合DS1307正常运行的地方(在这种情况下不会填充)。我特别关注ChronoDot的主要原因是它 它很流行,易于获取,并且对于最终用户不需要SMD焊接(如果是套件的话)。所以,这就是我在想... DS1307和DS3231的芯片上都有一条Vbat线,但实际上并不需要任何东西。但是,ChronoDot的分线板上有一个实际的VBat引脚。我可能只能连接ChronoDot接头连接器上的Vbat,而不连接DS1307,并将其连接到我ATMega上的数字输入引脚。但是该输入引脚是否已通过电阻下拉至地(不确定该值是多少……也许是4.7k?)。如果我的EE理论是正确的,那么我可以读取该引脚,如果我的电平低,则没有计时码字;但是如果我的电平高,则存在。 像这样: 模拟此电路 –使用CircuitLab创建的原理图 我的主要问题是,这样做是否会耗尽RTC上的备用电池?通常,在提供5V主电源时,不会从备用电池汲取电流,但是将其连接到数字输入是否会一直从电池获取电能?或者,可以说,有一种我需要在从引脚读取后将其插入以使其“断开连接”的模式吗?我知道我可以将其更改为输出,但是我相信,如果将其设置为输出并且设置为低电平,则基本上可以将电池接地。 无论如何,我的EE课程是很久以前的。在此理论上的任何帮助将不胜感激。

2
为热敏电阻选择偏置电阻
Rt是热敏电阻。Rb是偏置电阻,我需要计算该值。我感兴趣的温度为的Rt电阻范围4k...115k。我想要将其缩放到整个ADC分辨率,即10bit 0...1023。因此,当Rt = RbADC将其转换为时511。不知道这是可能的,但我非常希望得到0ADC读数时,Rt = 4k和1023当Rt = 115k(或其他方式)。 在MC内部,我有一个查询表,它将根据热敏电阻数据表中描述的曲线将ADC值转换为温度。

2
创建USB HID设备的最简单方法
我正在研究如何入侵自己拥有的RC遥控器。我打算做的就是将其打开,然后接入电位计。我想读取电位计提供的模拟值,并将信号发送到我的PC。本质上,我想将其重新用作HID USB接口的操纵杆。当然,HID接口不是必需的,但是我相信这是实现此目的的最佳方法。 我对AVR微控制器系列非常熟悉,因此尽管起初我可以尝试使用ATMega8进行V-USB之类的尝试。同时,我开始认为这可能变得不必要地困难。有没有更简单的方法来实现这种连接而又不花钱?
8 usb  avr  atmega 

5
AVR的C代码强制转换有什么问题?
我定义了两个变量: uint8_t a[2]; uint16_t b; 接下来,我想a用作类型的变量uint16_t,例如 b = (uint16_t)a; 但这是错误的!我的程序无法正确使用此类代码。当我替换b为uint8_t b[2]并使用元素操作时,一切都OK 。 为什么?
8 avr  c 

3
这种数字数字LCD叫什么类型?
我已经在体重秤,计算器,仪表,千分尺等上多次看过这种类型的LCD。我知道它是一种相当传统的显示器,但是我非常喜欢它的紧凑,简单,甚至与TFT或智能手机相比,价格甚至更低,键入触摸显示。 [ 这叫什么?@ kevlar1818和@stevenvh的回答:“七段显示”] 我想使用这种类型的LCD,例如,我刚从Digikey目录中找到了这种8位数的VIM-878。这是它的数据表。 我如何与之交互?我想知道从简单的AVR微控制器(如Atmega8)与其进行接口的一种好/常见的方式-最好与物理上不太大的接口电路/部件进行接口。 我认为需要某种驱动程序或多路复用器?我想我正在寻找其他与这种LCD交互方面有更好经验的人一个新的视角。

3
业余爱好者的ARM设置可以像此AVR一样简单吗?
我喜欢Atmel AVR设置对于业余爱好者汇编语言编程的简单性。例如: 将普通的ATmega DIP芯片{A}放在面包板上 将6针连接到连接到计算机(例如)的USB编程器{B}。(在写入和正常操作期间,芯片都通过此连接的一部分供电)。 使用任何文本编辑器编写汇编语言程序。 使用Avra {C}汇编程序 使用avrdude {D}将程序写入芯片 ARM世界是从根本上讲是更高层次/更复杂的世界,还是可以告诉我等效于{A} {B} {C}和{D}的类似设置的等效条件?仅限Windows的所有内容与我无关。 谢谢。 注意:简单设置的动机是汇编编程,我想完全避开编译器和IDE。
8 avr  arm  assembly  avrdude 

3
如何实现模拟地平面
我已经在许多Atmel数据表中看到了这张图片。这是来自ATTiny48 / 88数据表。 有人可以详细解释如何在2层板上正确实现吗?我必须想象模拟接地层必须以某种方式连接到PCB上的数字接地层,还是在AVR内部发生?虚线是按字面意思理解为模拟接地平面的形状和范围吗(图中没有尺寸,所以我对此表示怀疑)?
8 avr  adc  analog  ground 

1
如何为AVR Atmega328p创建静态库?
我正在尝试创建一个类似于C语言中的Arduino的库。 我曾经尝试过,尽管我丢失了代码,但我记得只是简单地获取了对未定义引用的加载,这些未定义引用是在头文件和包含所有目标文件的库中指定的(由avr-objdump检查)。 我想知道我应该如何编译该库(示例makefile)以及如何将程序编译到该库。另外,我是否需要针对每种AVR和时钟速度重新编译该库,或者是否可以解决? 如果您需要更多信息,请询问。 谢谢 编辑:示例(不起作用) 程式 #include "test.h" int main(void) { test_function(); } 测试 #include "test.h" void test_function() { int i; i++; } 测试 #ifndef __TEST_H_ #define __TEST_H_ void test_function(void); #endif
8 avr  c  library  avr-gcc 

2
从MCU引脚驱动压电蜂鸣器
我正在寻找将压电蜂鸣器连接到MCU(在我的情况下为STM8S)的正确电路。我没有用于特定蜂鸣器的部件号\数据表,但我在数据表中发现了许多类似的原理图: 其中一些还具有保护二极管(如本问题所述),该驱动器中连接到压电蜂鸣器的二极管的功能是什么? 直接连接到MCU引脚时,我的蜂鸣器有效(测得的电流约为3mA)。 所以这里有问题: 如果通过蜂鸣器的电流过低,我真的需要一个晶体管吗? 将非压电扬声器连接到MCU的好电路是什么?我曾尝试使用带有500Ohm串联电阻的8Ohm扬声器-声音很低。


4
AVR自行解码
是否还有其他人曾经在几个月后AVR神秘地停止工作,但对其重新编程会使其恢复正常运行的情况? 我正在无线传感器网络中运行一堆atmega328。我现在有3次(大约一年),其中一个刚刚停止工作。我将程序重新刻录到它,然后它将再次开始工作。它并不总是相同的单元,因此看起来好像不是有缺陷的芯片。 看起来这将是一件相当灾难性的事情,它将使人们无法使用AVR,因此,这显然与我的特殊情况有关。我只是想知道是否有人遇到过这种情况,并且可能会有一些提示。 我的电池电量不足3.3V,因此电压下降太低,无法每隔几个月运行一次,因此必须更换充电电池。模块使用睡眠模式和看门狗定时器睡眠60秒,读取读数,将其广播回基站,然后再次睡眠。这些模块与arduino兼容,因此我没有翻转“不要让我重新刻录此”字样。
8 avr  flash  arduino 

7
使用MCU测量0-1 MHz(0.25Hz分辨率)方波
我需要测量方波的频率,该频率可以在0到1MHz之间变化,分辨率为0.25Hz。 我还没有决定使用哪个控制器,但是它很可能是20pin Attiny的控制器之一。 通常,我如何测量低频信号将通过使用两个定时器来配置,其中一个配置为定时器捕获模式以在外部信号的上升沿中断,另一个定时器设置为每秒中断一次,因此前一个定时器在1秒后计数寄存器值将等于信号的频率。 但是,这种方法显然无法以0.25Hz的分辨率捕获0到1MHz范围内的信号,为此,我需要一个22Bit计数器(AFAIK 8bit micros仅具有8 / 16bit计数器)。 我曾经想过的一个想法是在将信号应用于微控制器之前先对其进行分频,但这是不切实际的,因为必须将信号除以61,因此频率只能每61秒更新一次,而我希望每隔几秒更新一次。 还有另一种方法可以让频率每4秒更新一次吗? 更新: 最简单的解决方案是使用外部中断或定时器捕获在信号的上升沿中断,并使isr增量为type变量long int。每4秒钟读取一次变量(以允许测量低至0.25Hz的频率)。 更新2: 正如JustJeff所指出的,一个8位MCU将无法跟上1MHz的信号,从而排除了在每个上升沿中断并增加long int... 我选择了timororr建议的方法。一旦我实现了它,我会回发并分享结果。感谢大家的建议。 进度报告: Iv'e开始测试此处提出的一些想法。首先,我尝试了vicatcu的代码。存在一个明显的问题,即TCNT1在计算频率后仍未清除-没什么大不了的... 然后,我在调试代码时注意到,大约每2到7倍的频率被计算出来,定时器1(配置为对外部事件进行计数的定时器)的溢出计数将减少2。我将其归结为定时器0 ISR的等待时间,并决定将ISR的if语句块移至主要(请参见下面的代码段),并在ISR中设置一个标志。一些调试显示,第一次测量是可以的,但随后的每次读取都将使Timer 1的溢出计数超过2。这我无法解释-我希望它不会超过...。 int main() { while(1) { if(global_task_timer_ms > 0 && (T0_overflow == 1)) { global_task_timer_ms--; T0_overflow = 0; } ..... } } 接下来,我决定尝试实施timrorrs建议。要生成必要的间隔(每个timer_isr中断之间大约15毫秒),我将必须将两个8位定时器级联,因为Atmega16上仅有的16位定时器被用来捕获外部信号的上升沿。 我认为此解决方案将行之有效,并且效率会更高,因为大部分开销都转移到了计时器上,并且仅剩一个简短的isr供CPU处理。但是它不如我所希望的那样准确,测量值来回移动了约70Hz,这在高频下我不介意,但在低频下绝对不能接受。我没有花太多时间来分析问题,但是我猜想计时器的级联设置不太准确,因为我在一个速度较慢的具有2个16位计时器的8051控制器上实现了与调速建议类似的安排,结果相当准确。 现在,我又回到了vicatcu的建议,但是将频率计算移到了Timer 0 isr (请参见下面的代码段)中,此代码产生了一致且合理的测量结果。稍加校准后,精度应约为+/- …

2
BLDC和三相逆变器
我想从DVD / CD-rom播放器运行/控制BLDC电机,并找到了一个原理图,即所谓的三相逆变器(请参见本页右图:http : //en.wikipedia.org/ wiki / Inverter_%28electrical%29#Three_phase_inverters)。 我已经用一些不同类型的晶体管和一个ATtiny2313来实现信号/定时和晶体管开路,但是我没有让BLDC运行。我认为我可以正确地点亮LED,但不能为BLDC供电。我的设置中没有“反并联二极管”。 现在我的问题是,您认为我可以使用BC639在示意图中制作NPN吗?我可以花3,50欧元得到50,所以我也可以将它们用于其他东西。对于反电动势的“反并联二极管”呢,我需要那些吗?电机不需要非常快地转动,轻松的速度就足够了。关于时序,打开/脉冲需要多长时间(几毫秒)?还是我需要使用其他填充/不同的晶体管/示意图? 谢谢您的帮助。
8 avr  motor  driver 

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.