18
Програмування мікроконтролерів AVR Лекція 10 Судаков О.О, Радченко С.П. «Сучасна мікропроцесорна техніка»

Програмування мікроконтролерів AVR

  • Upload
    susane

  • View
    79

  • Download
    2

Embed Size (px)

DESCRIPTION

Програмування мікроконтролерів AVR. Лекція 10 Судаков О.О, Радченко С.П. « Сучасна мікропроцесорна техніка ». Засоби спрощення програмування AVR. Програматор Arduino Роз ’ єми для периферії і контролера USB контролер Середовище Arduino.cc Бібл і отеки для створення програм - PowerPoint PPT Presentation

Citation preview

Page 1: Програмування мікроконтролерів AVR

Програмування мікроконтролерів AVR

Лекція 10

Судаков О.О, Радченко С.П. «Сучасна мікропроцесорна техніка»

Page 2: Програмування мікроконтролерів AVR

Засоби спрощення програмування AVR Програматор Arduino

Роз’єми для периферії і контролера USB контролер

Середовище Arduino.cc Бібліотеки для створення програм

Симулятор Proteus Завантаження програми

Page 3: Програмування мікроконтролерів AVR

Arduino Uno

Плата Підключення зовнішнього ARV328P Вбудований ARV328P Блок живлення Кварцевий генератор Програма-завантажувач у MCU

Зовнішні роз’єми GPIO Timer АЦП Компаратор I2C UART

Номера виводів Arduino не співпадають з номерами мікроконтролера

Page 4: Програмування мікроконтролерів AVR

Середовище Arduino.CC

На Java Windows,Linux,Mac

Прості бібліотеки Керування пристроями Програми

Скетчі “Шматки” коду, які вбудовуються в програму Багато прикладів

Page 5: Програмування мікроконтролерів AVR

Завантаженя програми в симулятор Файл налаштувань (середовище треба запинити)

/Users/<USERNAME>/Library/Arduino/preferences.txt (Mac) c:\Documents and Settings\<USERNAME>\Application Data\

Arduino\preferences.txt (Windows XP) c:\Users\<USERNAME>\AppData\Roaming\Arduino\

preferences.txt (Windows Vista) ~/.arduino/preferences.txt (Linux)

Зміна каталогу компіляції build.path=/home/saa Можна зберігати шляхи до програм

Завантаження програми звичайним чином

Page 6: Програмування мікроконтролерів AVR

Структура програми Arduino.cc#include <Arduino.h>

int main(void){ init();

#if defined(USBCON) USBDevice.attach();#endif setup();

for (;;) { loop(); if (serialEventRun)

serialEventRun(); }

return 0;}

Користувач програмує•setup(); •loop();

Вже написані функції•init() - підключаються пристрої до виводів плати•serialEventRun()-UART ввід-вивід

Page 7: Програмування мікроконтролерів AVR

Фукнкції і бібілотеки Arduino.cc Мова програмування С++ Вбудовані функції

Digital I/O (GPIO) Analog I/O (PWM,АЦП) Високорівневі функції

Генерація сигналів, зсув, очікування Затримки Математика

Бібліотеки LiquidCrystal, LED індикатори, дисплеї SD – флеш-карта Servo, Stepper - керування серво- та кроковими моторами SPI,I2C,OneWire – послідовні протоколи обміну

Документація є в інтернеті

Page 8: Програмування мікроконтролерів AVR

Програмування GPIO (портів в/в) 3 порти GPIO по 8 біт

більшість виводів AVR можна підключити до GPIO Функції Arduino

pinMode(pin, mode) pin – номер виводу Arduino (не контролера) mode

INPUT - ввід OUTPUT-вивід INPUT_PULLUP ввід і підключення підтягуючого резистора до

живлення int digitalRead(pin)

Повертає HIGH,LOW digitalWrite(pin,val)

val= HIGH,LOW

Page 9: Програмування мікроконтролерів AVR

Приклади програмування GPIO Блимання світлодіода Вимірювання часу перезарядки ємності

Оцінка ємності конденсатора Оцінка опору резистора Оцінка струму через фотодіод Різні сенсори (кнопки, екрани …)

Керування кроковим двигуном Послідовні і паралельні шини передачі

I2C,SPI…

Page 10: Програмування мікроконтролерів AVR

Блимання світлодіода

// Pin 13 has an LED connected on most Arduino boards.int led = 13;

// the setup routine runs once when you press reset:void setup() { // initialize the digital pin as an output. pinMode(led, OUTPUT); }

// the loop routine runs over and over again forever:void loop() { digitalWrite(led, HIGH); // turn the LED on (HIGH is the

voltage level) delay(1000); // wait for a second digitalWrite(led, LOW); // turn the LED off by making the

voltage LOW delay(1000); // wait for a second}

Page 11: Програмування мікроконтролерів AVR

Керування кроковим двигуном#include <Stepper.h>const int stepsPerRevolution = 200; // change this// initialize the stepper library on pins 8 through 11:Stepper myStepper(stepsPerRevolution, 8,10,9,11);

void setup() { // set the speed at 60 rpm: myStepper.setSpeed(60);}

void loop() { // step one revolution in one direction: myStepper.step(stepsPerRevolution); delay(500); // step one revolution in the other direction: myStepper.step(-stepsPerRevolution); delay(500); }

Page 12: Програмування мікроконтролерів AVR

Передача даних по UART

void setup() {

// initialize the serial port

Serial.begin(9600);

}

void loop() {

Serial.println(“a”);

}

010000110101011000010010100001

01100001 a - передача 1000011000001101 /r - передача 10110000 00001010 /n - передача 01010000

Page 13: Програмування мікроконтролерів AVR

GPIO на С Всі регістри портів мають свої адреси, які позначаються тими ж

символами, що і в документації DDRx=0xf7; // 4 біт ввід, інші вивід PORTx|=0xf7; // всі на 1, крім 4 біта PORTx^=0b1; //перемикати 0-й біт

void setup() {DDRD|=0x1;

}

void loop() {PORTD^=0x1;

}

Page 14: Програмування мікроконтролерів AVR

Таймери Функції arduino

Обрахунок часу millis(), micros() - з часу запуску програми

Затримки delay() , delayMicroseconds() - мілі-мікросекунд

Генерація цифрових сигналів tone() , noTone() - запуск, вимкнення генератора shiftIn(),shiftOut() – побітове читання-запис

Генерація PWM analogWrite() Керування сервомотором

Вимірювання тривалості імпульсів pulseIn()

Page 15: Програмування мікроконтролерів AVR

Керування сервомотором#include <Servo.h>

Servo myservo;

int pos = 0;

void setup()

{

myservo.attach(9);

}

void loop()

{

for(pos = 0; pos < 180; pos += 1) {

myservo.write(pos);

delay(15);

}

}

Page 16: Програмування мікроконтролерів AVR

Генерація PWM (форма сигналів)int ledPin = 9; // LED connected to digital pin 9const int s=16;//unsigned char v[s]={255,255/4*3,255/2,255/4,0, 255/4, 255/2, 255/4*3};//unsigned char d[s]={2,1,1, 2,2,1,1,2};unsigned char v[s]={255,245,217,176,127,79,37,10,0,10,37,79,127,176,217,245};//unsigned char d[s]={1,1,1, 1,1,1,1,1};//cos^2int i=0;void setup(){ pinMode(ledPin, OUTPUT); }

void loop(){ analogWrite(ledPin, v[i] ); //delay(d[i]*10); delay(10); if(++i>=s) i =0;}

Page 17: Програмування мікроконтролерів AVR

Тривалість імпульсівint pin = 7;unsigned long duration;

void setup() { pinMode(pin, INPUT_PULLUP); Serial.begin(9600); }

void loop() { duration=pulseIn(pin,LOW); Serial.println(duration);}

Page 18: Програмування мікроконтролерів AVR

АЦП – керування джойстиком int pinx = A0; // select the input pin for the potentiometer int piny = A1;

void setup() { // declare the ledPin as an OUTPUT: Serial.begin(9600); }

void loop() { // read the value from the sensor: Serial.print(analogRead(pinx)); Serial.print("\t:\t"); Serial.print(analogRead(piny)); Serial.println(""); }