Mikrovezérlők Alkalmazástechnikája

Hasonló dokumentumok
Mikrovezérlők Alkalmazástechnikája

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

I. C8051Fxxx mikrovezérlők hardverfelépítése, működése. II. C8051Fxxx mikrovezérlők programozása. III. Digitális perifériák

The modular mitmót system. 433, 868MHz-es ISM sávú rádiós kártya

Mikrovezérlők Alkalmazástechnikája

ARM Cortex magú mikrovezérlők

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

loop() Referencia:

Mikrovezérlők Alkalmazástechnikája

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

Programozási segédlet DS89C450 Fejlesztőpanelhez

Járműfedélzeti rendszerek I. 4. előadás Dr. Bécsi Tamás

ARM programozás. Iványi László Szabó Béla

ARM Cortex magú mikrovezérlők

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.

Perifériák hozzáadása a rendszerhez

The modular mitmót system. 433, 868MHz-es ISM sávú rádiós kártya

Dr. Oniga István DIGITÁLIS TECHNIKA 9

Dr. Oniga István DIGITÁLIS TECHNIKA 9

XII. PÁRHUZAMOS ÉS A SOROS ADATÁTVITEL

Az interrupt Benesóczky Zoltán 2004

Mechatronika és mikroszámítógépek. 2018/2019 I. félév. Külső megszakítások

SR mini PLC Modbus illesztő modul. Modul beállítása Bemeneti pontok kiosztása főmodul esetén Bemeneti pontok címkiosztása kiegészítő modul esetében

RUBICON Serial IO kártya

PMU Kezdı lépések. 6-0 Csatlakozás LG GLOFA-GM és SAMSUNG PLC-hez. 6-1 Kommunikáció LG PMU és LG GLOFA-GM7 / GM6 / GM4 között

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

Digitális technika VIMIAA01

Digitális technika VIMIAA01

Az I2C egy soros, 8 bit-es, kétirányú kommunikációs protokoll, amelynek sebessége normál üzemmódban 100kbit/s, gyors üzemmódban 400kbit/s.

Autóipari beágyazott rendszerek CAN hardver

1. Bevezetés. 2. A mikroszámítógépek felépítése

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

Silabs STK3700, Simplicity Studio laborgyakorlat

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

Mikrorendszerek tervezése

A LOGSYS GUI. Fehér Béla Raikovich Tamás, Laczkó Péter BME MIT FPGA laboratórium

LIN, BSS, PCM Protokollok (COM Interfész) Szeptember

Mikrorendszerek tervezése

T Bird 2. AVR fejlesztőpanel. Használati utasítás. Gyártja: BioDigit Kft. Forgalmazza: HEStore.hu webáruház. BioDigit Kft, Minden jog fenntartva

Mikrokontroller labor, 1. mérés ellenőrző kérdések

Yottacontrol I/O modulok beállítási segédlet

Füvesi Viktor. Elektrotechnikai és Elektronikai Tanszék május. 8

8051-es mikrovezérlő. mikrovezérlő 1980-ból napjainkban

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

Mintavételezés tanulmányozása. AD - konverzió. Soros kommunikáció

Architektúra, megszakítási rendszerek

A Számítógépek felépítése, mőködési módjai

Digitális rendszerek. Digitális logika szintje

Mechatronika és mikroszámítógépek

Modbus kommunikáció légkondícionálókhoz

LOGSYS LOGSYS LCD KIJELZŐ MODUL FELHASZNÁLÓI ÚTMUTATÓ november 8. Verzió

Mikrovezérlők Alkalmazástechnikája

A/D és D/A konverterek vezérlése számítógéppel

Villamos jelek mintavételezése, feldolgozása. Mérésadatgyűjtés, jelfeldolgozás 9. előadás

A Memory Interface Generator (MIG) beállítása a Logsys Kintex-7 FPGA kártyához

Mikrovezérlők Alkalmazástechnikája

MODULÁRIS FELÉPÍTÉSŰ VILÁGÍTÓRENDSZER TERVEZÉSE

Mérő- és vezérlőberendezés megvalósítása ARM alapú mikrovezérlővel és Linux-szal

Procontrol RSC-24B. Kezelői, telepítői kézikönyv. RS232 / RS485 adatkonverter. Verzió:

CAN BUSZ ÁLTALÁNOS ISMERTETŐ

Nagy Gergely április 4.

Mechatronika és mikroszámítógépek. 2016/2017 I. félév. Analóg-digitális átalakítás ADC, DAC

Jelfeldolgozás a közlekedésben. 2017/2018 II. félév. Analóg-digitális átalakítás ADC, DAC

Mikrovezérlők Alkalmazástechnikája

ATMEL ATMEGA MIKROVEZÉRLŐ-CSALÁD

Nyíregyházi Egyetem Matematika és Informatika Intézete. Input/Output

LOGSYS LOGSYS HŐMÉRŐ ÉS EEPROM MODUL FELHASZNÁLÓI ÚTMUTATÓ szeptember 16. Verzió 1.0.

A PIC18 mikrovezérlő család

Digitális technika (VIMIAA01) Laboratórium 9

Digitális technika (VIMIAA01) Laboratórium 9

Eötvös Loránd Tudományegyetem - Informatikai Igazgatóság. MEMS érzékelők, szenzorok, méréstechnika. Horváth Gábor. ELTE / Informatikai Igazgatóság

Mikrovezérlők Alkalmazástechnikája

Laboratóriumi műszerek megvalósítása ARM alapú mikrovezérlővel és Linux-szal

Számítógép Architektúrák

Mérési jegyzőkönyv. az ötödik méréshez

Digitális technika VIMIAA hét

M-Bus Master MultiPort 250D/L

Dr. Oniga István. DIGITÁLIS TECHNIKA 10 Memóriák

Digitális technika (VIMIAA02) Laboratórium 12

Digitális technika (VIMIAA02) Laboratórium 12

Interrupt. ile ile 1 / 81

Mikrovezérlők programozása

Budapesti Műszaki- és Gazdaságtudományi Egyetem Villamosmérnöki és Informatikai Kar MIT. Nagyteljesítményű mikrovezérlők tantárgy [vimim342]

WDS 4510 adatátviteli adó-vevő

Dr. Oniga István. DIGITÁLIS TECHNIKA 10 Memóriák

Járműfedélzeti rendszerek I. 5. előadás Dr. Bécsi Tamás

A MiniRISC processzor

Számítógép Architektúrák

Bevitel-Kivitel. Eddig a számítógép agyáról volt szó. Szükség van eszközökre. Processzusok, memória, stb

INVERSE E1 MULTIPLEXER LAN BRIDGE

Számítógépek felépítése, alapfogalmak

A Számítógépek hardver elemei

ARM mikrovezérlők programozása

A számítógép fő részei

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

Számítógép hálózatok

SZORGALMI FELADAT. 17. Oktober

Karakteres LCD kijelző használata MiniRISC processzoron

Mikrorendszerek tervezése

Máté: Számítógép architektúrák

Átírás:

Gingl Zoltán, 2017, Szeged Mikrovezérlők Alkalmazástechnikája 18 jan. 1

Processzoroknál tipikusan párhuzamos átvitel adatbusz címbusz vezérlőjelek, szinkronizálás Mikrovezérlőknél soros átvitel Kevés vezeték illetve jel Modulációt igényel az információt alakítsuk akár egyetlen skalár jellé, bitfolyammá Demoduláció szükséges Információhordozó feszültség, áram, fény, elekromágneses hullám, hang Forma: amplitúdó, frekvencia, fáziskülönbség 18 jan. 2

18 jan. 3

Nem minden C8051Fxxx processzoron elérhető Fő cél: külső SRAM elérése (XRAM) Elérés: Assembler: movx utasítás C: xdata unsigned char x; Más külső perifáriák elérésére is jó (ADC, DAC,...) Hardver: Címvonalak 16 vezeték (kevesebb is elég lehet) Adatvonalak 8 vezeték Vezérlő jelek 3 vezeték: RD, WR, ALE 18 jan. 4

C8051Fxxx A[15..0] A[15..0] SRAM D[7..0] D[7..0] /RD /WR /CE /OE /WR 18 jan. 5

A[15..8] A[7..0] D[7..0] P1/P5 DPH, EMI0CN, P1/P5 P1/P5 P2/P6 DPL, R0, R1 P2/P6 P3/P7 DATA P3/P7 /WR P0.7/P4.7 P0.7/P4.7 /RD P0.6/P4.6 P0.6/P4.6 18 jan. 6

A[15..8] A[7..0] D[7..0] P1/P5 DPH, EMI0CN, P1/P5 P1/P5 P2/P6 DPL, R0, R1 P2/P6 P3/P7 DATA P3/P7 /WR P0.7/P4.7 P0.7/P4.7 /RD P0.6/P4.6 P0.6/P4.6 18 jan. 7

C8051Fxxx A[15..8] A[15..8] SRAM ALE AD[7..0] 74AHC573 C D Q A[7..0] /RD /WR D[7..0] /CE /OE /WR 18 jan. 8

A[15..8] P1/P5 DPH, EMI0CN, P1/P5 P1/P5 AD[7..0] P2/P6 DPL, R0, R1 DATA P2/P6 ALE P0.5/P4.5 P0.5/P4.5 /WR P0.7/P4.7 P0.7/P4.7 /RD P0.6/P4.6 P0.6/P4.6 18 jan. 9

A[15..8] P1/P5 DPH, EMI0CN, P1/P5 P1/P5 AD[7..0] P2/P6 DPL, R0, R1 DATA P2/P6 ALE P0.5/P4.5 P0.5/P4.5 /WR P0.7/P4.7 P0.7/P4.7 /RD P0.6/P4.6 P0.6/P4.6 18 jan. 10

DATA ADDR /WR /RD /CE /OE /CE DATA C8051F ADDRESS DECODER /CE /RD DATA ADC ADDRESS /RD /WR DATA /CE /OE DATA DAC SRAM FIFO RAM 18 jan. 11

Az írás/olvasás időzítése állítható A perifériák sebességéhez kell igazítani Push-pull kimeneteket célszerű választani Olvasáskor automatikusan bemeneti mód Csak az utasítás idejére használja a portot 18 jan. 12

18 jan. 13

Processzorok és eszközök közti kommunikációhoz Egy byte átvitele bitenként Egyetlen kétállapotú jel Nincs szinkronizáló jel Az átvitel bármikor történhet Az átvitel kezdetét detektálni kell a vevőnek A kommunikáló eszközök azonos időalappal küldik és fogadják a biteket (baud rate=bit/s) Gyakran használt Sokféle hardveres megoldás (RS232, RS485, stb.) 18 jan. 14

t t t t t t t t t t START BIT B0 B1 B2 B3 B4 B5 B6 B7 STOP BIT bit sampling Start bit (logikai 0), átvitel detektálására Stop bit (logikai 1), minimum szünet küldések között Byte átviteli idő: 10 t 9 bites átvitel is választható: az utolsó bit külön programozható (TB8, olvasáskor RB8) paritásbitként, multiprocesszoros adatátvitelhez 11 t byte átviteli idő 18 jan. 15

FULL DUPLEX SIMPLEX C Device C Device TX TX TX TX RX RX RX RX HALF DUPLEX SIMPLEX C Device C Device TX TX TX TX RX RX RX RX TX KIKAPCSOLHATÓ 18 jan. 16

Timer túlcsordulások vezérlik, kétféle megoldás: Baud rate = Timer overflow rate / 16 (pl. F120) Baud rate = Timer overflow rate / 2 (pl. F410) Egy (Timer1) vagy több (Timer1-4) timer Néhány processzoron akár más TX és RX ráta Maximális ráta SYSCLK/16 vagy SYSCLK/2 18 jan. 17

Baud rate = Timer overflow rate / 16 (pl. F120) Timer 1 : TH1=256-SYSCLK/(16*Baud rate) Timer 2-4 : TMRRL=65536-SYSCLK/(16*Baud rate) Baud rate = Timer overflow rate / 2 (pl. F410) Timer 1 : TH1=256-SYSCLK/(2*Baud rate) Érdemes figyelni a kerekítési hibára! A C-ben az egész osztás nem a legközelebbire kerekít! Mindig ellenőrizzük a beállított érték okozta hibát! 18 jan. 18

Az időalapok különbözők lehetnek Az egységek órajele nem egzakt A beállítás frekvencia egésszel osztásával nem pontosan a kívánt érték A kettő eltérése mennyi lehet? maximum 3%, szigorúbban 2% teljesül? http://pdfserv.maximintegrated.com/en/an/an2141.pdf 18 jan. 19

t START BIT B0 B1 B2 B3 B4 B5 B6 B7 STOP BIT 1,03 t Az adó és vevő hibája együttesen hat hogyan? A detektálás ideálisan a bitek közepén lenne A start bit detektálása sem pontos A megbízhatóság függ a jelváltások időtartamától Függ a 2-szeres vagy 16-szoros leosztási értéktől 18 jan. 20

t t BIT BIT t/8 0,75 t 0,25 t 0,75 t BIT BIT t/4 0,5 t 0,5 t 0,5 t BIT BIT 18 jan. 21

Tegyük fel elég rövid jelváltási idők, 3% tolerancia megengedett 9600 bit/s kívánt érték F410 beállítás SYSCLK = 191406Hz 2% Timer1 8-bit auto reload mode: TH1 = 246 Baud rate = 191406Hz 2% /10/2=9570Hz 2% void Timer1_Init() { TMOD = 0x20; // 8-bit auto reload CKCON = 0x08; // timer clock = system clock TH1 = 0xF6; // reload value = 246 TL1 = 0xFF; // one step from overflow TCON = 0x40; // run timer } 18 jan. 22

Baud rate = 191406Hz/10/2 = 9570Hz 9570Hz 2% Megfelel? 9600 3% 9312-9888 9570 2% 9378-9761 A másik eszköz hibáját nem vettük figyelembe! 18 jan. 23

A szinkron módokkal nem tárgyaljuk 8 vagy 9 bites aszinkron mód Az adat fogadása engedélyezhető, tiltható A stop bit detektálása engedélyezhető csak akkor van vett adat, ha a stop bit értéke 1 9-bites módban a 9. bitet vizsgálja! Ez alkalmas címzésre, multiprocesszoros kommunikációra Ha a 9. bit 1, akkor cím érdekezik a vevőkhöz A címzett vevő kikapcsolja a bit monitorozását a vétel idejére 18 jan. 24

void UART_Init() { SCON0 = 0x10; // 8-bit, variable baud mode TI=1; // assume empty output buffer } unsigned char UARTIn(void) { while (!RI); // wait for a byte RI=0; // clear flag (prepare for next reception) return SBUF; // return the byte } void UARTOut(char a) { while (!TI); // wait for end of previous transmission TI=0; // clear flag SBUF=a; // transmit a byte, don t wait for end } 18 jan. 25

#define BUFFERSIZE 8 // ring buffers volatile unsigned char TxBuffer[BUFFERSIZE]; volatile unsigned char RxBuffer[BUFFERSIZE]; // TX buffer read and RX buffer write pointers // used in the interrupt routine volatile unsigned char TxReadPtr=0, RxWritePtr=0; // TX buffer write and RX buffer read pointers unsigned char TxWritePtr=0, RxReadPtr=0; // Number of data in the buffers volatile unsigned char TxNumberOfData=0; volatile unsigned char RxNumberOfData=0; 18 jan. 26

void UARTInterrupt(void) interrupt UART_VECTOR { if (RI) { RI=0; if (RxNumberOfData < BUFFERSIZE) { RxBuffer[RxWritePtr]=SBUF; RxWritePtr = (RxWritePtr+1) % BUFFERSIZE; RxNumberOfData++; } } 18 jan. 27

} if (TI) { TI=0; if (TxNumberOfData) { SBUF=TxBuffer[TxReadPtr]; TxReadPtr = (TxReadPtr+1) % BUFFERSIZE; TxNumberOfData--; } } 18 jan. 28

unsigned char UARTIn(unsigned char *c) { if (RxNumberOfData) { RxNumberOfData--; *c=rxbuffer[rxreadptr]; RxReadPtr = (RxReadPtr+1) % BUFFERSIZE; return 0; } return 1; } 18 jan. 29

unsigned char UARTOut(unsigned char c) { if (TxNumberOfData < BUFFERSIZE) { TxNumberOfData++; TxBuffer[TxWritePtr]=c; TxWritePtr = (TxWritePtr+1) % BUFFERSIZE; return 0; } return 1; } 18 jan. 30

Meghajtó áramkörök nélkül Meghajtóáramkörökkel nagyobb távolságok PLC-k Műszerek oszcilloszkóp DVM Speciális eszközök 18 jan. 31

V I/O VOLTAGE CONVERTER V+ V- TX RX R OUT T IN R IN T OUT RS232 SIGNALS C RS232 TRANSCEIVER MAX202, MAX3232 18 jan. 32

18 jan. 33

18 jan. 34

V I/O DIFFERENTIAL RS422 SIGNALS TX R OUT R IN+ R IN- C RX T IN T OUT+ T OUT- RS422 TRANSCEIVER 2 x MAX485 18 jan. 35

V I/O RTS TX TXEN R OUT D+ D- DIFFERENTIAL RS485 SIGNALS RX T IN C RS485 TRANSCEIVER MAX485, MAX3485 18 jan. 36

18 jan. 37

18 jan. 38

V I/O TX OPTICAL FIBER RX C 18 jan. 39

USB CONNECTOR USB CONNECTOR LDO REG LDO REG 5V RTS RTS CTS TX CTS TX USB-UART TRANSCEIVER D+ D- RX RX C FT232R GND USB CABLE 18 jan. 40

18 jan. 41

Bluetooth modulok UART interfésszel SPP (Serial Port Profile) standard protokoll pl. BTM112 18 jan. 42

Timer beállítás, engedélyezés A timer másra nem használható Ne keverjük: polling és interrupt mód TX legyen push-pull rövid jelváltási idők Baud rate hibájának figyelembe vétele 18 jan. 43

stdio átirányítás? printf? void putchar(char c) { UARTOut(c); // UART, SPI, SMBus, stb. } char getchar(void) { return UARTIn(c); // UART, SPI, SMBus, stb. } printf("x=%d",x); // write 18 jan. 44

18 jan. 45

Processzorok, integrált áramkörök között Szinkron soros adatátvitel Órajel váltásaikor érvényes a bit Master és slave eszközök Az órajelet adó a master Az órajel garantálja az azonos időzítést a két oldalon Full duplex kimenet: MOSI (master out/slave in) bemenet: MISO (master in/slave out) órajel: SCK (serial clock) Engedélyező vonal (NSS, negated slave select) 18 jan. 46

SCK CPOL=1 CPOL=0 MOSI MISO B7 B6 B5 B4 B3 B2 B1 B0 B7 B6 B5 B4 B3 B2 B1 B0 CPHA=0 MOSI MISO B7 B6 B5 B4 B3 B2 B1 B0 B7 B6 B5 B4 B3 B2 B1 B0 CPHA=1 2018. 01. 10. 18:12 Kommunikációs áramkörök és használatuk 47

Az adó és vevő oldal azonos módban legyen (POL, PHA) Az egyik SCK él a kimenő bitet beállítja, a másik a bejövő bitet olvassa Slave: Mikor kezdődik az adat átvitele? Csak az órajel indulása nem feltétlen elég Kieshet a szinkronból az átvitel Megoldás: Slave select (NSS) jel 18 jan. 48

SCK POL=1 POL=0 NSS MOSI MISO B7 B6 B5 B4 B3 B2 B1 B0 B7 B6 B5 B4 B3 B2 B1 B0 PHA=0 2018. 01. 10. 18:12 Kommunikációs áramkörök és használatuk 49

GPIO NSS MISO MISO MISO MISO MOSI MOSI MOSI MOSI SCK SCK SCK SCK NSS GPIO Master Master Master Slave 18 jan. 50

MISO MOSI SCK NSS GPIO Master MISO MOSI SCK NSS Slave MISO MOSI SCK NSS Slave Több slave Egyszerre egy aktív Slave NSS választ NSS adatkezdet is 18 jan. 51

void SPIOut(unsigned char c) { SELECT = 0; SPIF = 0; SPI0DAT = c; while (!SPIF); SELECT = 1; } unsigned char SPIIn(void) { SELECT = 0; SPIF = 0; SPI0DAT = 0; // dummy write starts SPI clock while (!SPIF); SELECT = 1; return SPI0DAT; } 18 jan. 52

18 jan. 53

System Management Bus IIC vagy I²C: Inter-Integrated Circuit Áramkörök közötti egyszerű, kétvezetékes busz SCL: Órajel (100kHz vagy 400kHz) SDA: Adat Két irány (half duplex) Master, slave, multimaster Párhuzamosan kapcsolhatók eszközök 7-bites címzés Tipikusan: szenzorok, A/D, RTC, EEPROM, stb. 18 jan. 54

CROSSBAR CLOCK CONTROL FILTER SCL SHIFT REGISTER 7 6 5 4 3 2 1 0 FILTER SDA SDA CONTROL ACK 18 jan. 55

R R Vdd=5V Vdd=5V Vdd=3V Vdd=5V Vdd=3V Master 1 Master 2 Slave 1 Slave 2 SCL SDA 18 jan. 56

START ACK NACK STOP SDA SCL A6 A0 R/W D7 D0 7-bit address and direction bit 8-bit data Bármelyik vezetéket az adó és vevő is 0-ba tudja húzni SCK: csak a masterek húzhatják 0-ba Több byte is küldhető egy tranzakcióban ACK minden byte vételekor szükséges a vevőtől NACK: nem nyugtáz a vevő, vagy utolsó byte (master) STOP: a tranzakció befejezése 18 jan. 57

MASTER IRQ IRQ IRQ IRQ S ADDR W A DATA A DATA A P S ADDR W A DATA A DATA A P SLAVE IRQ IRQ IRQ 18 jan. 58

MASTER IRQ IRQ IRQ IRQ S ADDR R A DATA A DATA N P S ADDR R A DATA A DATA N P SLAVE IRQ IRQ IRQ 18 jan. 59

Master SFR-bitek STA, STO írása a jelek generáláshoz ACK írása és olvasása is SI flag (megszakítás is) 1-re vált, ha egy fázis kész A busz áll, amíg SI=1, folytatódik, ha töröljük Ezért mindig SI=0 előtt kell írni az SFR regisztereket Slave SFR-bitek STA, STO olvasása ACK írása és olvasása is 18 jan. 60

void SMBusOut(unsigned char address, unsigned char c) { STO = 0; STA = 1; // start transfer SI = 0; // continue while (!SI); // wait for start complete STA = 0; // manually clear STA SMB0DAT = address << 1; // A6..A0 + write SI = 0; // continue while (!SI); // wait for complete if (!ACK) // not acknowledged, stop { STO = 1; // stop condition bit } SI = 0; return; } SMB0DAT = c; SI = 0; while (!SI); STO = 1; SI = 0; // generate stop condition // put data into shift register // continue // wait for complete // stop condition bit // generate stop condition 18 jan. 61

unsigned char SMBusIn(unsigned char address) { STO = 0; STA = 1; // start transfer while (!SI); // wait for start complete STA = 0; // manually clear STA SMB0DAT = (address << 1) 1; // A6..A0 + read SI = 0; // continue while (!SI); // wait for complete if (!ACK) // not acknowledged, stop { STO = 1; // stop condition bit } SI = 0; return; } ACK = 0; SI = 0; while (!SI); STO = 1; SI = 0; return SMB0DAT; // generate stop condition // NACK, last byte // continue // wait for complete // stop condition bit // generate stop condition 18 jan. 62

18 jan. 63

CAN: Controller Area Network LIN: Local Interconnect Network USB: Universal Serial Bus Vezeték nélküli kommunikációs áramkörök 18 jan. 64