问题标签 [attiny]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
timer - attiny85: OC1B/!OC1B 输出示例?
我有一个压电换能器连接到我的 attiny85 引脚的 2 个,我正在使用定时器和中断在 AC 模式@4khz 下通过软件驱动它。
我想将其切换到使用 OC1B/!OC1B (PB4,PB3) 的硬件解决方案(无中断),但我不确定它是否符合我的想法(反转,OC1B/pb4 = !OC1B/ pb3)。
有人可以提供使用 OC1B/!OC1B 的指针或示例,或者我如何将其配置为反向输出@4khz?
algorithm - tinyAVR:最著名的 8 位和 16 位因子乘法例程?
“比 avr200b.asm 快”?mpy8u
来自 avr200b.asm 的-routine用于Atmel 的 AVR 系列的那些不执行任何MUL
指令的处理器似乎非常通用,但是mpy16u
对于将两个较低的结果字节旋转 16 次而不是 8 次看起来很草率。Antonio提出了一个快速的 16×16→16使用 64 周期最坏情况的无符号乘法,不包括调用/返回开销。
我随意建议优化目标为最坏情况周期数、字数(RAM 和闪存)、寄存器使用情况和预期周期数,按优先级递减的顺序排列。
(有减少核心AVR(“个位数”-ATtiny,10/20/40),包括时间在内的差异,我建议忽略。)
(注意:不要认为这里的任何主张都是理所当然的,至少在没有独立确认的情况下是这样。)
目前最广为人知的 8×8→8/16、16×16→16/32 和 16×8→16/24 位的 AVR 乘法例程是MUL
什么?
rfid - 解读来自 RDM630 RFID 阅读器的数据
我正在尝试使用 Attiny2313 和 RDM630 RFID 阅读器构建基于 RFID 的开门器。编程或让两个 IC 通过 UART 相互通信没有问题。问题是数据的解释。我无法理解 RDM630 发送到 Attiny 的内容,所以我通过 RS232/USB 适配器将它连接起来,这就是我在 PC 上得到的:
显示 = ASCII:
显示设置为 HEX:
卡上写的是:0000714511 010,59151
谁能帮我理解数据?
arduino - AtTiny85 和 Arduino (I2C) 之间的简单通信
嗨,我想通过 I2C 将 arduino pro mini 连接到我的 AtTiny85。
arduino 应该告诉服装打开或关闭 LED。arduino 设法打开了我的衣服上的 LED,但它永远不会熄灭。
我不知道为什么?
这是我的主从代码:
掌握:
奴隶:
c - 使用时间溢出中断时的毛刺
我猜,我的CODE中的溢出中断(用于将 8 位定时器的分辨率从 16µs/步提高到 1µs/步)有一些问题。当程序在我的主循环中的 if 语句中时,似乎溢出中断触发,从而搞砸了!
pInt是一个“标志变量”,表示 PCINT 已被触发。每次触发溢出中断时,tot_overflow 变量都会递增。
我使用 ATtiny85 作为 RC 开关,当来自接收器的 µs 高于 1555 时,它应该在 PB2 引脚上变为低电平,当 µs 低于 1490 时变为高电平。
会发生以下情况:当检查 µs 是否高于 1555 或低于 1490并且使用溢出中断它有时会在 1490-1555 的“死区”中将 PB2 引脚高/低,而不应该在“死区”之外,有时会在“死区”之外!这是关于故障的视频。请注意,在我的代码中,绿色 LED 是redLED,黄色 LED 是greenLED 。
我对此很陌生,我不确定为什么会这样,我不明白为什么代码不起作用。我已经查看了 CTC 功能,但我看不出它会有所帮助,因为我仍然必须使用定时器溢出中断来获得我想要的 1µs/步的分辨率。
编辑
我尝试了几种变体(@yann-vernier 的建议),但仍然无法正常工作,这是最接近工作代码的方法:
这部分我没有开始工作:
我不确定我明白上面发生了什么,我唯一知道的是我可能做错了!当我评论上述部分时,它的工作方式与 mu 旧代码相同!
它是接近还是我仍然在蓝色?
c - 是否可以将 16 位值与 8 位比较匹配 ISR 进行比较
我正在尝试制作一个分辨率比 ATtiny85 8 位定时器/计数器更高的伺服控制器。到目前为止,我已经设法在 21'000 µs 的时间内在我的伺服系统上获得了大约 2000 个位置(1µs/步)。我还设法以不同的速度顺序移动 5 个伺服系统,但现在我想同步移动它们。
我最大的问题是我不明白我应该如何实现它!我环顾了其他伺服代码,包括servo8bit库,并试图找到一种方法。似乎大多数示例都使用比较匹配 ISR 来“同时”移动伺服系统,我的问题是我有一个 16 位整数要比较。
有没有办法做一些魔术,所以我可以使用 8 位比较匹配 ISR 和我的 16 位整数?或者你们中是否有人对我如何在不使用比较匹配 ISR 的情况下同步移动伺服系统有其他建议?
我希望我的问题有意义!
因为我还没有任何代码可以显示(只有没有比较匹配 ISR 的有缺陷的尝试是没有意义的)如果有帮助,我会将链接发布到我的TinyServo代码。
编辑1:
这是我提到的代码的一部分,第一次没有发布:
编辑2:
这是我认为代码应该如何工作的说明:
......但它没有!
avr - 编程 Attiny85
我想知道如何将我使用 AVR Studio 4 编写的程序上传到 ATtiny85。我基本上是在使用本教程http://blog.smileymicros.com/smileys-workshop-10-moving-beyond-arduino/除了用 attiny85 而不是 atmega328 做所有事情。我从 HighLow tech 的 ATtiny 库中获得了 pins_arduino.h。
我已经在 AVR Studio 4 中成功编译,现在想知道如何上传到 Attiny85。
谢谢
c - 使用 ATtiny 和 Atmel Studio 处理 32 位数字
我想知道 ATtiny,特别是 ATtiny24 如何在内存中存储 32 位无符号整数。我正在尝试获取 32 位值并将其写入 EEPROM 中的 32 位位置。我尝试使用简单的掩码,但每次尝试时,我都会正确获取低两个字节(lsb),而高两个字节全为零。例如,当我尝试写入:0x12345678 时,输出为:0x00005678。Atmel Studio 中是否有我需要设置的设置,或者我是否需要使用遮罩以外的其他方法。
最终,我希望能够读取 32 位计数器值并将其写入 EEPROM 中的特定位置。我正在修改现有电路,因此无法使用串行输出进行调试。
代码片段:
主要:
功能:
EEprom_Long_Write:
EEPROM_写:
c++ - I2C 地址 > 63 不适用于 atTiny85
嗨,我在使用 I2C 处理多个 attiny85 芯片时遇到了一个大问题:
据我所知,服装使用 7 位地址进行通信。我正在使用 TinyWireS 库,它对我来说非常好用,直到我到达地址:'64',即二进制的 '1000000'。最高可用地址应为“1111111”。
这就是发生的事情:
奴隶:
Attiny85:当通过 I2C 接收到 msg 时打开或关闭 LED。
从地址:64
掌握:
Arduino专业迷你版:
发送消息(0,真);//作品!片上LED:64个开关
发送消息(64,真);//失败!芯片上的 LED:64 关闭。
你知道如何解决这个问题吗?
我正在使用的 TinyWireS 版本:https ://github.com/rambo/TinyWire/tree/master/TinyWireS
c++ - 使用 TinyWireS 库修复 I2C 地址问题
嘿,我最近发布了一个关于 I2C(从)库TinyWireS的问题。无论出于何种原因,我都无法使用高于 63 的从属地址。
我现在想启动一个新线程来解决这个问题:
您可以在我的上一篇文章中找到有关我项目的更多信息主从代码和电路仍然相同。
我发现了什么:
当主机试图通过特定地址与从机通信时,从机调用 ISR 函数(文件:usiTwiSlave.c 行:569)。如果主机发送到不同的从机,甚至会调用此函数,因为它会检查地址是否正确。
但:
当我告诉主服务器连接到从服务器 > 63 ISR 永远不会执行。不幸的是,我没有找到调用 ISR 函数的位置。我搜索了每个文件,但找不到任何“父”功能。
我很确定我已经接近找到错误,但我没有太多 C/C++ 经验。
我希望你能帮帮我!