beian10 发表于 2015-7-25 21:40:36

请教oled的SPI使用问题

oled无论怎么弄都无法亮,不知道是什么问题。我的程序是这样写的:
#include "U8glib.h"

U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9);        // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9

const uint8_t rook_bitmap[] PROGMEM = {
0x00,         // 00000000
0x55,         // 01010101
0x7f,          // 01111111
0x3e,         // 00111110
0x3e,         // 00111110
0x3e,         // 00111110
0x3e,         // 00111110
0x7f         // 01111111
};

void draw(void) {
// graphic commands to redraw the complete screen should be placed here
u8g.drawBitmapP( 0, 0, 1, 8, rook_bitmap);
}

void setup(void) {
pinMode(6, OUTPUT);
digitalWrite(6, HIGH);
}

void loop(void) {
// picture loop
u8g.firstPage();
do {
    draw();
} while( u8g.nextPage() );

// rebuild the picture after some delay
delay(1000);
}

beian10 发表于 2015-7-25 21:45:37

线是这样连的:
arduino<--------> oled
GND                  GND
5V                      VCC
pin13                   SCL
pin11                   SDA
pin9                  D/C
pin6                  RST

asdfcgdc 发表于 2015-7-25 21:48:44

接线可能有问题

beian10 发表于 2015-7-25 21:51:34

asdfcgdc 发表于 2015-7-25 21:48 static/image/common/back.gif
接线可能有问题

线换过几条,还是没有亮

加冰的可乐 发表于 2015-7-25 22:21:39

SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9 按这个接

liuxue4503 发表于 2015-7-26 03:24:12

如果不是打错了,那就是明显的线接错了:
定义的时候是这样的:U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9);      // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9你自己发的接线图又是这样的:
arduino<--------> oled
GND                  GND
5V                      VCC
pin13                   SCL
pin11                   SDA
pin9                  D/C
pin6                  RST

asdfcgdc 发表于 2015-7-26 06:18:02

beian10 发表于 2015-7-25 21:51 static/image/common/back.gif
线换过几条,还是没有亮

不是线有问题,是接错了

beian10 发表于 2015-7-26 11:41:28

liuxue4503 发表于 2015-7-26 03:24 static/image/common/back.gif
如果不是打错了,那就是明显的线接错了:
定义的时候是这样的:你自己发的接线图又是这样的:
arduino    ...

我在淘宝买的是基于SPI的oled,不过上面没有SCK,MOSI,CS的引脚。只是GND,VCC,SCL,SDA,RST,D/C。:'(我都不知怎么接

beian10 发表于 2015-7-26 11:45:42

加冰的可乐 发表于 2015-7-25 22:21 static/image/common/back.gif
SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9 按这个接

在oled上没有SCK,MOSI这两个引脚。写着有SCL,SDA。没办法照着接。。。

beian10 发表于 2015-7-26 11:51:47

asdfcgdc 发表于 2015-7-26 06:18 static/image/common/back.gif
不是线有问题,是接错了

嗯,oled上面引脚没有SCK,MOSI,只有SCL,SDA。不过买的是SPI的

老来疯 发表于 2015-7-27 03:13:04

本帖最后由 老来疯 于 2015-7-27 03:27 编辑

beian10 发表于 2015-7-26 11:51 static/image/common/back.gif
嗯,oled上面引脚没有SCK,MOSI,只有SCL,SDA。不过买的是SPI的

    SPI 是由摩托罗拉定义的一种同步外设接口总线,标准的为 4 线,即两条控制线(芯片选择CS和时钟SCLK),以及两条数据信号线(SDI 和 SDO),其中 SDI 又称为 MOSI (主出从入)和 MISO(主入从出),由于 OLED 屏本身又是一个微控制器,当然他在启动时也需要复位(Reset 或称 RSE),所以完整的 SPI 接口是 5 条线,还需要两条电源线。

    由于 OLED 屏在串行通信时不能回传显存(GGRAM)的数据,所以不用 MISO。 又由于当 SPI 只与一个设备通信时不需要 片选 (CS)信号线,这样就省去了两条线。

    需要的接口线是:   
      1.   SCLK    又称   SCL(IIC 通信时的 名称),又称 SCK   在支持两种通信模式的板上又称为D0 ,
      2.MOSI    又称   SDA(IIC 通信时的 名称),在支持两种通信模式的板上又称为D1 ,
      3.   DC      又称D/C又称A0 ,数据/命令端口,

         CS       又称   SS, 片选信号线,你的屏没有这根线,屏内以接地,表示自己已被选中,但是Arduino 的 对应端口不能别用,因为这个端口被设为输出,表示自己是主设备!(SPI 是可以让两个设备互为主设备的)。
      由于 SPI 是可以 一对多 工作的,所以主设备要对每一个从设备都有一个 CS 端口,当只有一个从设备时,不用接线也是可以工作的。

       电源和地 一般不会接错,但是它们也有不同叫法。
      厂家太多,接口方式太多,又都想特立独行,还不给明确的使用方法,我也是查了很多资料才搞明白,希望对您有帮助。
         

asdfcgdc 发表于 2015-7-27 07:48:39

beian10 发表于 2015-7-26 11:51 static/image/common/back.gif
嗯,oled上面引脚没有SCK,MOSI,只有SCL,SDA。不过买的是SPI的

所以要看准买,买的不好多麻烦!

beian10 发表于 2015-7-28 10:17:14

老来疯 发表于 2015-7-27 03:13 static/image/common/back.gif
SPI 是由摩托罗拉定义的一种同步外设接口总线,标准的为 4 线,即两条控制线(芯片选择CS和时钟SCL ...

说得很详细,太感谢了,我回去再试一下

beian10 发表于 2015-7-28 10:32:17

好了,总算成功 在这多谢大家:lol
页: [1]
查看完整版本: 请教oled的SPI使用问题