AMEPD SSD1680 调试记录

news2024/11/16 0:04:24

AMEPD Active Martix Electrophoretic Display,有源矩阵电泳显示屏。

就是电纸书那种屏,调试效果使用感受和我的Kindle差不多。

屏幕参数

  1. 屏幕 IC为SSD1680

  1. 122*250,单bit控制,1为白,0为黑

  1. 逐行刷新,一个字节8bit,控制横向8个像素

  1. 内置温度传感器(IIC接口,本次未使用)

  1. 内置OTP(10Byte,本次未使用)

  1. 屏幕控制器为 On-Chip封装

  1. SPI 速率设置4M 足以

显示效果特征

  1. 刷新率低,更新一次数据以秒计

  1. 单独更新某块数据,可能有残影。

  1. 更新整个屏幕数据,会有很大的闪烁波动

  1. 掉电、硬件复位、软件复位,不影响显示,但需要重新下发配置,直到下次写入新的显示数据。

调试注意事项

  1. 整个屏逻辑通信电压2为3.3v。

  1. spi 为mode 0,clk 空闲低,在第一个上升沿采样

  1. BSI管脚:通过拉高、拉低配置为3线9data SPI(H)或4线SPI通信模式(L)

  1. CS 片选管脚:低有效,拉低时可以读写

  1. DC管脚:数据/命令指示脚。(L,下命令;H,写数据)

  1. BUSY管脚:屏幕IC在 刷新数据期间或复位期间,输出高:此时对外界的读写操作无响应。在屏幕的读写逻辑中尤其要注意这一点。(空闲低,忙碌高)

  1. RST 管脚:低电平复位,工作期间保持高

  1. VGL、VGH管脚:屏幕翻转液晶粒子所需的偏置电压,软件可配置,16-20v。通过自身的 GDR和 RESE 以及外围电路,组成升压电路

SPI通信时序

4-Wire SPI

3-Wire 9Bit SPI

代码demo

寄存器配置

static void my_amepd_RegInit(void)
{
    AMEPD_SSD1680_WriteCmd(0x12);  // SW Reset
    my_sleep(20);
    my_amepd_ReadBusy();          // wait busy
    my_test_cli_echo("my_amepd_RegInit 0x12 \r\n");

    AMEPD_SSD1680_WriteCmd(0x01);
    AMEPD_SSD1680_WriteData(0xF9);
    AMEPD_SSD1680_WriteData(0x00);
    AMEPD_SSD1680_WriteData(0x00);

    AMEPD_SSD1680_WriteCmd(0x11);  // data enter mode
    AMEPD_SSD1680_WriteData(0x01);

    AMEPD_SSD1680_WriteCmd(0x44);  // set RAM x address
    AMEPD_SSD1680_WriteData(0x00); // set x start, range: 0-15
    AMEPD_SSD1680_WriteData(0x0F); // set x end

    AMEPD_SSD1680_WriteCmd(0x45);  // set RAM y address
    AMEPD_SSD1680_WriteData(0xF9); // RAM y address start, range: 0-249
    AMEPD_SSD1680_WriteData(0x00);
    AMEPD_SSD1680_WriteData(0x00); // RAM y address end
    AMEPD_SSD1680_WriteData(0x00);

    AMEPD_SSD1680_WriteCmd(0x3C);  // Border
    AMEPD_SSD1680_WriteData(0x05);

    AMEPD_SSD1680_WriteCmd(0x21);  // Display update control
    AMEPD_SSD1680_WriteData(0x00);
    AMEPD_SSD1680_WriteData(0x80); // S8-S167 for 1675 type panel

    // use internal temperature sernsor
    AMEPD_SSD1680_WriteCmd(0x18);
    AMEPD_SSD1680_WriteData(0x80);

    my_amepd_ReadBusy();          // wait busy
    my_test_cli_echo("my_amepd_RegInit 0x18 \r\n");
}

设置显示坐标

static void my_amepd_SetPosition(int x_start, int x_end, int y_start, int y_end)
{
    my_test_cli_echo("%d \r\n", x_start);
    my_test_cli_echo("%d \r\n", x_end);
    my_test_cli_echo("%d \r\n", y_start);
    my_test_cli_echo("%d \r\n", y_end);

    my_amepd_RegInit();
    my_test_cli_echo("my_amepd_SetPosition X \r\n");

    AMEPD_SSD1680_WriteCmd(0x44);
    AMEPD_SSD1680_WriteData(x_start);
    AMEPD_SSD1680_WriteData(x_end);

    AMEPD_SSD1680_WriteCmd(0x45);
    AMEPD_SSD1680_WriteData(y_start);
    AMEPD_SSD1680_WriteData(0x00);
    AMEPD_SSD1680_WriteData(y_end);
    AMEPD_SSD1680_WriteData(0x00);

    AMEPD_SSD1680_WriteCmd(0x4E);
    AMEPD_SSD1680_WriteData(x_start);

    AMEPD_SSD1680_WriteCmd(0x4F);
    AMEPD_SSD1680_WriteData(y_start);
    AMEPD_SSD1680_WriteData(0x00);
    AMEPD_SSD1680_WriteCmd(0x24);
}

发送显示数据

    for(col=0; col<max_col; col++) // send 122x250bits ram 2D13
    {
        for(row=0; row<max_row; row++)
        {
            AMEPD_SSD1680_WriteData(Image_demo[pcnt]);
            pcnt++;
        }
    }

更新显示数据

    // 在发送显示数据之后调用
    AMEPD_SSD1680_WriteCmd(0x22);
    AMEPD_SSD1680_WriteData(0xF7);
    AMEPD_SSD1680_WriteCmd(0x20);

X/Y 轴镜像显示

设置RAMX、Y轴的起始和结束地址可以,让显示效果X镜像、Y镜像,或者X、Y一起镜像。

正常刷新

    AMEPD_SSD1680_WriteCmd(0x44);
    AMEPD_SSD1680_WriteData(0);  // x start
    AMEPD_SSD1680_WriteData(15); // x end

    AMEPD_SSD1680_WriteCmd(0x45);
    AMEPD_SSD1680_WriteData(0);  // y start
    AMEPD_SSD1680_WriteData(0x00);
    AMEPD_SSD1680_WriteData(249); // y end
    AMEPD_SSD1680_WriteData(0x00);

X轴镜像显示

    AMEPD_SSD1680_WriteCmd(0x44);
    AMEPD_SSD1680_WriteData(16);  // x start
    AMEPD_SSD1680_WriteData(10); // x end

    AMEPD_SSD1680_WriteCmd(0x45);
    AMEPD_SSD1680_WriteData(0);  // y start
    AMEPD_SSD1680_WriteData(0x00);
    AMEPD_SSD1680_WriteData(249); // y end
    AMEPD_SSD1680_WriteData(0x00);

Y轴镜像显示

    AMEPD_SSD1680_WriteCmd(0x44);
    AMEPD_SSD1680_WriteData(0);  // x start
    AMEPD_SSD1680_WriteData(15); // x end

    AMEPD_SSD1680_WriteCmd(0x45);
    AMEPD_SSD1680_WriteData(249);  // y start
    AMEPD_SSD1680_WriteData(0x00);
    AMEPD_SSD1680_WriteData(0); // y end
    AMEPD_SSD1680_WriteData(0x00);

XY轴镜像同理

逝者如斯夫 不舍昼夜

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

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

相关文章

JavaScript 浏览器中执行

本章节为大家介绍如何在浏览器上进行 JavaScript 代码的运行与调试。目前的主流浏览器有谷歌的Chrome&#xff08;使用blink内核&#xff09;&#xff0c;微软的edge&#xff08;使用chromium内核&#xff0c;这是一款谷歌提供的开源浏览器内核&#xff09;和IE&#xff08;使用…

记录锁,间隙锁,插入意向锁,临键锁兼容关系

插入意向锁是什么&#xff1f; 注意&#xff01;插入意向锁名字里虽然有意向锁这三个字&#xff0c;但是它并不是意向锁&#xff0c;它属于行级锁&#xff0c;是一种特殊的间隙锁。 在MySQL的官方文档中有以下重要描述&#xff1a; An Insert intention lock is a type of gap…

羊了个羊游戏开发教程3:卡牌拾取和消除

本文首发于微信公众号&#xff1a; 小蚂蚁教你做游戏。欢迎关注领取更多学习做游戏的原创教程资料&#xff0c;每天学点儿游戏开发知识。嗨&#xff01;大家好&#xff0c;我是小蚂蚁。终于要写第三篇教程了&#xff0c;中间拖的时间有点儿长&#xff0c;以至于我的好几位学员等…

2023美赛C题思路数据代码分享

文章目录赛题思路2023年美国大学生数学建模竞赛选题&论文一、关于选题二、关于论文格式三、关于论文提交四、论文提交流程注意不要手滑美赛C题思路数据代码【最新】赛题思路 (赛题出来以后第一时间在CSDN分享) 最新进度在文章最下方卡片&#xff0c;加入获取一手资源 202…

【小西】同步咪咕订单给咪咕方(写接口给第三方)

同步咪咕订单给咪咕方前言思路实现1、定义请求体和响应信息MiGuOrderSyncReqMiGuOrderSyncResp2、nacos定义好咪咕相关配置信息3、同步咪咕参数配置4、MiGuOrderSyncControl5、MiGuOrderSyncService6、MiGuOrderSyncServiceImplCreateAscIISignUtil 生成参数 字典排序 签名Hmac…

数据分析:消费者数据分析

数据分析&#xff1a;消费者数据分析 作者&#xff1a;AOAIYI 创作不易&#xff0c;如果觉得文章不错或能帮助到你学习&#xff0c;记得点赞收藏评论一下哦 文章目录数据分析&#xff1a;消费者数据分析一、前言二、数据准备三、数据预处理四、个体消费者分析五、用户消费行为总…

【CMake】CMake构建C++代码(一)

在Linux开发过程中&#xff0c;难免会用到CMake来构建你的代码。本文将说明如何构建自己的代码&#xff0c;将自己的代码变为共享库&#xff0c;共其他代码使用。 文章目录在Linux开发过程中&#xff0c;难免会用到CMake来构建你的代码。本文将说明如何构建自己的代码&#xff…

R语言Ternary包绘制三元图、RGB三色空间分布图的方法

本文介绍基于R语言中的Ternary包&#xff0c;绘制三元图&#xff08;Ternary Plot&#xff09;的详细方法&#xff1b;其中&#xff0c;我们就以RGB三色分布图为例来具体介绍。 三元图可以从三个不同的角度反应数据的特征&#xff0c;因此在很多领域都得以广泛应用&#xff1b;…

2023美赛F题思路数据代码分享

文章目录赛题思路2023年美国大学生数学建模竞赛选题&论文一、关于选题二、关于论文格式三、关于论文提交四、论文提交流程注意不要手滑美赛F题思路数据代码【最新】赛题思路 (赛题出来以后第一时间在CSDN分享) 最新进度在文章最下方卡片&#xff0c;加入获取一手资源 202…

MySQL 索引 (只要能看完)(一篇就够了)

文章目录前言一、MySQL索引介绍1.1 索引的类别1.2 索引的创建原则二、索引的管理和使用2.1 制造实验数据2.2 explain 使用说明2.3 创建索引2.3.1 基于创建表时建立索引2.3.2 基于已创建好的表创建索引2.4 删除索引2.5 聚集索引和二级索引2.5.1 聚集索引2.5.2 二级索引&#xff…

【python知识】win10下如何用python将网页转成pdf文件

一、说明 本篇记录一个自己享用的简单工具。在大量阅读网上文章中&#xff0c;常常遇到一个专题对应多篇文章&#xff0c;用浏览器的收藏根本不够。能否见到一篇文章具有搜藏价值&#xff0c;就转到线下&#xff0c;以备日后慢慢消化吸收。这里终于找到一个办法&#xff0c;将在…

【IIC子系统之读取温湿度】

IIC子系统之读取温湿度IIC总线协议主机读取一个字节主机发送一个字节设备树编写IIC设备驱动层API编写程序读取温湿度应用层驱动读取温湿度函数解析头文件IIC总线协议 1.I2C总线是PHLIPS公司在八十年代初推出的一种串行的半双工同步总线&#xff0c;主要用于连接整体电路。 1&a…

面试准备知识点与总结——(基础篇)

目录Java基础Java面向对象有哪些特征ArrayList和LinkedList有什么区别高并发的集合有哪些问题迭代器的fail-fast和fail-safeArrayList底层扩容机制HashMap面试合集解答设计模式单例设计模式哪些地方体现了单例模式Java基础 Java面向对象有哪些特征 Java面向对象有三大特征&am…

Win10显示dds及tga缩略图

整理之前做游戏MOD时收集的模型资源,3D游戏模型的贴图文件格式基本都是dds或tga的,毕竟无损压缩、支持嵌入MipMap、带透明通道、可以被GPU硬解balabala...道理我都懂但这俩玩意系统根本直接查看不了,就算装上专门的看图软件或插件,文件夹视图下也没有缩略图预览,只能一个个点开…

SQL查询的优化:如何调整SQL查询的性能

查询优化是在合理利用系统资源和性能指标的基础上&#xff0c;定义最有效、最优化的方式和技术&#xff0c;以提高查询性能的过程。查询调整的目的是找到一种方法来减少查询的响应时间&#xff0c;防止资源的过度消耗&#xff0c;并识别不良的查询性能。 在查询优化的背景下&a…

CF1795D Triangle Coloring (组合数学)

链接 题意&#xff1a; 给定一个 n 个点 n 条边的图 &#xff0c;n 为 6 的倍数&#xff0c;每条边都有边权。 这个图是由 n/3 个三元环构成的 [1,2,3],[4,5,6],[7,8,9],[10,11,12]...... 一个 n12 的图长成这个&#xff08;唯一&#xff09;&#xff1a; 现在你需要给图染上红…

厂商推送限制说明及极光的适配方案

背景 自2023年起&#xff0c;各个厂商逐步对营销类消息做数量管控&#xff0c;具体如下&#xff1a; 华为 自2023年1月5日起&#xff0c;华为PUSH通道将根据应用类型对资讯营销类消息的每日推送数量进行上限管理&#xff0c;服务与通讯类消息每日推送数量不受限制。详情请参考推…

使用MMDetection进行目标检测、实例和全景分割

MMDetection 是一个基于 PyTorch 的目标检测开源工具箱&#xff0c;它是 OpenMMLab 项目的一部分。包含以下主要特性&#xff1a; 支持三个任务 目标检测&#xff08;Object Detection&#xff09;是指分类并定位图片中物体的任务实例分割&#xff08;Instance Segmentation&a…

服务间调用方式 OpenFeign 的介绍和使用

文章目录前言1、 RestTemplate1.1、通用方法 exchange1.2、RestTemplate 和 OpenFeign 的区别2、RPC 和 HTTP2.1、RPC 是什么2.2、RPC 调用过程示意图2.3、HTTP 是什么2.4、HTTP 调用过程示意图2.5、对比3 、OpenFeign3.1 、OpenFeign 常用注解3.2 、案例前言 Feign 停更了&am…

空间复杂度与时间复杂度

1、时间复杂度和空间复杂度 &#xff08;1&#xff09;时间复杂度、空间复杂度是什么&#xff1f; 算法效率分析分为两种&#xff1a;第一种是时间效率&#xff0c;第二种是空间效率。时间效率被称为时间复杂度&#xff0c;空间效率被称作空间复杂度时间复杂度主要衡量的是一…