OBSAH WEBU
ČTĚTE!
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
temata:05-vestavene_systemy:main [2016/05/24 21:30] xpavel27 [Paměť] |
temata:05-vestavene_systemy:main [2016/05/24 22:20] (aktuální) xpavel27 [Analogově-číslicový převodník (ADC)] |
||
---|---|---|---|
Řádek 91: | Řádek 91: | ||
== Režimy činnosti == | == Režimy činnosti == | ||
* **RUN** | * **RUN** | ||
- | * "plný" běh aplikace | + | * plný beh aplikácie |
* aktivován po resetu | * aktivován po resetu | ||
- | * CPU začíná provádět kód, kde první instrukce je uložená v //reset vektoru// | + | * začne sa najprv vykonávať kód z reset vektora |
- | * {{:temata:05-vestavene_systemy:run-reset.png|}} | + | |
* **Active background** | * **Active background** | ||
* ladění aplikace, bootloader | * ladění aplikace, bootloader | ||
* aktivace více způsoby: např.log. 0 při nástupní hraně hodin RESET* | * aktivace více způsoby: např.log. 0 při nástupní hraně hodin RESET* | ||
* užití např. k (pře)programování aplikace před vstupem do Run | * užití např. k (pře)programování aplikace před vstupem do Run | ||
+ | * zastavenie do obrdržania príkazu BKGD | ||
* **Wait** | * **Wait** | ||
- | * CPU zastaven (snížení spotřeby), systémové hodiny běží, plná funkce napěťového regulátoru | + | * CPU prepnurý do nízkopríkonového režimu |
+ | * Systémové hodiny bežia | ||
+ | * Plná funkcia napäťového regulátora | ||
+ | * Podpora podmnožiny BKGD príkazov | ||
* aktivován instrukcí WAIT | * aktivován instrukcí WAIT | ||
- | * po provedení s přepne CPU do nízkopříkonového režimu | ||
* ukončení při vzniku přerušení | * ukončení při vzniku přerušení | ||
* **Stop** | * **Stop** | ||
- | * zastaveno CPU, BUSCLK | + | * Zastavené CPU a BCLK |
- | * Stop 3 - uchovává obsah RAM, USB RAM, registrů; možný rychlý přechod do Run | + | * Zapnutie bytom STOPE=1 |
- | * Stop 2 - uchovává obsah RAM, USB RAM | + | * **Stop 3** |
+ | * obmedzenie spotreby vnútorných obvodov a rýchle prebudenie | ||
+ | * ram, usb ram a registre sú aj naďalej napájané | ||
+ | * garancia zachovania stavov, registrov, ram, IO výstupov | ||
+ | * vyskočenie prerušením alebo resetom | ||
+ | * **Stop 2** | ||
+ | * odpojenie napájania vnútrorných obvodov | ||
+ | * uchovanie obsahu ram a usb ram | ||
+ | * vyskočenie resetom, signálom na vývode IRQ-TMPCLK, prerušením od RTC | ||
+ | * akcie rovnaké ako pri power on reset | ||
+ | * automaticky sa nadstavý bit PPDF pre aplikačné špec. zotavenie | ||
+ | * je nutné z ram obnoviť nadstavenia | ||
==== Paměť ==== | ==== Paměť ==== | ||
Řádek 156: | Řádek 169: | ||
* při **přerušení** je podprogram volán instrukcí a podgram obsluhy přerušení je zase vyvolán hardwarově | * při **přerušení** je podprogram volán instrukcí a podgram obsluhy přerušení je zase vyvolán hardwarově | ||
* probíhá nesynchronizovaně -> nelze přesně určit, kdy se předá řízení | * probíhá nesynchronizovaně -> nelze přesně určit, kdy se předá řízení | ||
- | * zdroj přerušení se prezentuje aktivní úrovní | + | * zdroj přerušení se prezentuje aktivní úrovní |
- | * např. při mimořádné události vyvolá hlavní program přerušení, žádost je za definovaných podmínek akceptovaná a řízení předáno přidem připravené obslužné rutině přerušení | + | * Maskovatlené: dajú sa blokovať |
- | * adresa instrukce je uložena ve **vektoru přerušení** - zpravidla je to odkaz do tabulky adres nebo tabulky prvních instrukcí přerušovacích rutin | + | * Nemaskovatelné: nedajú sa zablokovať ako napríklad reset |
+ | |||
+ | * **Priebeh** | ||
+ | * Detekcia: po detekcii požiadavku na prerušenie CPU dokončí vykonávanú inštrukciu, okrem reset | ||
+ | * Uloženie kontextu CPU na zásobník | ||
+ | * Zakázanie prerušení, zabraňuje opakovanému obsluhovaniu prerušovania | ||
+ | * Arbitráž a výber vektoru prerušenia, vyberáme vektor nezpravovaného prerušenia s najvyššou prioritou | ||
+ | * Uloženie do PC a zahájenie obsluhy | ||
==== Základní princip sériové komunikace ==== | ==== Základní princip sériové komunikace ==== | ||
Řádek 170: | Řádek 190: | ||
* v celé soustavě je jeden zdroj časového signálu | * v celé soustavě je jeden zdroj časového signálu | ||
* **Asynchronní sériový přenos** | * **Asynchronní sériový přenos** | ||
- | * hodinový signál se nepřenáší, ale přímač si ho generuje sám | + | * musíme zaistiť aby prijímač a vysielač bežali na rovnakej frekvencii a mali rovnakú fázu |
- | * je potřeba zajistit dostatečnou přesnost generátoru hodinového signálu v přijmači a prostředky, kterými je možné generátor hodinového signálu přijímače synchornizovat s generátorem vysílače | + | * synchrónizácia fáze oboch generátorov sa vykonáva s predom dohodnotou zmenou úrovne na dat. vodiči |
- | * na začátku přenosu musí dojít k synchronizaci hodin vysílače a přijmače (změnou úrovně). | + | * na začiatku prenosu musí prísť k synch. hodín vysielača a prijímača |
- | * Princip: Vodič je v klidovém stavu (např. log1), přenos je zahájen změnou klidového stavu (na log0), předem dané délky (zpravidla 1 bit, tzv. **start bit**), poté jsou posílána samotná **data**, na konci přeneseného slova následuje volitelný **paritní součet** a ukončení přenosu (**stop bit**). | + | * spočiatku generujeme zmenu logického signálu bez ohladu na hodnotu prvého prenášaného bitu |
+ | * **Datovy ramec** | ||
+ | * prvý informačný bit sa objavuje az po nejakej doby od počiatočnej hrany | ||
+ | * signál, ktorý je vyplnený opačnou hodnotou ako je kľudová hodnota sa nazýva start bit | ||
+ | * za posledným vyslaním datovým bitom a prípadným par. bitom musí byť aspoň jeden stop bit | ||
+ | * stop bit má hodnotu kľudového stavu, slúži k vzájomnému oddeleniu prenášaných slov | ||
+ | * je veľký jeden alebo dva bity | ||
+ | * stop byt slúži aj na to aby mal prijímač čas odoslať prijaté slovo zo vstupného pos. reg. ďalej | ||
+ | * kľudová hodnota je space a aktívna je mark | ||
* {{:temata:05-vestavene_systemy:frame.jpg?600}} | * {{:temata:05-vestavene_systemy:frame.jpg?600}} | ||
+ | * **Trvanie prenosu ramca** | ||
+ | * doba na prenos rámca je tr = n(počet bitov rámca) * T(per. synch. sig.) | ||
+ | * n = 1 + D (počet datových bitov) + P (počet paritných) + S (počet stop) | ||
+ | * prenosová rýchlosť sa udáva v baundech Bd, bitov za sekundu | ||
+ | * TP = N * n / BAUD = 1024 (prenos) * 11 (8+par+start+stop) / 9600 = 1,17s | ||
=== SCI = Serial Communication Interface === | === SCI = Serial Communication Interface === | ||
- | * asynchronní sériové rozhraní | + | * **Info** |
- | * v mikrokontroléru HCS08 se jedná o plně duplexní systém (tj. současně lze data vysílat i příjmat) | + | * sériové a asynchrónne rozhranie a plne duplexný systém |
- | * sytém tvoří generátor hodinového signálu, modulu vysílače a modulu přijmače a podpůrných obvodů | + | * skladá sa z: gen. hod. sig, modulu vysielača a prijímača a podporných obvodov |
- | * výstup vysílače je vyveden na vodič označený TxD (transmit data), vstup přijmače je vyveden na vodič označený RxD (receive data) | + | * výstup vysielača je vyvedený na TxD a vstup prijámača na ExD |
- | * podstatné jsou pro programátora registry SCI: datové, konfigurační a stavové | + | * registry: datové, konfiguračné a stavové |
+ | * **Hodiny** | ||
+ | * spoločné pre vysielač a prijímač | ||
+ | * prenosová rýchlosť sa dá nadstaviť | ||
+ | * zdrojom frekvencie generátora je hodinový signál vnútornej zbernice BUSCLK | ||
+ | * prenosovú rýchlosť nadstavuje programátor cez hodnotu v registri SCIxBD ako delička | ||
+ | * **Odosielanie znaku** | ||
+ | * data sa zapíšu do datového registra SCIxD | ||
+ | * vysielač skompletuje rámec a postupne ho posiela na výstup TxD s taktom gen.hod.sig | ||
+ | * pred zápisom otestujeme či je datový register prázdny | ||
+ | * pred zápis tiež skontrolujeme príznak prázdneho registra ako 7bit TDRE v SCIxS1 a musí byť 1 | ||
+ | * potom je znak prenesený do TSR - posuvný register | ||
+ | * vysielanie je možné sledovať stavovým bytom TC v SCIxS1 | ||
+ | * TC hovorí o tom že datá boli úspečne vyslané | ||
+ | {{ :temata:05-vestavene_systemy:scir.png?500 }} | ||
+ | |||
+ | * **Prijem znaku** | ||
+ | * automaticky zaisťovaný obvodmi prijímača, tie riadia a vyhodnocujú priebeh | ||
+ | * spracovaný znak sa pripravá do datového registra SCIxD | ||
+ | * okamžik dokončenia prijímania je indikované bitom RDRF - receive data register full v SCIxS1 | ||
+ | * pred čítaním musíme otesotvať tento bit na 1 a až potom čítať | ||
+ | * v priebehu sú jednotlivé bity rámca ukladané do RSR posuvného registra | ||
+ | * prijímané data sú vzorkované 16x vyššou frekvenciou než frekvencia generované podľa SCIxBD | ||
+ | |||
+ | {{ :temata:05-vestavene_systemy:scis.png?500 }} | ||
+ | |||
=== SPI = Serial Peripheral Interface === | === SPI = Serial Peripheral Interface === | ||
- | * synchronní sériové rozhraní | + | * **Info** |
- | * rozhraní původně určené k připojování a komikaci s prefireními zařízeními (lze ho ale využí i ke komunikaci mezi mikrokontroléry) | + | * synchrónne sériové rozhranie, plný duplex |
- | * umožňuje spojení //point-to-point// i vytvoření //SPI sběrnice// (k propojení více komponent) | + | * rozhraní původně určené k připojování a komikaci s prefireními zařízeními (lze ho ale využí i ke komunikaci mezi mikrokontroléry) |
- | * plně duplexní rozhraní (v každém okamžiku vždy probíhá přenos oběma směry) | + | * umožňuje spojení //point-to-point// i vytvoření //SPI sběrnice// (k propojení více komponent) |
- | * zařízení připojení přes SPI může být v jednou ze dvou režimů: | + | * moznost komparatora |
- | * **master** | + | * **master** |
- | * generuje synchronizační hodinový signál | + | * generuje synchronizační hodinový signál |
- | * inicializuje a řídí komunikaci přes SPI | + | * inicializuje a řídí komunikaci přes SPI |
- | * na sběrnici SPI může být pouze jedno zařízení tohoto typu | + | * na sběrnici SPI může být pouze jedno zařízení tohoto typu |
- | * zpravidla se jedná o mikrokontrolér | + | * zpravidla se jedná o mikrokontrolér |
- | * **slave** | + | * **slave** |
- | * obvykle to jsou periferie, se kterými master komunikuje (master určuje se kterým slave bude komunikovat) | + | * obvykle to jsou periferie, se kterými master komunikuje (master určuje se kterým slave bude komunikovat) |
- | * komunikace probíhá způsobem vzájemné výměny obsahů posuvných registrů | + | * **Komunikace** |
- | * {{:temata:05-vestavene_systemy:spi.png?500}} | + | * Datové vodiče označujeme ako MISO a MOSI podla vzťahu |
+ | * Master in a slave out, master out a slave in | ||
+ | * Hodinový signál tvorí master a je na vodiči SPSCK | ||
+ | * SS signál je výberový a slúži k aktivácii zariadenia pre komunikáciu | ||
+ | * Na strane slave je SS vstupom ktorý v aktívnej úrovni posiela obsah posuvného registra na stranu mastera | ||
+ | * Vysielajú sa na MOSI datové bity zo svojho posuvného registra a zároveň z registru druhej strany sa prijíma cez MISO data z posuvného registra slave. Vzájomná výmena dát. | ||
+ | * Po osmich taktoch môže master a slave čítať prijaté data a zapísať data pre vysielanie | ||
+ | * Jednostranny prenos cez SPI je spojený odoslaním alebo prijímaním bezvýznamného znaku druhej strane | ||
+ | |||
+ | {{ :temata:05-vestavene_systemy:spi.png?500 }} | ||
=== Rozhraní IIC (I^2C) === | === Rozhraní IIC (I^2C) === | ||
- | * synchronní sériové rozhraní | + | * **Info** |
- | * hlavním cílem je jednoduchost a levná implementace | + | * synchrónne sériové a jednoduché s halfduplex |
- | * specifikuje fyzickou podobu rozhraní, jeho elektrické charakteristiky a komunikační protokol | + | * jeden datový vodič a jeden vodič na synch. signál |
- | * protokol typu master-slave komunikující způsobem half-duplex | + | * možnosť pripojiť až 127 slave |
- | * {{:temata:05-vestavene_systemy:iic.png|}} | + | * hlavním cílem je jednoduchost a levná implementace |
- | * tvoří ho jeden datový vodič(SDA) a jeden vodič pro přenos synchronizačního signálu(SCL) | + | |
- | * ke sběrnici IIC lze připojit až 127 zařízení slave (dáno formátem adresy) | + | |
- | * pokud neprobíhá komunikace, tak se master ani slave nijak neovlivňuje (SDA i SCL stav log. 1) | + | |
- | * komunikace zahájí master sestupnou hranou 1->0 při SCL v log. 1 | + | |
- | * data jsou vzorkována při SCL=1, změna hodnoty dat při SCL=0 | + | |
- | * pro ukončení generuje master nástupnou hranu 0->1 při SCL v log. 1 | + | |
- | {{:temata:05-vestavene_systemy:iic_prubeh.png|}} | + | |
- | ==== Porty ==== | + | {{ :temata:05-vestavene_systemy:iic.png }} |
- | * mikrokontrolér je počítač, určený k tomu, aby vnímal své okolí a na základě programu je ovlivňoval | + | |
- | * je zpravidla součástí nějakého systému, který má primárně jiné určen, než "jen" být počítačem | + | * **Komunikace** |
- | * vnímání okolí a jeho ovlivňování se děje nejčastějí přes jednoduchá dvoustavová rozhraní, které se združují do portů | + | * Ak nie je komunikácia potom master ani slave neovlivňuje vodiče |
- | * porty jsou vyvedeny na pouzdro MCU - jedná se o skutečné rozhraní mezi MCU a dalšími obvody | + | * komunikácia sa začne master hranou z 1 na 0 |
- | * vstupně-výstupní piny jsou sdruženy po osmi do portů | + | * master generuje adresový rámec |
- | * mnoho z nich sdílí vývod pouzdra s jinými periferiemi (když je periferie aktivní, nelze použít pin portu) | + | * podľa hodnoty bitu RW rozhodne buď zasiela data modulu slave alebo číta |
- | * porty jsou pojmenovány písmeny abecedy, různé MCU mají různý počet portů | + | * po ukončení generuje master hranu 0 na 1 |
- | * výstupní pin portu | + | * nemusí sa vždy generovať ukončovanie až na úplnom samom konci stačí |
- | * umí udělat logickou 0 nebo 1 na vývodu pouzdra MCU | + | |
- | * log. úrovně jsou reprezentovány napětím, jde o připojení určitého napětí na vývod MCU | + | {{ :temata:05-vestavene_systemy:iic_prubeh.png?500 }} |
+ | |||
+ | * **Datovy ramec** | ||
+ | * Sériovo prenášané data po bitoch | ||
+ | * skladá sa zo štart hrany, datové bloky po 8 bit a potvrdením zo slave o rozpoznaní, a ukončeniu | ||
+ | |||
+ | {{ :temata:05-vestavene_systemy:iicwork.png?500 }} | ||
+ | |||
+ | * **Adresovanie** | ||
+ | * Pri viac master konflikte je riešenie datovou arbitrážov | ||
+ | * aby sme mohli jednoz. identifikovať zariadenie pre kom. musíme zaviesť unikátne adresy modulov | ||
+ | * zahájanie komunikácie spočíva v odoslaní 8bit v prvom adresovom rámci ako adresa | ||
+ | |||
+ | {{ :temata:05-vestavene_systemy:iicaddr.png?500 }} | ||
+ | |||
+ | ==== Porty ==== | ||
+ | * **Mikrokontroler** | ||
+ | * Vnímajú okolie cez jednoduché dvojstavové rozhranie, ktoré sa združené do portov po ôsmich | ||
+ | * Porty sú vedené na púzdro MCU | ||
+ | * Veľa z nich je zdielaných s inými perifériami | ||
+ | * Pomenované sú písmenami abecedy | ||
+ | * **Vystupne porty** | ||
+ | * Vedia urobiť logickú jedna alebo nulu na vývode púzdra MCU | ||
+ | * Ide o pripojenie určitého napätia na vývody | ||
* log. 0 je napětí na úrovni země, log. 1 pak napětí na úrovni napájecího napětí | * log. 0 je napětí na úrovni země, log. 1 pak napětí na úrovni napájecího napětí | ||
- | == Pull up rezistor == | + | * Môžeme použiť buď jeden pin alebo celý port |
- | * rezistor, který definuje úroveň v případě, kdy je pin jinak "ve vzduchu" | + | * Výstup môže dodávať prúd okolo 25 mA a celkovo čepať 120 |
- | * lze jej zapnout uvnitř MCU | + | * **Ganged output** |
- | * {{:temata:05-vestavene_systemy:pull_up.png|}} | + | * Zlúčenie viac pinov pre posilnenie výstupu |
+ | * Funguje len u niektorých portov na MCU | ||
+ | * **Prechodny dej** | ||
+ | * Pri prechode napríklad z log 0 na 1 nastane určitá špička | ||
+ | * Môžeme ju redukovať tým že spomalýme buď nábeh | ||
+ | * Na obmedzenie môžeme použiť aj redukciu výšky skoku ako drive strenght | ||
+ | {{ :temata:05-vestavene_systemy:portdeje.png?500 }} | ||
+ | |||
+ | * **Ovladanie** | ||
+ | * Data: datový register | ||
+ | * Data direction: rozhodnutie či zápis alebo čítanie | ||
+ | * Pul-Up Enable: rozhodnutie či sa bude používať pulup rezistor | ||
+ | * Slew Enable: spomalenie prechodu | ||
+ | * Drive Strength: zníženie sily skoku | ||
+ | * **Pull up rezistor** | ||
+ | * rezistor, který definuje úroveň v případě, kdy je pin jinak "ve vzduchu" | ||
+ | * lze jej zapnout uvnitř MCU | ||
+ | |||
+ | {{ :temata:05-vestavene_systemy:pull_up.png?400 }} | ||
+ | |||
+ | * **Modul KBI** | ||
+ | * Podpora generovanie prerušení od pinov | ||
+ | * Možnosť reagovať na hranu alebo úroveň | ||
+ | * Len na niektorých portoch | ||
+ | * KBI má prioritu pred bežnou funkciou portov | ||
==== Analogově-číslicový převodník (ADC) ==== | ==== Analogově-číslicový převodník (ADC) ==== | ||
* analogový vstup představují signály ze spojitých snímačů (teplota, tlak, osvětlení, odpor, napětí/proud) | * analogový vstup představují signály ze spojitých snímačů (teplota, tlak, osvětlení, odpor, napětí/proud) | ||
* důležitá je zpětná vazba | * důležitá je zpětná vazba | ||
- | * {{:temata:05-vestavene_systemy:adc.png|}} | ||
* předvod aproximačním AD převodníkem je děj, který trvá určitou dobu; proto lze vysledovat fáze | * předvod aproximačním AD převodníkem je děj, který trvá určitou dobu; proto lze vysledovat fáze | ||
* //zahájení převodu// | * //zahájení převodu// | ||
Řádek 247: | Řádek 352: | ||
=== AD převodník === | === AD převodník === | ||
- | * typicky má 3 části | + | * **Info** |
- | * dolnopropusní filtr | + | * typicky má 3 části: dolnopropusní filtr, Track/Hold, AD převodník |
- | * Track/Hold | + | * převádí anslogový vstup na číslicový výstup |
- | * AD převodník | + | * Používa sa aproximačný model |
- | * převádí anslogový vstup na číslicový výstup | + | * Ideme od MSB a postupne generujeme nižšie bity |
+ | * Vždy porovnáme hodnotu a upravíme ďalší byt a tak iterujeme | ||
+ | |||
+ | {{ :temata:05-vestavene_systemy:adcmy.png?400 }} | ||
+ | |||
+ | * **Viacej kanálov ADC** | ||
+ | * Vyberáme ich cez multiplexor | ||
+ | * Používame len jeden prevodník | ||
+ | * SH je nejaký kondík aby na chvílu uskoval hodnotu analog. sig. aby sa nemenila | ||
+ | |||
+ | {{ :temata:05-vestavene_systemy:adc.png?400 }} | ||
+ | |||
+ | * **Napajanie** | ||
+ | * Môžeme použiť vlastné napájanie | ||
+ | * Nadstavenie referenčných hodnôt | ||
+ | * **Prevod** | ||
+ | * Prevod u AD prevodníka trvá určitú dobu | ||
+ | * Zahájenie: nadstavíme konfiguráciu | ||
+ | * Vykonanie: aproximačné vkonávanie | ||
+ | * Ukončenie: buď uloženie výsledku alebo násilné prerušenie | ||
+ | * **Zahajenie** | ||
+ | * Softvérové: zápisom do ADCSC1 | ||
+ | * Hardwarové: príde k dosiahnutí hodnoty module reg. RTCMOD pri čítači real. času | ||
+ | * Pri hardwarovom môžeme nadstaviť periódu vzorkovanie vstupného signálu | ||
+ | * Pri soft. sa ďaľší prevod realizuje okamžide ako je ukončený predchádzajúci prevod | ||
+ | * **Vysledok** | ||
+ | * K dispozícii v registroch ADCRH a L | ||
+ | * Ukončenie v COCO | ||
+ | * Možnosť generovania prerušení | ||
+ | * Možnosť nadstaviť aby bol výsledok indikovaný len ak je nehajá hodnota presiahnutá | ||
+ | {{ :temata:05-vestavene_systemy:adcset.png?400 }} | ||
==== Časovač/čítač ==== | ==== Časovač/čítač ==== | ||
* čítač je speciální registr, který kromě funkcí jako je čtení a zápis hodnoty zvyšuje a snižuje svoji hodnotu o jedničku při každé periodě hodinového signálu; používán je pro čítání událostí | * čítač je speciální registr, který kromě funkcí jako je čtení a zápis hodnoty zvyšuje a snižuje svoji hodnotu o jedničku při každé periodě hodinového signálu; používán je pro čítání událostí |