Методические указания проведения лабораторных
работ по программированию микроконтроллеров на Arduino-совместимой
платформе PIC32 ChipKIT Uno32
Составители: Кафедра АМИ,
НГТУ им Алексеева.
Введение
Язык программирования устройств Ардуино основан на C/C++. Он прост в
освоении, и на данный момент Arduino — это, пожалуй, самый удобный способ
программирования устройств на микроконтроллерах. Микроконтроллерные
платы ChipKIT Uno32 с процессором PIC32 полностью совместимы с
платформой Arduino, при этом являются более производительными, чем
оригинальные платы Arduino.
Язык Arduino можно разделить на три раздела:
Операторы
setup()
loop()
Управляющие операторы
if
if...else
for
switch case
while
do... while
break
continue
return
goto
Синтаксис
; (semicolon)
{} (curly braces)
// (single line comment)
/* */ (multi-line
comment)
Арифметические операторы
= (assignment)
+ (addition)
- (subtraction)
* (multiplication)
/ (division)
% (modulo)
Операторы сравнения
== (equal to)
!= (not equal to)
Данные
Константы
HIGH | LOW
INPUT | OUTPUT
true | false
Целочисленные
константы
Константы с
плавающей запятой
Типы данных
boolean
char
byte
int
unsigned int
word
long
unsigned long
float
double
string - массив
символов
String - объект класса
массив (array)
void
Преобразование типов
данных
char()
byte()
int()
long()
float()
Функции
Цифровой ввод/вывод
pinMode()
digitalWrite()
digitalRead()
Аналоговый ввод/вывод
analogRead()
analogReference()
analogWrite()
Дополнительные фунции
ввода/вывода
tone()
noTone()
shiftOut()
pulseIn()
Работа со временем
millis()
micros()
delay()
delayMicroseconds()
Математические функции
min()
max()
abs()
constrain()
map()
pow()
sq()
< (less than)
> (greater than)
<= (less than or equal to)
>= (greater than or equal
to)
Логические операторы
&& (И)
|| (ИЛИ)
! (Отрицание)
Унарные операторы
++ (increment)
-- (decrement)
+= (compound addition)
-= (compound
subtraction)
*= (compound
multiplication)
/= (compound division)
Область видимости
переменных и
квалификаторы
Область видимости
static
volatile
const
sqrt()
Тригонометрические
функции
sin()
cos()
tan()
Генераторы случайных
значений
randomSeed()
random()
Внешние прерывания
attachInterrupt()
detachInterrupt()
Функции передачи данных
Serial
Библиотеки Arduino
Servo — библиотека управления сервоприводами.
EERPOM — чтение и запись энергонезависимой памяти микроконтроллера.
SPI — библиотека, реализующая передачу данных через интерфейс SPI.
Stepper — библиотека управления шаговыми двигателями.
Интерфейс среды программирования
Лабораторная работа №1
«Работа светодиодного индикатора»
Цель работы: Написать программу, позволяющую прерывисто светиться диоду.
Задача: Собрать электрическую схему диода с платформой.
Ход работы.
1) Устанавливаем светодиод на контакторную платформу
Рисунок 1 – Расположение светодиода на контакторной платформе
2) Подключение проводов к пинам платы PIC32 ChipKIT.
Рисунок 2 – сосединение электрической схемы
Строка состояния
3) Загрузка текста программы
void setup() {
pinMode(1, OUTPUT);
}
void loop() {
digitalWrite(1, HIGH);
delay(2000);
digitalWrite(1, LOW);
delay(2000);
}
Лабораторная работа №2
«Работа светодиодного индикатора светового датчика»
Цель работы: Написать программу, позволяющую прерывисто светиться диоду.
Задача : При срабатывании датчика света от него подается сигнал на
платформу и посредством программы должен загораться диод.
Ход работы.
1)Устанавливаем диод на платформу пинов.
Рисунок 3 – расположение диода на платформе пинов
2) Подключение датчика света к платформе PIC32 ChipKIT (рисунок 3).
Рисунок 4 – Датчик света
Рисунок 5 – Подключение диода и датчика света
3) Написание программы
4) Загрузка программы в память платформы PIC32 ChipKIT
Рисунок 6 – Процесс загрузки программы
Рисунок 7 – Успешная загрузка программы
5) Проверка работоспособности системы
Результатом правильной работы системы будет являться загорание
светодиода при отсутствии попадания света на датчик.
а) б)
Рисунок 8 – Проверка работы системы: (а) – свет попадает на датчик; (б) –
свет не попадает на датчик.
Лабораторная работа №3
«Работа электромотора с двумя светодиодными индикаторами и
светодатчиком»
Цель работы: Написать программу, позволяющую идентифицировать работу
электромотора светодиодами.
Задача: При выключенном электромоторе горит светодиод красного цвета. При
срабатывании электромотора, красный светодиод гаснет и загорается зеленый
светодиод. Электромотор включается при срабатывании датчика света.
Ход работы.
1) Собираем электрическую цепь.
а) Подключаем SIG датчика света к Pin3, VСC датчика света к Pin 5V0,
GND датчика света к «-» на платформе пинов.
б)Устанавливаем зеленый диод на платформу пинов «-» к «-», «+» к «+».
в)Подключаем «-» платформы пинов на GND платформы Arduino. «+»
платформы пинов к Pin 2 Arduino.
г)Устанавливаем красный диод «-» к «-», а «+» подходит к Pin1 платформы
Arduino.
г)Подключаем электромотор. «+» подходит к плюсу зеленого светодиода, а
«-» подходит к общему минусу на платформе пинов.
Рисунок 9 – готовая электрическая цепь
2) Текст программы:
void setup() {
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, INPUT);
}
void loop() {
digitalWrite(1, LOW);
digitalWrite(2, HIGH);
int val=digitalRead(3);
if (val==1) {
digitalWrite(2, LOW);
digitalWrite(1, HIGH);
delay(100);
}
}
3) Загружаем программу и выполняем проверку :
Рисунок 10 – На световой датчик попадает свет и электромотор не работает
При срабатывании датчика загорается зеленый диод и электромотор
начинает вращаться.
Рисунок 11 – Загорается зеленый диод и начинает работу электромотор
Лабораторная работа №4
«Цифровое табло»
Цель работы: Написать программу, позволяющую отобразить цифровой ряд
от 0 до 9.
Задача: Собрать электрическую цепь и написать программу включающую
определенные сегменты цифрового табло, образующие ту или иную цифру
Ход работы.
1) Устанавливаем цифровое табло на платформу пинов.
Рисунок 12 – цифровое табло на платформе
2) Подключаем «-»цифрового табло к выходу GND платы ChipKIT
3) Остальные 8 пинов, отвечающие за соответствующие сегменты, подключаем
к свободным пинам платы (1→Pin5, 2→Pin7,3→Pin1, 4→Pin8, 5→Pin6,
6→Pin4, 7→Pin3, 8→Pin2,)
Рисунок 13 – Электрическая цепь в сборе
4) Текст программы
void setup() {
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
}
void loop() {
digitalWrite(1, LOW);
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, LOW);
delay(1000);
digitalWrite(1, HIGH);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
delay(1000);
digitalWrite(1, LOW);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
delay(1000);
digitalWrite(1, LOW);
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
digitalWrite(8, LOW);
delay(1000);
digitalWrite(1, LOW);
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
delay(1000);
digitalWrite(1, LOW);
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
delay(1000);
digitalWrite(1, LOW);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, LOW);
delay(1000);
digitalWrite(1, LOW);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
delay(1000);
digitalWrite(1, LOW);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
delay(1000);
digitalWrite(1, LOW);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, HIGH);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
delay(1000);
}

Лабораторная работа по программирования pic32 ChipKIT Uno32 в среде Arduino

  • 1.
    Методические указания проведениялабораторных работ по программированию микроконтроллеров на Arduino-совместимой платформе PIC32 ChipKIT Uno32 Составители: Кафедра АМИ, НГТУ им Алексеева.
  • 2.
    Введение Язык программирования устройствАрдуино основан на C/C++. Он прост в освоении, и на данный момент Arduino — это, пожалуй, самый удобный способ программирования устройств на микроконтроллерах. Микроконтроллерные платы ChipKIT Uno32 с процессором PIC32 полностью совместимы с платформой Arduino, при этом являются более производительными, чем оригинальные платы Arduino. Язык Arduino можно разделить на три раздела: Операторы setup() loop() Управляющие операторы if if...else for switch case while do... while break continue return goto Синтаксис ; (semicolon) {} (curly braces) // (single line comment) /* */ (multi-line comment) Арифметические операторы = (assignment) + (addition) - (subtraction) * (multiplication) / (division) % (modulo) Операторы сравнения == (equal to) != (not equal to) Данные Константы HIGH | LOW INPUT | OUTPUT true | false Целочисленные константы Константы с плавающей запятой Типы данных boolean char byte int unsigned int word long unsigned long float double string - массив символов String - объект класса массив (array) void Преобразование типов данных char() byte() int() long() float() Функции Цифровой ввод/вывод pinMode() digitalWrite() digitalRead() Аналоговый ввод/вывод analogRead() analogReference() analogWrite() Дополнительные фунции ввода/вывода tone() noTone() shiftOut() pulseIn() Работа со временем millis() micros() delay() delayMicroseconds() Математические функции min() max() abs() constrain() map() pow() sq()
  • 3.
    < (less than) >(greater than) <= (less than or equal to) >= (greater than or equal to) Логические операторы && (И) || (ИЛИ) ! (Отрицание) Унарные операторы ++ (increment) -- (decrement) += (compound addition) -= (compound subtraction) *= (compound multiplication) /= (compound division) Область видимости переменных и квалификаторы Область видимости static volatile const sqrt() Тригонометрические функции sin() cos() tan() Генераторы случайных значений randomSeed() random() Внешние прерывания attachInterrupt() detachInterrupt() Функции передачи данных Serial Библиотеки Arduino Servo — библиотека управления сервоприводами. EERPOM — чтение и запись энергонезависимой памяти микроконтроллера. SPI — библиотека, реализующая передачу данных через интерфейс SPI. Stepper — библиотека управления шаговыми двигателями.
  • 4.
  • 5.
    Лабораторная работа №1 «Работасветодиодного индикатора» Цель работы: Написать программу, позволяющую прерывисто светиться диоду. Задача: Собрать электрическую схему диода с платформой. Ход работы. 1) Устанавливаем светодиод на контакторную платформу Рисунок 1 – Расположение светодиода на контакторной платформе 2) Подключение проводов к пинам платы PIC32 ChipKIT. Рисунок 2 – сосединение электрической схемы Строка состояния
  • 6.
    3) Загрузка текстапрограммы void setup() { pinMode(1, OUTPUT); } void loop() { digitalWrite(1, HIGH); delay(2000); digitalWrite(1, LOW); delay(2000); }
  • 7.
    Лабораторная работа №2 «Работасветодиодного индикатора светового датчика» Цель работы: Написать программу, позволяющую прерывисто светиться диоду. Задача : При срабатывании датчика света от него подается сигнал на платформу и посредством программы должен загораться диод. Ход работы. 1)Устанавливаем диод на платформу пинов. Рисунок 3 – расположение диода на платформе пинов 2) Подключение датчика света к платформе PIC32 ChipKIT (рисунок 3). Рисунок 4 – Датчик света
  • 8.
    Рисунок 5 –Подключение диода и датчика света 3) Написание программы 4) Загрузка программы в память платформы PIC32 ChipKIT
  • 9.
    Рисунок 6 –Процесс загрузки программы Рисунок 7 – Успешная загрузка программы
  • 10.
    5) Проверка работоспособностисистемы Результатом правильной работы системы будет являться загорание светодиода при отсутствии попадания света на датчик. а) б) Рисунок 8 – Проверка работы системы: (а) – свет попадает на датчик; (б) – свет не попадает на датчик.
  • 11.
    Лабораторная работа №3 «Работаэлектромотора с двумя светодиодными индикаторами и светодатчиком» Цель работы: Написать программу, позволяющую идентифицировать работу электромотора светодиодами. Задача: При выключенном электромоторе горит светодиод красного цвета. При срабатывании электромотора, красный светодиод гаснет и загорается зеленый светодиод. Электромотор включается при срабатывании датчика света. Ход работы. 1) Собираем электрическую цепь. а) Подключаем SIG датчика света к Pin3, VСC датчика света к Pin 5V0, GND датчика света к «-» на платформе пинов. б)Устанавливаем зеленый диод на платформу пинов «-» к «-», «+» к «+». в)Подключаем «-» платформы пинов на GND платформы Arduino. «+» платформы пинов к Pin 2 Arduino. г)Устанавливаем красный диод «-» к «-», а «+» подходит к Pin1 платформы Arduino. г)Подключаем электромотор. «+» подходит к плюсу зеленого светодиода, а «-» подходит к общему минусу на платформе пинов. Рисунок 9 – готовая электрическая цепь 2) Текст программы:
  • 12.
    void setup() { pinMode(1,OUTPUT); pinMode(2, OUTPUT); pinMode(3, INPUT); } void loop() { digitalWrite(1, LOW); digitalWrite(2, HIGH); int val=digitalRead(3); if (val==1) { digitalWrite(2, LOW); digitalWrite(1, HIGH); delay(100); } } 3) Загружаем программу и выполняем проверку :
  • 13.
    Рисунок 10 –На световой датчик попадает свет и электромотор не работает
  • 14.
    При срабатывании датчиказагорается зеленый диод и электромотор начинает вращаться. Рисунок 11 – Загорается зеленый диод и начинает работу электромотор
  • 15.
    Лабораторная работа №4 «Цифровоетабло» Цель работы: Написать программу, позволяющую отобразить цифровой ряд от 0 до 9. Задача: Собрать электрическую цепь и написать программу включающую определенные сегменты цифрового табло, образующие ту или иную цифру Ход работы. 1) Устанавливаем цифровое табло на платформу пинов. Рисунок 12 – цифровое табло на платформе 2) Подключаем «-»цифрового табло к выходу GND платы ChipKIT 3) Остальные 8 пинов, отвечающие за соответствующие сегменты, подключаем к свободным пинам платы (1→Pin5, 2→Pin7,3→Pin1, 4→Pin8, 5→Pin6, 6→Pin4, 7→Pin3, 8→Pin2,)
  • 16.
    Рисунок 13 –Электрическая цепь в сборе 4) Текст программы void setup() { pinMode(1, OUTPUT); pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); } void loop() { digitalWrite(1, LOW);
  • 17.
    digitalWrite(2, LOW); digitalWrite(3, HIGH); digitalWrite(4,HIGH); digitalWrite(5, HIGH); digitalWrite(6, HIGH); digitalWrite(7, HIGH); digitalWrite(8, LOW); delay(1000); digitalWrite(1, HIGH); digitalWrite(2, LOW); digitalWrite(3, LOW); digitalWrite(4, HIGH); digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, LOW); delay(1000); digitalWrite(1, LOW); digitalWrite(2, LOW); digitalWrite(3, LOW); digitalWrite(4, HIGH); digitalWrite(5, HIGH); digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, LOW);
  • 18.
    delay(1000); digitalWrite(1, LOW); digitalWrite(2, LOW); digitalWrite(3,HIGH); digitalWrite(4, LOW); digitalWrite(5, HIGH); digitalWrite(6, LOW); digitalWrite(7, HIGH); digitalWrite(8, LOW); delay(1000); digitalWrite(1, LOW); digitalWrite(2, HIGH); digitalWrite(3, LOW); digitalWrite(4, LOW); digitalWrite(5, HIGH); digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, LOW); delay(1000); digitalWrite(1, LOW); digitalWrite(2, HIGH); digitalWrite(3, LOW); digitalWrite(4, LOW); digitalWrite(5, LOW); digitalWrite(6, LOW);
  • 19.
    digitalWrite(7, LOW); digitalWrite(8, LOW); delay(1000); digitalWrite(1,LOW); digitalWrite(2, LOW); digitalWrite(3, LOW); digitalWrite(4, HIGH); digitalWrite(5, HIGH); digitalWrite(6, HIGH); digitalWrite(7, HIGH); digitalWrite(8, LOW); delay(1000); digitalWrite(1, LOW); digitalWrite(2, LOW); digitalWrite(3, LOW); digitalWrite(4, LOW); digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, LOW); delay(1000); digitalWrite(1, LOW); digitalWrite(2, LOW); digitalWrite(3, LOW); digitalWrite(4, LOW);
  • 20.
    digitalWrite(5, HIGH); digitalWrite(6, LOW); digitalWrite(7,LOW); digitalWrite(8, LOW); delay(1000); digitalWrite(1, LOW); digitalWrite(2, LOW); digitalWrite(3, LOW); digitalWrite(4, LOW); digitalWrite(5, LOW); digitalWrite(6, HIGH); digitalWrite(7, LOW); digitalWrite(8, LOW); delay(1000); }