一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 3968|回复: 20
收起左侧

[arduino] AVR lcd驱动程序加速优化

[复制链接]
发表于 2017-1-14 09:14 | 显示全部楼层 |阅读模式
前面发过贴,把诺基亚的lcd驱动起来了。但速度不理想。看看能不能优化。折腾了一段时间后,提高了几倍。


由于程序是居于arduino,而arduino是居于gcc的编译。而arduino又是封装后的调用。那么用底层一些的代码应该可以提高速度。


平台:atmega328 16Mhz

机理:端口操作
先看看点灯代码
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second

去除延时看看速度有多少。
digitalWrite(LED_BUILTIN, HIGH);
digitalWrite(LED_BUILTIN, LOW);

只要这两句,测看一下。频率可以达到几百kHZ。这是内置的最简单方法。
改进一下。

  bitSet(PORTB,5);      // 开灯
  bitClear(PORTB,5);    // 关灯

再测试测试。靠!能达到2mHZ,提高5  6倍。

这时貌似到头了。最近几天又发现有更底层的写法,还可以提高一些。

PORTD=0X08;
PORTD=0X00;
这估计是最牛逼的了。2.6Mhz

用示波器可以看到有些问题。拉低的时候波谷时间比较多。那么试验一下。比如。
PORTD=0X08;
PORTD=0X00;
PORTD=0X08;
PORTD=0X00;
PORTD=0X08;
PORTD=0X00;
这下可以达到5  6MHZ
纯粹要出高频的话。可以这样做。当然定时器也可以做。可以更高。定时器可以达到8mHZ方波。


以上是端口操作的优化。当然驱动lcd是用spi通讯。那么可以优化一下spi。
SPI优化。看了一些文档。发现spi也可以优化。比如时钟速度可以调到4MHZ。如果是主机模式的话可以加倍达到8mhz.
spi这里不贴代码了。需要的可以根据上面一句话找资料。


替换了以上两点相关代码后测试一下。
测试刷屏。整屏。刷4此。
以前是刷一屏起码有一秒。
现在一秒可以刷三四次。具体数值没测试量化,只说主观感受。


spi应该是调到最高速了。端口操作如果有更底层的写法有知道的坛友可以写出来看看。

有一些优化还不知道怎么搞。比如文件大小。只需要在lcd上显示字符色块等功能就行。能编译出1  2k的hex最好。用在atmega8上无压力。


网上的现成的tft lcd驱动的库。编译后不是内存占用大就是空间占用大。
发表于 2017-1-14 09:56 | 显示全部楼层
不是太喜欢 arduino 这种编程方式.

 楼主| 发表于 2017-1-14 10:14 | 显示全部楼层
junyee 发表于 2017-1-14 09:56
不是太喜欢 arduino 这种编程方式.

很好啊。可以混合写。要速度可以写底层一些的。要方便可以直接用内置的。

对于喜欢不喜欢。这个问题比较怪。都是c。难道有区别吗? 封装好的易用。底层的太抽象。用的时候要记太多东西。

发表于 2017-1-14 12:22 | 显示全部楼层
本帖最后由 钟义亭 于 2017-1-14 12:41 编辑



arduino 的優點 , 就是有寫成模組 ,  直接可用
像 4 行字的 LCD ,  我還不會寫  ,  最近沒看書了
有寫好的就方便 , 沒4 行LCD模組 , 要自己寫
arduino 好處 , 它有內建時 很好用
但不會全方位 都有寫好 , 專業要的功能 如沒
要自己加寫模組用 , 就失去方便性
要做溫度控制 , 有引導檔用 ,  幾行程式完成
如沒那起動區的函式 , 自己還不會寫

步驟一: 下載 I2C LCD library, 解壓縮後放入Arduino Libraries內
步驟二:  撰寫程式如下:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// set the LCD address to 0x20 for a 20 chars 4 line display
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  
// Set the LCD I2C address
//假設 I2C address 0x27
void setup()   /*----( SETUP: RUNS ONCE )----*/
{
  Serial.begin(9600);  /
  lcd.begin(20,4);   
  for(int i = 0; i< 3; i++)
  {
    lcd.backlight();
    delay(250);
    lcd.noBacklight();
    delay(250);
  }
  lcd.backlight();
  lcd.setCursor(3,0); //Start at character 4 on line 0
  lcd.print("Motoduino Lab!");
  lcd.setCursor(2,1);
  lcd.print("www.motoduino.com");
  lcd.setCursor(0,2);
  lcd.print("20x4 LCD Display");
  lcd.setCursor(0,3);
  lcd.print("I2C Interface");
}/*--(end setup )---*/





发表于 2017-1-14 12:22 | 显示全部楼层
本帖最后由 钟义亭 于 2017-1-14 13:02 编辑

arduino 的優點 , 就是有寫成模組 ,  直接可用
像 4 行字的 LCD ,  我還不會寫  ,  最近沒看書了
有寫好的就方便 , 沒4 行LCD模組 , 要自己寫
arduino 好處 , 它有內建時 很好用
但不會全方位 都有寫好 , 專業要的功能 如沒
要自己加寫模組用 , 就失去方便性
要做溫度控制 , 有引導檔用 ,  幾行程式完成
如沒那起動區的函式 , 自己還不會寫


1.png

一定 先有程式才去買 ,  不想去寫驅動
網路慢 ,  都會多次 點確定
又上傳了 兩篇

void setup()
{
//*************************
    //****** LCD setting ********
//*************************
  lcd.begin(16,2);         
// initialize the lcd for 20 chars 4 lines, turn on backlight
  lcd.backlight(); //點亮背光
  // Print a message to the LCD.
  lcd.setCursor(2, 0); //設定游標在第2列第0行
  lcd.print("Hello !! ");
  lcd.setCursor(2, 1);
  lcd.print("I am IIC LCD");
}


http://wiki.dfrobot.com.cn/index.php?title=(SKU:DFR0154)IIC/TWI_LCD2004%E6%B6%B2%E6%99%B6%E6%A8%A1%E5%9D%97(Arduino%E5%85%BC%E5%AE%B9)



 楼主| 发表于 2017-1-14 14:47 | 显示全部楼层

RE: AVR lcd驱动程序加速优化

钟义亭 发表于 2017-1-14 12:22
arduino 的優點 , 就是有寫成模組 ,  直接可用
像 4 行字的 LCD ,  我還不會寫  ,  最近沒看書了
有寫好 ...

http://wiki.dfrobot.com.cn

这个网站不错。竟然有很多arduino外设的介绍。

发表于 2017-1-14 16:35 | 显示全部楼层
本帖最后由 钟义亭 于 2017-1-14 17:11 编辑
MOWEIWEI 发表于 2017-1-14 14:47
http://wiki.dfrobot.com.cn

这个网站不错。竟然有很多arduino外设的介绍。

如果網站 ,  少懂程式的
會被警告 , 少傳網址
有個大陸可用的 搜尋引擎
電視公板 V59  ,  一搜都是燒錄檔
現在比較難用 ,  三年前 發這種
會影響生態的 ,  會被警告
在電視燒錄器網站 , 有個會員 常說
這與電視維修無關 ,  最近網站都缺人了
我沒懂生態  ,  不敢亂傳網址
大陸連不上台灣的 ,  不懂程式看到程式網 會反感
我不是每天弄程式  ,  我是興趣多樣化
所以要有我適合網站 ,  沒在一直寫程式
就不會去 專寫程式網站  ,  要能沒事可講點話的
我不是大學 ,  沒法知他們想法
上大學最重要目的 ,  融入學界文化
面試的都是大學 ,  高中想的 他不懂的
科班的 懂不了 DIY 的
維修也懂不了設計 ,  硬體的不了解 學軟體的
我只要多說話 ,  敵對方就會增加
我傳網址 , 常會被警告 ,  台灣網連不上
我想連不上 ,  就用 COPY  放點內容
如不用網址  ,  我那些文章  會弄昏很多人
不傳網址說不清 ,  網址用多 又得罪人
我不搶著說兩句 ,  很快人又失蹤了
我看到簡體的 優先放 ,  英文的不太懂
台灣網可能沒連上 ,  就要加點補充

google 用不同電腦 不同時間 , 不同語系
搜出的都不同 ,  有些破解軟體  想到就去搜
有的三年才找到  ,  破解的有時有在網  ,  有時下架了
百度雲下載 ,  有限制最大檔
用久了 , 下到超大檔
這台電腦 就破解百度雲 了
下了 500G ,  網上說這 就會很反感
最近這些 , 常要信件 再認證了

评分

参与人数 1一乐金币 -40 收起 理由
40560335 -40 淡定

查看全部评分

 楼主| 发表于 2017-1-14 17:01 | 显示全部楼层
本帖最后由 MOWEIWEI 于 2017-1-14 17:15 编辑
钟义亭 发表于 2017-1-14 16:35
如果網站 ,  少懂程式的
會被警告 , 少傳網址
有個大陸可用的 搜尋引擎

可以尽量贴台湾网站或者国外网站。因为国外的网站原创性比较好。上不上得了是另外一回事,里面贴出的程式码一般都经过作者验证。少有无法运行的。
大陆的基本都是去哪里copy的或者搬过来,未经验证的方法。原创的话也是贴一部分不贴一部分。不完整。

另外大陆不讲究版权。有hex烧录档不会有人警告你。 大陆讲的是人民币权,你贴的网址影响别人人生意或者论坛生意。或者是未经许可的广告贴才会被警告。

发表于 2017-1-14 20:28 | 显示全部楼层
我从楼上看到楼下个主题好像越说越偏了
 楼主| 发表于 2017-1-14 20:49 | 显示全部楼层
62nxt 发表于 2017-1-14 20:28
我从楼上看到楼下个主题好像越说越偏了

优化的地方就几行代码。越底层速度越快吧。但越底层的写法抽象性太高。要查阅芯片资料和记很多东西。
没人讨论和提供更好的写法。下面都和坛友瞎聊了。

一般伸手党比较多。就算有会的基本也就只看不回。懒得贡献一直是国内主流。但贡献了收益的人也不说谢谢。也是主流。所以造成了现状。

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-4-19 17:24 , Processed in 0.067924 second(s), 47 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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