roboforum.ru

Технический форум по робототехнике.

Инициализация LCD

Раздел создан специально для людей которым интересна робототехника, но в силу разных причин они не знают с чего начать.
Задавайте ваши вопросы, какими бы простыми они не казались, постоянные посетители форума постараются ответить на них по мере своих сил.
Робот своими руками. Самодельный робот.

Инициализация LCD

Сообщение Дмитрий К. » 18 мар 2011, 20:00

Понимаю что смешно, но помогите пожалуйста куском кода или последовательностью его написания.
Как его, чтобы проинициализировать и просто замигал курсор в первой позиции.
16х2, 4-х битный интерфейс, Си.
Дмитрий К.
 
Сообщения: 76
Зарегистрирован: 01 июл 2010, 20:58
Откуда: Санкт-Петербург
прог. языки: Си
ФИО: Дмитрий

Re: Инициализация LCD

Сообщение dccharacter » 18 мар 2011, 20:11

Что-то вот такое есть:

Код: Выделить всёРазвернуть
#define   LCD_STROBE   ((LCD_EN = 1),(LCD_EN = 1),(LCD_EN = 0),(LCD_EN = 0))  //extra-wide strobe pulse

//DataImage LCD pins - CHANGE THAT IF LCD PINOUT DIFFERS !!!
#define bit7      lcd4 //Register select (0=command, 1=data)
#define bit6      lcd5 //R/W (0=write, 1=read)
#define bit5      lcd6 //Enable (active high strobe)
#define bit4      lcd7
#define bit3      lcd8
#define bit2      lcd9
#define bit1      lcd10
#define bit0      lcd11
#define LCD_RS      lcd14
#define LCD_RW      lcd13
#define LCD_EN      lcd12

// DO NOT CHANGE - IT"S SCHEMATICS!!!!
#define lcd4      RB0   //Register select (0=command, 1=data)
#define lcd5      RA6 //R/W (0=write, 1=read)
#define lcd6      RA7   //Enable (active high strobe)
#define lcd7      RA3
#define lcd8      RA0
#define lcd9      RA2
#define lcd10      RA1
#define lcd11      RB7
#define lcd12      RB6
#define lcd13      RB5
#define lcd14      RB4

void lcd_init(void) {
   LCD_RS = 0;      //write control bytes
   LCD_RW = 0;      //write mode
   delayMs(200);   //power on delay. LCD spec is 15 but some don't make it

//   PORTB = 0x30;   //4 bit mode init 1st
   bit4 = 1;
   bit5 = 1;
   LCD_STROBE;
   delayMs(20);

   LCD_STROBE;      //4 bit mode init 2nd
   delayMs(20);

   LCD_STROBE;      //4 bit mode init 3rd
   delayMs(20);

/*   PORTB = 0x20;   //set 4 bit mode
   LCD_STROBE;
   delayMs(5);*/

   lcd_putcmd(0x38);   //4 bit mode, 1/16 duty, 5x7 font
//   lcd_putcmd(0x3C);   //4 bit mode, 1/16 duty, 5x10 font
   lcd_putcmd(0x08);   //display off
   lcd_putcmd(0x0C);   //display on, no cursor
   lcd_putcmd(0x06);   //entry mode = increment cursor, freeze display (no shift)
} //END OF lcd_init()

void lcd_putcmd(byte cmd) {
//   byte scratch;
   LCD_RS = 0;   //instruction mode
   LCD_RW = 0;   //write mode
   LCD_putbyte(cmd);
   /*scratch = cmd;  //mask out RB0 (GPO1)
   PORTB = scratch;   //upper nibble
   LCD_STROBE;
   scratch = (cmd << 4);  //mask out RB0 (GPO1)
   PORTB = scratch;  //lower nibble */
   LCD_STROBE;
   //lcd_waitbusy();
   if (cmd <= 3) //using instead of waitbusy - my LCD doesn't reliably drive busy line???
   {
      delayMs(2); //instructions 1-3 take about 1.5ms
   }
   delay100us();  //other instructions take about 40ms
}
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Инициализация LCD

Сообщение Дмитрий К. » 22 мар 2011, 19:21

Ничего не понимаю :(
Попытка вывести символ 0xff. Железо работает, проверяю на встроенной библиотеке. А сам повторить не могу. В чем туплю?


Код: Выделить всёРазвернуть
void Init (void);

void Strob (void)
{
PORTD.f6 = 1; //E
PORTD.f6 = 1; //E
asm nop;
PORTD.f6 = 0; //E
PORTD.f6 = 0; //E
asm nop;
}

void main()

{
Init();   // èíèöèàëèçèðóåì ïîðòû

       PORTD.f5 = 0; //RS
       Delay_ms(200);

       PORTE.f0 = 0; // DB7
       PORTE.f1 = 0; // DB6
       PORTE.f2 = 1; // DB5
       PORTD.f7 = 0; // DB4

       Strob();
       Delay_ms(50);

       Strob();
       Delay_ms(50);

       Strob();
       Delay_ms(50);
//---

       PORTE.f0 = 0; // DB7
       PORTE.f1 = 0; // DB6
       PORTE.f2 = 1; // DB5
       PORTD.f7 = 1; // DB4
       Delay_us(100);
       Strob();
       PORTE.f0 = 1; // DB7
       PORTE.f1 = 0; // DB6
       PORTE.f2 = 0; // DB5
       PORTD.f7 = 0; // DB4
       Delay_us(100);
       Strob();
       Delay_ms(20);

       PORTE.f0 = 0; // DB7
       PORTE.f1 = 0; // DB6
       PORTE.f2 = 0; // DB5
       PORTD.f7 = 0; // DB4
       Delay_us(100);
       Strob();
       PORTE.f0 = 1; // DB7
       PORTE.f1 = 0; // DB6
       PORTE.f2 = 0; // DB5
       PORTD.f7 = 0; // DB4
       Delay_us(100);
       Strob();
       Delay_ms(20);

       PORTE.f0 = 0; // DB7
       PORTE.f1 = 0; // DB6
       PORTE.f2 = 0; // DB5
       PORTD.f7 = 0; // DB4
       Delay_us(100);
       Strob();
       PORTE.f0 = 1; // DB7
       PORTE.f1 = 1; // DB6
       PORTE.f2 = 0; // DB5
       PORTD.f7 = 0; // DB4
       Delay_us(100);
       Strob();
       Delay_ms(20);

       PORTE.f0 = 0; // DB7
       PORTE.f1 = 0; // DB6
       PORTE.f2 = 0; // DB5
       PORTD.f7 = 0; // DB4
       Delay_us(100);
       Strob();
       PORTE.f0 = 0; // DB7
       PORTE.f1 = 1; // DB6
       PORTE.f2 = 1; // DB5
       PORTD.f7 = 0; // DB4
       Delay_us(100);
       Strob();
       Delay_ms(20);

       PORTD.f5 = 1; //RS

       PORTE.f0 = 1; // DB7
       PORTE.f1 = 1; // DB6
       PORTE.f2 = 1; // DB5
       PORTD.f7 = 1; // DB4
       Delay_us(100);
       Strob();
       PORTE.f0 = 1; // DB7
       PORTE.f1 = 1; // DB6
       PORTE.f2 = 1; // DB5
       PORTD.f7 = 1; // DB4
       Delay_us(100);
       Strob();
       Delay_ms(20);

//------------------------------

       for(;;)
       {
       }
}


void Init (void)
{
      ADCON0 = 0b00000001;
      ADCON1 = 0b00000001;
      ADCON2 = 0b00001001;

      CMCON = 0b00000111;  //disabled

      INTCON =  0b10000000;
      //GIE, PEIE, TMR0IE, INT0IE, RBIE, TMR0IF, INT0IF, RBIF
      INTCON2 = 0b11000000;
      INTCON3 = 0b00000000;


      T0CON = 0b01000100;


/*
sbit LCD_RS at RD5_bit;
sbit LCD_EN at RD6_bit;
sbit LCD_D4 at RD7_bit;
sbit LCD_D5 at RE2_bit;
sbit LCD_D6 at RE1_bit;
sbit LCD_D7 at RE0_bit;
*/


TRISA = 0;
PORTA = 0;

TRISB = 0;
PORTB = 0;


TRISC = 0;
PORTC = 0;
TRISC.f0 = 1;

TRISD = 0;
PORTD = 0;

TRISE = 0;
PORTE = 0;

}
Дмитрий К.
 
Сообщения: 76
Зарегистрирован: 01 июл 2010, 20:58
Откуда: Санкт-Петербург
прог. языки: Си
ФИО: Дмитрий

Re: Инициализация LCD

Сообщение dccharacter » 22 мар 2011, 19:56

А как выглядит символ 0xff?
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Инициализация LCD

Сообщение blindman » 22 мар 2011, 20:16

Поправил название темы, а то может сложиться впечатление что здесь вещества обсуждаются
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Инициализация LCD

Сообщение Дмитрий К. » 23 мар 2011, 12:42

dccharacter писал(а):А как выглядит символ 0xff?

Черный квадрат
Дмитрий К.
 
Сообщения: 76
Зарегистрирован: 01 июл 2010, 20:58
Откуда: Санкт-Петербург
прог. языки: Си
ФИО: Дмитрий


Вернуться в Новичкам или основы основ роботостроения.

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 12