roboforum.ru

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

LCD (HD44780) к произвольным пинам

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Re: LCD (HD44780) к произвольным пинам

Сообщение EdGull » 11 сен 2008, 20:31

фусибиты перевел на кварц?
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

Re: LCD (HD44780) к произвольным пинам

Сообщение Shaab » 11 сен 2008, 20:34

EdGull писал(а):фусибиты перевел на кварц?

вроде да
у меня на этой схеме другая прошивка работает, только она мне не нравится, хотел свою написать, да что-то пока не очень получается
обратил внимание, что баском при компилляции ругается на то, что нету места для бита ___LCDNO. А он откуда взялся?
Последний раз редактировалось Shaab 11 сен 2008, 20:36, всего редактировалось 1 раз.
Shaab
 
Сообщения: 21
Зарегистрирован: 06 сен 2008, 12:33
Откуда: Москва

Re: LCD (HD44780) к произвольным пинам

Сообщение EdGull » 11 сен 2008, 20:36

та проишка тоже на 12мгц ?
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

Re: LCD (HD44780) к произвольным пинам

Сообщение Shaab » 11 сен 2008, 20:37

EdGull писал(а):та проишка тоже на 12мгц ?

да
Shaab
 
Сообщения: 21
Зарегистрирован: 06 сен 2008, 12:33
Откуда: Москва

Re: LCD (HD44780) к произвольным пинам

Сообщение K()X » 11 сен 2008, 21:21

левой пяткой чую- из-за 2 енабла такая фигня.
но посоветовать ничего не могу :(
Аватара пользователя
K()X
 
Сообщения: 25
Зарегистрирован: 10 сен 2008, 23:37
Откуда: Пенза.

Re: LCD (HD44780) к произвольным пинам

Сообщение bezobraznic » 11 сен 2008, 22:27

Вот моя библа для CVAVRа пользуйтесь на здоровье!!!!

Код: Выделить всёРазвернуть
//****************************************************************************************************
//************************************    my_lcd.c    ************************************************
//****************************************************************************************************
//************************************   Месяц А.     ************************************************
//****************************************************************************************************

//1.Скопировать этот файл в папку с проектом и подключить при помощи " #include <my_lcd.c> "
//2.Подключить порты к LCD и сконфигурировать их на выход.

#include <io.h>
#include <delay.h>

//****************************************************************************************************
//****************************  Настройка подключения LCD  *******************************************
//****************************************************************************************************

#define COLUMNS 16  //количество символов в строке

#define EN PORTB.2
#define RS PORTB.0
#define LCD_PD4 PORTB.4
#define LCD_PD5 PORTB.5
#define LCD_PD6 PORTC.1
#define LCD_PD7 PORTC.0

//****************************************************************************************************
//****************************************************************************************************
//****************************************************************************************************
#define COMAND   0   // Команда
#define DATA   1   // Данные
#define lcd_delay 1 //При необходимости, подстроить

#pragma used+

//функции
void lcd_write(unsigned char data, unsigned char mode);
void lcd_init(void);
void lcd_putchar(unsigned char data);              // отображение 1 символа в позиции (последняя + 1)
void lcd_gotoxy(unsigned char x, unsigned char y); // задание позиции 1 символа x - символ =0..39 y - строка =0..3
void lcd_clear(void);                              // очистка LCD
void lcd_puts(char *str);                          // вывод символа расположенного в SRAM на LCD
void lcd_putsf(char flash *str);                   // вывод символа расположенного в FLASH на LCD
void lcd_cursor_on(void);
void lcd_cursor_off(void);
void lcd_clear_string(unsigned char y,unsigned char from,unsigned char to);// очистка нужного количества символов в строке
//****************************************************************************************************


flash unsigned char base_y[4]={0x80,0xc0,0x80+COLUMNS,0xc0+COLUMNS};// стартовые значения 1 и 2 строки
unsigned char lcd_x, lcd_y;              // переменные для хранения последней позиции символа

//****************************************************************************************************

void lcd_write(unsigned char data, unsigned char mode){

if (mode)RS = 1;else RS = 0;   //выбор режима 1-data 0-comand

delay_us(lcd_delay);

// старший нибл
if (data & (1<<7)) LCD_PD7=1; else LCD_PD7=0;
if (data & (1<<6)) LCD_PD6=1; else LCD_PD6=0;
if (data & (1<<5)) LCD_PD5=1; else LCD_PD5=0;
if (data & (1<<4)) LCD_PD4=1; else LCD_PD4=0;

EN = 1;
delay_us(lcd_delay);
EN = 0;
delay_us(lcd_delay);

//младший нибл
if (data & (1<<3)) LCD_PD7=1; else LCD_PD7=0;
if (data & (1<<2)) LCD_PD6=1; else LCD_PD6=0;
if (data & (1<<1)) LCD_PD5=1; else LCD_PD5=0;
if (data & (1<<0)) LCD_PD4=1; else LCD_PD4=0;

EN = 1;
delay_us(lcd_delay);
EN = 0;
delay_us(lcd_delay);

LCD_PD7=1; LCD_PD6=1; LCD_PD5=1; LCD_PD4=1;
delay_ms(lcd_delay);
}//lcd_write()

//****************************************************************************************************

void lcd_init(){
RS=0;
EN=0;
delay_ms(200);
lcd_write(0x33, COMAND);
delay_ms(5);
lcd_write(0x32, COMAND);
lcd_write(0x28, COMAND); // 4 бит, 2 строки
lcd_write(0x08, COMAND); // полное выключение дисплея
lcd_write(0x01, COMAND); // очистка дисплея
lcd_write(0x06, COMAND); // сдвиг курсора вправо
lcd_write(0x0C, COMAND); // включение дисплея, выключение курсора
lcd_clear();
}//lcd_init();

//****************************************************************************************************

void lcd_gotoxy(unsigned char x, unsigned char y){
if (y<=3)lcd_write((base_y[y]+lcd_x),COMAND);
else lcd_write((base_y[0]+lcd_x),COMAND);
lcd_x=x;
lcd_y=y;
}//lcd_gotoxy()

//****************************************************************************************************

// очистка дисплея LCD
void lcd_clear(void){
lcd_write(2,COMAND);   // cursor home
lcd_write(0x0c,COMAND); // cursor off
lcd_write(1,COMAND);   // clear
lcd_x=lcd_y=0;
}//lcd_clear()

//****************************************************************************************************

// очистка нужного количества символов в строке
void lcd_clear_string(unsigned char y,unsigned char from,unsigned char to){

while(from <= to){
        lcd_gotoxy(from++,y);
        lcd_putchar(' ');
};//while

}//lcd_clear_string()

//****************************************************************************************************

void lcd_cursor_on(){
lcd_write(0x0d,COMAND);
}//lcd_cursor_on()

//****************************************************************************************************

void lcd_cursor_off(){
lcd_write(0x0c,COMAND);
}//lcd_cursor_off()

//****************************************************************************************************

void lcd_putchar(unsigned char data){
if (lcd_x>(COLUMNS-1)){
        if (++lcd_y>3)lcd_y=0;
        lcd_x=0;
};//if
lcd_gotoxy(lcd_x,lcd_y);
lcd_write(data, DATA);
lcd_x++;
}//lcd_putchar();

//****************************************************************************************************

// вывод символа расположенного в SRAM на LCD
void lcd_puts(char *str){
while(*str)lcd_putchar(*str++);// передача символа
}//lcd_puts()

//****************************************************************************************************

// вывод символа расположенного в FLASH на LCD
void lcd_putsf(char flash *str){
while(*str)lcd_putchar(*str++);// передача символа
}//lcd_putsf()

//****************************************************************************************************

#pragma used-

bezobraznic
 
Сообщения: 4
Зарегистрирован: 23 фев 2006, 13:42
Откуда: Кишинёв

Re: LCD (HD44780) к произвольным пинам

Сообщение Shaab » 11 сен 2008, 22:35

Спасибо за библиотеку, правда ее придется немного доработать в виду того, что энабла все-таки 2 :cry:
Последний раз редактировалось Digit 12 сен 2008, 11:19, всего редактировалось 1 раз.
Причина: Нарушение правил цитирования
Shaab
 
Сообщения: 21
Зарегистрирован: 06 сен 2008, 12:33
Откуда: Москва

Re: LCD (HD44780) к произвольным пинам

Сообщение Кирилл » 11 сен 2008, 22:38

Кирилл
 
Сообщения: 432
Зарегистрирован: 20 окт 2005, 16:11
Откуда: Вильнюс,Литва
прог. языки: Basic

Re: LCD (HD44780) к произвольным пинам

Сообщение Shaab » 12 сен 2008, 12:47

With lcd4e2.lib all the used pins MUST be on the SAME PORT.
In the source code of lcd4e2.lib you can change the used port.
Example: You can change from PortB to PortD.

а у меня данные и контроль на разных портах...
Shaab
 
Сообщения: 21
Зарегистрирован: 06 сен 2008, 12:33
Откуда: Москва

Re: LCD (HD44780) к произвольным пинам

Сообщение Master » 15 сен 2008, 11:38

А может стоит взять Mega16 и закрыть вопрос с недостатком ног?
Аватара пользователя
Master
 
Сообщения: 4468
Зарегистрирован: 21 дек 2006, 19:56
Откуда: Украина, г.Одесса
прог. языки: Delphi и С

Re: LCD (HD44780) к произвольным пинам

Сообщение avr123.nm.ru » 15 сен 2008, 11:45

Master писал(а):А может стоит взять Mega16 и закрыть вопрос с недостатком ног?

ОБЯЗАТЕЛЬНО ! 40 ног это прекрасно.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: LCD (HD44780) к произвольным пинам

Сообщение Shaab » 15 сен 2008, 20:32

да есть у меня мега 16я, вот только свободных ног много остается, а у 8й меги как раз

кстати, а кто говорил, что мне нехватает ног?
Shaab
 
Сообщения: 21
Зарегистрирован: 06 сен 2008, 12:33
Откуда: Москва

Re: LCD (HD44780) к произвольным пинам

Сообщение yak-40 » 16 сен 2008, 12:25

Спасибо bezobraznic-у за библиотеку, прекрасно работает на Меге8.
- Этот человек - не человек! это робот!
- Как? уже делают?!
- Делают!!!
Аватара пользователя
yak-40
 
Сообщения: 3037
Зарегистрирован: 23 окт 2007, 22:03
Откуда: Москва
прог. языки: С
ФИО: Евгений Яковец

Re: LCD (HD44780) к произвольным пинам

Сообщение Arsen » 17 сен 2008, 18:59

Shaab писал(а):Нужно подлключить LCD на HD44780 (4 строки, 40 символов) к 8й меге по 4х-битному интерфейсу. Стандартные заготовки расчитаны на использование или фиксированных пинов или пинов в произвольном порядке, но в пределах одного порта. А у меня по схеме линии контроля висят на порту С, а данные на порту D (схема изменению не подлежит). Если можно, то подскажите как реализовать задуманное для Bascom'а. В гугле искал, не помогло. Заранее спасибо за ответ.


Не знаю, как на Баскоме, на Си это сделано в проекте Победитель пару лет назад... http://ironfelix.ru/modules.php?name=Pages&pa=showpage&pid=138

Управление на порту B, данные на порту D.
Исходники прилагаются, проверено всё лично на нескольких разных индикаторах.
Железный Феликс: http://ironfelix.ru
Arsen
 
Сообщения: 110
Зарегистрирован: 11 окт 2004, 20:41
Откуда: Березники

Re: LCD (HD44780) к произвольным пинам

Сообщение Shaab » 17 сен 2008, 21:04

спасибо всем, кто откликнулся, но вопрос все-таки открыт, ибо пока либа для "2х-энабельного" дисплея с произвольным назначением пинов не найдена :cry:
Shaab
 
Сообщения: 21
Зарегистрирован: 06 сен 2008, 12:33
Откуда: Москва

Пред.След.

Вернуться в Микроконтроллеры

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

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