1 / 18

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

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

susane
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Засоби спрощення програмування AVR • Програматор Arduino • Роз’єми для периферії і контролера • USB контролер • Середовище Arduino.cc • Бібліотеки для створення програм • Симулятор Proteus • Завантаження програми

  3. Arduino Uno • Плата • Підключення зовнішнього ARV328P • Вбудований ARV328P • Блок живлення • Кварцевий генератор • Програма-завантажувач у MCU • Зовнішні роз’єми • GPIO • Timer • АЦП • Компаратор • I2C • UART • Номера виводів Arduino не співпадають з номерами мікроконтролера

  4. Середовище Arduino.CC • На Java • Windows,Linux,Mac • Прості бібліотеки • Керування пристроями • Програми • Скетчі • “Шматки” коду, які вбудовуються в програму • Багато прикладів

  5. Завантаженя програми в симулятор • Файл налаштувань (середовище треба запинити) • /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 • Можна зберігати шляхи до програм • Завантаження програми звичайним чином

  6. Структура програми Arduino.cc • Користувач програмує • setup(); • loop(); • Вже написані функції • init() - підключаються пристрої до виводів плати • serialEventRun()-UART ввід-вивід #include <Arduino.h> int main(void) { init(); #if defined(USBCON) USBDevice.attach(); #endif setup(); for (;;) { loop(); if (serialEventRun) serialEventRun(); } return 0; }

  7. Фукнкції і бібілотеки Arduino.cc • Мова програмування С++ • Вбудовані функції • Digital I/O (GPIO) • Analog I/O (PWM,АЦП) • Високорівневі функції • Генерація сигналів, зсув, очікування • Затримки • Математика • Бібліотеки • LiquidCrystal, LED індикатори, дисплеї • SD – флеш-карта • Servo, Stepper - керування серво- та кроковими моторами • SPI,I2C,OneWire – послідовні протоколи обміну • Документація є в інтернеті

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

  9. Приклади програмування GPIO • Блимання світлодіода • Вимірювання часу перезарядки ємності • Оцінка ємності конденсатора • Оцінка опору резистора • Оцінка струму через фотодіод • Різні сенсори (кнопки, екрани …) • Керування кроковим двигуном • Послідовні і паралельні шини передачі • I2C,SPI…

  10. Блимання світлодіода // 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 }

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

  12. Передача даних по UART void setup() { // initialize the serial port Serial.begin(9600); } void loop() { Serial.println(“a”); } 010000110101011000010010100001 01100001 a - передача 10000110 00001101 /r - передача 10110000 00001010 /n - передача 01010000

  13. GPIO на С • Всі регістри портів мають свої адреси, які позначаються тими ж символами, що і в документації • DDRx=0xf7; // 4 біт ввід, інші вивід • PORTx|=0xf7; // всі на 1, крім 4 біта • PORTx^=0b1;//перемикати 0-й біт void setup() { DDRD|=0x1; } void loop() { PORTD^=0x1; }

  14. Таймери • Функції arduino • Обрахунок часу • millis(), micros() - з часу запуску програми • Затримки • delay() , delayMicroseconds() - мілі-мікросекунд • Генерація цифрових сигналів • tone() , noTone() - запуск, вимкнення генератора • shiftIn(),shiftOut() – побітове читання-запис • Генерація PWM • analogWrite() • Керування сервомотором • Вимірювання тривалості імпульсів • pulseIn()

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

  16. Генерація PWM (форма сигналів) int ledPin = 9; // LED connected to digital pin 9 const 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^2 int i=0; void setup() { pinMode(ledPin, OUTPUT); } void loop() { analogWrite(ledPin, v[i] ); //delay(d[i]*10); delay(10); if(++i>=s) i =0; }

  17. Тривалість імпульсів int pin = 7; unsigned long duration; void setup() { pinMode(pin, INPUT_PULLUP); Serial.begin(9600); } void loop() { duration=pulseIn(pin,LOW); Serial.println(duration); }

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

More Related