Перейти к содержанию

Подключение Lcd(Qc12864B На St7920) К Mega16


melkiy93

Рекомендуемые сообщения

Всем привет! Имею в распоряжении LCD QC12864B. Написал для него код инициализации с парой функций для отправки команд и данных. Собираю все это в кучу, а дисплей не показывает ничего, даже мигающий курсор. Просто работает подсветка. При инициализации я указывал: показывать мигающий курсор. Использую параллельный вывод по 8 битам. Есть подозрение на мою неправильную работу с rst. Пробовал собирать все в протеусе, но с LM016L, т.к. моего в библиотеке нет. В итоге в симуляторе что-то выводит даже.

/*
Управление и вывод информации в LCD
*/

#include <avr/io.h>
#define F_CPU 11059200UL
#include <util/delay.h>
#define RS PB0
#define RW PB1
#define E PB2
#define RESET PB3
void SaidComand(unsigned char COMAND)
{
//Устанавливаем низкий уровень E
//Устанавливаем низкий уровень RS
//Устанавливаем низкий уровень RW
PORTB&=~((1<<E)|(1<<RS)|(1<<RW));
//Задержка 1 мкс.
_delay_us(1);
//Устанавливаем высокий уровень E
PORTB|=(1<<E);
//Отправляем в порт данных байт команды
PORTA=COMAND;
//Задержка 1 мкс.
_delay_us(1);
//Устанавливаем низкий уровень E
PORTB&=~(1<<E);
//Задержка 50 мкс.
_delay_us(50);
}
void SaidData(unsigned char DATA)
{
//Устанавливаем низкий уровень E
//Устанавливаем высокий уровень RS
//Устанавливаем низкий уровень RW
PORTB&=~((1<<E)|(1<<RW));
PORTB|=(1<<RS);
//Задержка 1 мкс.
_delay_us(1);
//Устанавливаем высокий уровень E
PORTB|=(1<<E);
//Отправляем в порт данных байт команды
PORTA=DATA;
//Задержка 1 мкс.
_delay_us(1);
//Устанавливаем низкий уровень E
PORTB&=~(1<<E);
//Задержка 50 мкс.
_delay_us(50);
}
int main(void)
{
//Настройка портов
DDRA=0xFF; //На выход
DDRB|=((1<<PD0)|(1<<PD1)|(1<<PD2)|(1<<PD3));
PORTA=0x00;
PORTB&=~((1<<RS)|(1<<RW)|(1<<E));

_delay_us(100);

PORTB&=~(1<<RESET);

//Инициализация дисплея
//Задержка в 50 мс.
_delay_ms(50); //Wait time
//PORTB|=(1<<RESET);
//Отправляем команду установки 8 битного режима.
SaidComand(0b00110000); //FUNCTION SET
//Задержка 120 мкс.
_delay_us(120);
//Повторно отправляем функцию установки 8 битного режима
SaidComand(0b00110000); //FUNCTION SET
//Задержка в 50 мкс.
_delay_us(50);
//Отправляем команду включения дисплея ( в ней же указывается, включить ли курсор, и мигать ли курсором)
SaidComand(0b00001111); //DISPLAY STATUS
//Задержка 120 мкс.
_delay_us(120);
//Отправляем команду отчистить экран
SaidComand(0b00000001); //CLEAR
//Задержка 20 мс.
_delay_ms(20);
//Устанавливаем ENTRY MODE (эта команда говорит о том в какую сторону сдвигать курсор после написания символа, нам соответственно нужно вправо)
SaidComand(0b00000110); //ENTRY MODE SET

//Отправка информации на дисплей
SaidData(34);

   while(1)
   {

   }
}

LCD12864(st7920).pdf

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Не надо порт B инициализировать как D:

DDRB|=((1<<PD0)|(1<<PD1)|(1<<PD2)|(1<<PD3));

Просто напишите:

DDRB = 0xFF;

для начала.

Ну и схема подключения нужна. В даташите есть пин "Interface selection". К чему он подключен? И раскомментируйте:

PORTB|=(1<<RESET);

Изменено пользователем mr_smit
Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Спасибо за внимательный и профессиональный взгляд) Даже стыдно за такую ошибку с портом.

RESET я включал и выключал... Вообще как я понял из даташита, то этот вход инверсный.

На счёт схемы. У меня небольшая китайская отладочная плата. Там вся обвязка дисплея уже подключена и настроена. Другая, работающая, программа на этой плате с этим же дисплеем уже работает (программа в виде .hex файла только).

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Вообще как я понял из даташита, то этот вход инверсный.

В даташите написано: XRESET - System reset low active т.е. когда на нем 0 дисплей в reset. А при инициализации сказано XRESET LOW -> HIGH т.е. перевести из 0 в 1.

Так я не понял, всё заработало или нет?

Ссылка на комментарий
Поделиться на другие сайты

В общем заработало!)

Исправлений было несколько:

1) как верно отметил mr_smit, необходимо было обратить внимание на Interface selection, он же пин PSB:

- 0 - последовательный интерфейс;

- 1 - параллельный интерфейс;

2) при инициализации дисплея необходимо выполнить, причем как можно ближе к моменту подачи питания на схему, следующий код:

//Задержка в 100 мкс.
_delay_us(100);
PORTB&=~(1<<RESET);
//Задержка в 50 мс.
_delay_ms(50); //Wait time
PORTB|=(1<<RESET);

Я вставил этот фрагмент сразу после объявления главной функции, до настройки портов.

Огромное спасибо mr_smit за подсказки!))) Без этих советов я бы еще доооолго ковырялся))))

Изменено пользователем melkiy93
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...