Цель: получить навыки работы с отладочной платой 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
Задачи: считать показания с термометра, вывести на 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 модулями
Создадим проект
Спойлер


Спойлер

Работа с 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(). Она считает частоту на которой работает контроллер и проинициализирует соответствующие переменные.
Спойлер

Откроем ASF Wizard и внесём следующие изменения:
Спойлер

Добавить строчку в файл conf_board.h
#define CONF_BOARD_SD_MMC_HSMCI
Создаём второй проект
Это нужно чтобы добавить в основной проект файл конфигурации.
Спойлер


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


Спойлер

+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 скачивания