Засыпкин С.В.

Лаборатория электроники и программирования

Электронный журнал с приложениями

№ 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]. Текст программы приведен ниже.

В процессе работы вал двигателя вращается поочередно в одну и другую сторону.