我正在尝试通过串行外围接口协议将诺基亚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的方法:
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);
}我是一个嵌入式编程的新手。如果有任何帮助,我将不胜感激。谢谢。
发布于 2015-11-30 21:19:31
如果您没有遗漏初始化步骤(我还没有对照5110数据表对您进行检查),那么一定是您的ioctls出了问题,或者是时间问题。
您可以尝试使用抽象ioctl调用的库来排除这种情况(我倾向于使用自己的库:https://github.com/graycatlabs/serbus ;)。
如果它仍然不能工作,那么我会说这可能是一个时间问题-当涉及到文件I/O时,Python比C慢得多,所以它可能没有给LCD驱动程序足够的时间在一些命令之后更新-查看数据表,看看是否需要你在任何命令之后给它一些时间。
https://stackoverflow.com/questions/33705974
复制相似问题