У меня строка, которую вы закомментировали прилично работает. Просто во время компиляции ругается что приходиться переводить тип string в тип char*. Но компилирует в итоге. Чтобы не ругался, я просто организавал массив char txt[] = "My TEXT". И передавал его в параметрах.
MrAcsacal, когда пришел мне дисплей с али я нагуглил те ссылки что предоставил вам выше, сразу испробовал все примеры которые были на амперке с использованием той библиотеки которая предоставлена ими же, а почему у вас происходит инверсия по цветам я уж точно не знаю...
Почти во всех контроллерах матриц TFT есть параметр в котором указывается порядок цветов в переданом байте RGB или BGR. Из чего видно, что меняются местами красный и синий цвета. Что делать? Берем даташит на ваш чип, в поиске вбиваем BGR, именно BGR, находимм регистр в котором устанавливается этот параметр и подставляем в файле initlcd.c тот который вы используете при инициализации в скетче. Что может быть еще, а еще есть парамтр иверсии. Делаем тоже самое, смотрим что наисано в файле инициализации и пробуем поменять на противоположное значение. Только делать надо не сразу оба изменения, а по очереди т.к. дело может быть в одном параметре инициализации.
diger67 был прав о присутсвии параметра инверсии, но перелистав Datasheet явного указания на этот параметр не нашел, а скорее упустил.
Но просматривая файл UTFT.h нашел описание интересной функции, о которой нет упоминания в UTFT.pdf, функция Invert(bool).
Как все понимаете, вопрос решился сам собой. В setup{} добавляю "myGLSD.Invert(true);" и все работает так, как надо.
Потом решил покапаться в UTFT.cpp нашел Invert() и код как она работает. Все сходится, есть функции в Datasheet: Exit_inversion_mode(20h) и Enter_inversion_mode(21h). В дравере initlcd.h прописываю LCD_Write_COM(0x21); Заработало! Как я понимаю эти функции одинаковы для всех типов TFT-экранов, поскольку ни каких условий для установки и смены режима инверсии в зависимости от драйвера не было (вопрос, скорее в том как она работает на каждом экране по отдельности). Поэтому решил подробно поделиться опытом.
Кстати пришел домой и обнаружил, что библиотеки UTFT в чем-то отличаюся, во всяком случае, что мне прислали китаезы и ту что скачал с соседней странице(разные компы, что на работе, что дома). Во всяком случае, в том что прислали китаезы нет функции Invert()(может и еще каких-то), хотя функция в 5 строчек, кто-то доработал по ходу. А в той, что Sanyaba давал даже нет нет драйвера на мой TFT (я смотрел перед скачиванием). Расшифровать бы Datasheet, можно было бы доработать библиотеку до самого необходимого, я с инглишем не очень дружу.
Полистал datasheet обнаружил что мой дисплей поддерживает функция аппаратного скроллинга. Удобная вещь, не надо думать о том как организовать прокрутку текста на экране, достаточно в нужное время вставлять новые строки. Хочу использовать это свойство для написания программы "блокнот", чтобы читала и записывала на прямую с SD-карты. А пока предлагаю на рассмотрение скрин и дополнительную библиотеку UTFTR.
Библиотека UTFTR - мое дополнение к UTFT, работает с кириллицей, содержит коды кирилических и дополнительных символов. И дополнительные функции для работы со скроллингом экрана.
В папке скрина есть readme.txt дополнительно поясняющий подробности работы со скроллингом экрана.
Не все библиотеки UTFT похожи друг на друга, кто-то в частном порядке и дорабатывает, я пользовался библиотекой которую скачал с соседней темы. Полностью Вы можете скачать тут: https://cloud.mail.ru/public/9fFV/jMhKSjHuS.
Напоминаю, что скреч проверялся на дисплее HX8357B. Может не работать на других. Для этого посмотрите Datasheet вашего экрана и уточните поддерживает ли ваше устройство скроллинг экрана и совпадают ли команды.
Кому интересно, представляю на обозрение еще один пример использования аппаратного скроллинга. Скетч получает строку из монитора порта и выводит ее на экран при этом производит аппаратный скроллинг экрана.
В архиве находится модифицированная библиотека UTFTR, в ней были проведены изменнения по выводу текста на экран с цель оптимизации работы кода, добавленны функции работы с кодировками UTF-8 и CP-1251 и преобразованиями из одной кодировки в другую. Буду рад если кто-то найдет еще что-нибудь интересное для себя. Скачать архив можно тут: https://cloud.mail.ru/public/HaVC/pDDg966uj. Описание более подробное в readme.txt в каждой папке архива.
Напоминаю, что скреч проверялся на дисплее HX8357B. Может не работать на других.
Подвожу итоги моей не спешной работы по изучению Arduino, а именно предлагаю на рассмотрение скетч DOS, с библиотекой DOS и обновленной версией UTFTR. Скетч использует команды MS-DOS для работы с SD-картой и выводит результаты на экран Arduino. Команды передаются через монитор порта редактора Arduino. Для правильной работы в мониторе порта надо установить признак конца строки "Новая строка". Подробное описание библиотек в архиве каждой из библиотек.
Почитал тему, помогло, и решил дополнить ее по поводу резисторных сборок на модулях.
Любая SD карта, на нынешнии времена использует уровень сигнала не выше 3.3 вольта. Для того чтобы выравнить уровень сигнала с 5 вольт до 3.3 вольта, китайцы ставят эти самые резисторные сборки на 4.7-10 ком, это относится к многим конструкторам в том числе и MEGA2560, а вот для DUE которая сама по себе работает на 3.3 вольт с таким же логическим уровнем который не превышает 3.3 вольт, эти сборки по сути не нужны. Но есть 1 нюанс, просто ставить нулевой резистор это не совсем хорошо, даже скорее плохо, суть в чем, на сколько я помню у большенства контроллеров Atmel максимальное нагрузочное значения тока на вывод состовляет вроде не больше 20мА, при привышении данного значения есть большая вероятность спалить порт ввода-вывода, для этого нужно поставить ограничительный резистор, что в принцепи и сделано часто на модулях. К примеру на 3.3 вольта, сопротивление резистора не должно быть ниже 180ом (165ом по формуле) для тока 20мА и так далие по закону Ома. Есть опять НО, если сопротивление будет сильно большое то ток будет сильно маленький, что приведет к падению уровняя сигнала, что мы и видем на модулях с 10ком и ур. 3.3 вольта, ток не больше 330мкА. А если к примеру возьмем K9HCG08U1M то потребление тока на 1 порт составляет по спецификации до 400мкА, что явно больше чем есть на самом деле. При этом надо учитывать что может быть в ардуине в качестве ограничителя тока.
При этом добавлю, что ставить просто ограничительный резистор не совсем хорошее дело, видь при изменении нагрузки, у вас так же будет изменятся и уровень сигнала, который к примеру на 5 вольтах может вырасти с 3.3 до 3.6 при определенном токе, так что для этого я лично бы посоветовал именно ставить делитель из 2х резисторов. Он ограничивает верхний порог уровня сигнала не давая его привысить и тем самым привести к порче устройства. Кстати делитель напряжения нужен только если надо понизить уровень сигнала до необходимого значения, для однотипного уровня нужен только ограничительный резистор.
Ну вообщем вроде и все. Пойду свою DUE до ума доводить под SD :)
с вашим UTFT myGLCD(HX8357B,38,39,40,41); выдало ошибку
у меня он объявлен как UTFT myGLCD(CTE32HR, 38, 39, 40, 41);
*инфо по дисплею http://wiki.amperka.ru/продукты:tft-lcd-480x320
соответственно я объявлял как UTFT myGLCD(CTE32HR, 38, 39, 40, 41);
для пробы использовался ваш код (измененена 33 и 65 строки кода)
Спасибо! Любопытства ради попробовал поменять драйвер, но не работает. Если вам поменять драйвер на CTE32HR, то вероятно код заработает.
У меня строка, которую вы закомментировали прилично работает. Просто во время компиляции ругается что приходиться переводить тип string в тип char*. Но компилирует в итоге. Чтобы не ругался, я просто организавал массив char txt[] = "My TEXT". И передавал его в параметрах.
MrAcsacal, когда пришел мне дисплей с али я нагуглил те ссылки что предоставил вам выше, сразу испробовал все примеры которые были на амперке с использованием той библиотеки которая предоставлена ими же, а почему у вас происходит инверсия по цветам я уж точно не знаю...
Почти во всех контроллерах матриц TFT есть параметр в котором указывается порядок цветов в переданом байте RGB или BGR. Из чего видно, что меняются местами красный и синий цвета. Что делать? Берем даташит на ваш чип, в поиске вбиваем BGR, именно BGR, находимм регистр в котором устанавливается этот параметр и подставляем в файле initlcd.c тот который вы используете при инициализации в скетче. Что может быть еще, а еще есть парамтр иверсии. Делаем тоже самое, смотрим что наисано в файле инициализации и пробуем поменять на противоположное значение. Только делать надо не сразу оба изменения, а по очереди т.к. дело может быть в одном параметре инициализации.
diger67 был прав о присутсвии параметра инверсии, но перелистав Datasheet явного указания на этот параметр не нашел, а скорее упустил.
Но просматривая файл UTFT.h нашел описание интересной функции, о которой нет упоминания в UTFT.pdf, функция Invert(bool).
Как все понимаете, вопрос решился сам собой. В setup{} добавляю "myGLSD.Invert(true);" и все работает так, как надо.
Потом решил покапаться в UTFT.cpp нашел Invert() и код как она работает. Все сходится, есть функции в Datasheet: Exit_inversion_mode(20h) и Enter_inversion_mode(21h). В дравере initlcd.h прописываю LCD_Write_COM(0x21); Заработало! Как я понимаю эти функции одинаковы для всех типов TFT-экранов, поскольку ни каких условий для установки и смены режима инверсии в зависимости от драйвера не было (вопрос, скорее в том как она работает на каждом экране по отдельности). Поэтому решил подробно поделиться опытом.
Спасибо всем за помощь!!!
Кстати пришел домой и обнаружил, что библиотеки UTFT в чем-то отличаюся, во всяком случае, что мне прислали китаезы и ту что скачал с соседней странице(разные компы, что на работе, что дома). Во всяком случае, в том что прислали китаезы нет функции Invert()(может и еще каких-то), хотя функция в 5 строчек, кто-то доработал по ходу. А в той, что Sanyaba давал даже нет нет драйвера на мой TFT (я смотрел перед скачиванием). Расшифровать бы Datasheet, можно было бы доработать библиотеку до самого необходимого, я с инглишем не очень дружу.
День добрый!
Полистал datasheet обнаружил что мой дисплей поддерживает функция аппаратного скроллинга. Удобная вещь, не надо думать о том как организовать прокрутку текста на экране, достаточно в нужное время вставлять новые строки. Хочу использовать это свойство для написания программы "блокнот", чтобы читала и записывала на прямую с SD-карты. А пока предлагаю на рассмотрение скрин и дополнительную библиотеку UTFTR.
Библиотека UTFTR - мое дополнение к UTFT, работает с кириллицей, содержит коды кирилических и дополнительных символов. И дополнительные функции для работы со скроллингом экрана.
В папке скрина есть readme.txt дополнительно поясняющий подробности работы со скроллингом экрана.
Не все библиотеки UTFT похожи друг на друга, кто-то в частном порядке и дорабатывает, я пользовался библиотекой которую скачал с соседней темы. Полностью Вы можете скачать тут: https://cloud.mail.ru/public/9fFV/jMhKSjHuS.
Напоминаю, что скреч проверялся на дисплее HX8357B. Может не работать на других. Для этого посмотрите Datasheet вашего экрана и уточните поддерживает ли ваше устройство скроллинг экрана и совпадают ли команды.
Всем привет!!!
Кому интересно, представляю на обозрение еще один пример использования аппаратного скроллинга. Скетч получает строку из монитора порта и выводит ее на экран при этом производит аппаратный скроллинг экрана.
В архиве находится модифицированная библиотека UTFTR, в ней были проведены изменнения по выводу текста на экран с цель оптимизации работы кода, добавленны функции работы с кодировками UTF-8 и CP-1251 и преобразованиями из одной кодировки в другую. Буду рад если кто-то найдет еще что-нибудь интересное для себя. Скачать архив можно тут: https://cloud.mail.ru/public/HaVC/pDDg966uj. Описание более подробное в readme.txt в каждой папке архива.
Напоминаю, что скреч проверялся на дисплее HX8357B. Может не работать на других.
Всем удачи!!!
День добрый!!!
Подвожу итоги моей не спешной работы по изучению Arduino, а именно предлагаю на рассмотрение скетч DOS, с библиотекой DOS и обновленной версией UTFTR. Скетч использует команды MS-DOS для работы с SD-картой и выводит результаты на экран Arduino. Команды передаются через монитор порта редактора Arduino. Для правильной работы в мониторе порта надо установить признак конца строки "Новая строка". Подробное описание библиотек в архиве каждой из библиотек.
Скачать архив можно здесь: https://cloud.mail.ru/public/L5Ea/ZtjbTRyEC.
Далее в планах покорять новые горизонты по работе с Ардуино.
Удачи ВСЕМ!!!
Почитал тему, помогло, и решил дополнить ее по поводу резисторных сборок на модулях.
Любая SD карта, на нынешнии времена использует уровень сигнала не выше 3.3 вольта. Для того чтобы выравнить уровень сигнала с 5 вольт до 3.3 вольта, китайцы ставят эти самые резисторные сборки на 4.7-10 ком, это относится к многим конструкторам в том числе и MEGA2560, а вот для DUE которая сама по себе работает на 3.3 вольт с таким же логическим уровнем который не превышает 3.3 вольт, эти сборки по сути не нужны. Но есть 1 нюанс, просто ставить нулевой резистор это не совсем хорошо, даже скорее плохо, суть в чем, на сколько я помню у большенства контроллеров Atmel максимальное нагрузочное значения тока на вывод состовляет вроде не больше 20мА, при привышении данного значения есть большая вероятность спалить порт ввода-вывода, для этого нужно поставить ограничительный резистор, что в принцепи и сделано часто на модулях. К примеру на 3.3 вольта, сопротивление резистора не должно быть ниже 180ом (165ом по формуле) для тока 20мА и так далие по закону Ома. Есть опять НО, если сопротивление будет сильно большое то ток будет сильно маленький, что приведет к падению уровняя сигнала, что мы и видем на модулях с 10ком и ур. 3.3 вольта, ток не больше 330мкА. А если к примеру возьмем K9HCG08U1M то потребление тока на 1 порт составляет по спецификации до 400мкА, что явно больше чем есть на самом деле. При этом надо учитывать что может быть в ардуине в качестве ограничителя тока.
При этом добавлю, что ставить просто ограничительный резистор не совсем хорошее дело, видь при изменении нагрузки, у вас так же будет изменятся и уровень сигнала, который к примеру на 5 вольтах может вырасти с 3.3 до 3.6 при определенном токе, так что для этого я лично бы посоветовал именно ставить делитель из 2х резисторов. Он ограничивает верхний порог уровня сигнала не давая его привысить и тем самым привести к порче устройства. Кстати делитель напряжения нужен только если надо понизить уровень сигнала до необходимого значения, для однотипного уровня нужен только ограничительный резистор.
Ну вообщем вроде и все. Пойду свою DUE до ума доводить под SD :)