4Pin 风扇控制器

对于风扇来说,只要供电就能工作。最开始的电脑使用的都是这种风扇。但是随着技术的发展,人们发现需要对这个风扇进行控制,因为风扇转的快噪音和功耗都会随之增加。于是,加上一根反馈线,让用户能够得知当前的转速。但是这样会遇到另外的两个问题:第一个问题是风扇电压变化,反馈线上的电压也会随之变化,范围大了读取这个反馈会很麻烦。第二个问题是:电压和风扇转速转速关系并不是线性的。比如,一个 12V 的风扇,12V时转速是 2000CPM,10V供电时转速时1000CPM,但是如果11V 供电时,转速很可能是 1100CPM。风扇的转速和风力噪音直接相关,用户想要得到一个大概的转速非常困难。最终 Intel 推[......]

阅读全文

FireBeetle FFT VGA显示

之前基于 FireBeetle ESP32 和全向MEMS麦克风模块(SEN0487)制作过一个在OLED 屏幕上显示当前环境声音频谱的装置【参考1】。这次制作的是能够输出 VGA 信号的频谱装置,这样,用户能够在显示器或者电视机上看到实时频谱输出。

具体的VGA 显示原理,可以在之前的介绍中看到【参考2】,这次的设计硬件部分与之类似。电路图如下:

其中主控和VGA 部分如下:VGA本质上还是模拟信号,这里使用电阻能够输出不同电平的模拟信号,三根GPIO能够实现2^3=16种组合,因此也意味着能够实现16种颜色.

下面是用于连接全向MEMS麦克风模块的接口:

[......]

阅读全文

Step to UEFI (278)Progra message 的使用

Visual Studio 的 C 支持 #pragma message() 宏可以用来输出一些信息。于是编写一个代码进行测试:

唯一的问题是:我在 EDK2 中编译的时候,无法看到输出的结果。经过研究,编译C代码是通过下面这个指令:

于是尝试去掉其中的/nologo 指令,运行结果如下:

再同时去掉 /showIncludes 运行结果:

可以看到,其中出现了当前的文件名信息。

总结:在使用VC 编写代码的时候,如果需要输出一些编译期的数据,可以考虑使用 #pragma message() 来实现。

[......]

阅读全文

海龟汤和“死尸粒子”

在国外流行着一种叫做海龟汤的游戏。正规的名字是情境猜谜(Situation puzzle),又译情境推理游戏,俗称“海龟汤”,另名水平思考游戏(Lateral thinking puzzle)或是/不是游戏,是一种猜测情境型事件真相的智力游戏。其玩法是由出题者提出一个难以理解的事件,参与猜题者可以提出任何问题以试图缩小范围并找出事件背后真正的原因,但出题者仅能则以“是(对)”、“不是(不对)”或“没有关系”来回答问题。

一个典型的游戏是,出题者提问:“一个男人走进一家酒吧,并向酒保要了一杯水。酒保拿出一支枪并瞄准他,该名男子说:“谢谢你!”然后离开,请问发生了什么事?”

猜题者与出[......]

阅读全文

Step to UEFI (277)QEMU 增加自定义的 FFS和读取

这次实验的是在 OVMF 生成的BIOS中插入一个Binary ,然后在代码中将这个Binary 读取出来。

第一个目标:在 OVMF 中插入 Binary。

1.我们准备一个 message.txt,其中内容是简单的字符串:

2.在\OvmfPkg\OvmfPkgX64.fdf 文件中,加入下面的代码

3.使用工具查看放置的FFS,可以看到正确的增加到 BIOS 中

这样,第一个目标已经完成,我们成功的生成了一个FFS文件。

第二个目标,将这个 FFS文件从FV中读取出来。之前我们做过类似的实验,在【参考1】中有介绍。这次我们编写一个 UEFI[......]

阅读全文

在 ESp32C3 上使用 USB Host

最近入手了Beetle ESP32 C3(SKU:DFR0868),整体非常小巧。这次尝试用它搭配之前的 Micro USB Host 【参考1】读取USB 鼠标信息。

第一次使用 ESP32 C3,有如下需要注意的地方:

硬件连接如下:

名称   Beetle ESP32 C3Beetle ESP32 C3名称INTIO0IO6MOSIGNDGNDIO5MISOMD-USB 母头 D-IO7SSMD+USB 母头 D+IO4SCLKVBCOMPN/A3.3VRESETGNDGND3.3V3.3V

之后需要对USB Host 库进[......]

阅读全文

Step to UEFI (276)宏和结构体初始化表格

在 EDK2 中有一种比较有趣的定义和初始化Table 的方法,主要是基于 __VA_ARGS__ 这个宏。

很多时候,我们定义一个 Table 用来传递一些常量,Table需要给出具体的长度,通过这个宏可以实现自动给出Table 的长度,避免用户手工计数的麻烦。

下面是一个示例代码:

运行结果如下:

上面代码的解释如下:

1.首先我们定义一个 ONE_TABLE 结构体用来“携带”数据。

从定义可以看到,这个结构体包含了一个头,还有一个变长的数据段。头可以实现用于识别判断这个Table 是否为我们需要的目的,例如,其中有DID和VID 信息[......]

阅读全文

合并多个 Excel 的VBA代码

如果你有多个Excel 文件希望可以合到同一个文件中,可以使用如下 VBA 代码:

1. 创建一个 Excel 文件

2. 使用 ALT+F11 打开 VBA 界面

3. 输入如下代码

4. 运行之后会弹出对话框选择要合并的excel文件目录(特别注意目录中不要含有中文)

5. 最后生成的文件中包含了前面目录中的所有文件内容,每一个文件是单独存放在一个 Sheet 页面中的。

此外,还可以使用在线合并服务,例如:https://products.aspose.app/cells/merger (每次不能超过10个文件)

还可以开通 WPS 会员进行[......]

阅读全文