极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 18363|回复: 11

不用标准库,怎么用arduino在彩色液晶屏上显示图像?

[复制链接]
发表于 2015-2-9 16:14:18 | 显示全部楼层 |阅读模式
本帖最后由 greeng 于 2015-2-9 16:16 编辑

我在玩一个彩色OLED屏,96x64的64k真彩,把一张96x64的彩图用图片取模后生成gImage_16bit[10760]  一个数组,把它加入arduino 程序里,用SPI。h的库发送到屏的显示ram里,但是屏幕马上黑屏了,什么都没显示(之前已经初始化用命令点亮了),请问这种情况可能是哪里出问题了?

有一点我迷惑的地方是 图片取模后 10760个 16bit 数已经有21520Byte的数据量了,为什么用SDK烧录到arduino上既没有报警也没提示异常?


我已经准备了一个flash 芯片来保存图片数据的,不知道怎么用arduino驱动?如果相关项目资料麻烦告知,谢谢!
回复

使用道具 举报

发表于 2015-2-9 16:43:13 | 显示全部楼层
要建立一個 gImage_16bit[10760]  的数组, 本身已經有問題了.
而且, 96x64 的 64bit 圖片, 應該有 12288 bytes (96 x 64 x 16 = 98304 bits), 不知你那 10760 的數字, 是怎樣計算出來的.
12K 的資料, 放進 SD 應該沒問題, 但直接放入 arduino, 應該只有 due 或 galileo 之類的板子才可以應付.
不過, 要顯示一張 12k 的圖片, 並不表示一定要把整個圖片先放到 arduino 的 內存, 可以分段載入顯示, 比如一次只讀取  512bytes, 分 24次讀取並顯示出來就可以了.  如果顯示本身支援多頁, 就可以在隱藏的頁面先組織好, 然後一次顯不出來, 就不會有分段顯不的問題.

驅動也是一個程式, 不用驅動的話, 如果你看得慬有關的資料, 自己寫一個也不會有問題.  大前提是你要看得懂 OLED屏的spec, 以及懂得 arduino 板子輸出的控制.
回复 支持 反对

使用道具 举报

发表于 2015-2-9 20:18:35 | 显示全部楼层
不用标准库 你就自己写个库吧。。。楼主牛~~~~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-9 23:50:42 | 显示全部楼层
Super169 发表于 2015-2-9 16:43
要建立一個 gImage_16bit[10760]  的数组, 本身已經有問題了.
而且, 96x64 的 64bit 圖片, 應該有 12288 b ...

64k种颜色是16bit的的,我用的是UNO,所以没有这么大的ram,请问你说的分段载人的方式有相似程序可以参考么?其实我想要的是类似于arduino的TFT模块的库程序,可惜现在还没找到
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-9 23:52:08 | 显示全部楼层
darkorigin 发表于 2015-2-9 20:18
不用标准库 你就自己写个库吧。。。楼主牛~~~~

我也是刚接触arduino的,瞎搞搞,因为没这个驱动IC的标准库,只能用SPI库自己摸索着写了
回复 支持 反对

使用道具 举报

发表于 2015-2-10 09:23:13 | 显示全部楼层
greeng 发表于 2015-2-9 23:50
64k种颜色是16bit的的,我用的是UNO,所以没有这么大的ram,请问你说的分段载人的方式有相似程序可以参考 ...

分段載入要跟據你本身的圖像格式去做.  如果是自己儲存的, 可以順隨畫面的編排記錄.
簡單而言, 就把圖像當成文字, 一行一行的記下去, 之後一行行的讀出來.
每讀出一行, 就顯示出來, 之後再讀取下一行, 那就只需要足夠儲存一行文字的記憶體作 buffer.

如果你沒寫過庫, 自己寫的話, 不是你想像中的容易, 特別是硬件的庫.
首先你要看慬硬件的資料, 每個步驟要發送什麼東西.  
而硬件的通訊, 很多是只 bit 作單位的, 當中的運算比較複雜.
就以單色的顥示為例, 一次輸出一個 byte 的 8 個點, 可能是打直的 8 點.
當你要畫出一點時, 就要取回之前的 8 個點作 OR 的運算.
當然, 64K color 可能會簡單一點, 因為一個點就要 2個 byte 了, 不會跟其他點合拼.
只需要展示圖片可能會簡單一點, 只需一點一點的設定.  
而且, 寫顯屏的庫, 還要考慮記憶體的問題.  
單是 128x64 的單色庫, 如果要可以隨意畫線, 就要有 1KB 作 buffer 把畫面記下來了.
但我只做過 1106/1306 的庫, 都是單色的, 沒做過彩屏的庫, 不太肯定是否可以簡單一點.

不過, 既然你對分段載入的做法也不了解, 相信要寫一個彩屏的庫, 需要很大的努力.
回复 支持 反对

使用道具 举报

发表于 2015-2-10 09:27:35 | 显示全部楼层
greeng 发表于 2015-2-9 23:52
我也是刚接触arduino的,瞎搞搞,因为没这个驱动IC的标准库,只能用SPI库自己摸索着写了

刚接触就能自己写库  太牛了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-10 18:17:16 | 显示全部楼层
darkorigin 发表于 2015-2-10 09:27
刚接触就能自己写库  太牛了

现在能满屏显示RGB三色了,还没搞定图片,其实不算完全自己写,打算参考spi.h这个库
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-10 18:18:26 | 显示全部楼层
Super169 发表于 2015-2-10 09:23
分段載入要跟據你本身的圖像格式去做.  如果是自己儲存的, 可以順隨畫面的編排記錄.
簡單而言, 就把圖像 ...

明白,我自己摸索摸索,现在可以用命令来画线或者矩形了,就当重新学习单片机了
回复 支持 反对

使用道具 举报

发表于 2015-2-10 18:23:28 | 显示全部楼层
greeng 发表于 2015-2-10 18:18
明白,我自己摸索摸索,现在可以用命令来画线或者矩形了,就当重新学习单片机了

能夠畫線, 就已經解決了大部份的問題了, 最基本跟顯屏溝通的都已成功了.
顯示圖片, 從簡單的角度看, 就是要畫出 96x64 條長度為 1 的線吧, 既然已經可以畫線, 應該沒大問題了.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-10 23:55:12 | 显示全部楼层
Super169 发表于 2015-2-10 18:23
能夠畫線, 就已經解決了大部份的問題了, 最基本跟顯屏溝通的都已成功了.
顯示圖片, 從簡單的角度看, 就是 ...

谢谢你的耐心指导,现在的问题还是用image2LCD的软件取模得到的数组总是不对的,96x64 一个cell 16bit的应该是 96x64x2=12288  个0x数组,不知道为什么是10760, 一上传就黑屏,

如果用for (int i=0,i<12288,i++) 送 12288个0xff个颜色到graphic ram则可以显示全屏白色,不知道是不是取模软件问题,真是怪事。
回复 支持 反对

使用道具 举报

发表于 2015-2-11 00:29:13 | 显示全部楼层
greeng 发表于 2015-2-10 23:55
谢谢你的耐心指导,现在的问题还是用image2LCD的软件取模得到的数组总是不对的,96x64 一个cell 16bit的应 ...

我也不知你為什麼會是 10760 而不是 12288, 我在之前也問過你了.

如果發送全 0x00 而出黑屏, 全 0xFF 出白屏, 應該很合理吧.
你之前不是說已經會畫線了嗎?  那屏幕上的坐標設定應該清楚了吧.
把每一個點就看成是一條長度為 1 的線, 總可以做到了吧.  
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-17 19:48 , Processed in 0.060286 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表