SPI 接口OLED 模块 - 兼容5V 和3.3V 电平
PCB 布局参考了老王0.8元128x32OLED显示屏转接板,开源项目地址:老王0.8元128x32OLED。


老王家买的屏幕放了快一年了,终于还是决定整个单独的模块,之前一直打算集成到开发板上的,不太灵活。相比那个转接板,主要的修改是:
- 添加了3.3V LDO,ME6206A33,就是常用的662K,可以兼容3.3V 到5V 的输入电压;
- 四线SPI 接口加入了电平转换电路,可以兼容3.3V 和5V 电平;
- 7pin 排针减少到6pin,去掉复位,没什么用;
- 去掉多余的螺丝孔,板子面积很小,一个M3 螺丝就够固定了。不需要螺丝固定的话还可以一剪子把螺丝孔突出的环形部分剪掉;
实物图如下:

电路

就是复制粘贴成品OLED 模块的上电路,电容的参数不敏感,小范围变动取值对屏幕工作没什么影响,比如C4,换成0.1uF 实测也OK。
供电
参考ME6206 的规格书:

OLED 工作电流不大,所以压差应该不超过300mV。理论上,如果输入3.3V,输出电压仍大于3V,而OLED 芯片SSD1316 的规格书上说最低电压3V,所以足够驱动了。另外,OLED 模块的电源正极V+ 可以不接,因为CS 线默认是高电平,只在通讯过程中拉低,其他几个信号线也可能间歇地处于高电平,那么当单片机使用5V 供电时,可以只通过这几个信号线给OLED 供电,实测基本能用,只是屏幕亮度会降低,还有点闪。
电平转换
因为模块是用SPI 驱动的,参考:SPI 接口OLED 使用5V 信号驱动可能需要电平转换,就是说如果直接和5V 单片机连在一起,屏幕可能不工作,所以就加了四组分压电路,用来把5V 电平降到3.3V。

还有个拨动开关SW-LVL-SHIFT,开关闭合时启用分压功能,断开后分压电路就退化成了限流电路,下拉部分R7 至R10 失去作用,R3 和R6 串入信号线里限流。经过实测,用5V 的Arduino 驱动,只要限流电阻就够了,OLED 可以工作,所以四个下拉电阻和拨动开关可以不装。不过,SPI 信号线SCLK 和MOSI 上的限流电阻肯定会影响信号的上升时间,也就是说SPI 通信频率不能太高,虽说我也没试过最高能到多少。
焊接
- 原理图里那两个和0.1uF 电容并联的4.7uF 电容可以不装,之前试过,能用;
- 像上面说的,2k 下拉电阻R7 至R10 以及拨动开关也可以不装;
- 如果确定不需要兼容5V 电平,LDO 可以去掉,1k 限流电阻可以用一坨锡替代;
- LDO 的输入输出电阻也可以用1uF,怎么方便怎么来;
所有元件都是贴片的,而且是单面安装,推荐使用焊锡膏配加热台的焊接方式,我是用针管点锡膏的,反正元件种类不多,熟悉之后也挺快的,唯一的难点就是那个座子,我就没遇到过能一次性焊好的。如果用加热台焊接,注意座子底下焊锡膏尽量少一点,免得之后连锡太多拖不开;要是焊锡膏太多,融化的锡球还可能把座子给顶起来。不推荐用热风木仓焊座子,很容易烤坏,其实加热台基本也焊不了座子,只是能初步把座子固定在焊盘上,之后用烙铁的时候稍微省点事。
座子的焊盘我修改过,把引脚的焊盘向外拉长了,就是为了方便检查和用烙铁拖。除了电烙铁,必要的工具还有放大镜和助焊膏。处理连锡的方法就是先助焊膏满上,把烙铁头用海绵或者钢丝球清理干净,然后轻柔的贴在连锡的焊盘上向外拖。动作轻柔的目的是避免把焊盘刮坏,引脚的焊盘间距太小了,阻焊层很脆弱。此外,还要避免烙铁头把融化的锡挤到座子里面。除了容易连锡,还容易虚焊,可以用放大镜快速观察一下,涂满助焊膏,在烙铁头上沾一点焊锡,然后从里往外拖,让烙铁上的锡沾到引脚和焊盘上,沾得焊锡太多就容易把焊锡挤进座子内部。烙铁和座子引脚接触时间太长的话会让座子内部的铜引脚被加热到比较高的温度,焊锡也就更容易跑进去。
故障排除
如果单片机程序ok,但屏幕全黑,没反应,首先考虑是不是座子上连锡或虚焊。连锡用放大镜很容易观察到,用干净的烙铁头配上助焊膏也很容易拖干净,所以更可能是虚焊。此时需要先把屏幕拔下来,这里也有点要注意的地方,如果是虚焊,说明座子的引脚只靠塑料件固定着,没连到焊盘上,那么,刚经过高温焊接,塑料肯定有一些变形,引脚的固定不一定牢靠,有可能在拔掉屏幕时把座子的引脚一起拔下来,避免的方法当然是尽量控制焊接温度和时间。然后要么拿放大镜纯靠眼力判断虚焊的地方,要么就用万用表测量焊盘和座子引脚的通断,可能需要用细尖表笔,一个一个扫过去,熟练的话也不怎么费劲。
如果屏幕能亮,但是亮度比较低,会闪烁,那可能是那个560K 的电阻没焊好。加热台上焊接有时候会出现立碑的现象,就是电阻之类的小东西一侧的焊锡比较少,然后电阻被另一侧的焊锡拉着拽起来了,导致电阻一边浮空。总之大部分问题应该都是和座子的焊接有关,其他元件没焊好容易观察到。
例程
使用例程参考Arduino 版u8g2 库的例子,屏幕型号SSD1316 128x32,四线SPI 驱动方式,RST 不连接, 参数上写U8X8_PIN_NONE。虽然,似乎大部分人都说这屏幕是128x32,但我不管怎么试,看起来都更像是128x28,用8x7 的字符刚好够显示4 行,8x8 的字符第四行会显示不全。顺便放上一个Hello world 例程,Arduino 加U8G2 库,使用硬件SPI:
/*HelloWorld.ino"Hello World" version for U8x8 APIUniversal 8bit Graphics Library (https://github.com/olikraus/u8g2/)Copyright (c) 2016, olikraus@gmail.comAll rights reserved.Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/#include
#include #ifdef U8X8_HAVE_HW_SPI
#include
#endif//DC 连接到D9, CS 到D10,SCK 和MOSI 连到对应的SPI 引脚,V+ 连接到5V 或3.3V 电源,也可以不接。
U8X8_SSD1316_128X32_4W_HW_SPI u8x8(10, 9, U8X8_PIN_NONE); void setup(void)
{u8x8.begin();u8x8.setPowerSave(0);
}void loop(void)
{static bool line = false;u8x8.setFont(u8x8_font_chroma48medium8_r);if(line) {u8x8.drawString(0,1,"1: 8x7 character");u8x8.drawString(0,2,"2: 4 line => 28 ");}else {u8x8.drawString(0,1,"Hello World! ");u8x8.drawString(0,2,"Hello World! ");}line = !line;u8x8.drawString(0,0,"0 start line");u8x8.drawString(0,3,"3 end line");delay(2000);
}
相关文章:
SPI 接口OLED 模块 - 兼容5V 和3.3V 电平
PCB 布局参考了老王0.8元128x32OLED显示屏转接板,开源项目地址:老王0.8元128x32OLED。 老王家买的屏幕放了快一年了,终于还是决定整个单独的模块,之前一直打算集成到开发板上的,不太灵活。相比那个转接板,主…...
css布局和定位
在Web开发中,CSS布局和定位是非常重要的技能。在这篇博客中,我们将深入探讨CSS布局和定位的概念、基本技术和最佳实践。 **CSS布局基础** ├── 盒模型 │ ├── 内边距 │ │ ├── padding │ │ ├── padding-top │ │ ├── p…...
python -- 批量读取多个文件,并将每个文件中相同变量累加
python – 批量读取多个文件,并将每个文件中相同变量累加 情况描述 现有多个nc文件,位于同一个文件夹中,如下所示每个文件中都有相同的变量,想要读取每个文件中的变量然后将其加起来意思就是说: 文件1中的变量文件2中…...
低代码开发流程是怎么样的?
低代码开发流程是怎么样的?现在很多文章都在下功夫宣传what(低代码是什么)、why(为什么要用低代码),但是很少有文章能够系统讨论how(怎么用低代码)的问题。 所以我花3天的时间准备了…...
任何时候都不要在 for 循环中删除 List 集合元素!!!
首先说结论:无论什么场景,都不要对List使用for循环的同时,删除List集合元素,因为这么做就是不对的。 阿里开发手册也明确说明禁止使用foreach删除、增加List元素。 正确删除元素的方式是使用迭代器(Iteratorÿ…...
koa+Vite+vue3+ts+pinia构建项目
一、 初始化构建项目 npm create vite myProject -- --template vue-ts 注:Vite 需要 Node.js 版本 14.18,16。然而,有些模板需要依赖更高的 Node 版本才能正常运行,当你的包管理器发出警告时,请注意升级你的 Node 版…...
k8s-yaml文件
文章目录一、K8S支持的文件格式1、yaml和json的主要区别2、YAML语言格式二、YAML1、查看 API 资源版本标签2、编写资源配置清单2.1 编写 nginx-test.yaml 资源配置清单2.2 创建资源对象2.3 查看创建的pod资源3、创建service服务对外提供访问并测试3.1 编写nginx-svc-test.yaml文…...
存储引擎
目录 ❤ MySQL存储引擎 什么是存储引擎? MySQL支持哪个存储引擎? ❤ 各种存储引擎的特性 概述 各种存储引擎的特性 各种搜索引擎介绍 ❤ 常用存储引擎及适用场景 ❤ 存储引擎在mysql中的使用 存储引擎相关sql语句 指定存储引擎建表 在建表时指定 在配置文件中…...
Go中 channel的使用
文章目录背景channel 简介使用说明声明发送和接受数据关闭channel使用示例背景 使用 sync 包和 context 包的工具可以实现多个协程之间互相协作, 但是没有一种很好的方式解决多个协程之间通信的问题. golang 作者 Rob Pike 说过一句话,不要通过共享内存来通信&…...
【C++】string OJ练习
文章目录1. 仅仅反转字母思路分析代码实现2. 字符串中的第一个唯一字符题目分析代码实现3. 《剑指offer》——替换空格解法一:寻找替换思路分析代码实现优化解法二:空间换时间思路分析代码实现4.字符串最后一个单词的长度思路分析代码实现5. 字符串相加思…...
进程间通信IPC
进程间通信IPC (InterProcess Communication) 一、进程间通信的概念 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据…...
操作系统-页面淘汰算法(下)-软件设计(二十六)
操作系统-PV操作(上)-软件设计(二十五)https://blog.csdn.net/ke1ying/article/details/129476031 存储管理-分区存储组织 问:计算机系统内存大小为128k,当前系统分配情况如图,那么作业4再次申…...
23种设计模式-责任链模式(Android开发实际应用场景介绍)
什么是责任链模式 责任链模式是一种行为型设计模式,它的核心思想是将请求从一系列处理者中传递,直到其中一个处理者能够处理它为止。在这个过程中,请求可以被任何一个处理者处理,也可以被拒绝,直到有一个处理者能够处…...
Socket+Select+Epoll笔记
讲到epoll,就必须了解Socket,上篇博客写了Socket的基本使用方法,步骤主要为创建一个socketsocket是进程之间通信的,那么进程通信如何找到这个socket呢?当然是端口号,所以socket就要和端口号进行绑定&#x…...
git查看最近修改的文件
git log --name-status 每次修改的文件列表, 显示状态 git log --name-only 每次修改的文件列表 git log --stat 每次修改的文件列表, 及文件修改的统计 git whatchanged 每次修改的文件列表 git whatchanged --stat 每次修改的文件列表, 及文件修改的统计 git show 显示最…...
【算法基础(四)】堆排序(二)
堆排序(二) 把数组从零开始连续的一段 完全二叉树 size i 左 son 2*11 i 右 son 2*12 父 (i-1) / 2 堆是完全二叉树,分为大根堆和小根堆 在完全二叉树里,每一棵子数最大的值是头节点的值,就是大根堆 同理&…...
C++类型转换
C语言的转换是在变量前加类型名进行转换的,比如double pi 3.14;int a (int) pi;对于指针也是如此double* dptr πint* iptr (int*)dptr;虽然c兼容了C语言的转型方式,但是也做了很多限制,比如向上类型转换,在c中建议使用…...
Keil MDK6要来了,将嵌入式软件开发水平带到新高度,支持跨平台(2023-03-11)
注:这个是MDK6,不是MDK5 AC6,属于下一代MDK视频版: https://www.bilibili.com/video/BV16s4y157WF Keil MDK6要来了,将嵌入式软件开发水平带到新高度,支持跨平台一年一度的全球顶级嵌入式会展Embedded Wor…...
蓝桥杯刷题第九天
题目描述本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。素数就是不能再进行等分的整数。比如7,11。而 9 不是素数,因为它可以平分为 3 等份。一般认为最小的素数是2,接着是 3,5&…...
a-tree-select 基本使用,下拉框高度和宽度设置、回显时滚动条定位解决。
目录一、基本使用1. 界面效果2. 代码实现3. 问题1:下拉框占满整个屏幕4. 问题4:菜单内容过长时,下拉菜单宽度无限变宽。二、数据回显、滚动条定位1. 界面效果2. 代码实现2.1 获取默认展开节点2.1.1 代码实现2.1.2 说明2.2 设置滚动条定位2.2.…...
数字时代的计划性抹杀:从强制升级到生态锁定的技术围剿
1. 数字时代的“计划性报废”:从凯迪拉克到小电驴的隐喻 前几天,我在网上申请一张信用卡,过程堪称一场荒诞剧。银行明明通过邮件联系我,也知道我的账号密码,甚至在我通过了“我不是机器人”的图片验证后,却…...
PixelAnnotationTool终极指南:如何用智能分水岭算法实现高效像素级图像标注
PixelAnnotationTool终极指南:如何用智能分水岭算法实现高效像素级图像标注 【免费下载链接】PixelAnnotationTool Annotate quickly images. 项目地址: https://gitcode.com/gh_mirrors/pi/PixelAnnotationTool 你是否曾经为图像标注工作感到头疼ÿ…...
OpenClaw工具如何快速配置接入Taotoken平台
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 OpenClaw工具如何快速配置接入Taotoken平台 对于使用OpenClaw这类智能体(Agent)工具的开发者而言ÿ…...
三引脚压电陶瓷片:从自激振荡原理到高效驱动电路设计
1. 三引脚压电陶瓷片为何成为硬件工程师的新宠 第一次接触三引脚压电陶瓷片时,我和大多数工程师一样充满疑惑:为什么要在传统两引脚结构上增加第三个引脚?直到在某个低功耗项目中,传统它激式蜂鸣器耗电量超出预期,我才…...
从AlphaGo到你的小游戏:如何用MCTS(蒙特卡洛树搜索)为你的五子棋项目加个‘智能大脑’
从AlphaGo到你的小游戏:如何用MCTS为五子棋项目构建智能决策引擎 当你在手机上下棋输给AI时,是否好奇过这些"电子大脑"如何思考?2016年AlphaGo击败李世石的关键技术之一——蒙特卡洛树搜索(MCTS),…...
手把手教你用MOS管搭建防反接电路:从原理图到PCB布局的避坑指南(以立创EDA为例)
从零构建MOS管防反接电路:立创EDA实战全流程解析 电源反接是电子设计中最常见的"低级错误"之一,却可能造成毁灭性后果。想象一下:你花费数周完成的智能家居控制器,因为电池装反而瞬间烧毁主控芯片——这种场景在创客社区…...
暗黑破坏神2存档编辑器完整指南:快速免费修改d2s文件终极方案
暗黑破坏神2存档编辑器完整指南:快速免费修改d2s文件终极方案 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 你是否曾经在暗黑破坏神2中因为技能点分配错误而懊悔?是否因为刷不到心仪的装备而浪费时间&a…...
傅里叶变换加速视觉模型:频域卷积与FiT架构实战
1. 项目概述:用傅里叶变换为视觉模型“减负”在计算机视觉的模型炼金术里,我们总在追求一个看似矛盾的平衡:既要模型“看得更清”(更高的精度和更强的特征提取能力),又要它“跑得更快”(更低的计…...
保姆级教程:用MPTool给瑞昱RTL8762CMF蓝牙芯片烧录固件(附串口接线图)
零基础实战:RTL8762CMF蓝牙芯片固件烧录全流程指南 拿到一块搭载RTL8762CMF的开发板时,最关键的步骤莫过于正确烧录固件。作为一款支持蓝牙5.0的低功耗芯片,RTL8762CMF在物联网设备中应用广泛。但很多开发者在首次接触时,往往会在…...
【管理科学】【财务领域】【社会科学】人的需求来源和由需求诞生的企业/业务/行业及其上游产业链/中游产业链/下游产业链的所有内容03
编号 类型 (核心功能) 人的需求类型 (对应场景) 人需求得以满足的信息产品/实体产品/制造加工工具/原材料/其他 由需求诞生的企业/业务/行业及其上游产业链/中工产业链/下游产业链的所有内容及多学科数学建模方程式 /时序数学方程式及货币来源及业务财务模型 流动时序方程…...
