打印
[Atmel]

搞一天用Studio7 SAMD21管脚驱动OLED

[复制链接]
1600|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 ddllxxrr 于 2015-10-5 17:32 编辑

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

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




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

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

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

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

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

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


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

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


书归正转哈:




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

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

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


#define SSD1306_DIN_PIN PIN_PB22
#define SSD1306_CLK_PIN PIN_PB23
#define SSD1306_CS_PIN PIN_PB17
#define SSD1306_DC_PIN PIN_PB30
#define SSD1306_RES_PIN PIN_PA27

#define u8 unsigned char
#define u32 uint32_t




//-----------------OLED端口定义----------------                                             


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

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

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

#define OLED_DC_Clr() port_pin_set_output_level(PIN_PB30,0)//DC
#define OLED_DC_Set()  port_pin_set_output_level(PIN_PB30,1)
                     
#define OLED_CS_Clr()  port_pin_set_output_level(PIN_PB17,0)//CS
#define OLED_CS_Set()  port_pin_set_output_level(PIN_PB17,1)

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


还有一个关键是管脚初始化:
struct port_config config_port_pin;
         
         port_get_config_defaults(&config_port_pin);
         config_port_pin.direction=PORT_PIN_DIR_OUTPUT;
         config_port_pin.PORT_PIN_PULL_UP;
         port_pin_set_config(SSD1306_DIN_PIN,&port_pin_set_config);
         port_pin_set_config(SSD1306_CLK_PIN PIN_PB23,&port_pin_set_config);
         port_pin_set_config(SSD1306_CS_PIN PIN_PB17,&port_pin_set_config);
         port_pin_set_config(SSD1306_DC_PIN PIN_PB30,&port_pin_set_config);
         port_pin_set_config(SSD1306_RES_PIN PIN_PA27,&port_pin_set_config);
         

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

打包哈省得大家找:
GccBoardProject3.rar (3.8 MB)


最后的运行结果:



全部连线:



取模软件:
PCtoLCD2002.zip (907.5 KB)

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








相关帖子

沙发
dirtwillfly| | 2015-10-8 06:40 | 只看该作者
楼主好幽默

使用特权

评论回复
板凳
ddllxxrr|  楼主 | 2015-10-8 08:16 | 只看该作者

使用特权

评论回复
地板
86269838| | 2017-3-19 07:28 | 只看该作者
hello,我尝试用你这个程序驱动OLED,是可以显示的,之后我尝试给一个中断来显示另一帧画面。功能上也是可以的,但是发现第二个画面的出现得比较慢,感觉是扫出来的。请问有什么办法可以提高显示的速度呢?

使用特权

评论回复
5
86269838| | 2017-3-20 07:39 | 只看该作者
我把gclk_0由8Mhz 改到 48Mhz了,速度有了提高,请问还有什么可能的办法呢?

使用特权

评论回复
6
ddllxxrr|  楼主 | 2017-3-20 15:05 | 只看该作者
86269838 发表于 2017-3-20 07:39
我把gclk_0由8Mhz 改到 48Mhz了,速度有了提高,请问还有什么可能的办法呢?

还有就是在符合OLED允许情况下,有延时函数就稍延一点,再有把数写完了,再开OLED的显示

使用特权

评论回复
7
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

2398

主题

6945

帖子

66

粉丝