ATTiny85内部时钟和单线

时间:2018-01-27 13:38:15

标签: avr attiny

ATTiny85上的内部时钟对于单线定时是否足够精确?

https://learn.sparkfun.com/tutorials/ws2812-breakout-hookup-guide个单线时序似乎需要0.05us范围内的精度,因此AVR在8MHZ时10%的时钟误差会导致0.0125us大小的时序差异(假设10%误差数字是准确的) ,它在频率上有10%的误差,而不是每个脉冲的+/- 10%的差异。)

没有多少保证金 - 但这还不够好吗?

3 个答案:

答案 0 :(得分:1)

首先, WS2812 LED 1-wire。 WS2812的控制协议在datasheet

中描述

简短的回答是,ATTiny85,整个AVR系列也有足够的时钟精度来控制WS2812链。但是应该在汇编程序中编写例程,也不应该允许中断,以保证匹配时序请求。编程时,内部振荡器的8MHz速度可能足以同时向两条WS2812链输出不同的数据。

因此,当运行8MHz±10%时,一个时钟周期将为112 ... 138 ns。

数据表要求(公差为150ns):

  • 发送“one”时:高电平为550 ... 850ns; - 6个时钟周期(672 ... 828)匹配此范围(也是5个时钟周期(560 ... 690ns)匹配)
  • 低水平 - 450 ... 750ns; - 5个周期(560 ... 690ns)
  • 传输“零”时:高电平200 ... 500ns; - 3个周期(336 ... 414ns)
  • 低水平650 ... 950ns; - 6个周期(672 ... 828)。

因此,正如您所看到的,考虑到时钟源的公差±10%,您可以找到保证与所需间隔匹配的整数周期数。

根据经验,如果跟随脉冲的低电平将延长几百纳秒,它仍然有效。

答案 1 :(得分:0)

使用带UART的内部振荡器存在已知问题 - 定时精度为2%,内部振荡器出厂设置最高可达10%。虽然它可以校准(AVR为此目的注册了OSCCAL),但它的频率受温度的影响。

值得一试,但温度变化或工作电压波动可能不可靠。

参考文献:ATmega's internal oscillator - how bad is itTiming accuracy on tiny2313Tuning internal oscilator

答案 2 :(得分:0)

NeoPixels(WS2812B)的时序要求足够宽,唯一真正关键的部分是1位的最小宽度。 16Mhz的ATtiny85可以快速从GPIO引脚驱动一串它们。在8Mhz,它可能无法工作(我还没有尝试过)。我刚刚发布了一个小型Arduino草图,它允许您在不使用任何RAM的情况下在ATtiny85上控制任何长度的NeoPixel字符串。

https://github.com/bitbank2/NeoPixel

对于具有硬件SPI的设备(例如ATMega328p),最好使用SPI移出这些位(也包含在我的代码中)。