Questions tagged «attiny»

ATtiny是Atmel的小型低功耗8位RISC微控制器系列。通常在较小的Arduino原型开发平台板和项目中找到。

1
为什么当我调用wdt_disable()尝试关闭看门狗定时器时,我的AVR会复位?
我遇到了一个问题,即使在计时器上还有足够的时间,在AVR ATtiny84A上执行禁用看门狗序列实际上也会复位芯片。当在许多物理部件上运行相同的代码时,这会不一致地发生。有些每次都会重置,有些有时会重置,有些则永远不会重置。 为了演示该问题,我编写了一个简单的程序,该程序可以... 使看门狗超时1秒 重置看门狗 使白色LED闪烁0.1秒 闪烁白色LED熄灭0.1秒 禁用看门狗 看门狗使能和禁用之间的总时间少于0.3秒,但是有时在执行禁用序列时会发生看门狗复位。 这是代码: #define F_CPU 1000000 // Name used by delay.h. We are running 1Mhz (default fuses) #include <avr/io.h> #include <util/delay.h> #include <avr/wdt.h> // White LED connected to pin 8 - PA5 #define WHITE_LED_PORT PORTA #define WHITE_LED_DDR DDRA #define WHITE_LED_BIT 5 // Red …
34 arduino  avr  attiny  watchdog 

5
在微控制器电路中使电池持续很长时间
我希望使用一些小的电池(可能是纽扣电池)为ATtiny85V供电很长时间。 我已经研究了软件方面,我的代码是由看门狗定时器驱动的,关闭了未使用的模拟和数字转换器,芯片以1MHz的频率运行,等等。当然在这方面既忙又新它消耗了多少电流,但我希望基本上已将其最小化。 它每隔几秒钟醒来一次,对ADC进行电压电平检查,将其记录到ram中,然后返回睡眠状态。如果检测到串行线已连接,则将数据喷出。 但是,现在我正在查看整个电路,并想知道是否应该做一些事情使整个电路对电池更友好? 在设计一个组件(微控制器)具有重复但可变电流消耗的持久(简单)电路时,基本的基本原则是什么? 例如: LED指示灯有什么大不了的吗?电池没电了吗?我应该在其上放一个巨大的电阻以使其变暗,还是仅仅使电阻使用电池? 我应该使用旁路/去耦电容器来均衡从电池汲取的电流,还是电容器会浪费电池的电量? 微控制器仅需要1.8V,但我没有任何1.8V电池。我应该使用两节1.x电池并发送太多电压吗?我可以通过不使用很多伏特来延长电池寿命吗?我怎么做? 检查引脚为高电平还是低电平需要额外的功率吗?与无操作或某种算术相比,检查GP I / O引脚之一的状态是否有很多额外的功耗使用? 我模糊地知道如何计算(更模糊地如何测量)电流,电压,功率,但是我不确定这些东西中的哪一部分等同于电池寿命。电池寿命的重要衡量单位是库仑吗? 我有一个模糊的想法,认为电池充满了诸如以下内容: 收费,以安培小时为单位 能源,以瓦特小时为单位 功率,以瓦特为单位 但是我不清楚电路在运行时会“吃掉”什么。我已经阅读了大量的EE101和物理教科书,但实际上我没有任何实验经验。换句话说,我已经阅读了大量有关电池的信息,但是我不确定在实践中大多数含义是什么。 电阻器会耗尽电池寿命吗?做电容器吗?二极管吗?我怀疑它们都可以,但是哪个数字重要呢?阻抗?功耗?当前?电压? 有没有一种方法可以降低电压而不浪费电池?有没有办法在增加电池寿命的同时降低电压?

3
像普通的ISR一样使用AVR看门狗
我试图把头放在ATTinyX5系列的看门狗定时器上。因此,我读过的东西似乎使您可以使用它使程序在N秒内执行特定的操作,但从未真正展示过如何执行。其他人则认为它只会重置芯片,除非同时进行代码重置(这似乎是“正常”用法)。 有没有像TIMER1_COMPA_vect或类似方法那样使用WDT的方法。我注意到它有一个1秒的超时模式,我真的很想能够使用它使代码中的每1秒发生一次(并且最好在两者之间休眠)。 有什么想法吗? * 更新:*自从被询问以来,我指的是ATTinyX5数据表的 8.4节。不是我完全理解它,这是我的问题...
17 avr  attiny  watchdog 

7
使用Arduino作为编程器时如何在ATtiny85上设置时钟速度保险丝?
我正在按照本教程使用Arduino对ATtiny85进行编程,并使用它来播放一些音(通过压电扬声器)。我正在努力以正确的音调(我正在手动创建波形,因为ATtiny85不支持tone()函数)。 我认为问题可能归结于Arduino和ATtiny上不同的时钟速度。我知道可以在ATtiny上更改时钟速度,如何在arduino环境下完成此操作?

2
通过模拟输入引脚选择4位总线地址:蒙特卡洛模拟显示重叠的地址值
我使用ATtiny44微控制器为硕士论文设计了一个小型传感器PCB 。我的应用程序需要约200个这些板,并且16个始终在本地连接至控制器板。整个网络如下所示: 为了在控制器和传感器板上进行通信,我编写了自己的1针总线(基于时序)。唯一的问题是,当我将其数据发送到控制器板上时,传感器板必须具有一个地址才能知道其在网络中的位置。 因为我在ATtiny上只剩下了1个引脚,所以我想到了一个基于跳线的DAC电路,该电路应根据四个跳线的设置生成一个模拟电压。由于传感器电路使用值(47、470、1k,3k,4k7、10k,100k和220k),并且我想针对生产进行优化,因此我使用了以下DAC值(基本上是100k,50k,20k和10k) )。根据跳线设置,这应该给我一个介于0 V和760 mV之间的不错的值。正是我需要使用ATtiny的内部1.1 V参考电压作为模拟电压读取的内容。启动时,ATtiny会读取该电压并应知道其位置。 模拟此电路 –使用CircuitLab创建的原理图 从理论上讲,这很好。考虑电阻的公差时,我什至在LTspice中进行了蒙特卡洛分析,以确认没有重叠区域(所有电阻均为1%BTW)。您可以在下面找到此分析的图片。 现在,我生产了几块(幸运的是不是200块)这些板,但是有些板未能正确读取其地址(特别是在所有容差立即发挥作用的较高地址区域)。我测量了所有可能的解决方案,最后找出了我的问题。我最初的分析不包括5 V电源电压的容差,该电压是在每个控制器板上通过MC7805从12 V本地产生的。根据数据表,MC7805的输出电压在4.8至5.2 V之间。 在弄清楚这一点之后,我修改了蒙特卡洛分析。现在看起来像这样: 如您所见,有很多重叠的区域,我不能肯定地说这个电压只能表示这个地址。基本上所有的地址都以no开头。8可能会得到错误的读数(对于更高的地址,错误读数的可能性更高)。 我不喜欢比已经使用上板(作为论文我想优化生产)的一个添加不同的电阻值。 我不喜欢加电压参考(例如,齐纳二极管)喂DAC电阻网络。 我不能再修改控制板(并在那里使用更精确的稳压器)。 我仍然可以修改PCB设计/传感器板的原理图! 如何确保始终获得正确的地址读数(通过程序或通过更改电路)?

2
串行新手:为什么我不能将电线连接起来?
我试图通过USB-Serial转换器使用Arduino-esque代码从ATtiny85传输到PC,却不了解任何东西。我感到震惊和震惊,因为它不起作用。 我确认该微型计算机的其中一个引脚上的电压正在闪烁,但是当我将该引脚连接到USB串行电缆上进行发送或接收并尝试使用终端程序进行监听时,我什么也没收到。 我不确定如何判断哪一部分坏了。 我是否需要超过VCC,GND和TXD来传输串行信号? 细节: 微型程序的代码是在Arduino环境中编写的,至少根据LED指示灯,类似的代码成功地使所有4个“ PORTB”引脚闪烁。我使用HLT和Saporetti的代码让我使用C ++的Arduino方言对其进行编程。该程序仍以K开头。 #include <SoftwareSerial.h> SoftwareSerial s(0,1); //receive on "0", and transmit on "1" aka "PB1" aka pin 6 void setup() { s.begin(4800); } // assuming 1Mhz, 4800 baud void loop() { s.println(millis()); } // transmit something at every opportunity 翻译涉及很多,但是代码很基本。设置波特率的代码似乎假设为1MHz,但是幸运的是我的attiny出厂时具有保险丝,并以1MHz运行。无论如何,引脚6会根据LED闪烁其电压。 因此,我使用细线将FTDI USB串行转换器的“ ftdi”端连接到微小的一端:黑色到GND,红色到VCC,橙色到6。在PC上打开程序“ minicom”,设置波特率达到4800并等待,一无所有。与我的Boarduino通话时,没有任何麻烦。 …
14 attiny  arduino  serial  ftdi  usb 

3
Arduino不能做什么ATtiny?
受此Make Magazine youtube视频启发,我想在大多数项目中使用ATtiny芯片代替Arduino。视频作者警告说,某些Arduino功能在ATtinys上不起作用。是否有支持和不支持的内容的完整列表?
12 arduino  attiny 

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
需要帮助了解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 = …

1
ATtiny:不支持乘法?
的确ATtiny AVR没有硬件支持乘法?当我在代码中执行乘法时,它似乎工作正常。我还包括math.h并进行了sin()和cos()的计算。有人知道吗,这些计算是否会给我带来800个周期的巨额罚款?
10 avr  attiny 

3
ATtiny85功耗有望翻番
我正在尝试让ATTiny85耗尽电池电量。我有一个时钟为16.384 MHz的晶体,并配有8分频保险丝。Vcc为3.3伏。数据手册中的图22-7表示,在空闲(set_sleep_mode(SLEEP_MODE_IDLE); sleep_mode();)时,它的功耗应约为300 µA。实际上,我看到它的功耗更接近850 µA。我不知道为什么功耗是预期的两倍。我关闭了PRR中的所有内容,但timer0除外,该计时器已配置为每25 ms中断一次。因此,它应该将其大部分时间都花在空闲状态上,考虑到我仍然希望计时器计数,这是我能做的最好的事情。 保险丝为0x7f,0xdf,0xff。 这是此测试运行的代码: #include <Arduino.h> #include <EEPROM.h> #include <avr/sleep.h> #include <avr/power.h> #define P0 0 #define P1 1 #define P_UNUSED 2 ISR(TIMER0_COMPA_vect) { // do nothing - just wake up } void setup() { power_adc_disable(); power_usi_disable(); power_timer1_disable(); //PRR = _BV(PRADC) | _BV(PRTIM1) | _BV(PRUSI); // everything …

2
如何通过AA电池为Attiny供电?
我正在一个项目中,我想在环境光下为RGB Led供电。我已经使用Arduino Leonardo和led制作了原型。目前,该项目已插入计算机的USB端口,但是我想使用Attiny 45或84和AA电池。我最初是想使用3节AA不可充电电池,充满电后可提供约4.8伏的电压。问题是电压会随着时间下降,我希望LED保持恒定的亮度。我想到了一个稳压器,但是它需要高效,因为我希望电池可以使用很长时间。我看了一些,但不确定是否适合我的情况。 我正在使用的LED来自SparkFun- SparkFun RGB LED。 另一种方法是使用两节AA电池和一块升压板,如此处的SparkFun 3.3v突围,但电池寿命又是一个问题。我不确定如何通过升压板来计算电池使用量。 在这种情况下,电池寿命长,这意味着它可以连续使用数周(甚至数月)。我可能只用2或3块电池就无法实现。 因此,我的问题是这些选择之一是否会比另一个更好?如果没有3节AA电池且没有稳压器,亮度变化不会太大吗?使用第二个选项,电池可以使用很长时间吗?我还有其他选择吗? 我是硬件方面的新手,因此非常感谢您的帮助!

5
ATTiny13 — avr-gcc Hello World使用超过100个字节吗?
我正在尝试为ATTiny13编写程序。我的问题是它具有巨大的尺寸约束。好了,制作我的第一个Hello World程序时,只花了100个字节的程序空间就可以打开和关闭灯!我可以给avr-gcc提供任何选择来缩小此大小吗?另外,crt0中包含什么?我不太喜欢AVR组装,所以我不太了解。 我不想为这个项目而去组装。

2
ATtiny13A-无法使用CTC模式生成软件PWM
我正在尝试使用ATtiny13A制作遥控RGB LED灯。 我知道ATtiny85更适合于此目的,并且我知道我最终可能无法适应整个代码,但是现在我主要关心的是使用CTC模式下的中断生成软件PWM。 我不能在任何其它模式中操作(除了用快速PWM OCR0A作为TOP这基本上是相同的东西),因为我使用的IR接收器的代码需要它产生使用四氯化碳和38 kHz的频率OCR0A=122。 因此,我试图(并且我已经在互联网上看到人们提到了这一点)使用Output Compare A和Output Compare B中断来生成软件PWM。 OCR0A,IR代码也使用,它确定频率,我不在乎。并且OCR0B,确定将用于更改LED颜色的PWM的占空比。 我期待能够通过改变来获得具有0-100%占空比的PWM OCR0B从价值0到OCR0A。这是我对应该发生的事情的理解: 但是实际上是这样的(这是来自Proteus ISIS仿真): 正如您在下面看到的那样,我能够获得大约25%-75%的占空比,但是对于〜0-25%和〜75-100%,波形只是被卡住了并且不会改变。 黄线:硬件PWM 红线:具有固定占空比的软件PWM 绿线:占空比变化的软件PWM 这是我的代码: #ifndef F_CPU #define F_CPU (9600000UL) // 9.6 MHz #endif #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> int main(void) { cli(); TCCR0A = 0x00; // Init to zero TCCR0B = 0x00; …
8 avr  pwm  interrupts  attiny 

2
是否可以使用过时的ATTINY15 1.5Mhz时钟进行FCC豁免?
ATTINY15适用于设计FCC Part 15豁免电池供电产品,因为其1.6Mhz内部RC时钟刚好低于1.705Mhz截止值。 ATTINY2 / 4/85替换部件具有1.6Mhz兼容模式,但是该时钟是通过对内部6.4Mhz时钟进行分频而得出的。由于FCC豁免要求设备“不得产生或使用高于1.705 MHz的频率”,因此该替换部件似乎不符合豁免条件。 通过使用ATTINY2 / 4/85的内部128KHz时钟,似乎确实有资格获得豁免,但是这要慢得多,而且要慢得多,在某些应用中不切实际。 随着ATTINY15的枯竭,是否有任何好的方法可以设计出需要第15部分豁免的电池供电产品,这些产品需要比128KHz更大的功率,而无需增加外部振荡器?
8 attiny  fcc  attiny85 

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.