Содержание
Урок 1. Первый проект
Урок 2. Управление кнопками
Урок 3. Подключение LCD
Урок 4. Использование ШИМ
Урок 5. Таймеры
Урок 6.1. Статическая индикация
Урок 6.2. Динамическая индикация
Урок 7.1. Генерация звука
Урок 7.2. Генерация звука. Продолжение
Урок 8.1. Передача данных через UART
Урок 8.2. Передача данных через UART. Продолжение»
Урок 9. Передача данных через SPI
Урок 10. Изучение АЦП. Простой вольтметр
Урок 11. Получение синуса при помощи ШИМ
Урок 12. Измерение температуры
Урок 13. Внешние прерывания.
Урок 14. Использование отладчика
Урок 15.1. Управление инкрементальным энкодером
Урок 15.2. Управление громкостью, при помощи энкодера
Урок 16. Управление RGB светодиодом
Урок 17. Использование ИК
Урок 18.1. Знакомство с графическим дисплеем
Урок 18.2 Вывод изображения на графический дисплей
Урок 18.3 Вывод русскоязычного текста
Урок 19. Формирование сигнала, при помощи ЦАП (R2R)
Урок 20. Опрос матричной клавиатуры
Урок 21. Сторожевой таймер
Урок 22.1 Воспроизведение wav. Введение.
Урок 22.2 Воспроизведение wav. Продолжение.
Урок 23.1 Работа с внешней памятью
Урок 23.2 Работа с файловой системой Fat

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

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

Для опытов использовался WG12864A-YYK-TN, 128х64 точек, в нем используется контроллер KS0108, соответственно на сайте можно найти пример Examples for the Samsung KS0108 (HD61202) graphic LCD controller. С небольшой пометкой «Require CodeVisionAVR Evaluation or Standard V2.05.2 or later» , т.е. пришло время переходить на более новую версию.

Предупреждая вопросы по другим типам графических дисплеев, в т.ч. и Nokia3310, сразу скажу, библиотеки есть, примеры есть — изучайте, сложностей быть не должно.

Тем не менее, прошивка из примера упорно не хотела работать в протеусе, то что она работает я не сомневался, косяк явно был в протеусе. В конце концов выяснилась интересная штука, прошивка заточена под частоту 16МГц, такую же частоту указывал на Atmega128 в протеусе, однако на экране вылезали кракозябы. Попробовал уменьшить частоту и чудо — все заработало на частоте 2 и 4МГц. Так что рекомендую сразу отлаживаться на железе.

Теперь переходим непосредственно к описанию. Работать с графическим дисплеем, оказалось ничуть не сложнее, чем с обычным символьным жк. Схема немного больше чем у символьного экрана. Микроконтроллер использован ATmega8. Назначить ножки можно абсолютно любые, мне приглянулись эти.

18-1

Обратите внимание, если вы используете ks0108, то у него 2 типа битов выбора контроллера CS1 и CS2, у меня они оказались инверсные, т.е. /CS1 и /CS2, какие будут у вас смотрите в дш на свой дисплей.

18-2

#include <mega8.h>
#include <glcd.h>
#include <font5x7.h>
 
void main(void)
{
GLCDINIT_t glcd_init_data;
 
PORTB=0x00;
DDRB=0x00;
 
PORTC=0x00;
DDRC=0x00;
 
PORTD=0x00;
DDRD=0x00;
 
glcd_init_data.font=font5x7;
glcd_init(&glcd_init_data);
 
while (1)
      {
      glcd_line(0,5,127,5);
      glcd_line(0,5,0,58);
      glcd_outtextxyf(25,20,"AVR-START.RU");
      glcd_outtextxyf(26,30,"electronics");
      glcd_outtextxyf(20,40,"for beginners!");
      glcd_line(0,58,127,58);
      glcd_line(127,5,127,58);
      }
}
}

Теперь по порядку:
Подключаем библиотеку для работы с графическим дисплеем

#include <glcd.h>

Подключаем файл с нарисованными заранее шрифтами

#include <font5x7.h>

Инициализация данных

GLCDINIT_t glcd_init_data;
glcd_init_data.font=font5x7;
glcd_init(&amp;glcd_init_data);

Рисуем линию, (х1,y1,x2,y2), т.е. начальная точка с координатами 0;5 конечная 127;5

glcd_line(0,5,127,5);

Выводим на экран текст 25, 20 начальная координата X,Y.

glcd_outtextxyf(25,20,"AVR-START.RU");

В результате, все заработало сразу, без всяких танцев с бубном.
18-3
Если руки дойдут, попробую повозиться с картинками. Прошивка и схема в протеусе доступны здесь

71 комментарий: Урок 18. Знакомство с графическим дисплеем

  • Easy AVR — мечта на поражение. Жаль по финансам неподъёмная 😥 А уроки классные помогли сделать выбор в пользу языка Си.

  • Easy AVR редкостный кал, я пожалел что на него повелся

  • Подскажите как вывести на LCD 3310 переменную которая будет менять своё значение, желательно с библиотеками #include , #include

  • #include glcd.h
    #include font5x7.h>

  • Влад, я не работал с таким дисплеем, так что не знаю чем помочь

  • А смогли бы сделать под ваш LCD?

  • Уже сам разобрался =)

  • С графическим дисплеем понятно, а с oled дисплеем по I2C также будет? Спасибо.

  • очевидно что не также 🙂

  • Нигде не могу найти как с oled дисплеем работать?

  • Насколько я знаю, у них немного отличается инициализация от winstar овских. Можно поискать либы, наверняка готовые есть, либо самому написать, это не сложно

  • В даташите на WG12864A-YYK-TN используемого вами в качестве примера клеммы RS нет, есть D/I. Как подключить его к микроконтроллеру? Заранее спасибо.

  • это одно и тоже

  • привет, у меня при компиляции пишет Linker error: global RAM variables size: 1060 bytes is too large. мега8 выбрана. почему не хватает памяти?

  • возможно что то еще добавляли

  • а что за версия CVAVR? А то на 2.05.0 нет вкладки Graphic LCD

  • Admin, при создании маленькой f-и вывода текста в рамке, столкнулся с проблемкой:
    ошибка закомментирована.
    Хотел просто вызывать ф-ю title(«TEST»)
    и что бы в рамке выводило TEST.
    а там разные типы. Вот силу и голову ломаю.
    Помоги пожалуйста.

    void title(char *title){
    int len;
    len = strlen(title); //определение длинны титла

    glcd_line(0,0,128,0);
    glcd_line(0,0,0,64);

    glcd_outtextxyf(70-(len*4),2,title);//function argument #3 of type ‘unsigned char *’
    //is incompatible with parameter of type ‘flash unsigned char *’

    glcd_line(0,11,128,11);
    glcd_line(0,128,128,64);
    glcd_line(128,0,128,64);
    };

  • так написано, что разные типы title должен быть const char *title

  • Есть некая числовая переменная, например Y=123 тип int которая изменяется во времени. Не подскажите как выводить на GLCD дисплей целиком. То есть не «разбирая» по «запчастям» как для вывода на семисегментный индикатор. Заранее большое спасибо.

  • используйте sprintf

  • Извините, можно маленький пример с тем же Y. Я же начинающий. Спасибо.

  • Как выводить разобрался, спасибо за подсказку. Но не понял как, устанавливать надпись в нужную часть экрана (куда «пихать» координаты).

  • в статье описано, для этого в функцию передаются координаты х у

  • Здравствуйте. А какую версию CVAVR используете? В версии 2.05.0 нет вкладки для графического дисплея. Или можно дополнительно установить библиотеки для работы с ks0108?

  • Добрый день.
    Как регулировать контрастность дисплея?

  • Админ, привет!! Давно не писал я. Решил сдесь написать так как не знаю есть ли уроки в среде atmel studio. Я когда то начинал с code vision но почти сразу перешол на атмел студио 6. Написал по алгоритму сам библиотеку для hd4478 но она не пошла (так и не робрался почему, может попался лсд что без проверки flag busy не запуститься), скачал готовую, разобрался , екран запустился. Обрадовался, но не долго. Мне нужно виводить переменную которая меняеться. тут запутплся, примери которые приводил не хотели работать. Даже присваивал адрес переменной но ничего, ругань одна. Помоги пожалуста, как в атмел вивести переменную, или может есть пример. Только в атмел студио так как code vision все по разному. sprintf не пробывал но читал что много памяти берет за свой код.

  • И на последок хотел запустить функцию которая пишет в память лсд, так после прошики мк перестал инициализировать лсд. Извини если трачу время твое на мои коментари и вопроси.

  • ШИМом

  • принципиальной разницы между атмел студией и cavr нет. почитайте про переменные, там есть ответ http://avr-start.ru/?p=4557

  • admin, можно личный вопрос? Вы сейчас работаете в компании или разработками занимаетесь своими? я к тому что нужно к чему то стремится мне, доделаю вот я автомат свой, нужно подрабутку искать . Может посоветуете над чем поработать, что почитать. Совет с жизни.

  • делайте фриланс проекты, спрос есть.

  • Возможно ли написать программу для дисплея WG160160B-YYH-V с контроллером LC7981, потому что у CVAVR в библиотеке такого контроллера нет.

  • конечно можно, берем в руки даташит и пишем

  • Lcd mtg-s12864b проблема в следующем: текст выводится нормально, линии рисует хорошо но почему-то пиксели текста серого цвета а пиксели линий черного .
    В LcdVision выбирал разные цвета а потом сравнивал код, изменений нет.
    Help.

  • я не могу помочь с дисплеями, которых у меня не было.

  • А как увеличить размер шрифта?

  • нарисовать новый

  • Я как всегда не по теме. Но думаю для вас Админ это будет интересно. Начну по-порядку:
    После неудачных попыток запустить хотя бы один цветной дисплей из примеров CVAVR, я купил лицензию и на писал в службу поддержки CVAVR. После долгой перепалки и «выяснений отношений», узнал все что, обо мне думают румыны (разработчики CVAVR). Мне была выслана ссылка для приобретения дисплея и указан конкретно тип дисплея с контроллером (а речь велась именно о нем) SSD1289 на которой тестировалась программа.
    Сам дисплей типа HY32D я думаю вам не составит труда найти в интернете. Если разрешите то выложу ссылку у вас на сайте. Для его опробования использовал микросхему ATXmega128a3 (паять удобней в отличии ATXmega128a1).
    А вот с подключением всплыл нюанс, суть которого заключается в следующем:
    1. Все ножки питания на микросхеме должны бить подключены.
    2. Рядом с выводами (как можно ближе) VCC и GND должен бить сглаживающий конденсатор 0.1 мкФ с каждой стороны микросхемы, то есть должно их быть четыре.
    3. И конечно ножка Reset не должна «болтаться в воздухе»
    4. На питающем напряжении также должны быть фильтры с конденсаторов.
    Этим условиям я значение не придал, и пример не запустился. После их выполнения к моему удивлению все заработало, чему я несказанно был рад.
    Прошить ATXmega128a3 можно обычным программатором AVRISP Mkll (USB). Схему подключения можно найти в справке на Atmel Studio или в интернете.
    Надеюсь моя информация кому-то пригодится.

  • Да забыл ножка AVCC также ложна быть подтянута к питанию.

  • Вы не ищете легких путей 🙂 По факту все о чем вы пишете есть в даташите.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Последние комментарии
  • Загрузка...
Счетчик
Яндекс.Метрика