MSP430 programozás Energia környezetben. Hétszegmenses LED kijelzok



Hasonló dokumentumok
MSP430 programozás Energia környezetben. LED kijelzok második rész

MSP430 programozás Energia környezetben. LED kijelzok második rész

Bevezetés a mikrovezérlők programozásába: MAX6958: Hétszegmenses LED kijelző vezérlő

MSP430 programozás Energia környezetben. Analóg jelek mérése

Bevezetés a mikrovezérlők programozásába: Hétszegmenses LED kijelzők

MSP430 programozás Energia környezetben. LED mátrix vezérlése MAX7219 IC-vel

Bevezetés az elektronikába

Vegyes témakörök. A KAT120B kijelző vezérlése Arduinoval

MSP430 programozás Energia környezetben. Alfanumerikus LCD kijelzok

Bevezetés az elektronikába

11. KÓDÁTALAKÍTÓ TERVEZÉSE HÉTSZEGMENSES KIJELZŐHÖZ A FEJLESZTŐLAPON

Bevezetés a mikrovezérlők programozásába: LCD kijelzők

MSP430 programozás Energia környezetben. Nokia 5110 grafikus kijelzo vezérlése

MSP430 programozás Energia környezetben. Szervó motorok vezérlése

loop() Referencia:

MSP430 programozás Energia környezetben. Az első lépések

MSP430 programozás Energia környezetben. Az I/O portok kezelése

Újrakonfigurálható eszközök

MSP430 programozás Energia környezetben. Nem élhetek muzsikaszó nélkül

Mérési útmutató. A/D konverteres mérés. // Első lépésként tanulmányozzuk a digitális jelfeldolgozás előnyeit és határait.

2008. október 9. Verzió

MSP430 programozás Energia környezetben. Kitekintés, további lehetőségek

Bevezetés a mikrovezérlők programozásába: Ismerkedés az Arduino fejlesztői környezettel

Hobbi Elektronika. A digitális elektronika alapjai: Sorrendi logikai áramkörök 3. rész

Hobbi Elektronika. A digitális elektronika alapjai: Sorrendi logikai áramkörök 4. rész

Bevezetés a mikrovezérlők programozásába: Programciklusok szervezése, analóg I/O

Bevezetés a mikrovezérlők programozásába: I/O portok kezelése, számrendszerek, bitműveletek

Programozási segédlet DS89C450 Fejlesztőpanelhez

Bevezetés a mikrovezérlők programozásába: Fényérzékelés, fénymérés

Vegyes témakörök. 1. Soros vezérlésű LCD számkijelző. Hobbielektronika csoport 2018/2019. Debreceni Megtestesülés Plébánia

LOGSYS LOGSYS SPARTAN-3E FPGA KÁRTYA FELHASZNÁLÓI ÚTMUTATÓ szeptember 19. Verzió

MSP430 programozás Energia környezetben

Hobbi Elektronika. 1. Témakörök, célkitűzés, hozzávalók

The modular mitmót system. A DPY-LED perifériakártya

SIOUX-RELÉ. Sioux relé modul telepítési leírás Szerkesztés MACIE0191

DIGITÁLIS TECHNIKA 7. Előadó: Dr. Oniga István

The modular mitmót system. DPY kijelző kártya C API

Bevezetés az elektronikába

Dr. Oniga István DIGITÁLIS TECHNIKA 4

ARM Cortex-M0+ mikrovezérlő programozása KEIL MDK 5 környezetben. 8. Az SPI kommunikációs csatorna

Digitális technika (VIMIAA02) Laboratórium 4

Bevezetés a mikrovezérlők programozásába: Léptetőmotorok vezérlése

Többfunkciós hobbirobot építése és vezérlése Arduino UNO mikrovezérlő kártya segítségével

Hobbi Elektronika. Bevezetés az elektronikába: Fényemittáló dióda (LED)

Megjegyzés: A leírás abszolút kezdők számára készült elnézést azoktól, akik ezen a szinten már túlvannak!

LOGSYS LOGSYS ECP2 FPGA KÁRTYA FELHASZNÁLÓI ÚTMUTATÓ szeptember 18. Verzió

Bevezetés az elektronikába

LOGIKAI TERVEZÉS HARDVERLEÍRÓ NYELVEN. Dr. Oniga István

Digitális technika (VIMIAA02) Laboratórium 4

Dr. Oniga István DIGITÁLIS TECHNIKA 9

Bevezetés a mikrovezérlők programozásába: A PM6025 (7 és 16 szegmenses) LCD kijelző vezérlése

Bevezetés a mikrovezérlők programozásába: WS2812 RGB LED-ek vezérlése

Vegyes témakörök. 5. Gagyiszkóp házilag hangfrekvenciás jelek vizsgálata. Hobbielektronika csoport 2018/2019. Debreceni Megtestesülés Plébánia

Az MSP430 mikrovezérlők digitális I/O programozása

Újrakonfigurálható eszközök

Arduino bevezető Szenzorhálózatok és alkalmazásaik

3. Hőmérők elkészítése

Dr. Oniga István DIGITÁLIS TECHNIKA 9

Bevezetés az elektronikába

UH-zongora - zenélés mikrokontrollerrel

Hobbi Elektronika. A digitális elektronika alapjai: Sorrendi logikai áramkörök 1. rész

Bevezetés a mikrovezérlők programozásába: DC motorok vezérlése

MSP430 programozás Energia környezetben. Digitális szenzorok

Mintavételes szabályozás mikrovezérlő segítségével

DIGITÁLIS TECHNIKA I

Dr. Oniga István DIGITÁLIS TECHNIKA 8

Univerzális szabályozható LED tápegység DC JOLLY MD PUSH V out I out Kód mA Un / f 500mA Umük mA 700mA mA η max.

Bevezetés a Modbus kommunikációba

Mikrovezérlők Alkalmazástechnikája

Megszólal a Kütyü. Arduino bevezető hangszóró vezérlése 1 / 5 oldal

A vezérlő alkalmas 1x16, 2x16, 2x20, 4x20 karakteres kijelzők meghajtására. Az 1. ábrán látható a modul bekötése.

Billentyűzet. Csatlakozók: A billentyűzetet kétféle csatlakozóval szerelhetik. 5 pólusú DIN (AT vagy XT billentyűzet csatlakozó),

Programozás és Digitális technika I. Pógár István eng.unideb.hu/pogari

Bevezetés az Arduino mikrovezérlők programozásába

Bevezetés a mikrovezérlők programozásába: Az Arduino, mint logikai analizátor

MSP430 programozás Energia környezetben. Digitális szenzorok I2C kommunikációval

I 2 C, SPI, I 2 S, USB, PWM, UART, IrDA

A mikroszámítógép felépítése.

Antenna-forgató interface Yaesu G-5400 és G-5600 forgatókhoz

MetaSat Programozó Használati útmutató

Serial 2: 1200/2400 bps sebességû rádiós modem vagy

3. A DIGILENT BASYS 2 FEJLESZTŐLAP LEÍRÁSA

Léptetőmotorok. Előnyök: Hátrányok:

Előadó: Nagy István (A65)

Laborgyakorlat Logikai áramkörök számítógéppel segített tervezése (CAD)

Földzaj. Földzaj problémák a nagy meghajtó képességű IC-knél

DIGITÁLIS TECHNIKA feladatgyűjtemény

10. Digitális tároló áramkörök

Nagy Gergely április 4.

Digitális rendszerek. Digitális logika szintje

I 2 C, RS-232 és USB. Informatikai eszközök fizikai alapjai. Oláh Tamás István

Digitális technika (VIMIAA01) Laboratórium 4

16F628A megszakítás kezelése

Tarján Péter Nyíregyházi Egyetem. Szenzorok és ötletek Arduinós mérésekhez

7.hét: A sorrendi hálózatok elemei II.

Digitális technika (VIMIAA02) Laboratórium 3

LPT illesztőkártya. Beüzemelési útmutató

boolean motoros_szelep_vegallas_el = true; boolean serial_adatok_kikuldese = true; // ************ Hőmérséklet érzékelők Dallasos!!!!

Digitális technika (VIMIAA02) Laboratórium 1

Digitális technika (VIMIAA02) Laboratórium 3

Átírás:

MSP430 programozás Energia környezetben Hétszegmenses LED kijelzok 1

A hétszegmenses kijelző A hétszegmenses kijelzők 7 db LED-et vagy LED csoportot tartalmaznak, olyan elrendezésben, hogy a 0 9 arab számjegyeket ki lehessen jelezni. A hét szegmenshez nyolcadikként többnyire egy tizedespont is járul. Kivetel: Közös anódú vagy közös katódú 2

Hogyan működik a kijelzés? A 7 db szegmens mindegyike lehet ki- vagy bekapcsolt állapotban. A lehetséges állapotok száma: 2 7 = 128 Ezek közül nem mindegyik értelmes kombináció. 3

Lab12 LED_7segment Egyszerű mintaprogram LED kijelzővel LED_7segment_Multiplexer LED kijelző háromvezetékes soros meghajtással és multiplex megjelenítéssel LED_7segment_2digit kétszámjegyű LED kijelző, soros meghajtással és multiplex megjelenítéssel LED_7segment_thermometer hőmérő alkalmazás a kétszámjegyű LED kijelző felhasználásával 4

Hozzávalók 1 db hétszegmenses LED kijelző 8 db átkötő vezeték (F + M) 7 db 220R ellenállás 1 db dugaszolós próbapanel 1 db Launchpad kártya 5

Egyszerűsített kapcsolás A szegmenseket egy-egy I/O kimenet felhasználásával vezérlejük. A szegmens kivezetés a katód, tehát lehúzással (LOW állapot) lehet kigyújtani. A tizedespont kijelzőt (DP) most nem használjuk. A közös anódnál alkalmazott áramkorlátozás azért nem korrekt, mert a szegmensek közötti árammegosztás esetleges. Előfordulhat, hogy valamelyik LED ki sem gyullad (nem korrekt megoldás ) HD1131R 6

A korrekt kapcsolás A szegmenseket egyenként egy-egy áramkorlátozó ellenálláson keresztül húzzuk földre (LOW állapot). Az árammegosztás így megfelelő. A megoldás hátránya, hogy így 7 db ellenállás kell. Az ellenállások értéke 220-330 Ohm legyen. 7 x 220R HD1131R 7

LED_7segment.ino #define sega P2_3 #define segb P2_4 #define segc P2_5 #define segd P1_5 #define sege P2_0 #define segf P2_1 #define segg P2_2 void setup(){ pinmode(sega, OUTPUT); pinmode(segb, OUTPUT); pinmode(segc, OUTPUT); pinmode(segd, OUTPUT); pinmode(sege, OUTPUT); pinmode(segf, OUTPUT); pinmode(segg, OUTPUT); clr(); delay(1000); void loop(){ zero(); delay(1000); one(); delay(1000); two(); delay(1000); three(); delay(1000); four(); delay(1000); five(); delay(1000); six(); delay(1000); seven(); delay(1000); eight(); delay(1000); nine(); delay(1000); folyt. Köv. Forrás: http://makezine.com/projects/drive-a-7-segment-led-with-an-arduino/ 8

void one(){ //Displays 1 digitalwrite(segd, HIGH); digitalwrite(sege, LOW); digitalwrite(segf, LOW); digitalwrite(segg, HIGH); digitalwrite(sega, HIGH); digitalwrite(segb, HIGH); digitalwrite(segc, HIGH); void two(){ //Displays 1 digitalwrite(segd, LOW); digitalwrite(sege, LOW); digitalwrite(segf, HIGH); digitalwrite(segg, LOW); digitalwrite(sega, LOW); digitalwrite(segb, LOW); digitalwrite(segc, HIGH); void three(){ //Displays 1 digitalwrite(segd, LOW); digitalwrite(sege, HIGH); digitalwrite(segf, HIGH); digitalwrite(segg, LOW); digitalwrite(sega, LOW); digitalwrite(segb, LOW); digitalwrite(segc, LOW); void four(){ //Displays 1 digitalwrite(segd, HIGH); digitalwrite(sege, HIGH); digitalwrite(segf, LOW); digitalwrite(segg, LOW); digitalwrite(sega, HIGH); digitalwrite(segb, LOW); digitalwrite(segc, LOW); és így tovább Forrás: http://makezine.com/projects/drive-a-7-segment-led-with-an-arduino/ 9

Többszámjegyű kijelzés A felhasznált kivezetések minimalizálására a szegmenseket párhuzamosan kötjük, egyidejűleg azonban csak egy digit lehet aktív (multiplex kijelzés). A digitek vezérléshez közös anódú kijelzőknél PNP tranzisztor kell. 10

Soros meghajtás, SPI kommunikáció A kijelző szegmenseinek vezérlése sok kivezetést lefoglal. Megoldási lehetőségek: Soros vezérlésű perifériabővítő IC-k használata Multiplex kijelzés Speciális, LED kijelző vezérlő IC-k használata (ez is soros vezérlésű) SPI Serial Peripheral Interface Jellemzői: kétirányú szinkron soros kommunikáció. Az órajel és az adatjel mellett több slave esetén kiválasztójel is kell. Ábra forrása: http://www.eetimes.com/document.asp?doc_id=1272534 11

SPI jelalak Az órajel lehet pozitív (CPOL = 0), vagy negatív (CPOL = 1), az adatvonalak bekapuzása történhet az órajel homlokélénél (CPHA = 0), vagy a lefutó élénél (CPHA = 1). MOSI Master out/slave in, vagyis a master slave irányú kommunikáció adatvonala MISO Master in/slave out, vagyis a slave masetr irányú adatáramlás vezetéke Eszközök: Shift regiszterek (pl. 75HC165, 74HC164, 74HC595) Periféria bővítők (pl. MCP23S17, MCP23S08) LED vezérlők (pl. TLC5940, MAX7219) 12

A 74HC595 IC-k sorbaköthetőek (QH SER ) Az adatok áttöltése az RCLK jel felfutó élénél történik. SRCLR = shift regiszter törlés, OE = kimenet engedélyezés. 13

Hétszegmenses LED kijelző vezérlése 74HC595 shift regiszterrel Hozzávalók: 1-2 db hétszegmenses LED kijelző 1-2 db 74HC595 IC 5 db átkötő vezeték (F + M) 12 db átkötő vezeték (M+M) 7 db 220R ellenállás (vagy 1db 100R) 1 db dugaszolós próbapanel 1 db Launchpad kártya 14

A korrekt kapcsolás Előny: A vezérlés csak három kimenetet foglal A szegmensek áramkorlátozása független Hátrány: Sok alkatrészt kell összehuzalozni (alkatrésztemető) Bonyolult(abb) programozás 15

Az egyszerűsített kapcsolás Előny: A vezérlés csak három kimenetet foglal Kevesebb alkatrész Hátrány: A szegmensek egyenletes árammegosztása csak multiplex vezérléssel oldható meg Még bonyolultabb programozás Az időosztás miatt halványabb kijelzés 16

LED_7segment_Multiplexer.ino Forrás: http://bit.ly/soft87 const int clockpin = 7; //P1_5 const int datapin = 15; //P1_7 const int latchpin = 13; //P2_5 unsigned long t1; unsigned long t2; int i = 0; void setup(){ t1 = millis(); pinmode(clockpin, OUTPUT); pinmode(datapin, OUTPUT); pinmode(latchpin, OUTPUT); void loop() { t2 = millis(); if(t2 - t1 > 1000) { i++; t1 = t2; if(i > 15) i = 0; show(numbers[i]); A numbers*16+ tömb a hexadecimális karaktereket definiálja 0-tól F-ig const byte numbers[16] = { //abcdefg 0b11111100, 0b01100000, 0b11011010, 0b11110010, 0b01100110, 0b10110110, 0b10111110, 0b11100000, 0b11111110, 0b11100110, 0b11101110, 0b00111110, 0b10011100, 0b01111010, 0b10011110, 0b10001110 ; 17

LED_7segment_Multiplexer.ino (folytatás) void show( byte number){ for(int j=0; j<=7; j++) { byte towrite = number & (0b10000000 >> j); if(!towrite) continue; shiftit(towrite); void shiftit (byte data){ digitalwrite(latchpin, LOW); for (int k=0; k<=7; k++) { digitalwrite(clockpin, LOW); if ( data & (1 << k) ) { digitalwrite(datapin, LOW); // turn "On" else { digitalwrite(datapin, HIGH); // turn "Off" digitalwrite(clockpin, HIGH); digitalwrite(clockpin, LOW); digitalwrite(latchpin, HIGH; Forrás: http://bit.ly/soft87 Szegmensenként történik a megjelenítés, itt ezt jelenti a multiplex kijelzés. Korrekt kapcsolás esetén csak shiftit(number) kellene! 18

Többszámjegyű kijelző A shift regiszterek sorbafűzésével könnyen bővíthetjük a kijelzőt 2-3-4 számjegyűre. Az alábbi képen egy négyszámjegyű kijelző látható. Forrás: Arduino: cascading shift registers to drive 7-segment displays with PC input Mi ennél szerényebb célt tűzünk ki: 2 számjegyű kijelzőt építünk. 19

Kétszámjegyű kijelző Az előző példából kiindulva kétszámjegyű kijelzőt készítünk: 1. Egyszerűen megduplázzuk a shift regiszter + kijelző együttest. 2. Az első shift regiszter QH kimenetét összekötjük a második shift regiszter SERIN adatbemenetével. 3. A SRCLK és az RCLK vezérlőjelek párhuzamosan eljutnak mindkét shift regiszter megfelelő bemeneteire. 4. Szívjuk a fogunkat, hogy most ezt hogyan is kellene programozni A tisztességes megoldás természetesen az volna, ha minden szegmensre egy-egy áramkorlátozó ellenállást tennénk (összesen 14 darabot). Így nehezebb lesz 20

LED_7segment_2digit.ino Forrás: Arduino: cascading shift registers to drive 7-segment displays with PC input const int g_pincommlatch = 13; const int g_pinclock = 7; const int g_pindata = 15; const byte g_digits [10] = { //abcdefg 0b11111100, //0 0b01100000, //1 0b11011010, //2 0b11110010, //3 0b01100110, //4 0b10110110, //5 0b10111110, //6 0b11100000, //7 0b11111110, //8 0b11100110, //9 ; int g_numbertodisplay = 100; // Current number being displayed const int g_registers = 2; // Number of shift registers in use void setup() { pinmode(g_pincommlatch, OUTPUT); pinmode(g_pinclock, OUTPUT); pinmode(g_pindata, OUTPUT); // setup Folyt. Köv... 21

LED_7segment_2digit.ino (Folytatás) void setup() { if (--g_numbertodisplay <0 ) g_numbertodisplay= 100; g_registerarray[0] = g_digits[(g_numbertodisplay)/10]; g_registerarray[1] = g_digits[g_numbertodisplay%10]; for(int k=0; k<100; k++) sendserialdata(g_registers,g_registerarray); // loop void sendserialdata(byte registercount, byte *pvaluearray) { for (byte bitmask = 128; bitmask > 0; bitmask >>= 1) { digitalwrite(g_pincommlatch, LOW); for (byte reg = registercount; reg > 0; reg--) { byte value = pvaluearray [reg - 1] & bitmask; for(byte bm=0; bm<8; bm++) { digitalwrite(g_pinclock, LOW); digitalwrite(g_pindata, value & 1? LOW : HIGH); digitalwrite(g_pinclock, HIGH); value>>=1; digitalwrite(g_pincommlatch, HIGH); // sendserialdata Csak a multiplex kijelzés miatt kellenek! Ha value 0. bitje = 1, akkor LOW, Különben HIGH értéket ad át! 22

Hőmérő LED kijelzővel Az előző példát kiegészítjük egy MCP9700A analóg hőmérővel: 1. A hőmérő 1-es lábát VCC-re kötjük. 2. A hőmérő 3-as lábát a GND sínre kötjük. 3. A hőmérő középső lábát az A4 analóg bemenetre kötjük. 4. A kijelzés ugyanúgy zajlik, mint az előző példában. A tisztességes megoldás most is az volna, ha minden szegmensre egyegy áramkorlátozó ellenállást tennénk (összesen 14 darabot). Így multiplexelni kell 23

LED_7segment_2digit.ino Az előző programhoz képest csak az alábbi függvények módosulnak: void setup() { analogreference(internal2v5); // Use the 2,5 V inner reference pinmode(g_pincommlatch, OUTPUT); pinmode(g_pinclock, OUTPUT); pinmode(g_pindata, OUTPUT); g_numbertodisplay = 0; g_registerarray[0] = g_digits [(g_numbertodisplay)/10]; g_registerarray[1] = g_digits [g_numbertodisplay%10]; // setup void loop() { long mysum = 0; for(int i=0; i<2500; i++) { mysum += analogread (A4); sendserialdata(g_registers, g_registerarray); long voltage = mysum>>10; //divide by 1024 long tempc = (voltage-500)/10; //convert to Celsius g_numbertodisplay = (int)tempc; g_registerarray[0] = g_digits[(g_numbertodisplay)/10]; g_registerarray[1] = g_digits[g_numbertodisplay%10]; for(int k=0; k<500; k++) sendserialdata(g_registers, g_registerarray); // loop Hőmérés átlagolással Lásd: Talk08 és Lab08 AnalogThermometer3.ino 24

A hőmérő működése 25