当前位置: 首页 > news >正文

SPI 接口OLED 模块 - 兼容5V 和3.3V 电平

PCB 布局参考了老王0.8元128x32OLED显示屏转接板,开源项目地址:老王0.8元128x32OLED。


在这里插入图片描述
在这里插入图片描述

老王家买的屏幕放了快一年了,终于还是决定整个单独的模块,之前一直打算集成到开发板上的,不太灵活。相比那个转接板,主要的修改是:

  1. 添加了3.3V LDO,ME6206A33,就是常用的662K,可以兼容3.3V 到5V 的输入电压;
  2. 四线SPI 接口加入了电平转换电路,可以兼容3.3V 和5V 电平;
  3. 7pin 排针减少到6pin,去掉复位,没什么用;
  4. 去掉多余的螺丝孔,板子面积很小,一个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 通信频率不能太高,虽说我也没试过最高能到多少。

焊接

  1. 原理图里那两个和0.1uF 电容并联的4.7uF 电容可以不装,之前试过,能用;
  2. 像上面说的,2k 下拉电阻R7 至R10 以及拨动开关也可以不装;
  3. 如果确定不需要兼容5V 电平,LDO 可以去掉,1k 限流电阻可以用一坨锡替代;
  4. 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&#xff…...

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.…...

【Linux】之nc命令(连接与扫描指定端口、监测服务端口的使用情况)解析、详解实例、邮件告警

🍁博主简介 🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 文章目录nc命令简介nc命令的安装nc命令语法格式…...

cdn简单配置

cdn配置域名接入CDN编辑CDN配置本地修改hosts文件,绕过公网解析域名接入CDN 添加CDN域名以及回源配置 编辑CDN配置 默认后端端口是80,如果测试发现无法访问,则可能是443或其它 如果域名在CDN后端有https强制跳转,后端端口一定是44…...

前端安全(自留)

目录XSS——跨站脚本常见解决CSRF ——跨站请求伪造常见解决XSS——跨站脚本 当目标站点在渲染html的过程中,遇到陌生的脚本指令执行。 攻击者通过在网站注入恶意脚本,使之在用户的浏览器上运行,从而盗取用户的信息如 cookie 等。 常见 解…...

零基础转行云计算可行吗

目前处于云年代,云计算运维工程师的工作远景还是十分广泛的。像是阿里云计算,滴滴,抖音等等互联网大厂目前都在使用云核算技能。 云计算运维工程师的薪资水平也十分可观。 运维工程师(Operations),在国内又称为运维开发工程师(Dev…...

【AcWing】蓝桥杯备赛-深度优先搜索-dfs(1)

目录 写在前面: 题目:92. 递归实现指数型枚举 - AcWing题库 读题: 输入格式: 输出格式: 数据范围: 输入样例: 输出样例: 解题思路: 代码: AC &…...

孩子免费就读|私企经理自费赴美国东海岸高校访学

私企U经理无文章无课题,出国访学除了为考察市场、拓宽人脉、提升履资外,另一个主要目的是带孩子在美国接受当地免费的公立中小学教育,并把访学目标学校定位在东海岸。最终其采纳了板凳费相对较低的佐治亚大学邀请函,签证时居然全家…...

前端面试hr经常会问的问题

文章目录前言1.自我介绍2.为什么你要离职?3.工作经历4.职业规划5.优点、缺点6.还有什么要问的总结前言 这里记录了一些面试中hr或者项目负责人经常会问的一些问题,可以提前参考参考,想想该怎么回答,为之后的面试做好准备&#xf…...

C动态数组

在实际项目中,我们经常与各式各样的数据打交道。 例如:我们处理的是学生的数据。 struct student {int id; // 学号char name[20]; // 姓名int gender; // 性别int mark; // 成绩 };学生数据使用一个结构体表示,该结构体拥有4个成员。分别为…...

【STL一】STL组件(容器、迭代器、算法)

【STL一】STL组件(容器、迭代器、算法)一、STL二、STL组件(component)1、stl六大组件2、C STL的13个头文件3、stl所有头文件三、容器(container)1、序列容器(Sequence container)——顺序容器2、关联容器&a…...

Java每日一练(20230312)

目录 1. 两数之和 II ★ 2. 反转链表 ★★ 3. 二叉树的层序遍历 II ★★★ 🌟 每日一练刷题专栏 C/C 每日一练 ​专栏 Python 每日一练 专栏 Java 每日一练 专栏 1. 两数之和 II 给定一个已按照 非递减顺序排列 的整数数组 numbers ,请你从数…...

林业厅网站建设方案/整合网络营销是什么

当光口使能自协商时,会发送/C/码来进行协商过程,如果连续接收到3个相同的/C/码且接收到的码流和本端工作方式相匹配,则返回给对方一个带有Ack应答的/C/码,对端接收到Ack信息后,认为两者可以互通,则端口物理…...

wordpress redis memcached/厦门seo新站策划

一. 事件背景 在凤巢的推广平台中,有对物料进行不同属性进行筛选排序的需求,由于物料的量级很大(单用户千万级物料),并且有根据物料关键词搜索和某些特定值搜索,所以需要一个全文检索的搜索引擎来满足物料…...

免费响应式网站/排名优化公司哪家靠谱

有不少使用Python语言编写策略的开发者希望把策略代码文件放在本地,担心策略安全性。正如FMZ API文档中提出的一种方案: 策略安全性 在发明者量化交易平台上开发策略,策略仅发明者量化账户持有者可见。并且在发明者量化交易平台上可以实现策略…...

南宁手机建站公司/淘宝关键词优化技巧教程

点击上方蓝字关注我们1前言曾几何时,”云”还是指天上飘的那一朵朵白色的雾团,现在互联网上家家都说自己是”xx云”。“云”这个词,已经被赋上了新的含义。其实真正在做”云”的企业没几家。这篇文章会告诉大家,究竟什么是”云”&…...

沈阳网站制作定制厂家/东莞外贸推广公司

http://blog.csdn.net/pipisorry/article/details/36633451 博客内容: (个性化)推荐系统构建三大方法:基于内容的推荐content-based,协同过滤collaborative filtering,隐语义模型(LFM, latent factor model…...

网站建设的问题/站长工具的使用seo综合查询运营

目录 概述 1应用问题 1数据来源 2实现算法 3 4.1 软件界面 3 4.2 优化算法 4 4.3 实现细节 8实验结果与分析 9 5.1 目标函数值可视化 9 5.2 结果 9 5.2.1 暴力算法 10 5.2.2 梯度下降法 11 5.2.3 模拟退火算法 11 5.3 参数调整 12 5.4 分析与结论 12 1.概述 本次实验中&#…...