发 帖  
原厂入驻New
[问答] 可寻址LED如何与PIC18f452单片机配合使用
142 LED PIC18F452
分享
嗨,我正在做一个学校的项目,一直在艰难地让这些可寻址的RGBW发光二极管工作。我已经把时间定在数据表的150纳秒以内,并且在每比特1.25U+/-600纳秒内。我可以使4-5的工作始终如一。如果我在链条上再多加一些颜色,颜色就不相配,而且不会在LED条带顺序上变色,但是像第一和第三条这样的随机性是不行的。我用C来编码它们,没有循环,这有点单调乏味,而且代码很长,但就是这样。我想试着用汇编来编码。y但是我根据我的时钟(25MHZ晶体振荡器)计算出了时间,并且我节省的时间仍然在数据表的参数之内,就像我的C代码一样。我需要25为我的项目工作。如果我不能,我想我将只是复用正常的RGB LED,但这些是如此美好和光明,当他们工作!有没有人有经验和这些棘手的时机?我有SK68 12,但WS28 12有非常相似的定时。还有一个用于arduino的新像素库,用于ws2812,该库允许它们使用4MHZ时钟的uno工作。我找到了一个家伙的youtube视频,他把那个库移植到一个不同的PIC上,但是我没法让它为我的图片工作,也没法改变微控制器数据表的代码:(第5页的计时图表)https://cdn-shop.ada..com/.-files/1138/SK6812+LED+datasheet+.pdf.,我比这更早了。像这样的论坛社区。
0
2020-4-22 07:21:58   评论 分享淘帖 邀请回答
19个回答
我没有使用SK6812 LED的经验,但是PIC18F452是一个非常旧的设备,并且已经被PIC18F4520所取代,甚至相当旧。我不知道这对您的实现是否有任何影响,但是更现代的设备可能会有所帮助。查看您的代码、原型的示意图以及您正在使用的物理板的映像也会有所帮助。一些LED的随机波动听起来像是硬件问题,可能是电源旁路电容不足,以及地面和Vcc上的噪声。
2020-4-22 07:34:02 评论

举报

WS28 12型LED协议具有非常严格的时序约束。一个LED的GRB包中的数据字节之间或连续LED的包之间不允许有任何间隙。Arduino Uno有16MHz时钟,许多ATmega328P指令在一个时钟周期内执行。假设它大体上相当于64MHz的PIC18。我认为在25MHz的PIC18上,除非展开所有循环,否则无法足够准确地对定时进行比特轰击。忘记使用BITBUTIN——你负担不起任何出乎意料的银行选择代码,所以你必须使用内联汇编程序。对于40MHz时钟,应该可以使用索引寄存器从RAM中流出字节,该寄存器具有内部比特循环和外部字节循环。最坏的情况是:您可能需要解开位循环。
2020-4-22 07:44:32 评论

举报

嗯,BITBUG确实是个问题。你没有时间做其他事情,或者你的时间安排是你的问题。一种方法是使用spi,但是这不是最好的,但是比bitbang更好。你必须关心SPI时钟,但是你不需要注意逻辑1的定时和LED的零点。如果让spi完成工作,您只需发送正确的数据并正确配置,spi发送0和1的正确信号。只要上网搜索,你就能找到使用Spi来简化事情的帮助。然后,您可以配置这样的信号,您可以直接发送一个字节到LED。从该字节,CLC将发送它与LED的正确定时。有一个pdf微芯片用于确切的目的,在如何配置和设置CLC以获得那些信号的描述。在另一个论坛上,还有另一种方法,但没有相同的结果。费尔南多Healthor,我想,但不是英语。虽然使用了其他的硬件模块,但是很少的外部硬件也能工作,但是那是很久以前的事了。如果你想要一个非常好的解决方案,用CLC获得一个Pic,搜索Micro.PDF来处理ws LED控制器,并把描述到该图的端口。我想我的代码也在费尔南多Health.
2020-4-22 07:58:05 评论

举报

有关定时规范,请参阅wordpress文章“理解WS2812”。这给出了定时的分析。4mz时钟给出什么指令计数?PIC18是XTAL/4,你使用ASM吗?如果不是你的照片太慢,使它工作。我有一个PIC16F1847 @ 32兆赫XC8在自由模式下工作。只有1深。WS28 12和WS28 12BU将需要un滚动你的循环,以获得最大速度。
2020-4-22 08:16:47 评论

举报

嗨,像PIC16F18855这样简单的PIC16能够驱动Adafruit公司的8×32LEDNeopixel面板。我从MPLAB Xpress云:mplabxpress.micro..comI抓取了这个项目,我必须做一些修改,因为MCC在“方面”之间发生了变化。
2020-4-22 08:27:05 评论

举报

嗯,那个PIC也得到了CLC。CLC配置和数据发送到SPI吗?那PIC16,真的那么简单吗?我认为这是最新的。有其他PIC16与CLC,但有一个FoPro上的微芯片惠普的董事会与该PIC。XPress开发板DM164140。
2020-4-22 08:39:21 评论

举报

我在考虑使用内联汇编程序。似乎有点敲击不是解决问题的办法。正如许多人所说的那样,所有的循环完全破坏了时间。每次我需要改变任何东西时,都会敲打30个比特,这不是答案,因为30x 24比特=720行代码+任何额外的延迟。找到它并学习,非常感谢!我从没用过CIC的PIC单片机,谢谢!一定要抓住它,看看它。在那里也有一些CLC项目。我的代码只是用XTAL延迟敲击输出引脚。它没有环或任何东西,但C不是ASM。不是真的可行,但我只是想看看它是否可行。谢谢大家的帮助。
2020-4-22 08:53:37 评论

举报

我用PIC16F1827(和'47和'25)驱动WS2812B,使用USART(作为同步从机)用两个CCP驱动DSM,生成DSM的0和1定时。不需要任何一个臭豆腐…眨眼:我认为用PIC18F42驾驶25辆车几乎是注定要失败的。我没有详细研究过'452,但我怀疑使用SPI来生成位流是不行的,因为SPIBUF在这个类外围设备中不提供FIFO。所以在输出比特流中总是会有一个空隙,因为处理器不能够足够快地给SPIBUF提供数据以保持一个相干比特流。
2020-4-22 09:11:49 评论

举报

嗯,这些看起来根本不像我希望的那样简单。还有其他关于全彩色RGB的建议吗?
2020-4-22 09:19:01 评论

举报

也许是个疯狂的想法,但是同步多个处理器,或者使用从处理器来处理较小的LED库是否可能?
2020-4-22 09:30:30 评论

举报

或来自同一CPU的多个字符串。
2020-4-22 09:43:30 评论

举报

是的,是的。我可能最终会使用一个解码器和多个字符串。我松开的部分是8位颜色的选择和RGB之间的混合。除非我找到某种IC。任何人都知道任何RGB或RGBW LED是明亮的,良好的颜色。标准RGB LED的外观是粗略的,当你混合颜色。
2020-4-22 09:52:13 评论

举报

PIC18F452没有速度等级,所以简单地用10MHz替换25MHz晶体,并设置HSPLL振荡器模式的CONFIG得到40MHz的焦距。一旦你这样做了,在链中为多达85个LED对SK6812协议进行位碰撞只是使用内联汇编器来仔细地编码一个内部位循环和一个外部字节循环,以便从三个字节的颜色结构的C数组中流出字节。在40MHz的FoSC中,Tcy是0.1US,所以在紧凑的代码段中,精确定时变得相当合理。你甚至可以通过使用BRA将下一个指令保存为两个循环NOP来节省一些指令。在每次字符串更新期间需要禁用中断,每个LED占用28.8us,并且您有25个LED,因此您需要能够毫无问题地阻塞刚刚超过720uS。如果时间太长,您需要分割字符串——或者使用单独的发送例程在不同的I/O管脚上发送每个字符串,或者使用74HC238作为DEMUX,从单个I/O管脚的位敲击例程中控制多达8个字符串(因为PIC18架构没有间接的位指令)。当然,更明智的做法是简单地插入一个更新的更便宜的、功能更强的管脚兼容部件,如PIC18F46K22,它有一个内部振荡器,可以工作16MHz+4x锁相环,给你16MIP,使位和字节循环编码更加容易。我没有详细研究过,但是对于每位可用的24条指令(假设您在容差限制的慢端运行SK6812位定时),如果您有PRO许可证,并且打开所有速度优化,那么在纯C中它甚至可能实现。
2020-4-22 10:07:27 评论

举报

谢谢伊恩!我明天再试一试,看看效果如何。
2020-4-22 10:12:45 评论

举报

我在40MHzFosc上设计出了一些非常规的汇编程序,它满足PIC18上的0.3us:0.9us'0'位、0.6us:0.6us'1'位和9.6us全字节定时约束,同时从FSR0指向的数组中流式传输字节,并减少字节数以终止外部循环。h MPASM,并用MPLAB 8模拟器秒表对其进行了测试。您需要使用XC8内联汇编程序语法重写它。#endasm表单)并添加代码来保存关键寄存器(可能是FSR0、STATUS和WREG),设置FSR0以指向颜色数据数组。
2020-4-22 10:18:08 评论

举报

提示:使用近似限定符将访问字节中的字节码分配为C变量,然后在汇编程序中将其引用为yyBytCeNoT。您需要使用--ADDERQUAL编译器选项启用地址限定符,请参阅手册,了解如何在项目属性的MPLLAB下进行该操作。
2020-4-22 10:28:08 评论

举报

WS28 12B和SK68 12 LED的时序不像数据表所暗示的那样重要。唯一要紧的是设置0或1位的高时间。虽然假设您有~400ns高/800ns低和~800ns高/400ns低,但是低时间可以是50000ns(50us)以下的任何长度,即复位/锁存时间。我尝试保持在大约0纳秒的高纳秒。看起来,600纳秒的高电平被认为是1比特。所以你实际上可以发送的每个脉冲之间都有间隙,只要这些间隙保持低电平。在尝试使用SPI端口时,我了解到了这个事实,因为SPI字节之间总是有间隔被超时。因此,考虑使用SPI端口来生成输出。我用PIC24做这个。我使用一个例程将8个颜色位转换成4字节的数据。nybble(4位)表示一点颜色(我把波特率设置为每字节1.5us):Bit_0=0b1000;375ns高,然后是1125nslowBit_1=0b1110;1125ns高,然后是375ns低。因此,通过SPI总线发送总共12字节(每G、R、B颜色4字节),我可以容易地改变t他有一个LED的颜色。发送更多的数据当然会在字符串中设置连续LED的颜色。这样做的好处是,你可以让它成为一个中断处理器,它对CPU的要求很小。如果你的PIC有DMA,你可以走得更远,使之成为DMA驱动事件。不要忘记,如果使用SPI端口,则需要读取端口来清除接收到的字节(中断处理程序的一部分)。
2020-4-22 10:37:16 评论

举报

没有时间阅读整个线程,我读到的是WS2812B,所以请看这里:http://www..hip.com/...m744144-p2.aspx#744751
2020-4-22 10:42:38 评论

举报

在最近的一个项目中,我必须得到一个用PIC18F25K80工作的WS28 12B LED。WS28 12B是一个整洁的小LED,但它的工作是一个绝对的噩梦!该设备使用非标准的通信协议和数据表缺乏,善意地说。

只有小组成员才能发言,加入小组>>

109个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表