买了几块 夏普的1.26寸 memory lcd 型号为 LS013B7DH07,这种屏幕显示有点像墨水屏,只是白色不是那纯有点偏银灰的感觉,比普通墨水屏刷新快很多,在不刷新的情况下墨水屏显示更好,需要频繁刷新的情况下memory lcd 是更好的选择。 这个屏的驱动方式与常见的一根cd命令数据线来控制传输命令或数据的方式不同,它是在cs拉高后开始的前几个固定时钟周期内为命令,命令后再跟着传数据。常用的两个就是清屏与整屏刷新,下面就引脚定义与这两个操作记录一下。 引脚如上图, vdda 、vdd 接3.3v, vss、vssa 接地,sclk 时钟信号、si 即 mosi 串口数据,scs 为 Read More
分类: rust
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
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