1 / 29

Arduino programoz ási alapok

http://arduino.cc nyílt forráskódú (hw+sw) prototípus platform. Arduino programoz ási alapok. joe@mogi.bme.hu. A készítők célja: „ It's intended for artists, designers, hobbyists and anyone interested in creating interactive objects or environments. ” Ezek közül melyikek vagyunk ?.

analu
Download Presentation

Arduino programoz ási alapok

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. http://arduino.cc nyílt forráskódú (hw+sw) prototípus platform. Arduino programozási alapok joe@mogi.bme.hu A készítők célja: „It's intended for artists, designers, hobbyists and anyone interested in creating interactive objects or environments.” Ezek közül melyikek vagyunk ? „Bárhogy is rakom össze, harckocsi lesz belőle”

  2. A fejlesztő részei • Tápellátás • Programozható eszköz (uC), kivezetett csatlakozókkal a bővítőkhöz • Programozó („égető”), számítógéphez (pl. PC) kötve • Futtatható programot készítő rendszer (compiler + GUI) A tápellátás feladata: az alappanel és az esetleg rákapcsolt plusz panelek energiaellátása. PC-vel összekapcsolva USB-ről (5V, 500 mA), önálló működés esetén külső tápegységről (7-16V DC), esetleg telepről képes üzemelni. Szükséges kimeneti feszültségek: 5V, 3.3V. Külső táp + 5V-os lineáris stabilizátor. Védődióda, elkó. Átkapcsoló és 3.3V-os stabilizátor. Komparátor, FET.

  3. A mikrokontroller (μC) felépítése: ATmega328P, UNO • CPU: processzor (ALU+regiszterek+vezérlő áramkörök), csatlakozásai nincsenek közvetlenül kivezetve. A PC processzora (i7) hasonló, de más hardvert nem tartalmaz. Gyakran Harvard architektúrájú RISC: AVR. • (flash)ROM: a processzort működtető gépi kódú programot tartalmazza, az eszköz bekapcsolásakor azonnal indul. Arduino-nál mindig tartalmazza a „bootloader”-t, amely megfelelő feltételek esetén (amit a programozó teremt meg) képes a flashROM-ba kódot írni és átadni neki a vezérlést. 32 kbyte méretű. • Operatív memória - regiszterek (RAM): statikus RAM, írható és olvasható. Általában ide vannak ágyazva az I/O portok is. 2 kbyte méretű. Veremtárat is mindig tartalmaz, címezhető vagy fix helyen. • I/O portok (GPIO): tetszőlegesen konfigurálható ki/bemenetre. A legtöbb általános célú lábon van i/o port. Amennyiben 1-et írunk a hozzá tartozó RAM megfelelő bitjébe, a kimenetre konfigurált lábon logikai magas szint lesz 5V, ha 0-t, alacsony. Kimeneti áram max 20 mA. A bemenetre konfigurált lábhoz a tokon belül felhúzó ellenállás is bekapcsolható, ezzel csökkentve a külső elemek számát. Pl. nyomógomb a föld és a láb közé. • oszcillátor, kvarckristály/kerámia rezonátor csatlakoztatására, belső r/c oszcillátor órajelgenerálás. 16MHz-es kerámia rezonátor • Interrupt vezérlő: valamely láb vagy belső jellemző megváltozása megszakítást generál, és egy kezelő függvény lefut. • A/D átalakító: a bemeneti lábak nem csak digitálisak lehetnek, hanem analógok is. Általában multiplexelve kerül a bemenetekről a jel az átalakítóra. 6 csatorna, 1 átalakító, 10 bites felbontás, beépített hőmérő. • Analóg komparátor: bemeneti lábak feszültségkülönbsége (A>B) digitális formában rendelkezésre áll, megszakitást kérhet. • Időzitő/Számláló: Külső/belső órajelet képes számolni, ha túlcsordul, megszakítást generál. 2 db 8 bites, 1 db 16 bites timer előosztóval. • PWM kimenet: impulzusszélesség modulált kimenet. 6 PWM csatorna, kitöltési tényező 0..255. • soros ki/bemenet pl RS-232, RX és TX lábak. A soros portot az égető használja, 1k-s ellenállásokon keresztül. • i2c: Philips által kifejlesztett kétvezetékes (SCL,SDA) busz. ATMEL nem vette meg, TWI-nek (kétvezetékes interface) hívják. AD4-AD5 lábak az SDA és SCL. Alkalmazás: LM75AD hőmérő, giroszkóp. • SPI: soros periféria interface. I2c-nél több lábat használ, nagyobb órajellel. Ethernet, SD kártya.

  4. Blokkdiagram

  5. Multifunkciós lábak: szoftverből döntjük el, melyik funkció jelenjen meg. ATmega328 lábai Arduino-ban majdnem minden láb fix funkciójú Kis túlzás: pic32, az RPxxx elnevezésű lábak programozható funkciókkal rendelkeznek

  6. Program beégetési módok, a programozó egység • A µC kétféle módon programozható: • Különálló égetővel: az égető hardvert a µC-hez csatlakoztatva. ICSP Header kiépítve. • Bootloaderrel, ekkor a bootloader program végzi el a beégetést.Kapható bootloaderes µC is. • Ha reset után bizonyos ideig nincs égetési parancs, az általa beégetett programra ugrik. USB a PC fele ICSP header az ATmega328-hoz USB-RS232 átalakítóként használt ATmega16u2 RS-232 RX-TX az ATmega328 fele

  7. A fejlesztő környezet: IDE (GUI + GCC) Az IDE környezet JAVA-ban íródott, a portolás megkönnyítésére. A kész, felinstallálható IDE-t letölthetjük Windows-ra, MAC-OS-re és Linux-ra. Természetesen a forrás is letölthető. Windows-nál installálni sem szükséges: kicsomagolva a Zip fájlt, a program indítható. A kicsomagolás után lesz „Drivers” könyvtár is, a hardver csatlakoztatásához szükséges INF fájlt tartalmazza. Az inf fájl egy USB-s soros portot készít a fejlesztőnek, amit (a felhasznált Ardunio típussal együtt) kézzel kell az IDE menüjében beállítanunk. Fordítás (csak teszt, szintaktikai ellenőrzés) Fordítás + feltöltés új-megnyit-ment. Mentés nélkül is tud fordítani. Soros monitor. Ha már kész a feltöltés, a soros port a PC-vel való kommunikációra használható. Feltöltéskor a terminál ablak bezáródik. Baud-ra ügyelni

  8. A GCC fordító A GCC fordító a GNU projekten belül, a GNU operációs rendszerhez készült. A GCC fordító tervezésénél és a kódolásánál a fő szempont egy jó minőségű, ingyenes eszköz készítése volt. Hasonló cél a különféle számítógép architektúrák támogatása. Az avr-gcc egy cross-compiler: PC(MAC)-on futva állít elő avr-en futó kódot. A compiler fordítás közbeni üzeneteit akkor fogjuk látni, ha a File/Preferences menüben bekapcsoltuk a „Show verbose output during compilation” kijelölőnégyzetet. Mindent bekapcsoltunk Fordítás eredménye: .HEX fájl keletkezett. Ezt lehet betölteni a µC flash-romjába (program storage space). Kaptunk memória foglaltsági statisztikákat is: mennyi ROM, és RAM (dynamic memory) szükséges a programnak. Mint minden Unix jellegű fordítási folyamatban, itt is assemblerre fordítunk először, majd az avr-as segítségével (amely a binutils része) lesz futtatható kódunk. avr-gcc –v kimenete: Using built-in specs. Target: avr Thread model: single gcc version 4.3.2 (WinAVR 20081205)

  9. Sketch (vázlat) A sketch az általunk megírandó programot jelenti. Nem a teljes lefordítandó anyagot látjuk, hanem csak egy részét. A régebbi verziók üres oldallal indultak, az 1.5.5-r2 béta változat megír nekünk két függvény fejlécet. setup()függvény: reset után egyszer lefut. Ide kell írni az inicializáló részt, például a GPIO-k kimenetre programozását, a soros port inicializálását. Az A/D átalakító vagy a PWM inicializálása nem szükséges. loop()függvény: folyamatosan, végtelen ciklusban fut. Ide írjuk a működtető programot. Amikor a végéhez ér, azonnal újraindul. A Sketch programozási nyelve C++. (Ezen az előző dia alapján nem lepődünk meg) Az elmentett sketch .ino kiterjesztést kap, ez egy Unix-os soremeléseket tartalmazó szövegfájl. Jegyzettömbbel egy sornak látszik, wordpad-dal kinyitható.

  10. A főprogram: hardware/arduino/cores/arduino/main.cpp Cpp fájlt nem tud betölteni, csak ino-t. Az init() függvény a rendszer inicializáló. A setup() függvény a felhasználó által megírandó inicializáló. Ha nincs meg, hiba. A loop() függvény végtelen ciklusban fut. A serialEventRun függvénypointer, ha nem definiáltuk, NULL. #include <Arduino.h> int main(void) { init(); #if defined(USBCON) USBDevice.attach(); #endif setup(); for (;;) { loop(); if (serialEventRun) serialEventRun(); } return 0; } „Az intelligens programkészítők vidáman elolvassák a 400 oldalas leírást egyetlen programsor leírása előtt. Az Arduino programozók akkor olvasnak leírást, ha már felszállt a füst.” – RTFM mai változatban.

  11. Gyakran használt függvények és osztályok void pinMode(lábszám,üzemmód): a digitális lábat állítja adott üzemmódra. A loop()-ban is használható. Üzemmódok: INPUT, OUTPUT, INPUT_PULLUP. Az analóg input lábak (A0,A1 stb) is használhatóak. void digitalWrite(lábszám,adat): a digitális lábra kimenetet kapcsol. Az adat HIGH vagy LOW lehet, ezek csak definiált konstansok (HIGH=1, LOW=0). int digitalRead(lábszám): beolvas egy digitális bemenet. Az eredmény 0 vagy 1 lesz. int analogRead(lábnév): beolvas egy analóg bemenetet. 10 bites átalakító, alapesetben 5V referencia. 5V=1023 void analogWrite(lábszám, érték): pwm képes kimenet (3,5,6,9,10,11) kitöltési tényezőjének állítása 0..255 intervallumban. void delay(ezredmásodperc): adott idejű várakozás. Serial: soros port osztály. Inicializásása a Serial.begin(baudrate) függvénnyel történik. Ezt a számot kell a serialMonitor-ban beállitani, különben értelmetlen jelsorozatot kapunk. int Serial.available(): hány karakter érkezett a PC felől. Ha 0, nem érkezett karakter. char Serial.read(): egy karakter olvasása a serial bufferből void Serial.print(adat): kiírás a portra. Az adat lehet int, char, double és string is. Void Serial.println(adat): mint print(), csak egy soremeléssel lezárva a kiírást.

  12. Sebességteszt A következő program futását nézzük meg: void setup() { pinMode(3,OUTPUT); } void loop() { digitalWrite(3,HIGH); digitalWrite(3,LOW); }

  13. PWM teszt void setup() { pinMode(3,OUTPUT); pinMode(5,OUTPUT); } void loop() { analogWrite(3,64); analogWrite(5,128); delay(10000); }

  14. Delay teszt void setup() { pinMode(3,OUTPUT); } void loop() { digitalWrite(3,HIGH); delay(2); digitalWrite(3,LOW); delay(2); }

  15. Az i2c kommunikáció Az i2c-t a Philips (ma NXP) fejlesztette ki, tőlük kell licenszelni. Az ATMEL nem fizetett, emiatt a kétdrótos buszt TwoWireInterface-nek (TWI) nevezi. Természetesen a felhúzó ellenállások és a buszprotokoll ugyanaz, mint az I2c-nél. A library-t Wire-nek nevezzük. 2006 óta nem kell fizetni az nxp-nek. #include <Wire.h> // library betöltése (c++) Wire.begin(); // inicializálás, analóg lábak lekapcsolása, felhúzó ellenállások bekapcsolása Wire.requestFrom(i2c cím, byteok száma); // adott számú byte átvitelének kérése slave eszköztől Wire.available() true, ha van adat az i2c pufferben Wire.read() 1 byte olvasása Wire.beginTransmission(i2c cím) átvitel kezdete, start bit Wire.write(adat) írás az i2c slave-nek Wire.endTransmission() átvitel vége, ack bit Wire.onReceive(függvény) beérkezett adatnál meghívja a függvényünket. A függvény megkapja a pufferben lévő bájtok számát. Wire.onRequest(függvény) szolgaként programozott eszköznél a függvényünk fut le, ha adatot kér tőlünk a master eszköz.

  16. Interrupt (mert azt senki sem tudja) informatika-I ea. Ha bekövetkezik egy megszakítási szituáció (int.0: 2-es láb, int.1: 3-as), egy függvényt írhatunk, amely az eseményre azonnalreagál. A hozzárendelés a következő: attachInterrupt(megszakítás, kezelőfüggvényünk, esemény); Megszakítás: 0 vagy 1 Kezelőfüggvényünk: általunk megírt függvény neve Esemény: LOW – alacsony láb, CHANGE – láb állapot változás, RISING: felfutó és, FALLING: lefutó él int c; void setup() { c=0; pinMode(2,INPUT_PULLUP); pinMode(4,INPUT_PULLUP); attachInterrupt(0,megszakitas,FALLING); Serial.begin(9600); } void loop() { Serial.print("c="); Serial.println(c); delay(1000); } void megszakitas() { if (digitalRead(4)==1) c++; else c--; } Példa: encoder. Akkor fut le a megszakitas(), ha a 2-es lábat földrehúzzuk Itt a c-t csak kiíratjuk. Ha a 4-es bemenet magas, előre, egyébként vissza.

  17. LabView kezelői felület Az Arduino-ba egy NI által készített firmware-t töltve használható LabView komponensként is. Ezt a diát és a következőt is Szakály Norbi kolléga készítette. 1. VI Package Manager (VIPM) letöltése és telepítése 2 lefordítani és feltölteni a Arduino Firmware-t, LabVIEW \vi.lib\LabVIEW Interface for Arduino\Firmware\LIFA_Base\LabVIEWInterface.ino. 3. LabView indul

  18. LabView példaprogram

  19. Előnyök és hátrányok • Előnyök: • Olcsó • Kezdők is könnyen boldogulnak • Nagyszámú kiegészítő (shield) kapható • Jól dokumentált, komplett mintaprogramok (examples) a fejlesztőben • Nyílt forráskód • Hátrányok: • Drága • Debug lehetőség nincs • Nem tartalmaz semmilyen perifériát egy db LED-en kívül • Nem használható ki a teljes uC • A shieldek legtöbbször csak egy, max kettő funkciósak. • Legtöbbször fórumokon van csak a problémára megoldás • Ellustul a programozó LilyPad

  20. Arduino a tanszéken K. Brúnó szakdolgozata Mechatronika szakosztály szakkör Gerincőr: 30 db Arduino UNO i2c beszerezve Mechatronika gólyatábor - augusztus 15. (D506) shield még nincs. 20 db Arduino kölcsön a szakosztálynak. Szakkör a D506-ban. 2014 január: Mogi shield Mechatronikai Szimulációk c. MSC tantárgy 2 alkalom előadás, 1 alkalom gyakorlat Bármelyik számítógépterem Arduino laborrá alakítható

  21. MOGI Shield Minden gyári shield célspecifikus és 10-50$. Czmerk András kolléga ötlete: készítsünk egy shield-et, amin egy izzólámpa, egy hőmérő és egy ventilátor található. Hw konfiguráció: sda,scl(a4,a5): lm75a, 0x48, internal pull-up out 11: lamp output (fet, pwm) out 10: cooler fan output (fet,pwm) pwm 3,5,6: pwm output to rgb led a0,a1,a2: 10k pots 2,4,7: buttons in internal pull-up a3: phototransistor in

  22. Gyártás

  23. Gyártás

  24. Gyártás

  25. Library készítés A programból osztályt készítünk Az osztályt .h és .cpp fileba rakjuk Plusz #include-ok: Ardunio.h, és az általunk használt library-k Megírjuk a keywords.txt-t Betesszük a „libraries” könyvtárba, ugyanolyan nevű könyvtárba, mint a cpp és a h

  26. Gyári library-k EEPROM: a cpu-ba épített nem felejtő eeprom kezelő függvényei. UNO: 1024 byte. read(int cím), write(int cím, byte adat). Ethernet: az ethernet shield kezelő felülete. Ezzel lehet készíteni távoli elérésű gpio-t például. Connect(),write(), read(). Mintaprogram: WebServer GSM: mobiltelefon shield-hez. VoiceClass, GSM_SMS osztály, GPRS osztály, GSMclient, GSM szerver osztály. Connect(), read(), write(). LiquidCrystal: LCD. Szinte az összes olcsó LCD modulban hd4470 kompatibilis vezérlő van. 4 vagy 8 bites interface választható. Begin(), write(), blink(), setCursor(), clear(). SD: memóriakártya elérés, fat16 vagy fat32 üzemmódban. Több file is kinyitható. File osztállyal együtt. open(), print(), read(), close(). Servo: szervómotor vezérlése. A write()-ben fokot adunk meg, a motor oda áll be. SPI: az spi protokoll megvalósítása. Transfer() függvény. Az SD is ezt használja. SoftwareSerial: Az UNO-ban az egy uart-ot az égető használja. Bármelyik két lábon tudunk szoftveres soros portot készíteni. Készült egy NewSoftSerial library is. Stepper: léptetőmotor vezérlésére. setSpeed(int rpm), step(int lépés). TFT: színes kijelző vezérlése. Adafruit gyártmányú vezérlőhöz. SPI-t használ. Image(), line(), circle(). Wire: i2c. Már volt róla szó. FFT: hangmintákra. nem része a fejlesztőnek, de letölthető. Frekvencia-analízis

  27. Az UNO32 (digilent, chipkit) Az Arduino felület népszerűsége és nyílt forráskódja egyéb gyártókat is megihletett. Az UNO32-ben Microchip Pic32mx található, 80 Mhz órajellel. Lábkiosztása szinte kompatibilis, szoftvere egy régebbi Arduino-ból lett Kialakítva. Természetesen a gcc itt nem avr-t fordít, hanem pic32-t xc32 néven. MPLAB is használható a fejlesztésre 3.3V a gpio-kon Az analóg inputok Védődiódákkal ellátva Icsp csatlakozó Pickit3-hoz

  28. A következő program futását nézzük meg: void setup() { pinMode(3,OUTPUT); } void loop() { digitalWrite(3,HIGH); digitalWrite(3,LOW); } UNO-32: 442 kHz, de csak 3.3V-os jel

  29. 1.1usec ! Mplab: int main(void) { // rd0 : arduino pin 3 TRISDbits.TRISD0=0; // output while (1) { LATDbits.LATD0=1; LATDbits.LATD0=0; } }

More Related