Засыпкин С.В.
Лаборатория электроники и
программирования
Электронный журнал с приложениями
№ 21
© Засыпкин С.В., 2011-2015
Содержание
1. Программирование на языке С на примере микроконтроллера STM32F407VGT6. Работа с UART. Передача данных с помощью DMA.
Режим двойного буфера.
Рассмотрим пример программы с использованием двойного буфера. По сравнению с предыдущей программой (номер 20 статья 7) сделаем следующие изменения:
…
Результат работы программы:
«
UART3 TX DMA Double buffer mode test programm
start
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
UART3 TX DMA Double buffer mode test programm
end»
Особенностями работы являются:
…
2. Программирование на языке С на примере микроконтроллера STM32F407VGT6. Работа с UART. Передача данных с помощью DMA.
Программное переключение буферов.
Рассмотренный в предыдущей статье режим не всегда удобен, т.к. с помощью него нельзя обработать ситуации, когда время заполнения буфера больше, чем время передачи (возможны потери данных) и когда требуется передать полный буфер (сложно отследить конец передачи).
Рассмотрим пример программного переключения передаваемых буферов. Сделаем следующие настройки:
…
Результат работы программы:
«
UART3 TX DMA Soft Double buffer mode test programm start
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
DMA transfer complete, buffer - 0, DMA1_Stream3->CR = 0
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
DMA transfer complete, buffer - 1, DMA1_Stream3->CR = 0
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
DMA transfer complete, buffer - 0, DMA1_Stream3->CR = 0
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
UART3 TX DMA Soft Double buffer mode test programm
end»
3. Программирование на языке С на примере микроконтроллера ATmega168. Работа с АЦП. Запуск АЦП по триггеру.
В журнале (№16 статья 10) были приведены примеры программ использования АЦП c программным запуском преобразования. В микроконтроллере также имеется возможность запуска преобразования по некоторым аппаратным событиям (называемых триггерами).
В общем для запуска преобразования по триггеру необходимо:
…
Рассмотрим сначала пример запуска по каналу сравнения B таймера 1. Пример программы приведен ниже. Программа написана для среды разработки ATMEL Studio® [1].
...
Программа выводит измеренные напряжения по UART, также при прерываниях таймера переключается светодиод.
Результат работы программы:
«
ADC trigger TIM1_COMPARE_B test
ADC0 = 1023, U = 3.297 V
ADC0 = 1023, U = 3.297 V
ADC0 = 567, U = 1.827 V
ADC0 = 469, U = 1.511 V
ADC0 = 119, U = 0.383 V
ADC0 = 0, U = 0.000 V
»
Теперь рассмотрим пример запуска АЦП по внешнему прерыванию. Микроконтроллер позволяет использовать для этого только прерывание «INT0». Изменения по сравнению с предыдущим примером выделены серым цветом.
...
4. Лаборатория для предметной
съемки.
Решил я сделать себе такую лабораторию (автоматизированную) и написать о процессе выбора оборудования и полученных результатах.
Основные требования, которые первоначально намечаются:
- фотосьемка
- видеосъемка
- управление освещением с ПК
- управление положением неподвижного снимаемого объекта с ПК
- управление движением снимаемого объекта с ПК
- предварительный просмотр изображения на ПК
- сохранение фото и видео на ПК
…
5. Программирование на языке С на примере микроконтроллера STM32F407VGT6. Работа с DMA. Передача память-память.
При передаче память-память необходимо учитывать следующие особенности:
- такая передача возможна только с DMA2
- циклический режим не возможен
- адрес памяти-источника указывается в регистре адреса периферийного устройства
- адрес памяти-приемника указывается в регистре адреса памяти
- необходимо включить инкременты памяти и периферийного устройства
- может быть выбран любой поток и канал
В качестве примера рассмотрим копирование данных из массива «source» в массив «destination». Первый вначале заполняется числами от 0 до 99, а второй числами – 0. После окончания копирования второй массив выводится по интерфейсу UART.
Программа написана для IDE «CooCox ®» [4]. Текст программы:
…
Результат работы программы:
Test DMA M2M Start
Test DMA M2M End
i - 0, destination[i]- 0
i - 1, destination[i]- 1
i - 2, destination[i]- 2
i - 3, destination[i]- 3
…
6. Автоматизация поиска информации
в сети интернет. Занятие 1.
Сегодня основным источником информации является интернет. Поэтому задачи автоматизированного поиска определенных данных являются очень актуальными. В качестве примера рассмотрим поиск цены на электронные комплектующие. Данный простой пример может выступать в качестве основы для более сложного поиска, например компонентов по списку по разным сайтам с целью определения оптимальных условий покупки.
Создадим на языке «Visual C#» [1] приложение типа «Windows Forms».
Создадим на форме поля ввода с именем:
«textBox_URL» - для ввода интернет адреса сайта
«textBox_ComponentName» - для наименования компонента
«textBox_Price» - для вывода найденной цены.
И кнопку «Найти цену» с именем «button_Find».
«
»
[1]
…
Результат работы программы:
«»
…
7. Программирование на языке С на примере микроконтроллера ATmega168. Работа с UART. Передача по прерываниям.
В журнале (№15 статья 1) были приведены примеры программ передачи данных по UART с использованием опроса флагов прерываний. В данной статье приведен пример передачи по прерываниям. Данный способ сложнее в реализации, но позволяет передавать данные максимально быстро и освободить время для выполнения других задач.
Для передачи данных создадим собственно массив для данных, счетчик передаваемых байт и флаг окончания передачи. Массив заполним некоторыми тестовыми данными (выбраны отображаемые символы для удобства просмотра). Для начала и окончания процесса будем разрешать и запрещать прерывания «UDRE».
Пример программы приведен ниже. Программа написана для среды разработки ATMEL Studio® [1].
…
Результат работы программы:
Начало передачи
0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?
Конец передачи
8. Программирование на языке С на примере микроконтроллера ATmega168. Работа с UART. Передача по прерываниям с
использованием двух буферов.
В следующем примере рассмотрим передачу данных по UART с использованием двух буферов. Когда один буфер данных передается, другой заполняется новыми данными. Потом буферы меняются местами. Такой способ хорошо подходит для потоковой передачи данных (например, оцифровка звука и передача цифровых данных по UART).
Для управления буферами создадим переменную-указатель на буфер и ей будем присваивать адрес нужного буфера.
Пример программы приведен ниже. Программа написана для среды разработки ATMEL Studio® [1] (изменения по отношению к предыдущему примеру выделены серым цветом).
…
Результат работы программы:
Начало передачи 1
0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?
Конец передачи 1
Начало передачи 2
PQRSTUVWXYZ[\]^_PQRSTUVWXYZ[\]^_PQRSTUVWXYZ[\]^_PQRSTUVWXYZ[\]^_PQRSTUVWXYZ[\]^_PQRSTUVWXYZ[\]^_PQRSTUVWXYZ[\]^_PQRSTUVWXYZ[\]^_PQRSTUVWXYZ[\]^_PQRSTUVWXYZ[\]^_PQRSTUVWXYZ[\]^_PQRSTUVWXYZ[\]^_PQRSTUVWXYZ[\]^_PQRSTUVWXYZ[\]^_PQRSTUVWXYZ[\]^_PQRSTUVWXYZ[\]^_
Конец передачи 2
9. Макетная плата драйвера ШД
«170». Часть 2.
Фото макетной платы с подключенным двигателем приведено на
рис. 1.
Рис. 1. Фото макетной платы «170».
Настройка платы заключается в установке величины
опорного напряжения для срабатывания токовой защиты с помощью резистора R23. Данная настройка зависит
от токоизмерительного резистора и величины тока срабатывания защиты. Напряжения
уровня получается из уровня логических сигналов, подаваемых на плату. В
следующей статье будет показан пример работы с данной платой.
10. Программирование на языке С на примере микроконтроллера ATmega168. Управление биполярным шаговым двигателем.
Биполярные шаговые двигатели в отличие от униполярных
имеют более сложную схему управления, но более высокую удельную мощность. Рассмотрим пример управления шаговым двигателем
«42BYGH47-401A» [7] с помощью драйвера «L6208» [6].
Для
управления используется 6 цифровых сигналов. Практически многие из них могут
быть установлены в определенное неизменное состояние, тогда число сигналов
управления от микроконтроллера сократится. Минимально будет один сигнал –
«сделать шаг».
Таблица подключений платы «170»
к плате «150»:
Плата «150» |
Плата «170» |
X1_EXT.3
(PD2) |
X2.1 (CLOCK) |
X1_EXT.4 (PD3) |
X2.3 (CW_CCW) |
X1_EXT.5 (PD4) |
X2.5 (HALF_FULL) |
X1_EXT.6 (PD5) |
X2.7 (CONTROL) |
X1_EXT.7 (PD6) |
X2.9 (RESET) |
X1_EXT.8 (PD7) |
X2.11 (EN) |
|
|
X4_EXT.4 или X4_EXT.5 (GND) |
X3
(GND) или X4 (GND) |
X4_EXT.2 (VCC=3,3В) или X4_EXT.3 (VCC=5В) |
X3
(+V_LOG) или X4 (+V_LOG) |
Дополнительно
на разъем X1 платы
«170» необходимо подать питание +12В для работы шагового двигателя.
Вид макета:
В примере
используется подключение всех сигналов управления. Сделаем описание выводов
подключения так же как и для примера с LCD индикатором, что позволит в
дальнейшем легко изменять выводы микроконтроллера для тех или иных сигналов.
Программа написана для среды
разработки ATMEL Studio® [1]. Текст
программы приведен ниже.
…
В процессе работы вал двигателя
вращается поочередно в одну и другую сторону.