屏幕驱动一般分为串口与并口两种通信类型,并口驱动需要的io口更动,一般小屏的并口屏会占用8个io口,即能同时传输一个字节的8位数据,串口通信需要的io口更少,串口是通过输入输出信号与时钟信号配合通过时序得到具体的通信数据。spi通信协议一般需要cs、sclk、miso、mosi,而在屏幕上一般不需要miso即不需要从设备到主机的输入。 学习屏幕的驱动必须要先了解屏幕的驱动ic,小屏的驱动ic大多是内置在屏内的,不同的驱动ic需要使用不同的驱动程序驱动,一般不能共用程序,不同的ic的命令表是不同的,屏幕的驱动就是通过命令表中的命令控制像素的显示,所以驱动屏幕的程序主要是看ic对应的命令表。 点亮 Read More
pwm 播放音频
声音使用pwm 模拟 dac 输出 ,pwm的原理就是在高频率下按点空比翻转电平以达到类似线性模拟信号的目的,翻转的频率由时钟源最高频率与设置的分辨率值决定,大概是时针频率/ (2的分辨率次方) ,可能还有取模的步骤,分辨率就是一个周期内能控制的细腻程度,因为这种细粒度的控制其实现是需要时钟脉冲的,所以分辨率越高pwm的频率就只能越低,分辨率为1位时,pwm频率为最高时钟频率的一半。 使用pwm 输出音频一般是对音质没什么要求的场景,硬件资源可能也有限,可以选择 8bit 的采样深度,8khz的采样率,这样音频数据会比较小, 内容也能正常听清,pwm 的分辨率设置为8bit ,频率按时钟源来计 Read More
esp32c3 hal 架构笔记
构建过程 大量的构建过程都在各个库中的 build.rs 中实现,主要是通过不同的构建目录将预定点的链接文件复制到输出目录中,并通过 cargo:rustc-link-search= 指令将对应的目录加入到链接脚本的查询目录中,最后在构建是 通过 link-arg= 加上指定的入口链接脚本 构建完成的目标文件. 链接脚本的主要作用就是指定程序在内存中的布局 rust 代码入口在 esp-riscv-rt 库中的 lib.rs 中,通过一段内嵌宏实现的入口点,在引导程序bootloader执行完成后会跳转到 _start 入口处。在进入main方法前的代码需要结合 链接脚本中的符号定义进行分析。 Read More
pwm 信号控制
主要参数 : PWM 通道号 PWM 频率,单位 Hz PWM 分辨率 PWM 占空比 一般由前三个参数是固定值,通过调整空占比进行控制,下面解释一下这几个参数之间的关系 通道号不用说,就是选择的通道。 由频率可以得出单个脉冲周期的时间长度,比如一个sg90的舵机一般控制频率为 50HZ, 1s / 50次 * 1000 ms = 20ms ,即一个周期时长为20ms。 得出一个周期后通过分辨率将一个周期切分指定数量的等份,分辨率决定了可调控的最小时间单元。 拿舵机举例就是分辨率过小则可控制的角度的精度越粗,假如只需要0.011ms的高电平就可以控 制一度的角度旋转,分辨率过小,若周期分割后单 Read More
勿忧,已成过往
1、过分在意别人的看法,立场不坚定 2、自卑心理,什么事都喜欢与人比较,其实没有意义,这样只会不断的放大自己的缺点, 3、喜欢半途而废,总是喜欢定一些难以完成的目标,然后长时间看不到付出的回报,得不到正向反馈,久而久之就会松懈下来,直至放弃。我们应该给自己定一个小的目标,小到足以让自己完成的目标。 时常在深夜辗转难眠,有时是回忆过往,时而展望未来; 往事的种种不堪历历在目,想想如果当时不那样做,还会有哪些方法可以将事情处理得更好,让结果不那么难堪、不那么尴尬。我知道自己本身的很多不足之处,我是个自尊心极强,害怕犯错,哪怕只是微不足道的错误,尤其害怕在众目睽睽之下犯错,我害怕自己成为众人的笑柄, Read More
ec11 旋转编码器 一定位一脉冲检测程序
这里记录了两种检测方式,通过中断处理如果旋转太快是有可能丢步的,这里异步方式是基于 embassy 框架的,所有实际效果还与其他任务占用时间有关系。 同步检测方式: 正反转检测逻辑如下: 状态对应为 AL: a 低 AH: a 高 BL: b 低 BH: b 高 逻辑判断,以反转为例,(正反转只是当a 或 b 拉高时,当前的a b电位状态相反): 1.未触发时 AH BH 不进入逻辑 2.开始反转 AL BH 进入逻辑,上次状态为 AH BH, 更新后上次状态为 AL BH 3.一段时间的无状态变化不进入逻辑,此时状态为 AL BH 4.b 进入拉低状态 当前状态为 AL BL,上次状态为 A Read More
缺失了,就再也回不来了
今天吃饭后发现下门牙旁边的一颗牙缺了一个角,时不时的挂着舌头感觉很不舒服,开始以为只是卡了点什么东西,后来发现不是卡东西了,是牙齿缺了一小块,身体真的是以一种会被感觉到的速度衰老。
精神内耗,只是因为想得多,做得少
关于精神内耗,只是因为想得多做得少,多做少想,只想不做光焦虑,不会有任何改变。另外要调整自己的心态,可能付出了努力得不到应有的回报,但谁又给你保证过你付出就一定会有回报呢?一切都只是概率问题,可能总是有一些人天赋高也很努力,但就是得不到一展才华的机会,但这种天命无力改变,能改变的只是当机会来了,你有能接住的能力。 找一些自己觉得对,也热爱,愿意付出时间投入其中的事情,去付诸实际行动,让自己不会悔恨浪费生命的大好时光,人生不只是有工作这一种事情,但如果能在工作中也能做自己热爱的事情,那当然是万分幸运,但好运的人并不多。 一定要调整心态,人生匆匆数十载,感受生活,做自己,少在意别人的看法。
在学海中迷失了方向
关于如何学习,我一直找不到一个很好的学习方法,所以自己也一直在走弯路,有些技术有兴趣要研究一下又感觉对实际的工作帮助不大。 关于各通信协议的内部实现我个人觉得了解一下基本原理即可,没有必要详细深究,各种通信协议大都已现有大量实现好的库可直接使用的,只需要做些配置调整就可以直接使用,每个人的精力是有限的,我们应该把精力放在更有意义的事上,当然你志在如此也不是不可。 学海无涯,我们应该不停的学习,但是深海无涯也注定我们无法将所有的知识都掌握,将自己的精力放在更有意义的事上,这里的意义就是自己的感觉而已,你自己觉得有价值他就是有意义的,就像我现在说没有必要深入研究但你觉得这是我所喜爱的,那他就是价值 Read More
封装与抽象
程序的架构最重要的就是封装与抽象,在实际开发经验中得到的总结就是程序会不停的变化 ,但变化的内容点又比较固定,容易变化的地方一般就那几个地方。 抽象就是对具有相似的功能代码进行抽取,提高代码的重用性和易修改性,共用性的修改只需要修改同一个地方,非共用性的修改又相互独立互不影响。 封装就是将对某一功能或职责划分后相互独立的为一个整体,避免不同功能的逻辑揉和在一起,混乱不易于维护,不能快速的理解代码功能。 代码就是能清晰明了,且容易修改就是好的。
用户今天 : 11
用户昨天 : 26
用户最近的7天 : 140
用户最近的30天 : 770
用户这个月 : 674
用户这一年 : 2834
合计用户 : 9503
查看今天 : 20
查看昨天 : 28
查看最近7天 : 183
查看最近30天的 : 909
查看这个月 : 755
查看这一年 : 3607
合计查看 : 11771
谁是在线的 : 0