Работа с отладочной платой SAM4S-EK.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Родился
Сообщения: 1
Зарегистрирован: Пн ноя 09, 2015 10:47:44

Сообщение sergeyvass »

Цель: получить навыки работы с отладочной платой SAM4S-EK на базе контроллера SAM4S16C и ASF (Atmel Software Framework) в среде разработки Atmel Studio 7.
Задачи: считать показания с термометра, вывести на LCD экран и записать на SD карту.
Введение.
Моё увлечение микроконтроллерами началось с института и уже длится около 5 лет. В основном это моё хобби, но иногда удаётся делать небольшие проекты для работы. До сих пор работал с 8-ми битными контроллерами фирмы Atmel. Давно мечтал попробовать 32-х разрядные контроллеры. Теперь у меня появилась возможность. Получил отладочную плату с обязательством написать про неё статью. (http://geektimes.ru/company/rainbow/blog/265106/)
СпойлерИзображение
Краткие характеристики отладочной платы:
SAM4S16C chip LQFP100 package with optional socket footprint
NAND Flash
2.8 inch TFT color LCD display with touch panel and backlight
UART port with level shifter circuit
Microphone input and mono/stereo headphone jack output
SD/MMC interface
Reset button: NRST
User buttons: Left and Right
QTouch® buttons: Up, Down, Left, Right, Valid and Slider
Full-speed USB device port
JTAG/ICE port


Микроконтроллер SAM4S16C на базе ядра Cortex M4 (1024 Kb Flash, 128 Kb SRAM).
LCD экран и порт для подключения micro SD карты есть на отладочной плате. В качестве датчика температуры будет использоваться цифровой датчик DS18B20 (http://teslabs.com/openplayer/docs/docs ... 0_pre1.pdf).

Создание проекта с необходимыми ASF модулями
Создадим проект
СпойлерИзображение
Изображение
После того как будет сгенерирован проект открываем окно ASF Wizard (ASF -> ASF Wizard). Добавим необходимые модули в правую колонку.
СпойлерИзображение
Настроим добавленные модули
Работа с LCD. Создаём файл «resistive_touch_board.h» текст в конце статьи .

Этот файл был взят из стандартного проекта работы с LCD экраном. Интересно, почему он не был сгенерирован автоматически?
Теперь можно нарисовать следующее меню.
СпойлерИзображение
Реализация чтение данных с датчика температуры
Датчик DS18B20 имеет три вывода (питание, земля и информационная линия). Информационную линию нужно подтянуть к питанию через резистор 4,7 кОм. Подробнее см. http://teslabs.com/openplayer/docs/docs ... 0_pre1.pdf.
Подключим информационный вывод к линии PB14. В отличие от 8-ми битных контроллеров устройство портов ввода/вывода имеют более сложную структуру, но благодаря ASF мы получаем удобный интерфейс позволяющий не углубляться в реализацию портов В/В. Скажу лишь, что если ножка В/В работает в режиме вывода, то её можно не тактировать и тем самым уменьшить энергопотребление. А если мы хотим считывать с ножки информацию или генерировать прерывание связанное с изменением сигнала на этой ножке необходимо включить тактирование соответствующего банка ножек В/В (sysclk_enable_peripheral_clock(ID_PIOB);). В данном контроллере их 3. Нам нужен банк «B» в котором находится 32 ножки. Эта функция вызывается при инициализации платы (board_init();). Так же можно включить аппаратное подавление дребезга контактов. Подробности смотрите в описании на контроллер.
Работа с датчиком температуры хорошо описана здесь http://teslabs.com/openplayer/docs/docs ... 0_pre1.pdf.. Так же в этом документе представлен пример кода на СИ. Остаётся только заменить операции работы с ножкой В/В (в документе они представлена для работы с 8-ми битными портами).
Чтение состояния ножки
pio_set_input(P_TEMPERATURE, PIN_DS18, 0);
pio_get_pin_value(PIN_DS18_IDX);

Выставление уровня на выходе
pio_set_output(P_TEMPERATURE, PIN_DS18, HIGH, DISABLE, ENABLE);
pio_set(P_TEMPERATURE, PIN_DS18); / pio_clear(P_TEMPERATURE, PIN_DS18);

Функции для работы с термометром находятся в файлах “temperature.c”и “temperature.h”.

Прочитаем данные с датчика и выведем их на экран
Ещё один момент. Для реализации ONEWIRE интерфейса, чтобы считать данные с термодатчика необходимо использовать задержки. Для этого мы подключили в ASF Wizard специальный модуль (“Delay routines”). В нём определены функции delay_ms(), delay_us() и т.д., но для того чтобы они корректно отсчитывали время необходимо вызвать инициализирующую функцию sysclk_init(). Она считает частоту на которой работает контроллер и проинициализирует соответствующие переменные.
СпойлерИзображение
Последний этап. Добавим ведение журнала на SD карте
Откроем ASF Wizard и внесём следующие изменения:
СпойлерИзображение
В поле SD/MMC Memory Control Access (component) нужно выбрать “enable”.
Добавить строчку в файл conf_board.h
#define CONF_BOARD_SD_MMC_HSMCI

Создаём второй проект
Это нужно чтобы добавить в основной проект файл конфигурации.
СпойлерИзображение
Изображение
После того как будет сгенерирован проект нужно взять из него файл config/conf_fatfs.h и скопировать с заменой в основной проект.
Минутку внимания
Работа с файлами на SD карте слабо документирована, поэтому для ведения журнала был реализован следующий алгоритм:
- ждём подключение SD карты;
- инициализируем её, открываем на ней файл для записи;
- В цикле записываем в файл значения температуры и вызываем аналог fflush() (здесь это f_sync ()).
Так сделано для того, чтобы можно было в любой момент вытащить SD карту, и на ней гарантированно оказались данные.
Проект готов! Осталось добавить в него недостающие файлы: main.c, temperature.c. temperature.h, resistive_touch_board.h, conf_fatfs.h .
После компиляции (клавиша «F7») необходимо загрузить исполняемый файл в микроконтроллер.
СпойлерИзображение
Изображение
Вид собранной схемы работающей с финальной версией прошивки.
СпойлерИзображение
Содержимое SD карты после непродолжительной работы платы.
+20.75
+20.75
+20.75
+20.75
+20.75
+20.75
+20.81
+20.81

Визуализация полученных данных о температуре через Gnuplot
СпойлерИзображение
Выводы
Имея примерные знания об устройстве сложного контроллера, сложной периферии (LCD, SD, FAT), или не имея их совсем, можно с помощью ASF реализовать сложный проект. Это напоминает работу с ARDUINO, но я не смог найти исчерпывающую документацию по ASF модулям. На сайте Atmel нашёл прототипы функций, иногда с комментариями, один раз даже с примером использования. Из-за этого много времени тратил на эксперименты, чтобы заставить работать проект. Но, не смотря на это, ASF позволил значительно ускорить выпуск проекта. Напоследок хочу поблагодарить замечательных людей, которые дали мне возможность поработать с этой платой. До сих пор не знаю, какие цели они этим преследовали и зачем им это надо .
Маленькое замечание, может кому-то позволит сэкономить немного времени. Для UART`a нужен переходник RS-232 to USB, переходники UART to USB не подойдут.



http://rghost.ru/7y4npNHMW архив проекта.



Исправил.
Нарушение Правил форума п. 2.6
Сюда перенес, т.к. в разделе "Статьи" создаются темы по статьям только с нашего сайта.
aen
Вложения
main.c
(4.29 КБ) 566 скачиваний
temperature.h
(1.19 КБ) 527 скачиваний
temperature.c
(3.16 КБ) 559 скачиваний
resistive_touch_board.h
(1.38 КБ) 592 скачивания
conf_fatfs.h
(9.5 КБ) 563 скачивания
Реклама
Ответить

Вернуться в «Разные вопросы по МК»