Jump to content

Recommended Posts

Доброго времени суток.

С дисплеями ранее я не работал, в связи с этим буду крайне благодарен за любую помощь.

Программирую в AVR Studio 4

У меня в распоряжении есть платка с Atmega16, и дисплей PG 24064 с контроллером LC7981, эквивалентный контроллеру HD61830.

  • Дисплей 240х64, графический, при этом имеет символьный режим
  • PB0-PB7 меги подсоединены к DB0-DB7 дисплея
  • PC0-PC4 подсоединены к RS, E, RW, RST и CS соответственно.
  • Контрастность настраивает подстроечный резистор на 50кОм.

Код прикладываю в текстовом документе, т.к. мне "не разрешено загружать файлы" типа .c LCD_LC7981.txt.

И в архиве всё (вроде), что было в проекте AVR-студии.LC7981.7z

DS на дисплей:http://pdf.datasheet.../DSA-504713.pdf

DS на LC7981: http://www.lcd-modul...hoer/lc7981.pdf

Сразу прошу прощения у тех, кому мой код покажется нечитабельным.

С такой прошивкой дисплей не работает совсем, и я не могу разобраться, почему, и как это исправить. :help:

#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#define SetBit(x,y) (x|=y)
#define ClrBit(x,y) (x&=~y)
#define NOP() asm("nop")
#define blink 1
#define no_blink 0
#define cursor 1
#define no_cursor 0
#define GraphicMode 1
#define TextMode 0
//--------------------------------------
#define DDRData DDRB
#define DDRCtrl DDRC
#define PORTData PORTB
#define PORTCtrl PORTC
#define PINData PINB
#define RS 0b00000001
#define E 0b00000010
#define RW 0b00000100
#define RST 0b00001000
#define CS 0b00010000
//*********************************************
void init();
void GoThenNoBusy();
void SetMode(unsigned short GraphicModeON,unsigned short blinkON, short unsigned cursorON);
void Command(unsigned Com);
void Data(unsigned _Data);
void Print (unsigned _Data);
//**********************************************
short unsigned Busy=1;
//------------------------------------------
int main()
{
DDRCtrl=0xFF;
DDRData=0xFF;
init();
Print(0xCC);
Print(0xCC);
Print(0x33);
Print(0x33);
while(1)
{
NOP() ;
}
return 0;
}
//***************************************
void init()
{
ClrBit(PORTCtrl, CS);//CS=0;
//RESET display
ClrBit(PORTCtrl, RST);
_delay_ms(2);
SetBit(PORTCtrl, RST);
_delay_ms(2);
//
GoThenNoBusy();
SetMode(GraphicMode, no_blink, no_cursor);
Command(0x01);//
Data(0x07);//HP=8, HP-1=7=0x07
Command(0x02);
Data(0x1D);//n=HP*HN, n=240 => HN=30, HN-1=29=0x1D
Command(0x03);//
Data(0x3F);//Nx=64, Nx-1=63=0x3F
// Command(0x04);//
Command(0x08);
Data(0x00);
Command(0x09);
Data(0x00);
Command(0x0A);
Data(0x00);
Command(0x0B);
Data(0x00);
}
//---------------------------------------
void GoThenNoBusy()
{
PORTData=0x00;
DDRData=0x00; //
ClrBit(PORTCtrl,E); //0
SetBit(PORTCtrl,RW); //1
SetBit(PORTCtrl,RS); //1
NOP();
NOP();
SetBit(PORTCtrl,E); //1
Busy=1;
NOP();
NOP();
_delay_us(4);
while (Busy)
{
Busy=(0x80&PINData);
ClrBit(PORTCtrl,E); //0
_delay_us(4);
SetBit(PORTCtrl,E); //1
_delay_us(4);
}
ClrBit(PORTCtrl,E);//0
DDRData=0xFF;
NOP();
NOP();
}
//-----------------------------------------------------------------
void SetMode(unsigned short GraphicModeON,unsigned short blinkON,unsigned short cursorON)
{
GoThenNoBusy();
ClrBit(PORTCtrl,E);
SetBit(PORTCtrl,RS);//1
ClrBit(PORTCtrl,RW);//0
PORTData=0x00;
SetBit(PORTCtrl,E);//1
_delay_us(4);
ClrBit(PORTCtrl,E);//0
GoThenNoBusy();
ClrBit(PORTCtrl,RS);//=0
SetBit(PORTData,5);//display on
SetBit(PORTData,4);//master
if (blinkON) SetBit(PORTData,3);
if (cursorON) SetBit(PORTData,2);
if (GraphicModeON) SetBit(PORTData,1);
//ClrBit(PORTData,0);
NOP();
NOP();
SetBit(PORTCtrl,E);//1
_delay_us(4);
ClrBit(PORTCtrl,E);//0
_delay_us(4);
}
//-------------------------------------------
void Command (unsigned Com)
{
GoThenNoBusy();
ClrBit(PORTCtrl,E);
SetBit(PORTCtrl,RS);//1
ClrBit(PORTCtrl,RW);//0
PORTData=Com;
NOP();
NOP();
SetBit(PORTCtrl,E);//1
_delay_us(4);
ClrBit(PORTCtrl,E);//0
_delay_us(4);
}
//-----------------------------------------
void Data(unsigned _Data)
{
GoThenNoBusy();
ClrBit(PORTCtrl,E);
ClrBit(PORTCtrl,RS);//0
ClrBit(PORTCtrl,RW);//0
PORTData=_Data;
NOP();
NOP();
SetBit(PORTCtrl,E);//1
_delay_us(4);
ClrBit(PORTCtrl,E);
_delay_us(4);
}
//----------------------------------
void Print( unsigned _Data)
{
Command(0x0C);
Data(_Data);
}

Edited by Artty

Share this post


Link to post
Share on other sites

Изготовление 2-х слойных плат от 2$, а 4-х слойных от 5$!

Быстрое изготовление прототипа платы всего за 24 часа! Прямая доставка с нашей фабрики!

Смотрите видео о фабрике JLCPCB: https://youtu.be/_XCznQFV-Mw

Посетите первую электронную выставку JLCPCB https://jlcpcb.com/E-exhibition чтобы получить купоны и выиграть iPhone 12, 3D-принтер и так далее...

Файли грузятся в архивах

Спасибо. Добавил архивчик с кодом-хексом и прочими радостями

Share this post


Link to post
Share on other sites

Вебинар "Новый BlueNRG-LP с Bluetooth 5.2 и Long Range — волшебная палочка разработчика IoT" (04/02/2021)

Приглашаем 4 февраля на бесплатный вебинар о BlueNRG-LP - новой системе-на-кристалле (SoC) STMicroelectronics. На вебинаре будут детально рассмотрены функциональные блоки, особенности подключения, аппаратные и программные средства для разработки, настройка сценариев с помощью BlueNRG-GUI, практические примеры работы с микросхемой, а также примеры применения BlueNRG-LP в устройствах интернета вещей.

Подробнее

SetBit(PORTCtrl,E);//1
_delay_us(4);
ClrBit(PORTCtrl,E);//0
_delay_us(4);

Может, задержки маловаты? Попробуйте, например, 1 мс.


Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Share this post


Link to post
Share on other sites

Новые компактные конденсаторы Panasonic серии TPS. Закаленный характер.

Panasonic представил новую серию TPS твердотельных танталовых конденсаторов с проводящим полимером для поверхностного монтажа. Конденсаторы серии TPS обладают уникальными особенностями, что делает их отличным выбором для использования в приложениях с высокими требованиями.

Подробнее

SetBit(PORTCtrl,E);//1
_delay_us(4);
ClrBit(PORTCtrl,E);//0
_delay_us(4);

Может, задержки маловаты? Попробуйте, например, 1 мс.

Поставил 1мс везде. Эффекта никакого.

Share this post


Link to post
Share on other sites

SiC MOSFET на 1200 В для схем флайбэк до 500 Вт!

Компания Wolfspeed выпустила новые карбид-кремниевые транзисторы C3M0350120D/J на 1200 В, предназначенные для маломощных устройств мощностью до 500 Вт. Карбид-кремниевые транзисторы в сравнении с кремниевыми демонстрируют меньший на 75% уровень потерь на переключение и меньшее на 50% значение потерь проводимости в рабочем режиме при температуре кристалла 100…150°С.

Подробнее

Да его и не должно было быть. Задержки ставят исходя из приведенных в ДШ диаграмм работы, а не просто "побольше". И при работе с данным дисплеем на вашей частоте вполне достаточно нескольких пустых операций.

Посмотрите код https://github.com/A...ster/avr-lc7981 , а лучше просто воспользуйтесь им. Все достаточно просто написано. Единственное что автор выкинул опрос флага занятости за ненадобностью, но так даже проще.

И попробуйте покрутить контрастность. Помнится я сам когда-то наступил на эти грабли и искал ошибки в коде.

Edited by BerZerKku

Share this post


Link to post
Share on other sites

Спасибо, воспользовался предложенным кодом.

Изменения минимальны - переназначил порты и ножки под свою плату.

Не использовал draw_penguin()

Ну и добавил CS и RST: они на плате распаяны.

Результат - при первом запуске отобразились 2 вертикальные полоски, разделив экран на 3 примерно равные части.

По тексту программы должен был быть прямоугольник и образцы текста. Начал играться с разными параметрами, ничего не добился.

После этого сделал бек-ап, но 2 вертикальные полосы не появились. Вот кстати он CxemnetLC7981.7z

Надо думать, мне следует перепроверить качество монтажа на плате.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • Вам же показали на чём обострить внимание… Значит Вы “погуглили“ и “вынесли решение“, что задержание скрывшегося с места жительства осужденного местонахождение которого неизвестно, является произволом по тому, что к нему применена статья с текстом “Скрывшийся с места жительства осужденный, местонахождение которого неизвестно…“ ?   Вы текст документа читали или Вам отдельных слов из названия хватает, чтоб судить “погуглив“?  Сколько раз в 46.4 УИК РФ фигурирует словосочетание “Исправительных работ“ или хотя бы эти слова по отдельности?  Больше нуля раз?   Это даже не упоминая вышесказанного.            Под итогами дополняем формулировку:  Мало не быть среди “неспособных пользоваться "Гуглом", "Гарантом", "Консультантом" и т.д.“, необходимо не только знать где “гуглить“, но и необходимо понимать, что “гуглить“, и обязательно внимательно читать не только название, а весть текст!  Если по прежнему будут сложности с “пониманием“, а желание “судить погуглив“ не пропадёт, то при необходимости, будем и дальше оказывать помощь дополнив формулировку словами: “знать значение слов“, “понимать смысл словосочетаний и предложений“ и т.п…       Вы не путайтесь!  Пожалуйста.
    • То, что драйвера всё ещё есть на офф. сайте - это удача, многие производители уже поудаляли поддержку устаревших продуктов. А вот на "чистой" ХР в современный интернет вы выйти не сможете и обновления официальным путём уже не скачать. Так что путь один - на рутрекер.
    • Хотел сейчас фен заказать и..... Кто знает чё за .... нафиг?! И ведь заказываю доставку из РФ,а хрен вот вам говорят китайцы. Яндекс деньги(ю мани) умерли ?  
    • В модели эти резисторы на усиление не влияют, пробовал.
    • Такое чувство, что тесты надо запускать через myhdl, а не через iverilog.

  • Драйвер для светодиодной ленты на радиоуправлении

  • Similar Content

    • By Sambler
      У меня была похожая тема,  я решил проблему установив в include util/delay.h
      Но возникла еще одна ошибка, не могу понять, что оно хочет


      p.s. Я обещал, что предыдущая - последняя тема, но я ошибся, не думал, что тут 2 разные программы будут. В этот раз 100 процентов последняя тема и пойду сдавать работы Ы)

       

    • By Sambler
      Дана следующая программа и следующая схема.
      После запуска, циклично выдает одни и те же ошибка и до такой степени, что ПК не выдерживает нагрузку и приходится принудительно закрывать программу ( когда обычно, запустил программу и она не продолжает запускаться, а сразу указывает на ошибку в коде, а тут она даже не останавливается )
      При создании проекта выбираю WINAvr!!!



      Я не могу остановить симуляцию, приходится закрывать принудительно.
      Z
    • Guest Василий
      By Guest Василий
      Кто  может  помочь с примером  программирования в  программе  LDmicro  ?  Интересует  как  программировать   PWM выход  ? Хотелось  бы   увидеть  наглядный  пример  может  кто  знает ! Буду  рад  любой  информации !!!
    • By Atreides
      Добрый день. Мне требуется реализовать программный юарт на атмеге16. Он нужен для того, чтобы принятые по нему данные отправить на аппаратный юарт. В интернете нашел примеры кода, но понять его мне трудно. Прошу вас словами в общих чертах объяснить принцип реализации программного юарта. Буду рад примерам, которые, на ваш взгляд, являются наиболее простыми и понятными. Заранее спасибо.
    • Guest Константин
      By Guest Константин
      Приветствую всех! Прошу помощи у вас, форумчане в программировании системы из 2х контроллеров atmega16, суть системы заключается в:
      Есть мастер и слэйв, это два отдельных омк
      всего 1 мастер и 2 слэйва
      Что входит в мастер: 1)настойка времени путем набора из 8 4 2 и 1 минуты(кнопки), выбор адреса, те кому будет послан сигнал, 1 или 2 слэйву, индикация ответа( красный диод если не ответил, зеленый если ответил в течении заданного времени), если ответ есть - зеленый, если ответа нет красный и кнопка полного сброса всех указаний, те возврат к исходной точке где никто не опрашивается
      Что входит в слэйв, это кнопка подтверждения, визуализация таймера ( те 4 диода, когда 1/4 времени прошла 1 тухнет итд) и если кнопка не нажата отправка информации о аларме
      собственно все
      те
      1 ввод адреса и времени
      2 отправка сигнала
      3 сигнал есть?
      3.1 (нет) аларм
      3.2 (зелень)
      Заранее благодарю!
      (popovkostya96@icloud.com)
×
×
  • Create New...