Всем доброго времени суток!
Где то полгода назад, я безуспешно попытался запустить цветной дисплей из примеров программы CodeVisionAVR. После нескольких неудачных попыток и не имея достаточного опыта работы с цветными дисплеями я обратился за помощью на различных форумах. В результате мне помогли только на этом. Хочу еще раз поблагодарить Алексея (oka275), а так же Владимира (Aquinas) за помощь. В качестве благодарности я поделюсь некоторыми своими примерами работы с цветным дисплеем.
Итак начнем по порядку:
Первое что необходимо, это инициализировать дисплей, наткнувшись на статью на эту тему здесь
https://hubstub.ru/programming/44-inici ... ega16.html подробно разъяснено алгоритм инициализации. Но хочу предостеречь,если захотите сами реализовать этот пример и приобрести дисплей а речь идет о дисплее с контроллером SSD1289 внутри который покупать нужно только на Ebay ссылка
http://www.ebay.com/itm/121219399660?_t ... EBIDX%3AIT и не в коем случае не на Alliexpress. Дело в том что на Alliexpress под видом дисплея с контроллером SSD1289 (а речь пойдет именно о нем) вам продадут дисплей с контроллером ILI9341 проверил много раз причем покупал у разных продавцов (ух я их накупил). Внешне они выглядят одинаково разница лишь в надписи с контроллером SSD1289 на шилде написано TFT_320QVT а с контроллером ILI9341 на обороте написано TFT_320QVT_9341. Но если все же вам попался дисплей с контроллером ILI9341, не унывайте после некоторой переписки с автором статьи он написал и выложил статью с примерами под дисплей с контроллером ILI9341 находится она здесь
https://hubstub.ru/programming/125-inic ... a-avr.html кстати в этой статье объясняется как различить дисплеи. Еще хочу сказать что инициализация дисплея SSD1289 описанная в статье "кривая", то есть настройка дисплея в процессе инициализации не верная (дисплей мерцает, особенно при выводе картинки и путает цвета), в моем примере который я выложил, алгоритм инициализации взят на сайте продавца, (кстати если порыться и сравнить в библиотеке под TFT дисплеи в Arduino они полностью совпадают), и приданной инициализации вышеуказанных недостатков нет, а еще работает в протеусе.
Второе:
После успешной инициализации, перед мной встал вопрос с выводом шрифтов на дисплей, на сайте здесь
https://hubstub.ru/programming/46-vyvod ... d1289.html конечно объяснялось как вывести необходимые символы и строки на дисплей, но речь идет только об одном стиле шрифта 8х8, который можно увеличить. Только меня это не устраивало, иметь шикарный цветной дисплей и выводить на него "хрень" мне не хотелось. Я хотел выводить разные шрифты по размеру и стилю и создавать их самостоятельно. Как это не странно я поставленную перед собой задачу решил полностью. За основу я зал программу генерации шрифтов LCD Vision входящую в состав платной CodeVisionAVR, но можно найти ее в интернете отдельно. С ее помощью можно с генерировать массив любого готового шрифта который есть у вас в Windows. Я понял алгоритм создания массива и написал небольшую программу вывода их на графический дисплей, причем можно записать несколько массивов с разными шрифтами в контроллер (насколько памяти хватит) и пользоваться любым или несколькими сразу как вам будет угодно. И это еще не все, как я сказал можно создавать большие или маленькие шрифты и пользоваться ими по вашему усмотрению, и еще можно устанавливать размер шрифта, то есть увеличивать уже имеющейся, можно выводить отдельно как символы или строки. Печатал одну огромную букву на весь экран. Нужно только создать массив с помощью программы LCD Vision и привести его к виду как в примере моей программы (думаю посмотрите сравните и поймете, если нет то спросите у меня). Результат можно про симулировать и посмотреть в протеусе, правда чтобы пример заработал придется установить библиотеки дисплея SSD1289 в протеусе в папки с соответствующим названием сами библиотеки находятся также в архиве в папке SSD1289 Lib. И еще, симуляция в протеусе происходит через жо.. то есть в зеркале, поэтому дисплей не закрашивается и текст печатается наоборот. Но на"железе" все работает исправно. И еще один нюанс пример и программа написана в среде Atmel Studio 6 когда писал, то отлаживал на реальном контроллере, поэтому в CodeVisionAVR еще не перенес (может и не буду). Еще учтите, что, несмотря на возможность генерации программой LCD Vision массива с русскоязычным шрифтом в Atmel Studio 6 работать не будет (вообще не поддерживается русский язык), а вот CodeVisionAVR работать должен. В примере два массива с шрифтом маленький и средний с названием "Cyfra" и "Norm", конечно может остались упущения, но проверял вроде все работает хорошо включая скорость вывода символов и строк. Оптимизация кода стоит Os, но можно установить O3 (побыстрей), но не зачем все и так работает без проблем и достаточно "шустро", пример реализован на микроконтроллере Atmega32. Для глаза все происходит незаметно и неудобств не создает. Контроллер работает от внутреннего генератора 8 Мгц. Запускал от кварца 16 Мгц. разницы не заметил, вот только на экране появились еле заметные помехи, которых нет при работе от внутреннего генератора. Наверно плату (а делал я индикатор на блок питания) не очень удачно развел.
Тем неимение, мне никак не давала мысль почему у меня не запустился ни один из примеров из состава CodeVisionAVR. После многочисленных неудач, я решил приобрести лицензионную версию CodeVisionAVR (жадность "давила" но купил). Снова попытался запустить дисплей из примера, опять неудача. После чего решил написать в тех. поддержку CodeVisionAVR со своими комментариями. Узнал что, думают обо мне Румыны, (разработчики CodeVisionAVR), тоже с эпитетами, но выслали ссылку на магазин где покупался дисплей из примера (я имею ввиду SSD1289) марка его HY32D продается здесь
http://www.hotmcu.com/32-touch-screen-t ... -p-36.html на этом переписка закончилась на время. Через месяц пришел дисплей, я вновь собрал схему и опять ничего. Пришлось снова писать Румынам, ответ пришел на следующий день, помимо их мнения о моем уровне знаний, смысл которого сводился к правильному подключению питания контроллера, а именно:
1. Все ножки питания на микросхеме должны бить подключены ВСЕ!!!.
2. Рядом с выводами (как можно ближе) VCC и GND должен бить сглаживающий конденсатор 0.1 мкФ с каждой стороны микросхемы, то есть должно их быть четыре, конденсаторов по общему питанию должно быть два 10 мкФ и 0.1 мкФ.
3. И конечно ножка Reset не должна «болтаться в воздухе» подтяжка 15кОм.
4. Ножка AVCC должна быть подключена к питанию.
я конечно отнесся скептически к этим замечаниям, но выполнил все требования и был весьма удивлен когда дисплей ожил. Запустил его на микроконтроллере Atxmega128A3. Конечно все вышеуказанные рекомендации указанны в даташите, но я и предположить не мог что они могут создать такую проблему, ведь светодиоды мигали (я для теста подключал) контроллер программу выполнял. Как объяснили мне Румыны (после замечаний в мой адрес), "Особенность при работе на частоте 32 Мгц." Пришлось приносить Румынам свои глубокие извинения. На этом вроде все, надеюсь я не сильно утомил вас.
P.S. Печатная плата под пример также в архиве.