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

Preview:

DESCRIPTION

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

Citation preview

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

Лекція 10

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

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

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

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

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

Arduino Uno

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

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

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

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

На Java Windows,Linux,Mac

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

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

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

/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 Можна зберігати шляхи до програм

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

Структура програми 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 ввід-вивід

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

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

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

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

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

Програмування 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

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

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

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

I2C,SPI…

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

// 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}

Керування кроковим двигуном#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); }

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

void setup() {

// initialize the serial port

Serial.begin(9600);

}

void loop() {

Serial.println(“a”);

}

010000110101011000010010100001

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

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

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

void setup() {DDRD|=0x1;

}

void loop() {PORTD^=0x1;

}

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

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

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

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

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

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

Керування сервомотором#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);

}

}

Генерація 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;}

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

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

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

АЦП – керування джойстиком 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(""); }

Recommended