Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:7
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:11
Форум » starterkit.ru » Вспомогательные средства
подключение LCD HD44780
and73y
Добавлено 08.04.2011 12:24
0
Сообщение: 1
and73y
5

Пункты: 1154
Регистрация: 25.11.2009
Хочу подключить дисплей HD44780. Как узнать есть ли в ядре уже готовый драйвер для сего девайса?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 08.04.2011 13:06 Сообщение: 2
sasamy
4.71

Пункты: 83540
Регистрация: 14.08.2009
Есть - drivers/misc/arm-charlcd.c
Спуститься к концу Подняться к началу
Персональная информация
and73y
Добавлено 08.04.2011 13:45 Сообщение: 3
and73y
5

Пункты: 1154
Регистрация: 25.11.2009
Чтобы подключить драйвер к плате, надо ковырять
Documentation/driver-model/...
?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 08.04.2011 14:23 Сообщение: 4
sasamy
4.71

Пункты: 83540
Регистрация: 14.08.2009
Думаю там много нужно переработать. Кстати - возможно это не лучший вариант, где-то я видел подключение через LPT - его проще на GPIO адаптировать.
Спуститься к концу Подняться к началу
Персональная информация
and73y
Добавлено 08.04.2011 14:35 Сообщение: 5
and73y
5

Пункты: 1154
Регистрация: 25.11.2009
Раскопал такой вариант:

http://sunge.awardspace.com/dtmf-en-de/node13.html
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 08.04.2011 15:43 Сообщение: 6
sasamy
4.71

Пункты: 83540
Регистрация: 14.08.2009
Вот это намного интересней вариант
http://lcd-linux.sourceforge.net/
Спуститься к концу Подняться к началу
Персональная информация
and73y
Добавлено 11.04.2011 15:55 Сообщение: 7
and73y
5

Пункты: 1154
Регистрация: 25.11.2009
Пасиб!
Действительно интересный и полезный проект.

есть один нюанс)
Все варианты предполагают подключение через gpio, а у меня используется плата WS-RS232/B, которая позволяет подключать этот дисплей через COM порт. Преимущество в том, что надо меньше линий io.

Поэтому буду переделывать dtmf =)
Спуститься к концу Подняться к началу
Персональная информация
DM
Добавлено 17.04.2011 07:30 Редактировалось 17.04.2011 07:42 Сообщение: 8
DM
0

Пункты: 151
Регистрация: 06.03.2011
Вот я это использую-
Код
#include "LPC23xx.h"

// D4-D7- P0.17-P0.20- на любые другие, только 4 подряд

#define D4_bit 17
#define D4 1<<D4_bit
#define D5 1<<18
#define D6 1<<19
#define D7 1<<20

#define E 1<<21
#define RS 1<<22
#define RW 1<<0

#define busyflag D7

void lcd_string(char *);
void lcd_line1(void);
void lcd_line2(void);
void lcd_cmd(unsigned char);
void lcd_char(unsigned char);
void lcd_nybble(unsigned char,unsigned char);
void lcd_init(void);
void strobe_e(void);
void delay_us(int);

void lcd_string(char *senpoint)
{
while(*senpoint != '\0')
{
lcd_char(*senpoint);
senpoint++;
}
}

void lcd_line1(void)
{
lcd_cmd(0x80);
}

void lcd_line2(void)
{
lcd_cmd(0xc0);
}

void lcd_cmd(unsigned char letter)
{
unsigned char temp;
temp=letter;
temp=temp>>4;
lcd_nybble(temp,0);
temp=letter;
temp=temp&0x0f;
lcd_nybble(temp,0);
}

void lcd_char(unsigned char letter)
{
unsigned char temp;
temp=letter;
temp=temp>>4;
lcd_nybble(temp,1);
temp=letter;
temp=temp&0x0f;
lcd_nybble(temp,1);
}

void lcd_nybble(unsigned char nyb,unsigned char rs)
{
int dat;
if(rs)
IOSET0 = RS;
else
IOCLR0 = RS;
dat = nyb;
IOCLR0 = (D4|D5|D6|D7); //сбросить D4-D7
IOPIN0 |= dat<<D4_bit; //двигаем влево до D4
strobe_e();
}

void lcd_init(void)
{
delay_us(500000);
lcd_nybble(0x03,0); //сброс LCD
strobe_e();
strobe_e();
lcd_nybble(0x02,0);
lcd_cmd(0x28); //4 бит 2 линии
lcd_cmd(0x10); //перемещать курсор и сдвиг влево
lcd_cmd(0x06); //инкремент
lcd_cmd(0x0e); //вкл.дисплей-курсор мигать
lcd_cmd(0x01); //очистить дисплей
}

clear_disp(){
lcd_cmd(0x01);
}

void lcd_busy(void)
{
IODIR0 = (E|RS|RW|D4|D5|D6); //D7- вход
IOCLR0 = RS;
IOSET0 = RW;
IOSET0 = E;
while(IOPIN0 & busyflag); //ждем флаг занятости
IOCLR0 = E;
IOCLR0 = RW;
IODIR0 = (E|RS|RW|D4|D5|D6|D7); //D7- выход
}

void strobe_e(void)
{
IOSET0 = E;
delay_us(1);
IOCLR0 = E;
lcd_busy();
}

void delay_us(int x)
{
int a,b;
for(a=0;a<x;a++){
for(b=0;b<3;b++);
}
}


Использование-

Код
#include "LPC23xx.H"
#include <stdio.h>

char str[80];

int main (void)
{
IODIR0 = (D4|D5|D6|D7|RS|RW|E);
IOCLR0 = (D4|D5|D6|D7|RS|RW|E);
lcd_init();

while (1)
{
H1=19; H2=15;

sprintf(str, "%s%d:%d", "Time- ",H1,H2 );
lcd_line1();
lcd_string(str);
}

}
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Вспомогательные средства