Форум
 

Вернуться   Форум "Фрикер Клуб" - кодграббер своими руками > Основной раздел > Статьи

Важная информация

Ответ
 
Опции темы Опции просмотра
Старый 21.05.2012, 19:07   #1
CivicDriver Меню Пользователя
Резидент клуба
 
Аватар для CivicDriver
 
Регистрация: 13.03.2011
Сообщений: 212
По умолчанию mikroMedia for Xmega

Знакомство с mikroMedia for Xmega

Введение.
Мультимедийные устройства всё глубже проникают в нашу повседневную жизнь. Эта фраза актуально бы звучала лет пять назад, но и сейчас в ней есть определённый смысл, заключающийся в том, что все кому не лень выпускают готовые комплекты для разработки мультимедийных устройств. Не осталась в стороне и фирма MikroElektronika, выпускающая линейку комплектов mikroMedia. Суть линейки проста – TFT экран разрешением 320x240 с Touch Panel соединён с управляющим контроллером, к которому также подключён небольшой набор периферийных устройств, таких как акселерометр, MP3-кодек, внешняя Flash-память, USB-UART мост, разъём MicroSD, ну и схема питания с зарядкой от USB подключённого к плате Li-Pol аккумулятора. Комплекты в линейке различаются по типу управляющего контроллера. Набор контроллеров довольно обширный и позволяет выбрать от простенького 8-битного до высокоскоростного ARM контроллера. Набор следующий:
– ATmega128;
– ATxmega128A1;
– PIC18F87J50;
– PIC24FJ256GB110;
– dsPIC33FJ256GP710A;
– PIC32MX460F512L;
– LM3S9B95;
– LPC2148 ARM7;
– STM32F207VGT6 (релиз в конце мая);
– STM32F407VGT6 (релиз в конце мая).
Вся эта информация приведена в соответствии с http://www.mikroe.com/eng/categories...omedia-boards/ .
Дальше, ввиду наибольшей приверженности автора пока ещё к продукции Atmel, будем рассматривать вариант с ATxmega128A1 (вариант с ATmega128 как более жрущий не интересен).
Итак, ATxmega128A1. Очередная попытка Atmel’а создать быстродействующий ортогональный контроллер с минимальным энергопотреблением, анонсированная мощной рекламной компанией. Первый релиз продукта пришёлся на 2008 год, что, например, на три года позже релиза подобных контроллеров линейки MSP430 от Texas Instruments. Микроконтроллеры первой партии были настолько ужасны, что многие поклонники марки разочаровались в AVR’ах в частности и в Atmel’е в целом и перешли на контроллеры других производителей. Моё непосредственное знакомство с Xmega произошло в 2010 году, когда уже были локализованы и переделаны косяки первых релизов. Впечатления от знакомства были смешанные – вроде бы это прежний 8-битный AVR с возможностью прокачивания частоты работы от внутренних цепей до 32 МГц и выше (предельное значение, при котором контроллер ещё ведёт себя адекватно, 48 МГц, а не 200 МГц как в даташите), а вроде бы и архитектура другая, и периферия совсем по-другому устроена, а за возможность назначать приоритеты прерываний вообще респект можно высказать. В общем на любителя. Мне контроллер понравился. И поэтому при появлении в продаже обвески к нему в виде mikroMedia я решил приобрести эту платформу и попытаться на ней что-нибудь сделать. Опыты свои решил описать здесь, чтобы кто-нибудь, тоже решивший познакомиться с платформой, не наступал на грабли, попавшиеся мне и связанные с этим знакомством.
Особо въедливый читатель спросит – а к месту ли эта платформа для нужд грабостроения. Развёрнутый ответ на этот вопрос может завести в настолько глубокие дебри философских рассуждений, что выхода из них не будет видно. А в двух словах – можно сделать граб с цветным дисплеем и Touch Screen’ом, позволяющий слушать любимые MP3-треки во время сидения в «засаде». Плюс камуфлирование («Начальник, я музыку в плеере слушал, с чего соседняя машина вдруг открылась я не в курсе»). Платформа предоставляет большие возможности по созданию техники двойного применения, так что каждый решает для себя.

Начало работы.
Для начала работы с mikroMedia for Xmega необходимо следующее:
– сама платформа;
– средство разработки;
– программатор.
Цена платформы на сайте производителя составляет 99$. Это в принципе недёшево, поэтому и не всем может быть доступно. Мой образец, купленный в «Чип и Дипе», обошелся в 4500 рублей (вот она коммерция в чистом виде) при условии, что продали они только плату, в то время как на сайте комплект для продажи содержит более обширный набор компонентов. Более того, электрическая принципиальная схема платформы приведена на сайте производителя, так что если делать свою реализация, может выйти и дешевле.
В качестве среды программирования я выбрал mikroC Pro. Это средство разработки – детище MikroElektronika, представляет собой продвинутый редактор кода с набором программных библиотек, позволяющих реализовать практически все функции микроконтроллера и управление подключаемыми к нему устройствами. Набор библиотек обширен, но они не open-source. Производитель их защищает, так как продаёт их. Стоимость лицензии на mikroC Pro начинается от 150$. В бесплатной версии ограничение на объём кода до 4 Кб, чего не хватает даже для компиляции поставляемых тестовых проектов. Но, как и повелось в нашей стране, где платить за ПО считается вульгарностью, есть выход. Я ни в коем случае не призываю никого пользоваться взломанным программным обеспечением, потому что это плохо, неправильно и преследуется по закону. И сам для mikroC Pro версии 5.6.0 запустил keygen под версию 2.10.0 (респект неизвестному автору за данное творение) совершенно случайно для проверки совместимости данных программ. Можно также использовать любую другую среду программирования, но на собственном примере убедился, что чем создавать, например, функцию инициализации экрана в IAR’е, проще в mikroC написать TFT_Init. И дело даже не в том, что в mikroMedia вариант подключения экрана к контроллеру не совсем стандартный, а во времени, затраченном на написание и отладку функции, прошедшем в моём случае в пустую. Помимо mikroC существуют ещё mikroBasic и mikroPascal, но это на любителей соответствующих языков программирования.
Заливку прошивки в микроконтроллер можно осуществлять двумя способами. Первый способ – с помощью предлагаемого производителем bootloader’а. Он работает, но очень медленно. Второй способ – с помощью внешнего программатора. Я использую AVRISP mkII. Для внешнего программатора нужно впаять разъём для внутрисхемного программирования в отведённое для него на плате место.
CivicDriver вне форума   Ответить с цитированием
Старый 21.05.2012, 19:09   #2
CivicDriver Меню Пользователя
Резидент клуба
 
Аватар для CivicDriver
 
Регистрация: 13.03.2011
Сообщений: 212
По умолчанию Re: mikroMedia for Xmega

Опыт первый.
Попробую описать свой первый опыт написания прошивки под mikroMedia for Xmega. Начать думаю с простенького вывода на экран какой-либо текстовой информации.
Порядок создания нового проекта подробно описан в «1st_project_avr_c_v101.pdf». Приведу лишь свой порядок действий.
Создание проекта. Выбираем Project  New Project… и в открывшемся окне жмём Next. Выбираем имя проекта, его место расположения, контроллер (ATxmega128A1) с тактовой частотой (32 МГц) и опять жмём Next. Я назвал проект SystemFailure, смысл названия станет ясен позднее. В новом окне жмём Next. Опять жмём Next и Finish. Видим свой файл SystemFailure.c в редакторе.
Работа с редактором. Редактор кода так себе. Я бы оценил его на три с плюсом. Хотя привыкнуть можно ко всему. При первом запуске следует настроить редактор под себя. Лично я ничего вроде не делал, так как не было желания рыться в настройках. Единственное что может пригодиться ViewToolbars для отображения вспомогательных меню и ToolsOptions для настройки внешнего вида.
Написание кода. Перейдём теперь к основному. Не будем отходить от традиций и создадим программу типа Hello World, только по-своему. Покопавшись в тестовых примерах с сайта, можно найти и использовать в своём проекте много чего интересного. Например, внешний вид GUI из примера про акселерометр. Создаём функцию LoadForm() и суём в неё соответствующий код.

void Load_Form(void)
{
TFT_Fill_Screen(CL_WHITE);
TFT_Set_Pen(CL_Black, 1);
TFT_Line(20, 220, 300, 220);
TFT_LIne(20, 46, 300, 46);
TFT_Set_Font(&HandelGothic_BT21x22_Regular, CL_RED, FO_HORIZONTAL);
TFT_Write_Text("CivicDriver Presents", 60, 14);
TFT_Set_Font(&Verdana12x13_Regular, CL_BLACK, FO_HORIZONTAL);
TFT_Write_Text("Test for fonts driver...", 19, 223);
TFT_Set_Font(&Verdana12x13_Regular, CL_RED, FO_HORIZONTAL);
TFT_Write_Text("www.phreakerclub.com", 165, 223);
TFT_Set_Font(&TFT_defaultFont, CL_BLACK, FO_HORIZONTAL);
}

Перед этим проводим ряд действий. Сначала подключаем библиотеку TFT. Для этого наводим курсор на Library Manager (он в окне справа) и видим, что в выплывшем списке библиотек везде стоят галочки. Поэтому над этим списком щёлкаем Clear All и выставляем флажок напротив TFT. Можно также посмотреть функции, входящие в библиотеку, нажав плюс рядом с её названием. Двойной щелчок по имени функции вызовет help с её описанием, поэтому описывать функции из библиотеки TFT я не буду. Далее следует подключить с помощью include файл resources.h, в котором хранятся шрифты, порты и т.д. также взятые из тестовых примеров. Файл resources.h можно подключить к проекту для совместной отладки (щелчок правой кнопки мыши на Header Files в менеджере проекта, который тоже сбоку, и Add File To Project…). Также дописываем функцию init_clock:

void init_clock(void)
{
OSC_CTRL = 0x02; // 32MHz internal RC oscillator
while(RC32MRDY_bit == 0)
;
CPU_CCP = 0xD8;
CLK_CTRL = 1; // set system clock to 32MHz internal RC oscillator
}

переделываем main:

void main()
{
init_clock();
TFT_Init(320, 240);

Load_Form();
}

и компилируем. Полученный hex заливаем в контроллер и видим результат.
Для Hello World вполне сойдёт, но пойдём дальше.
Естественно возникает вопрос как же писать русскими шрифтами. Разработчиками mikroC этот вопрос продуман не был. Равно как и по поводу других шрифтов, отличных от латиницы. Шрифты создавать надо вручную. Для этого на сайте есть программа GLCD Font Creator. Я делал следующим образом. Загружал уже существующий шрифт с символа 32 по символ 255 (иначе кириллица идёт лесом). Буквы нашего алфавита представлены дикими иероглифами, поэтому все 66 буквы надо прорисовывать самим. Чем я и занимался, результат в resources.h, шрифт Courier_New7x14.
Теперь вводим функцию System_Failure и добавляем в main бесконечный цикл.

void System_Failure(void)
{
unsigned char i = 0;

TFT_Set_Font(&Courier_New7x14, CL_GREEN, FO_HORIZONTAL);
TFT_Write_Text("И Д \xBE Т З А Г Р У З К А С И С Т Е М Ы . . .", 70, 70);

Delay_ms(1000);
}

void main()
{
init_clock();
TFT_Init(320, 240);

Load_Form();

while(1)
{
System_Failure();
}
}

Компилируем и видим русский шрифт на экране.
Надо добавить по поводу написания русского текста в функции TFT_Write_Text. Компилятор не всегда его понимает и ругается на некоторые символы. Поэтому их следует заменять ASCII кодами, как в случае с буквой Ё (заменена на \xBE, где 0xBE – её ASCII код). Узнать код буквы можно в ToolsAscii Chart. Причём ошибки компилятор выдаёт совершенно неожиданные, он может ругнуться на букву в начале слова, а потом эту же букву, идущую в этом же слове за другой буквой, пропускает. Может в настройках дело.
Итак, для окончания первого опыта была написана программа System Failure, программный код которой приведён в приложении. Здесь его приводить не буду, так как основные аспекты использования шрифтов и начало работы с mikroC уже освещены.
Следующим опытом будет написание часов. Опишу его позже.

Последний раз редактировалось CivicDriver; 21.05.2012 в 19:15.
CivicDriver вне форума   Ответить с цитированием
Старый 21.05.2012, 22:31   #3
griff09 Меню Пользователя
Резидент клуба
 
Аватар для griff09
 
Регистрация: 19.04.2011
Сообщений: 222
По умолчанию Re: mikroMedia for Xmega

ух-ты...Спасибо!!
__________________
Тут и сказочке Esc, кто не понял, F1...
griff09 вне форума   Ответить с цитированием
Старый 22.05.2012, 21:05   #4
CivicDriver Меню Пользователя
Резидент клуба
 
Аватар для CivicDriver
 
Регистрация: 13.03.2011
Сообщений: 212
По умолчанию Re: mikroMedia for Xmega

Цитата:
Сообщение от griff09
ух-ты...Спасибо!!

Пожалуйста. Только интересно за что спасибо.
Вот файлы проекта и картинки.
Вложения
Тип файла: rar System Failure.rar (257.1 Кб, 108 просмотров)
Тип файла: rar SystemFailureJPGs.rar (918.4 Кб, 131 просмотров)

Последний раз редактировалось CivicDriver; 22.05.2012 в 21:08.
CivicDriver вне форума   Ответить с цитированием
Старый 23.05.2012, 18:48   #5
CivicDriver Меню Пользователя
Резидент клуба
 
Аватар для CivicDriver
 
Регистрация: 13.03.2011
Сообщений: 212
По умолчанию Re: mikroMedia for Xmega

Опыт второй.
Попробуем создать что-нибудь практически ценное, например часы. Проект с картинками приведён во вложениях, опишу ключевые моменты его создания.
Часы можно было бы реализовать с помощью задержки порядка 1000 миллисекунд в бесконечном цикле main’а. Первоначальный пробный вариант именно так и работал. Но потом возникла идея усыплять контроллер для понижения энергопотребления платы в целом, поэтому реализация часов легла на таймер. Используется Timer0 порта C с прерыванием по переполнению, которому присваивается средний уровень.
[code]
void init_timer(void)
{
Timer_Init(&TCC0, 1015000); // Initialize TimerC0 interrupt
Timer_Interrupt_Enable(&TCC0); // Enable TimerC0 interrupt
PMIC_CTRL = 0b100; // Enable medium level interrupts
CPU_SREG.B7 = 1; //SEI
}

void Timer1Overflow_ISR() org IVT_ADDR_TCC0_OVF
{
ClocksTick();
}

void main()
{
init_devices();
TFT_Fill_Screen(CL_BLACK);
Delay_ms(1000);

Display_Clocks();

init_timer();

while (1)
{
SLEEP_CTRL = 0x01; //перевод в режим IDLE
asm SLEEP;
}
}
[\code]
То есть логика простая – контроллер постоянно находится в режиме IDLE (единственный энергосберегающий режим, в котором таймер не выключается), раз в 1015000 микросекунд таймер модернизирует значение времени. Количество микросекунд подбиралось вручную, так как часы постоянно убегали вперёд или отставали. Необходимо также подключить библиотеку Timer. Вообще организация библиотеки Timer в mikroC так себе. Нет реализации прерывания по захвату, с помощью которого можно было бы написать приём сигналов. Если делать – то вручную через регистры создавать такое прерывание. Кстати, регистры все находятся в ATXMEGA128A1.c, попасть в него можно кликнув правой кнопкой мыши, например, по имени PMIC_CTRL и выбрав Find Declaration. Также не совсем понятно реализовано управление контроллером прерываний, надо разбираться.
За отображение времени на экране отвечают функции Display_Hours(int x, int y), Display_Minutes(int x, int y) и Display_Seconds(int x, int y) в файле clocks_gui.c, в качестве входных параметров у которых координаты написания соответствующего элемента часов. Функции в принципе одинаковые. Стоит обратить внимание, что вывод текстовой информации на экран из переменной осуществляется через функцию IntToStr, которая находится в библиотеке Conversions (её тоже надо подключать, автоматом подключится ещё C_String).
Помимо времени выводятся и информация о дате и дне недели. Они пока не меняются динамически, а прописываются в Display_Clocks().
Также на экране присутствует жук из логотипа phreakerclub’а. Пару слов как вставлять изображения. Для вставки изображения, как и для шрифтов, необходима bitmap таблица. Создать её для изображения можно в программе Visual_TFT, бесплатная версия которой позволяет сгенерить до четырёх элементов на окно, чего вполне достаточно. В Visual_TFT создаём новый проект, кидаем на доступный экран элемент Image из правого меню, задаём в его свойстве Picture Name путь к картинке и жмём Generate Code. Сгенерированная bitmap таблица будет доступна по адресу Проект/Имя проект_Code/mikroC Pro for AVR/имя проекта_resources.c, откуда её через буфер обмена можно перетащить к себе в проект. Таблица жука в моём проекте находится в resources.h.
Часы можно подключить к ПЭВМ и синхронизировать по системному времени Windows. Для этого в прошивке присутствует функция CheckUART() и в Microsoft Visual Studio 2008 была написана небольшая программа, определяющая COM-порт подключения часов к ПЭВМ и отсылающаяся в них текущее системное время. Для запуска программы необходимы драйвера FTDI и библиотеки .NET Framework.
Также реализована возможность определения подключения по USB и индикация заряда батареи.
На текущий момент это пока всё. В ближайшей перспективе изучение Touch Panel, подсоединение передатчика и попытка реализации переборщика шлагбаумов. Получится если – отпишусь.
Вложения
Тип файла: rar Clocks.rar (430.1 Кб, 60 просмотров)
Тип файла: rar ClocksJPGs.rar (1.84 Мб, 49 просмотров)
Тип файла: rar mikroMedia for Xmega.rar (39.9 Кб, 39 просмотров)
CivicDriver вне форума   Ответить с цитированием
Старый 26.05.2012, 22:29   #6
CivicDriver Меню Пользователя
Резидент клуба
 
Аватар для CivicDriver
 
Регистрация: 13.03.2011
Сообщений: 212
По умолчанию Re: mikroMedia for Xmega

Опыт третий.
Создание неуправляемого переборщика под шлагбаумы.
Для создания ещё чего-нибудь практически ценного появилась идея реализовать вышеуказанный переборщик. Что и было сделано, фотографии и проект как водится во вложениях. Неуправляемый он, потому что не реализована возможность управления им. Это будет потом. Для создания переборщика к mikroMedia был подсоединён приёмопередатчик от KGB EX-8 (видно на первых трёх фотографиях). Рассуждать о преимуществах и недостатках этой РЧ платы я не буду, специалистов по этому вопросу тут и так много. Скажу только, что 3,3В этой плате действительно мало, так как шлагбаумы открываются практически в упор шагов с 10-15 при условии прямой видимости. Плата ставилась из-за простоты монтажа (шаг контактных площадок mikroMedia совпал с шагом на плате). Если делать грамотную РЧ часть, то надо создавать свой аналог proto shield под платформу. Приёмопередатчик подключён следующим образом (смотреть со стороны компонентов, расположив антеннами вверх, нумерация слева направо):
1 - питание
2 - контакт 13 mikroMedia, PORTB6, приём, в проекте не используется
3 - земля
4 - контакт 15 mikroMedia, PORTE0, передача
5 - не используется
Проект с прошивкой во вложении, будут вопросы - отвечу.
Изображения
Тип файла: jpg Фото1.jpg (376.4 Кб, 195 просмотров)
Тип файла: jpg Фото2.jpg (442.9 Кб, 170 просмотров)
Тип файла: jpg Фото3.jpg (300.0 Кб, 146 просмотров)
Тип файла: jpg Фото4.jpg (254.1 Кб, 172 просмотров)
Тип файла: jpg Фото5.jpg (494.2 Кб, 129 просмотров)
Вложения
Тип файла: rar Came.rar (492.5 Кб, 102 просмотров)
CivicDriver вне форума   Ответить с цитированием
Старый 27.05.2012, 13:08   #7
tahion Меню Пользователя
Автор
 
Аватар для tahion
 
Регистрация: 13.05.2011
Сообщений: 1,308
По умолчанию Re: mikroMedia for Xmega

Интересная платформа, можно ртос поднять и сделать нормальный графический интерфейс
tahion вне форума   Ответить с цитированием
Старый 27.05.2012, 17:07   #8
griff09 Меню Пользователя
Резидент клуба
 
Аватар для griff09
 
Регистрация: 19.04.2011
Сообщений: 222
По умолчанию Re: mikroMedia for Xmega

вопросик, а что за дисплейный модуль используеться?
__________________
Тут и сказочке Esc, кто не понял, F1...
griff09 вне форума   Ответить с цитированием
Старый 27.05.2012, 17:10   #9
CivicDriver Меню Пользователя
Резидент клуба
 
Аватар для CivicDriver
 
Регистрация: 13.03.2011
Сообщений: 212
По умолчанию Re: mikroMedia for Xmega

Цитата:
Сообщение от tahion
Интересная платформа, можно ртос поднять и сделать нормальный графический интерфейс

Для ртос с нормальным графическим интерфейсом, ещё и дружелюбным к пользователю, нужно пошустрее Хмеги что-нибудь.
CivicDriver вне форума   Ответить с цитированием
Старый 27.05.2012, 17:14   #10
CivicDriver Меню Пользователя
Резидент клуба
 
Аватар для CivicDriver
 
Регистрация: 13.03.2011
Сообщений: 212
По умолчанию Re: mikroMedia for Xmega

Цитата:
Сообщение от griff09
вопросик, а что за дисплейный модуль используеться?

LCD'шка MI0283QT-2 от Multi-Inno Technology Co с драйвером HX8347D. Не удаётся вложить описание на драйвер, если нужно называется оно HX8347-D_DS_T_v02_090324.pdf, найти в сети можно.
Вложения
Тип файла: pdf MI0283QT-2_Datasheet.pdf (486.0 Кб, 20 просмотров)
Тип файла: pdf mikromedia_xmega_sch_v111.pdf (1.77 Мб, 33 просмотров)

Последний раз редактировалось CivicDriver; 27.05.2012 в 17:19.
CivicDriver вне форума   Ответить с цитированием
Ответ
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



Текущее время: 11:59. Часовой пояс GMT +3.


vBulletin 4.1.0 Перевод: zCarot
(C) www.phreakerclub.com
Яндекс.Метрика