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

news2024/11/24 19:16:51

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 API

  Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/)

  Copyright (c) 2016, olikraus@gmail.com
  All 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);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/403669.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

jenkins扩展你的流水线

文章目录一、概述二、可信库和不可信库可信库不可信库三、内部库与外部库内部库SSH访问HTTP 访问外部库配置一个外部库四、在流水线脚本中使用库从源码版本控制中自动下载库加载库到脚本中Library 注解库步骤库指令五、Jenkins 项目中的库范围六、共享库代码的结构src示例一&am…

Java启蒙之语言基础

目录 一.Java标识符和关键字 1.1Java标识符 1.2Java关键字 二.数据类型和变量的概述和关系 2.1Java变量 2.2Java的数据类型 2.2.1数据类型的分类的概述 2.2.2数据类型的转换 3.Java运算符 总结 😽个人主页:tq02的博客_CSDN博客-领域博主 &#…

帧中继多点子接口配置

帧中继多点子接口配置 拓扑图: 设备参数: 设备 接口 DLCI 设备 接口 DLCI R1 S0/0/0 102 R2 S0/0/0 201 R1 S0/0/0 103 R3 S0/0/0 301 IP参数: 设备 接口 IP地址 子网掩码 默认网关 R1 S0/0/0.1 192.168.123.1 25…

荧光成像技术原理ICG-PEG-N3/COOH/NH2/Alkyne吲哚菁绿-聚乙二醇-叠氮

品牌:为华生物产地:广州产品名称:吲哚菁绿-聚乙二醇-叠氮英文名称:ICG-PEG-N3PEG分子量:600、800、1000、2000、3400、5000、10000质量:95%激发波长:785nm发射波长:821nm外观&#x…

【算法基础】最短路算法(朴素Dijkstra + 堆优化Dijkstra + Bellman-Ford +SPFA + Floyd)

一、最短路算法 1. 朴素Dijkstra算法 Dijkstra算法 用来求 所有边权都是正数 的 单源最短路。边权 即两个点之间的距离;单源, 即只求从源点(起点,终点也称为汇点)到其他点的最短距离; 朴素Dijkstra 算法适用于求 稠密图 的最短距离问题。稠密图是指边数有很多的图,假设…

Flask-mock接口数据流程

背景:由于在开发过程中,会遇到以下的痛点 1.服务端接口提测延期,具体接口逻辑未完成实现,接口未能正常调通,导致客户端提测停滞; 2.因为前期已在技术评审上已与客户端开发定好接口字段,客户端比…

【蓝桥杯-筑基篇】基础数学思维与技巧(2)

🍓系列专栏:蓝桥杯 🍉个人主页:个人主页 目录 🍪1.判断素数🍪 🥦2.大整数🥦 🍋3.求n的约数个数🍋 🍉4.数学归纳法🍉 🍓5.阶乘之和&#x1f3…

使用 typora软件 编写 markdown 写作的技巧

typora 编写 markdown 写作的技巧 作者:虚坏叔叔 博客:https://xuhss.com 早餐店不会开到晚上,想吃的人早就来了!😄 使用typora 编写 markdown 写作的时间久了后,会发现一些技巧 ,分享给大家 …

LeetCode206_206. 反转链表

LeetCode206_206. 反转链表 一、描述 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1]示例 2: 输入:head [1,2] 输出&…

结构体内存大小

000、前言 要想计算结构体内存大小,就会涉及到一个结构体内存对齐的问题,而不是对其成员进行简单的加运算 (1)在写本博客之前 有位同学和我讨论了一个学校的题目,题目如下: 我借这道题目问了另外一位同…

JS学习笔记day05(完结)!

今日内容 零、 复习昨日 一、作业 二、BOM 三、定时器 四、正则表达式 零、 复习昨日 事件 事件绑定方式鼠标事件 onmouseoveronmouseoutonmousemove 键盘事件 onkeydownonkeyuponkeypress 表单事件 onfocusonbluronchangeonsubmit 页面加载事件 onload dom dom树查找dom do…

what data contract

URLS 笔记内容主要来自 https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/scenarios/cloud-scale-analytics/architectures/data-contracts Data contracts Data contracts are similar to service contracts or data delivery contracts.A contract also…

One-YOLOv5 v1.2.0发布:支持分类、检测、实例分割

One-YOLOv5 v1.2.0正式发布。完整更新列表请查看链接:https://github.com/Oneflow-Inc/one-yolov5/releases/tag/v1.2.0,欢迎体验新版本,期待你的反馈。 1 新版本特性 1. 同步了Ultralytics YOLOv5的上游分支v7.0,同时支持分类、目…

多校园SaaS运营智慧校园云平台源码 智慧校园移动小程序源码

智慧校园管理平台源码 智慧校园云平台源码 智慧校园全套源码包含:电子班牌管理系统、成绩管理系统、考勤人脸刷卡管理系统、综合素养评价系统、请假管理系统、电子班牌发布系统、校务管理系统、小程序移动端、教师后台管理系统、SaaS运营云平台(支持多学…

每天学一点之Stream流相关操作

StreamAPI 一、Stream特点 Stream是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。“集合讲的是数据,负责存储数据,Stream流讲的是计算,负责处理数据!” 注意: ①Str…

Java面试总结(六)

进程和线程的区别 根本区别: 进程时操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位。 资源开销: 每个进程都有自己独立的代码和数据空间(程序上下文),进程之间的切换开销比较大&…

狂扫近300万读者,蟒蛇书升级版即将出版,招募审读人

狂扫全世界近 300 万爱好者成为编程领域的现象级爆品豆瓣累计超过 5000 人评价第2版中文版获得了 9.3 分的好评Amazon 近 10000 人评价第2版原版获得了 4.7 星好评毫不夸张,它是全世界读者心中的 Python 入门圣经因为封面上是一只蠢萌的蟒蛇这本书又被读者亲切地称为…

SQL注入——文件上传

目录 一,mysql文件上传要点 二,文件上传指令 一句话木马 三,实例 1,判断注入方式 2,测试目标网站的闭合方式: 3,写入一句话木马 4,拿到控制权 一,mysql文件上传…

【面试系列】volatile的底层原理

并发编程的三大特性 原子性可见性原子性 JAVA内存模型 Java内存模型(Java Memory Model)主要分为主内存和线程工作内存。 主内存:方法区和堆空间 线程工作内存:虚拟机栈,本地方法栈,程序计数器。 所有…

centos安装docker详细步骤

目录 一.前言 1.环境要求2.官网中文安装参考手册 二.安装步骤 1.卸载旧版本2.安装需要的软件包3.设置docker镜像源 1.配置docker镜像源 方式1:官网地址(外国):方式2:阿里云源:2.查看配置是否成功 4.更新yum软件包索引5.可以查看…