首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >诺基亚5110液晶屏初始化问题

诺基亚5110液晶屏初始化问题
EN

Stack Overflow用户
提问于 2015-11-14 14:56:45
回答 1查看 855关注 0票数 1

我正在尝试通过串行外围接口协议将诺基亚5110液晶屏连接到BeagleBone Black Rev-C。

这些连接完全如第6页所示:Nokia5110-BeagleBone Black Connections

我为飞利浦PCD8544 (诺基亚3310)驱动程序写了一个相当于Arduino代码的C语言。其中,我导出所需的GPIO端口,并通过SPI接口发送命令和数据。

我成功地安装并运行了Adafruit的python库:Adafruit Nokia LCD

我的问题是

我有一个奇怪的问题,当我先运行这段python代码,然后再运行我的C代码时,代码运行得很好!但是,如果我在运行python代码之前运行C代码,就得不到任何输出。逻辑上说,python代码必须初始化一些我在代码中遗漏的东西。

下面是我初始化LCD的方法:

代码语言:javascript
复制
    fd_spi_dev = open(device, O_RDWR);
//set mode
mode = SPI_MODE_0;
ioctl(fd_spi_dev, SPI_IOC_WR_MODE, &mode);
ioctl(fd_spi_dev, SPI_IOC_RD_MODE, &mode);
//set max bitrate
speed = 4000000;
ioctl(fd_spi_dev, SPI_IOC_RD_MAX_SPEED_HZ, &speed);
ioctl(fd_spi_dev, SPI_IOC_WR_MAX_SPEED_HZ, &speed);
// set an msb first
lsbsetting = 0;
ioctl(fd_spi_dev, SPI_IOC_WR_LSB_FIRST, &lsbsetting);
// set bits per word
bits = 8;
ioctl(fd_spi_dev, SPI_IOC_WR_BITS_PER_WORD, &bits);
ioctl(fd_spi_dev, SPI_IOC_RD_BITS_PER_WORD, &bits);

lcd_write_cmd(0x21);    // LCD extended commands
lcd_write_cmd(0xB8);    // set LCD Vop (contrast)
lcd_write_cmd(0x04);    // set temp coefficient
lcd_write_cmd(0x14);    // set biad mode 1:40
lcd_write_cmd(0x20);    // LCD basic commands
lcd_write_cmd(0x09);    // LCD all segments on
/* I am expecting to see all segments lit here */
sleep(5);
lcd_write_cmd(0x0C);    // LCD normal video 

void lcd_write_cmd(uint8_t cmd) {
    uint8_t *tx = &cmd;
    uint8_t rx;
    uint32_t len = 1;

    struct spi_ioc_transfer tr = {
       .tx_buf = (uint32_t)tx,
       .rx_buf = (uint32_t)&rx,
       .len = len,
       .delay_usecs = delay,
       .speed_hz = speed,
       .bits_per_word = bits,
       .cs_change = 1,
    };

   size = write(fd_dc_val, "0", 1);
   size = write(fd_cs_val, "0", 1);

   ioctl(fd_spi_dev, SPI_IOC_MESSAGE(1), &tr);

   write(fd_cs_val, "1", 1);
}

我是一个嵌入式编程的新手。如果有任何帮助,我将不胜感激。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-11-30 21:19:31

如果您没有遗漏初始化步骤(我还没有对照5110数据表对您进行检查),那么一定是您的ioctls出了问题,或者是时间问题。

您可以尝试使用抽象ioctl调用的库来排除这种情况(我倾向于使用自己的库:https://github.com/graycatlabs/serbus ;)。

如果它仍然不能工作,那么我会说这可能是一个时间问题-当涉及到文件I/O时,Python比C慢得多,所以它可能没有给LCD驱动程序足够的时间在一些命令之后更新-查看数据表,看看是否需要你在任何命令之后给它一些时间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33705974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档