[Atmel] 搞一天用Studio7 SAMD21管脚驱动OLED

[复制链接]
2061|6
 楼主| ddllxxrr 发表于 2015-10-5 17:31 | 显示全部楼层 |阅读模式
本帖最后由 ddllxxrr 于 2015-10-5 17:32 编辑

我很早就从淘宝拍了两块SSD1306的OLED的显示屏。今天没有事了,拿出来跑跑,本来以为上午就搞定。搞了一天。原因是第一个OLED开焊了。

就是下边这款,卖家么我不打了,有做广告的味道。。。。。




搞了一天是因为我买了两块,我拿出第一块怎么也点不亮。我又去问渡娘。也下了例程。从上午一直到下午2点。

我有点**眼了。我那出了我的示波器去查,泥妈好像有波形。我又到别的坛子下来人家跑过的例程,也不亮。

我这才想到换一个OLED,居然亮了。我这次开仓放粮我把我用到的所有软件都传一下,省得大家再找哈。

那个坏屏,我咨询了卖家。卖家态度老好了,让我自己修一下。我说怎么修?他说用烙铁焊一下后边的屏的排线。

听人劝吃饱饭,我就细心地焊哈,但我焊了两遍都不好用。我正要发火时,突然想到用万用表测一下。

我测第二个管脚时好像万用表响得很吃力。我就象蜘蛛拉丝似的焊。终于焊好。


我手里现在有两个好OLED屏啦。

卖家说我技术八错。虽然谦虚了一下,但心里美啊。


书归正转哈:




我用D21是因为板子放久了不用一下不好,我就拿出来用了,就像军队没事时拉练一样。所以就用D21了

先建空工程然后加入DELAY延时模块。

管脚及高低电平定义如下:


  1. #define SSD1306_DIN_PIN PIN_PB22
  2. #define SSD1306_CLK_PIN PIN_PB23
  3. #define SSD1306_CS_PIN PIN_PB17
  4. #define SSD1306_DC_PIN PIN_PB30
  5. #define SSD1306_RES_PIN PIN_PA27

  6. #define u8 unsigned char
  7. #define u32 uint32_t




  8. //-----------------OLED端口定义----------------                                             


  9. #define OLED_SCLK_Clr() port_pin_set_output_level(PIN_PB23,0)//CLK
  10. #define OLED_SCLK_Set() port_pin_set_output_level(PIN_PB23,1)

  11. #define OLED_SDIN_Clr() port_pin_set_output_level(PIN_PB22,0)//DIN
  12. #define OLED_SDIN_Set() port_pin_set_output_level(PIN_PB22,1)

  13. #define OLED_RST_Clr() port_pin_set_output_level(PIN_PA27,0)//RES
  14. #define OLED_RST_Set() port_pin_set_output_level(PIN_PA27,1)

  15. #define OLED_DC_Clr() port_pin_set_output_level(PIN_PB30,0)//DC
  16. #define OLED_DC_Set()  port_pin_set_output_level(PIN_PB30,1)
  17.                      
  18. #define OLED_CS_Clr()  port_pin_set_output_level(PIN_PB17,0)//CS
  19. #define OLED_CS_Set()  port_pin_set_output_level(PIN_PB17,1)

  20. #define OLED_CMD  0        //写命令
  21. #define OLED_DATA 1        //写数据


还有一个关键是管脚初始化:
  1. struct port_config config_port_pin;
  2.          
  3.          port_get_config_defaults(&config_port_pin);
  4.          config_port_pin.direction=PORT_PIN_DIR_OUTPUT;
  5.          config_port_pin.PORT_PIN_PULL_UP;
  6.          port_pin_set_config(SSD1306_DIN_PIN,&port_pin_set_config);
  7.          port_pin_set_config(SSD1306_CLK_PIN PIN_PB23,&port_pin_set_config);
  8.          port_pin_set_config(SSD1306_CS_PIN PIN_PB17,&port_pin_set_config);
  9.          port_pin_set_config(SSD1306_DC_PIN PIN_PB30,&port_pin_set_config);
  10.          port_pin_set_config(SSD1306_RES_PIN PIN_PA27,&port_pin_set_config);
  11.          

然后我把所有的OLED有关的统统放入一个目录哈:这样比较方便。

打包哈省得大家找:



最后的运行结果:



全部连线:



取模软件:


这个取模软件按下图配置就行:








本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
dirtwillfly 发表于 2015-10-8 06:40 | 显示全部楼层
楼主好幽默
 楼主| ddllxxrr 发表于 2015-10-8 08:16 | 显示全部楼层
86269838 发表于 2017-3-19 07:28 | 显示全部楼层
hello,我尝试用你这个程序驱动OLED,是可以显示的,之后我尝试给一个中断来显示另一帧画面。功能上也是可以的,但是发现第二个画面的出现得比较慢,感觉是扫出来的。请问有什么办法可以提高显示的速度呢?
86269838 发表于 2017-3-20 07:39 | 显示全部楼层
我把gclk_0由8Mhz 改到 48Mhz了,速度有了提高,请问还有什么可能的办法呢?
 楼主| ddllxxrr 发表于 2017-3-20 15:05 | 显示全部楼层
86269838 发表于 2017-3-20 07:39
我把gclk_0由8Mhz 改到 48Mhz了,速度有了提高,请问还有什么可能的办法呢?

还有就是在符合OLED允许情况下,有延时函数就稍延一点,再有把数写完了,再开OLED的显示
86269838 发表于 2017-3-21 07:09 | 显示全部楼层
ddllxxrr 发表于 2017-3-20 15:05
还有就是在符合OLED允许情况下,有延时函数就稍延一点,再有把数写完了,再开OLED的显示 ...

OK, 我回去试一试。另这个sd1306驱动写的时候是按一个page一个page来的,有没有更快的方式啊?还有在samd21里面spi的实际速度能达到cpu的一半吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2404

主题

7001

帖子

68

粉丝
快速回复 在线客服 返回列表 返回顶部