РадиоКот :: Малогабаритный микроконтроллерный модуль "MiniMother AVR"
Например TDA7294

РадиоКот >Схемы >Цифровые устройства >Автоматика >

Теги статьи: Добавить тег

Малогабаритный микроконтроллерный модуль "MiniMother AVR"

Автор: Alex_Fish
Опубликовано 07.09.2012
Создано при помощи КотоРед.
Участник Конкурса "Поздравь Кота по-человечески 2012!"

Малогабаритный микроконтроллерный модуль "MiniMother AVR" 

Некоторые наверное сново будут ворчать: "О, опять микроконТРОЛЛИНГ наступает. Рядовые коты без дела сидят." А нехрен сидеть. Надо включать мозги и браться за изучение. Альтернативы микроконтроллерам нет. И чем дольше вы будете сетовать и ворчать, тем меньше успеете. И Гугль вам в помощь. Кстати, очень хороший помощник. Ну и на нашем сайте и подскажут, и научат, и пошлют ... в нужном направлении. В том числе и я. В смысле не посылать, а подсказывать. Ну и это устройство тоже поможет. Оно избавит вас от "рутинной" работы и позволит сразу ввязаться в драку по большому. Хотя больше оно подойдет не начинающим, а тем кто уже поморгал светодиодами и сделал часы и термометр, так популярные на нашем "сайте пионеров и пенсионеров", а дальше уткнулся в проблему типа: "А что же дальше то. Неужели микроконтроллер только для светофоров и термометров подходит?"

Как то порывшись в "тырнете" понял, что в качестве устройств отображения информации, доступны только 1-2строчные ЖКИ да семисегментные светодиодные индикаторы. Уныло, бедно, неинформативно. Это в наш то космический век, когда космические корабли бороздят просторы......... Некоторые "интузизисты"
пытаются использовать маленькие дисплейчики от НОКИЯ 3310 ну и от Сименса S65. Да и к тому же эти модели и запчасти к ним вымирают гораздо быстрее мамонтов. Ну вот я в порыве вселенской любви и решил: Вот, блин, возьму, и предоставлю всем радилюбителям планеты (в первую очередь котячей породы) классный, красивый, информативный, динамичный, цветной, понятный, малогабаритный, автономный, универсальный, экономичный, недорогой .................пульт отображения информации. Держите, люди. Пользуйтесь. Я вас люблю.

И исходник с программным кодом не зажоплю. Ведь в микроконтроллерной технике без него схема не имеет смысла. Даже если он будет не верхом совершенства. Ведь и на ошибках учаться. И особенно приятно учиться не на своих ошибках. Так что учитесь на моих ошибках. Разбирайте их, исправляйте, критикуйте, ругайте меня, а будя за что, то и похвалите. Ведь доброе слово и коту приятно.

И пустился я в тернистый путь. Коряв и загогулист он был. Истоптал несколько клавиатур, замордовал несколько мышей, сжёг несколько киловатт энергии и наконец родил в муках. Ну что ж. Что родил с тем и жить буду. А заодно и вы.....

Получился даже не "пульт отображения информации" а целый автономный вычислительный модуль. То бишь микрокомпьютер. На борту имеем: монитор -> дисплей, процессор -> микроконтроллер, клавиатуру -> тачскрин, накопитель информации -> micro SD, интерфейс -> USB порт, и еще автономный питатель -> LiIon аккумулятор со схемой зарядки. Во как. Да и в добавок ко всему этому счастью - размер, 72х50х15. Вес не измерял, но клянусь хвостом, нагрудный карман рубашки даже не оттягивает.

Ну а если вы вдруг спросите: - Ну и нахрена он такой хороший? Что же такого он может? Я начну юлить: - Ну как что. Он может....... если его..... Да нихрена он не может........ до тех пор, пока вы не прошьете ему в память программку, вашу, мою, да неважно чью, объясняющую ему что он такое. Этот модуль - не законченная конструкция, с определенными задачами, а хороший универсальный инструмент, с помощью которого вы можете создать много разных конструкций которые как раз и будут выполнять разнообразнейшие полезные задачи. Я постарался облегчить вам жизнь, взяв на себя рутинную работу по написанию многих функций, позволяющих вдохнуть жизнь в эту коробочку. Это своего рода DOS, операционная система, которая будет считывать команды, задаваемые вами с тачскина, выводить на дисплей данные с датчиков, которые вы подключите к портам микроконтроллера, сохранять на microSD и считывать с нее как одиночные данные, так и целые огромные массивы полученных в процессе работы параметров, обеспечивать посредством USB порта связь с большим компьютером, обрабатывать и выводить на дисплей разнообразнейшую графическую информацию.............. фу. Устал. А если короче - все зависит от вашей фантазии, и познаний. Как присутствующих на данный момент, так и приобретённых в процессе работы с этим устройством.

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

Это было вступление. Надеюсь не очень скучное. А теперь перейдем к самому устройству. Начнем со схемы. А что схема. Схема как схема. Ничего
примечательного. Типовое включение типовых модулей. Смотрите внимательней, и все поймете. Смотрящий да увидит. Во как.

Я лишь опишу что для чего. Итак - МИКРОКОНТРОЛЛЕР. Царь зверей. Я использовал ATxmega256 A3. С не меньшим успехом можно заюзать ATxmega64 A3,
ATxmega128 A3, ATxmega192 A3. Иначе говоря - любой из серии А3. Я выбрал самый толстый. Наверно из жадности. Подумал: да хрен с этими несколькими баксами, зато иметь на борту столько памяти - кашерно. Особенно для начинающих. Не надо сильно задумываться над тем, как бы это сэкономить несколько строчек кода. С одной стороны это вредно для мозгов, надо меньше задумываться. А с другой, - никогда не возникнет сожаление "Эх. Надо было побольше взять."
Для запитки устройств, требующих стабильного напряжения (микроконтроллер и дисплей) служит мелкосхема LP2981 с выходным напряжением 3,3В. Поскольку падение напряжения на этом чипе всего 0,2В он будет стабильно поддерживать напряжение 3,3В даже когда напряжение LiIon аккумулятора просядет до 3,5В. Чип стабилизирует напряжение, подаваемое через диоды D6 с аккумулятора, или D5 с разъема USB. Схема включения стандартная из даташита. Также со входа стабилизатора подается питание на аноды светодиодов подсветки. Резистор R8 выравнивает интенсивность подсветки при разных источниках питания, поскольку напряжение аккумулятора меньше напряжения с порта USB. Поскольку микроконтроллер не имеет аппаратной поддержки порта USB, используем микросхему преобразователя USB-UART от FTDI FT232RL. Микросхема подключена обычнейшим стандартным образом, и пояснений не требует. Если вам все же нужны пояснения, обратитесь к даташиту. Или у Гугля спросите.Он мужик авторитетный. К одному из SPI интерфейсов порта С подключается карта памяти microSD. Поскольку встоенные в CodeVicion библиотеки от мистера ЧаНа поддерживают FAT систему Виндоуса, подцепить мы можем много Гб(гектаров) памяти. У меня стоит 2Га, и мучаюсь вопросом, чем бы ее заполнить. Но чтобы работать, карту нужно отформатировать компьютером в нужном вам формате FAT12, FAT16 или FAT32.Так как найти карточку с небольшим объемом нынче затруднительно форматируйте сразу в FAT32. Так ка я очень хотел, чтобы устройство было автономным, я решил снабдить его LiIon аккумулятором. Ну и блок контроля заряда LiIon элемента прицепил. Места занимает мало, а удобство на лице. Это LM3658. Кто же собирается запитываться по другому, (или если кто боится что не запаяет клопика с шагом 0,5мм.) эту крохотулю можно не ставить, вместе со всей обвязкой. Микросхема обеспечивает зарядку аккумулятора током до 1А.
Максимальный ток зарядки задается резистором R10, и при указанном на схеме номинале 3,3К будет 750mA. Если зарядка будет осуществляться от USB порта ток будет ограничен 100mA. Резистор R11 используется как "заглушка" вместо встроенного в некоторые батареи терморезистора. Более детально обо всех
особенностях подключения можно узнать из даташита на эту микросхему. Пол пачки резисторов под гордым номером R9 я напаял нарочно, чтобы не рассчитывать номиналы делителя. Подумав, что проще взять пять одинаковых 1% резисторов с имеющимся у вас номиналом (10-50К) чем заморачиваться подбором делителя с коэффициентом 5. Впрочем и 5% резаки подойдут, если они из одной партии, то разброс параметров небольшой. Спросите: зачем все это нагромождено? Да чтобы микроконтроллер мог контролировать напряжение аккумулятора, и вовремя предпринимать необходимые действия. Полевичок Q1 служит для регулирования и выключения подсветки дисплея. Заданные нами или микроконтроллером импульсы ШИМ через порт РЕ0 поступают на затвор транзистора, который соединяет с землей катоды светодиодов подсветки дисплея. Аноды же их через токоограничительный резистор R7 соединены с положительным полюсом источника запитки. Если же вам не нужно экономить на подсветке и нужен порт РЕ0, на печатной плате предусмотрена площадка позволяющая переключить резистор R9 на положительный полюс питания, открыв на постоянно Q1. Светодиоды подсветки будут светить постоянно с
максимальной яркостью. Ну и самая большая деталь устройства - цветной дисплей разрешением 320х240 точек с тачскрином. И не только самая большая, но и самая противоречивая. Почему противоречивая? Потому что это, в принцыпе, кот в мешке. И не один кот, много. (Тсссссс... А то наш Kot забанит, услышав об актах насилия над соплеменниками) Покупал я его как 3" дисплей для Кетайского клона NOKIA N95. В большинстве отзывы об этих телефонах неплохие. Достаточно надежный и функциональный аппарат при бросовых ценах. Ну а когда гуглил инфу об этом дисплее, осознал поговорку о коте в мешке. Оказывается, что эти дисплеи могут быть разные как по размеру, так и по "начинке", то бишь по встроенному внутрь контроллеру обслуживающему экран. Конкретных названий дисплеев, подходящих к конкретному аппарату множество. Эти же дисплеи могут подходить и к другим аппаратам. Модели дисплеев с весьма мутными маркировками, по ним не поймешь что за оно. Короче = сплошная муть и полное отсутствие конкретности. Пошарахайтесь вот по этому ресурсу, может что и поймете. https://master-electrix.at.ua/publ/opisanie_lcd/2 Но одно несомненное и весомое преимущество - цена. От 7$ до 10$ можно приобрести дисплей, с достаточно неплохими параметрами. А через Ebay так наверно и целый пучёк. И запаивать удобно. Прямо на плату ламелями и легкоплавким припоем. Шаг 1мм. единственный стабильный параметр - это разрешение. 320х240 точек. Вывод из этого всего словоблудия следующий: если вы меня спросите, <какой марки дисплей используется в моем устройстве?> я отвечу так - 3" дисплей от китайской NOKIA N95 с 37 выводами, оснащенный контроллерами экрана ILI9320, SSD1297 или HD8347, с распиновкой под номером один из этой странички
https://master-electrix.at.ua/publ/opisanie_lcd/displei_ot_kitajskikh_n95_tv_phone_i_t_d/2-1-0-15
Правда мутно? Но уверяю вас, что 70-80% китайских трехдюймовых дисплеев подойдут под эти данные. Правда есть еще одна бяка. Пока не запаяешь этот дисплейчик то не поймеш, рабочий ли он. А когда запаяешь, лишишься права замены. Но несмотря на эту всю муть, делать устройство стоит. Резистивный тачскрин, применяемый совместно с этими дисплеями тоже с "мухами". И подключения могут отличаться от одного изделия к другому, и сопротивление пленок могут быть разные. Резисторы R3 и R4 как раз и предназначены для сглаживания этих отличий. Меряете мультиметром сопротивлени пленок тачскина с соответствующими координатами, и впаиваете резистор с номиналом чуть больше чем в 3 раза превышающий его. Например если сопротивление пленки координаты Х равно 520 ом, запаиваем R3 с номиналом 1,6К. Напряжение единици с микроконтроллера должно превратиться в напряжение в 1В. АЦП микроконтроллера меряет напряжения до 1В.



Конструктивно устройство выполнено на плате из двухстороннего фольгированного стеклотекстолита. Печатные проводники и SMD компоненты расположены c двух сторон. Переходы между слоями выполнены одножильным медным проводом D0,5мм. Ширина печатных проводников и расстояние между ними не менее 0,3мм, что позволяет без особых изысков изготовить плату в домашних условиях с применением Лазерно Утюжной Технологии. Единственная трудность, это совмещение слоев. Для облегчения этой задачи по краям платы пропечатываются "реперные метки". Я делал следующим образом: отпечатываем по очереди на разных листах оба слоя (учтите что верхний слой нужно отзеркалить), обрезаем лишнюю бумагу, на просвет от лампы или окна совмещаем метки, и скрепляем листы стэплером в 4 местах. Скрепки располагать так, чтобы они не мешали сбоку просунуть стеклотекстолит. Утюг нагреваю до 140 гр. и по очереди проутюживаю оба слоя, до "полного удовлетворения". Так как я постарался для переходных отверстий сделать площадку побольше (насколько это позволял монтаж) небольшие смещения "прокатывают". Отверстия сверлил сверлом 0,6мм. Мой сверлильный станочек совсем без биений, что позволяет пользоваться твердосплавным, победитовым сверлом. Очень я вам скажу удобненько это. Сотни ответстий "не вынимая" легко. Если же сверлить обычным сверлышком то потра....ться придется изрядно. А поскольку радиолюбителям метелизация пока недоступна, отверстий пришлось налепить немало. Все порты микроконтроллера и некоторые другие необходимые сигналы и напряжения выведены на малогабаритные разъемы с шагом 2мм. Их расположение позволяет вставлять устройство в качестве модуля в другие устройства и посредством портов или множества внутренних интерфейсов микроконтроллера либо управлять (благо ресурсов у камешка немало) либо учавствовать в работе составных устройств. Это то что касается "железной" составляющей устройства


А теперь поговорим о "софтверной" части. Почему ATxmega? Ой, сколько на просторах интернета споров "какой камень лучше". Благо их развелось достаточное количество от разных производителей. И на мой взгляд, в этих спорах лидируют камешки от STM. Я же изначально хотел писать код для ATmega, по принципу <самая короткая дорога та, которую знаешь>. Но поприкидывав соотношения между задачами и ресурсами понял: ATmega без сомнений справится, но расширяться будет трудновато. Куда как лучше в этом направлении выглядит ATxmega. При ненамного большей стоимости мы имеем более демократичный, богатый, продвинутый камешек. И корпус TQFP с расстояниями 0.8мм. стал уже родным и близким. И среду разработки менять не надо. Уже знакомый CodeVision 2.05 с программатором клоном AVRISP mkII вот отсюдова https://radiokot.ru/forum/viewtopic.php?f=20&t=26417&start=140 прекрасно справляются с задачами. Дешево и сердито. Многих может отталкивать предложенная новая система наименования регистров и бит.
<https://microcontrollerov.net/microcontrolleri/xmega/AVR1000-Nachinaem-pisat-kod-dlja-mikrokontrollerov-XMEGA-na-C> Но при кажущейся непонятности и громоздкости она гораздо более наглядна и удобна чем старая система. Да и старая и новая система прекрасно уживаются в одном компиляторе совместно. Так строки:
USARTC0.CTRLB=(USARTC0.CTRLB & (~(USART_RXEN_bm | USART_TXEN_bm | USART_CLK2X_bm |USART_MPCM_bm | USART_TXB8_bm))) | USART_RXEN_bm | USART_TXEN_bm;
и
USARTC0.CTRLB=0x18;
совершенно идентичны и одинаково проглотятся компилятором. При этом, чтобы понять из второй строки какие действия они вызывают надо лезть в даташит и смотреть какие биты числа 0х18 что означают. А из первой строки сразу видно, Все это выражение в скобках всего лишь обнуление регистра USARTC0.CTRLB . а то что после скобок, взводит биты RX ENABLE TX ENABLE. И не надо залезать в даташит. Громоздко, но наглядно. Ну и вы же не думаете что всю эту длиннющую строку надо обязательно набирать на клавиатуре? Правильно. Мастер кода из CodeVision и Копипаста нам поможет. Конечно, мастер кода генерит избыточный код. Но мы же не пальцем деланные. Выбираем нужные нам длиннющие строки и переносим их в проект. А разобраться в том, что нам нужно, а что - лабуда, нам поможет отличнейшее родноязычное описание нашего камешка, расположенное вот по этой ссылочке:
https://www.gaw.ru/html.cgi/txt/doc/micros/avr/arh_xmega_a/index.htm
Это все, что я хотел выразить о популяризации микроконтроллеров ATxmega . Если у вас другие предпочтения, то в добрый путь. Код на Си портируется
с некоторыми доработками и изменениями на любую платформу. Ну а если вам еще и не влом свой код написать..... А если вы еще и потом с нами
поделитесь....... Не жадничайте. Выкладывайте исходники. На нашем котячем сайте большинство посетителей с начальным уровнем знаний. И то что они вместо того чтобы посмотреть на строку кода и на комментарий к ней и понять суть, будут шарахаться по интернету часеми (а то и днями) в поисках такой очевидной и простой (для тебя, такого умного) функции или действия, не добавит вам "значимости". Меня здорово расстроила "благородная" отмазка "поганенького" жмотства, прозвучавшая на ветке форума по паяльным станциям от новоиспеченного программера: <Спасибо VILLIS что ты не выложил исходника для своей прошивки. Благодаря тебе я разобрался сам и написал свою. И я не выложу. Пусть тра..ются сами. Будут такими же умными
как я.> Если продолжить эту гнусненькую философию и пойти дальше, то и учебников печатать не надо. И транзисторы ни к чему. Кремния валом вокруг.
Обучение всегда основывалось на изучении и понимании примеров.

Это было вступление к софтверной части. Теперь суть.
Все вспомогательные функции оформленны в виде подключаемых директивой #include модулей. Это модуль инициализации устройства "MC_INIT.h" ,
Модули работы с дисплеем "SSD1298.h" (или "ILI9325.h" , "HX8347.h" , зависит от дисплея) Модуль с Си вариантами изображений (иконок, клавиш)
"images.c" "key_images.c" модуль с полезными функциями работы с FAT "FAT_routines.c" модуль шрифтов "FONTS2.c"
Также для нормальной работы этой же директивой необходимо подключить нужные нам библиотечные функции: <iobits.h> <io.h> <delay.h> <stdio.h>
<sdcard.h> <ff.h> <string.h> <sleep.h> <math.h> Подключили? Тогда Вперед и с песней.
Далее я вкратце опишу функции работы с дисплеем.
=================================================================================================
- LcdInit(void)
Инициализирует дисплей и подготавливает его к работе
--------------------------------------------------------------------------------------------------
- FillScreen(int color)
Заполняет экран цветом color Пример FillScreen(BLACK)
Заполняем экран черным цветом.
--------------------------------------------------------------------------------------------------
- Put_Pixel(int x,int y,int color)
Выводит точку с цветом color и с координатами X и Y
Пример использования: Put_Pixel(60,280,WHITE);
Выводим точку размером 1 пиксель с координатами х-60 у-280 белым цветом
Начало координат нижний левый угол экрана.
--------------------------------------------------------------------------------------------------
- Put_Line(int x1,int y1,int x2,int y2,int color)
Выводит линию с цветом color и с началом в координатах х1:y1 концом х2:y2
Пример использования: Put_Line(20,200,40,100,YELLOW);
Выводим линю с начальными координатами х-20 у-100 и конечными х-40 у-100 желтым цветом
--------------------------------------------------------------------------------------------------
- Put_Line_2(int x1,int y1,int x2,int y2,int color)
То же но используем алгоритм Брезенхема
--------------------------------------------------------------------------------------------------
- Rect(int X1,int Y1,int width,int height,int color)
Выводит прямоугольник с цветом color с начальными координатами X1 и Y1 (левый нижний угол) шириной width и высотой height
Пример использования: Rect(100,100,80,40,_GREEN);
Выводим прямоугольник с начальными координатами х-100 у-100 шириной 80 пикселей высотой 40 пикселей зелёным цветом
--------------------------------------------------------------------------------------------------
- Put_Circle(int xcenter, int ycenter, char rad, int color)
Выводит круг с цветом color с координатами центра xcenter и ycenter и радиусом в rad точек
Пример использования Put_Circle(120,170,40,RED);
Выводим круг с координатами центра х-120 у-170 Радиусом 40 пикселей красным цветом

---------------------------------------------------------------------------------------------------
- lcd_putchar(int x,int y,char c,int t_color,int b_color,int rot,char zoom_width,char zoom_height )
Выводит символ с в место с координатами x и y цветом t_color цвет подложки b_color поворот на rot градусов масштаб по ширине zoom_width
масштаб по высоте zoom_height. Поворот rot может принимать только значения 0, 90, 180, 270. При других значениях вывод будет со значением 0.
Пример использования lcd_putchar(120,170,82,RED,BLACK,0,2,3) 82 ASCII код символа R
                                            lcd_putchar(120,170,"Ю",RED,BLACK,0,2,3) "Ю" Буква Ю
Выводим символ R или Ю в точку с координатами х-120 у-170 (левый верхний угол) красным цветм, подложка черного цвета, поворот символа 0 градусов, масштаб по ширине 2(16 пикселей) по высоте 3(42 пикселя). Если масштаб 1:1 размер символа 8х14 пикселей
---------------------------------------------------------------------------------------------------
- lcd_putstring(int x,int y,char *str,int t_color,int b_color,int rot,char zoom_width,char zoom_height)
То же что и выше но выводит строку символов
Пример использования lcd_putstring(120,170,"Напряжение -",RED,BLACK,0,2,3) Строка: Напряжение -
Параметры те же: координаты х и у левого верхнего угла строки, сама строка или указатель на неё, цвет символа и цвет подложки, угол поворота строки (доступны только 0, 90, 180 и 270 градусов), масштаб по ширине и по высоте символов (доступны только целые числа)
---------------------------------------------------------------------------------------------------
- PutChar_Shadow( int x,int y,char c, int t_color,int rot, char zoom_H,char zoom_V )
То же что и lcd_putchar(..) и с теми же параметрами, единственно отсутствует цвет подложки. Такие символы можно выводить прямо поверху картинки не разрушая ее целостности. Как бы "тенью". Недостаток - выводить можно только стационарные тексты и подписи. Поскольку следующий вывод не подменяет предидущие символы, а накладывается на них.
Пример использования: PutChar_Shadow(120,170,82,RED,0,2,3) 82 ASCII код символа R
PutChar_Shadow(120,170,"Ю",RED,0,2,3) "Ю" Буква Ю

---------------------------------------------------------------------------------------------------
- Putstring_Shadow(int x,int y,char *str,int t_color,int rot,char zoom_H,char zoom_V)
То же что и выше, только выводит строку символов.
Пример использования: Putstring_Shadow(50,50,"Частота -",_GREEN,0,2,3)
Выводим зеленую строчку Частота - с координатами верхнего левого угла х-50 у-50 и масштабами по ширине 2 и высоте 3
---------------------------------------------------------------------------------------------------
- Output_image_flash(int x,int y,int width,int height,int rotation,flash int *pic)
Выводит изображение в точку с координатами х и у размером по ширине в width пикселей, и по высоте в height пикселей с поворотом в rotation градусов (0,90,180,270 градусов) размещенного в массиве *pic
Пример использования: Output_image_flash(10,290,64,64,0,img_key1);
Выводим изображение (клавиши) в точку с координатами х-10 у-290 (левый верхний угол), размер изображения 64х64 пикселя из массива с именем img_key1

---------------------------------------------------------------------------------------------------
- Output_image_SDCard(int x,int y,int width,int height,int rotation, char* path)
То же что выше, но изображение должно быть размещено на microSD карте
Пример использования: Output_image_SDCard(188,160,128,128,90,"Helicop.bin");
Выводим изображение (вертолетик) в точку с координатами х-188 у-160 (левый верхний угол) размер изображения 128х128 пикселя из файла с именем Helicop.bin размещенного в корневой директории SD карты

--------------------------------------------------------------------------------------------------
- Image_full_screen(char* path)
Вывод полноразмерной картинки 320х240 пикселей размещенной на microSD карте
Пример использования: Image_full_screen("1110H.bin");
Выводим изображение размещенное в корневой директории microSD карты на весь экран. Размер файла 153 600 байт
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Перед тем как выводить на экран изображения, их нужно подготовить и сохранить в памяти в нужном нам формате. Реальный их размер должен точно совпадать
с тем размером в пикселях, который мы заявляем в функции вывода изображения (Output_image_flash() или Output_image_SDCard()) Я сначало уменьшал размер картики программой ACDSee Pro 2.5 затем преобразовывал в бинарный ASM или C совместимые форматы программой ImgConvert
https://avrhobby.ru/index.php?option=com_remository&Itemid=59&func=select&id=6
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---------------------------------------------------------------------------------------------------
- opros_touchscreen(void)         unsigned int Xposition=0xFFFF, Yposition=0xFFFF;
Вызов этой подпрограммы записывает в глобальные переменные Xposition, Yposition; координаты нажатия в случае, ежели таковое было. Если нажатия небыло, в эти переменные записывается 0хFFFF

- set_touchscreen(void)
Выставляет состояние портов скоммутированых на обслуживание тачскрина таким образом, что нажатие будет вызывать прерывание с вектором [PORTA_INT0_vect]

--------------------------------------------------------------------------------------------------

Функции работы с картой памяти, это библиотечные функции CodeVision 2.05 и хорошо описаны в хелпе компилятора, и на сайте разработчика, мистера Чана
https://elm-chan.org/fsw/ff/00index_e.html
Описание их работы слишком громоздки, поэтому либо читайте хелп компилятора CodeVisionAVR 2.05, либо будем обсуждать на форуме. Итак уже пол книги по объему написано. Больше сил нет печатать.

В начале кода заложена команда считывания ID контроллера дисплея, и передача его посредством USART - USB в компьютер. Если вы запустите какую нибудь терминальную программу с настройками "19200 8+1 np" то вы сможете прочесть код контроллера, и по нему определить производителя и модель. Да. Не забудьте кабель miniUSB - USB подключить. Надежнее будет.

P.S. Объем для "впитывания" немалый. Вначале он многих может насторожить, или даже напугать. Но если не пытаться проглотить все единоразово, а постепенно "въезжать" проглатывая по кусочку, а некоторые моменты просто просматривать для общего ознакомления, то вполне реально можно осилить. На форуме я выложу "пустой" исходник, и внося свои строки даже начинающий и незнакомый с устройством микроконтроллера сможет получить быстрый результат. Ну а вместе со знающими "котами" мы сможем добавляя "подстёгивающиеся" платы и создавая соответствующие коды реализовать много полезных и красивых устройств, которые в свою очередь смогут повторить непрограммирующие пользователи. И да поможет нам КОТ.

P.P.S. Материал конечно же не полный. Возможно даже есть неточности и ошибки. На форуме постепенно отшлифуем. Но сама идея и метод её реализации заслуживают рассмотрения. Возможно найдутся желающие довести до ума программный код или портировать его на другие платформы, буду несказанно рад. Уже начал работу по созданию аналогичного модуля на STM32F407... Когда будет чем поделиться, поделюсь.


Файлы:
Печатные платы и схема
Содержание SD карты
Исходник CodeVision AVR 2.05


Все вопросы в Форум.




Как вам эта статья?

Заработало ли это устройство у вас?

31 0 0