Diagnostika procesů

Při programování procesoru se často setkáme s potřebou jeho ladění ( angl. debug - doslovný překlad je vychytávání much ), tedy odstraňování chyb a testování jeho funkce. Ladit můžeme přímo zdrojový kód, např. přímo v IDE ( AVR Studio, MPLAB, RIDE, CodeWarrior ... ) nebo pozorovat jak procesor pracuje např. na nepájivém poli. K tomu potřebujeme mít z procesoru výstup. Současně lze toto použít i pro běžný výstup, kdy již procesor neladíme, ale potřebujeme vědět jeho stav. Např. jaká hodnota je v určitém registru ( výsledek konverze AD převodníku, přijímací buffer jednotky UART, atd. ) nebo zdali je nastaven určitý bit ( typicky příznaky - flag ).

Možné výstupy z procesoru:

  • >> LED - klasický a velmi často používaný způsob výstupu.
  • >> LED + řadič - řadičem lze dosáhnout úspory I/O linek procesoru.
  • >> 7seg. Displej - výhradně použitelný na zobrazování číselné informace.
  • >> Alfanumerický LCD Displej - nejuniverzálnější způsob zobrazování informace.
  • >> U(S)ART/RS232 - komunikace s PC.

I. LED

Velmi jednoduchý způsob jak zapojit něco, co ukazuje stav ANO/NE - TRUE/FALSE - H/L - 1/0. Řekl bych, že LED diody jsou nejčastějším způsobem signalizace. Používá se dvojího zapojení, a to přímé a negované. U přímého zapojení LED svítí když je na výstupu log.1, kdežto u negovaného zapojení LED svítí při log.0 - toto se hlavně používalo u TTL logiky ( myslím originální řadu 7400, řady HC/HCT atd. to mají jinak ), kdy výstup byl schopen v log.0 poskytnout proud 20mA, namísto toho v log.1 mnohem méně ( max. jednotky mA ).

Obr.1. Obrázek ukazuje napojení několika LED na procesor ATmega8.

Na Obr.1. jsou LED1 až LED4 zapojené pro signalizaci binárního nebo 1 z n čísla. LED5 svítí při log.0 ( je tedy zapojena negovaně ) a LED6 při log.1 ( zapojena přímo, stejně jako LED1 až LED4 ). LED7 a LED8 jsou zapojeny tak aby vždy svítila jen jedna, takto lze i rozpoznat výstup ve stavu vysoké impedance, jelikož se s polovičním jasem rozsvítí obě LED současně. Hodnota rezistorů bývá kolem 560R, což určuje proud LED na cca 5mA.

Dále se dá využít série LED, kdy je použijeme pro signalizaci binárního ( nebo 1 z n ) čísla. Pro binární signalizaci čísla 0 až 15 použijeme 4 výstupů a tedy 4 LED nebo pro signalizaci 0 až 3 jako 1 z n - tedy 1 ze 4. U binární signalizace se totiž použijí všechny kombinace 0000b, 0001b ... 1110b, 1111b a u 1 ze 4 se použijí jen kombinace 0001b, 0010b, 0100b a 1000b - tedy svítí vždy jen jedna LED. Výhodou 1 z n je její přehlednost, pohledem oka totiž velmi rychle zjistíme signalizované číslo, avšak je náročnější na počet pinů.

Pro dosažení signalizace více jak dvou stavů, lze aplikovat algoritmy, které budou LEDkami blikat. Lze zvolit několik frekvencí blikáni, ale jen tak aby bylo dobře patrno, jaký stav je signalizován.

Výhodou LED je nízká cena, jednoduchost v zapojení a v ovládacím algoritmu a čitelnost i v šeru.

Nevýhodou LED je nízká rozlišovací schopnost a vyšší spotřeba, taktéž je potřeba množství I/O linek procesoru.

II. LED + řadič

Řadičem rozumíme obvod, který LED ovládá pomocí určitého rozhraní. Použitelná rozhraní můžou být sériové nebo např. rozhraní dekoderu 1 z n. Velkou výhodou použití řadiče je úspora I/O linek procesoru.

74 595 - je typickým představitelem obvodu pro převod sériového rozhraní na paralelní ( včetně sériového výstupu pro zapojení dalších obvodů 595 do série a tak rozšíření tohoto rozhraní ).

Obr.2. Funkční diagram obvodu 595

Z Obr.2. je patrno z jakých částí se obvod skládá a jakými signály se ovládá.

Osmistupňový posuvný registr - Převádí sériová data z datového vstupu Ds ( serial Data - vstup sériových dat ) pomocí clocku SHcp na výstupy. Je složen z do série zapojených D klopných obvodů ( dále jen DKLO ). Data se do tohoto registru načítají od bitu z největší váhou ( MSB ) a z každou náběžnou hranou clocku ( signál SHcp, SHift - posun ) se posouvají dál v sérii D klopných obvodů. První bit se tedy po osmi cyklech clocku nasune až na konec, kde je signál Q7', který je určen pro připojení dalšího obvodu 595 ( napojí se signálem Ds a signály clocku SHcp se propojí dohromady, jsou totiž stejné ). Jelikož je tento registr tvořen z DKLO, je vyveden i jejich reset signál v podobě /MR ( Master Reset - nadřazené nulování ) - signál, který vynuluje jednotlivé DKLO ( na Obr.3. jsou označené jako FF0..7 ), signál /MR je negovaný - aktivní v log.0.

Osmibitový paměťový registr - Slouží pro zachycení dat z předchozího registru. Je složen taktéž z DKLO ( na Obr.3. označen jako LATCH - zachycení ) avšak ty jsou napojeny svým datovým vstupem na výstup DKLO z Osmistupňového posuvného registru. Jeho použití znamená, že data se na výstupu neobjeví dokud nepřijde náběžná hrana na vstup STcp ( STore - uložit ), to právě pak umožní, že se data na výstupu mění jen v námi požadovaný okamžik. Při načítání dat se tak výstup nemění a až načítání dat skončí ( při jednom obvodu 595 je to 8 cyklů ), aktivací signálu STcp se data na výstup překlopí, respektive viz. další registr.

Třístavový výstup - Typický registr potřebný pro připojení na sběrnici, my však pro potřeby signalizace toto nepotřebujeme. Trvalou aktivací signálu /OE ( Output Enable - povolit výstup ), tedy log.0, přivedeme datové signály vnitřních DKLO LATCH na výstupy Q0..Q7.

Obr.3. Logický diagram obvodu 595

Na výstupy Q0..Q7 tedy napojíme LED diody a tím dosáhneme úspory I/O pinů procesoru.

Obr.4. Napojení obvodů 595 na procesor ATmega8. A - sériové zapojení, B - paralelní zapojení. Signalizační LED se napojují na výstupy Q0..Q7 jednotlivých obvodů 595 - nejsou zakresleny.

Obr.4. část A ukazuje sériové napojení obvodů 595, všech 16 výstupů obvodů IC2 a IC3 je ovládáno pomocí jen tří signálů DS_A, SHCP_A a STCP_A. Výhodou této koncepce je nízké množství použitých I/O linek procesoru, nevýhodou je pomalost, kdy pokud chceme změnit poslední bit v řadě, musíme generovat 16 cyklů. Pomalost však kompenzuje zapojení Obr.4. B, kde použito separátního řízení signálů pro záchytný registr. Data se do obvodů IC4 a IC5 načítají současně, avšak objeví se jen na obvodu 595, kterému tyto data patří, to obstarávají separátní signály pro zachycení STCP_B1 a STCP_B2. Zde je pak změna, jen části výstupů, provedena v kratším čase, avšak přibyl další I/O pin procesoru, který je nutno použít.

Pro stejný účel lze použít i obvod 74 164 - posuvný registr, avšak ten nevlastní signál zachycení a při změně stavu by LED problikávaly. Pokud se stav nemění relativně často, lze použití tohoto obvodu doporučit. Výhodou je v ušetření dalšího I/O pinu procesoru ( teď budou stačit jen dva - data a clock ) a při vysokých frekvencích clocku nebude změna stavu patrná. 595 na tento režim modifikujeme trvalým napojením signálu zachycení STcp na signál clocku SHcp, data se tedy budou objevovat na výstupu se zpožděním jednoho cyklu - nejprve se načtou do prvního DKLO ( na Obr.3. označené jako FF0..7 ) a s příchodem další náběžné hrany se načtou do druhého DKLO ( LATCH ) a tedy i na výstup.

Použitím obvodu 74 42 se dá signalizovat 1 z n způsobem, je to totiž dekadický dekodér s negovanými výstupy, jeho výhodou bude vysoká rychlost zobrazení avšak za cenu, že může svítit vždy jen jedna LED. Spíše bych však doporučil použít sériový řadič 595.

Výhodou LED + řadič je nízká cena, úspora I/O pinů procesoru a oddělení LED od procesoru ( z hlediska zátěže ).

Nevýhodou LED + řadič je vyšší složitost zapojení ( a případně obrazce na PCB ) a složitější a delší algoritmus obsluhy.

III. 7-segmentový displej

Používá se téměř výhradně pro signalizování číselné informace, popřípadě jednoduchých textových zpráv ( pro text je lepší použít displej alfanumerický ). Jejich použití lze rozdělit na statické a dynamické. U statického řízení displeje je jeho obsluha jednoduchá a podobá se řízení LED diod, tak jak je popsáno v sekci I. Toto použití je však přímo nevhodné pokud má být číslic více, což je v praxi téměř vždy, řekl bych že se používají minimálně dvě cifry - dva 7segmenty. Pokud je potřeba řídit displej s více ciframi staticky je potřeba použít principu se sériovým řadičem.

Zabývat se tedy budeme displejem dynamickým. K jeho činnosti je zapotřebí setrvačnosti lidského oka, jelikož se jednotlivé cifry střídavě rozsvěcují a pohasínají a tak tvoří efekt, že svítí trvale všechny. Dynamický displej je zapojen tak, že stejné vývody všech segmentů jsou spojeny dohromady a jen společný vývod ( nejčastěji anoda ) každého 7segmentje je separátně řízen.

Obr. 5 Připojení třech sedmisegmentovek na procesor v zapojení dynamický displej. Rezistory na linkách a až h, pro omezení proudu LED segmentu, nejsou zakresleny.

Algoritmus řízení spočívá v rychlém ( min. cca 200Hz ) střídání 7segmentů, které budou svítit. Jedná se o cyklickou, opakující se sekvenci kódu. Algoritmus řízení je naznačen níže.

  • 1. Deaktivace signálů A..H ( log.1 )
  • 2. Deaktivace signálu CA3 ( log.1 ) a aktivace CA1( log.0 )
  • 3. Odeslání kombinace na signály A..H
  • 4. Čekací procedura - po tuto dobu segment DIS1 svítí
  • 5. Deaktivace signálů A..H ( log.1 )
  • 6. Deaktivace signálu CA1 ( log.1 ) a aktivace CA2( log.0 )
  • 7. Odeslání kombinace na signály A..H
  • 8. Čekací procedura - po tuto dobu segment DIS2 svítí
  • 9. Deaktivace signálů A..H ( log.1 )
  • 10. Deaktivace signálu CA2 ( log.1 ) a aktivace CA3( log.0 )
  • 11. Odeslání kombinace na signály A..H
  • 12. Čekací procedura - po tuto dobu segment DIS3 svítí
  • 13. Jdi na 1.

Algoritmus se skládá ze dvou hlavních částí: přepnutí kontextu ( např. body 1., 2. a 3. ) a doby kdy jedna ze 7segmentovek svítí ( např. bod 4. ).

Obr. 6 Ukázky znaků 0, 1, 2, A a b na sedmisegmentovém displeji. Lze použít i alfanumerické znaky, avšak text pak bývá hůře čitelný.

Výhodou 7-segmentového displeje ( buzeného dynamicky ) je v dobré čitelnosti číslic a to i v šeru nebo noci. Spotřeba se nijak radikálně nezvedá, jelikož v daný čas svítí vždy jen jedena číslice. Na trhu jsou dostupné opravdu obrovské číslice, takže takové displeje můžou být čitelné i z velkých vzdálenostech. Navíc lze řídit jas, jedná se vlastně o obdobu PWM signálu, akorát že je fázově posunutý.

Nevýhodou 7-segmentového displeje je jednoznačně složitost zapojení a následně i pak PCB. Taktéž obslužný algoritmus řízení je náročnější a je potřeba zajistit stejných časů pro svit jednotlivých číslic, jinak hrozí, že bude mít každá číslice odlišný jas.

IV. Alfanumerický LCD displej

Použitím LCD displeje, se standardním řadičem HD44780, lze realizovat opravdu různorodou signalizačně-informační jednotku. Obrovskou výhodou LCD displeje je ve variaci použitelných znaků, a navíc lze realizovat i vlastní znaky ( standardně 8 ) a tak rozšířit možnou znakovou sadu o nativní písmena, v češtině typicky háčky a délky - bohužel nejde realizovat všechny. Standardní LCD displej obsahuje jen osm volných pozic ve znakové paměti ( CGRAM ).

LCD obsahuje i značnou výhodu v možnosti umístění statického textu, kdy je možno doplnit informační údaj k číselné proměnné, např. "Teplota: 26°C" - v tomto příkladu navíc potřebujeme definovat znak "°", který není do řadiče displeje implementován.

Obr. 7 Dvouřadý, 16ti znakový, alfanumerický LCD displej s řadičem HD44780

O tom jak vlastně LCD pracuje a jak s nim komunikovat, či jej nastavit, se nebudu rozepisovat, vydalo by to na celý nový článek a navíc je velmi kvalitně zpracována stránka na website Doveda Boys ohledně LCD displejů.

Algoritmy obsluhující zobrazování na LCD displeji jsou jednoznačně jeho největší nevýhodou. S LDC nelze komunikovat jen nějakým primitivním způsobem, nýbrž je potřeba komplexního nastavování signálů a navíc je potřeba, relativně složitého, inicializačního algoritmu. Ve skutečnosti to není nic složitého, avšak jistě to u neznalého člověka vyvolává špatné dojmy.

Obr. 8 Připojení LCD displeje MC1602 na procesor ATmega8. Je patrno, že pro ovládání je potřeba jen 6 signálů ( zvolen 4bitový datový režim ) z procesoru, signál GLOW je jen pro rozsvěcení podsvětlení, které může být nastaveno trvale.

LCD displej je na tom špatně ohledně chyb v datech které obdrží. Často se člověku stane, že má ve zdrojovém souboru chybu, což je při debugu vlastně příčina. LCD displej na to povětšinou reaguje kompletním výpadkem všech znaků, takže na displeji není nic zobrazeno. Velmi mi tato vlastnost na LCD displejích vadí i když není zase tak častá, stává se i, že jen vypadne příslušná sekvence.

Výhodou alfanumerického LCD displeje je ve variaci použitelných symbolů a znaků plus možnost jejich vlastní tvorby. Dále pak jejich čím dál nižší cena, nízká spotřeba a možnost podsvícení ( to však extrémně zvedá spotřebu! ). Při 4bitovém formátu komunikace je pak výhodou úspora datových vodičů procesoru ( na úkor rychlosti ).

Nevýhodou alfanumerického LCD displeje je jednoznačně jeho náročnost na obslužné algoritmy, pomalost ( záleží i na formátu datové komunikace 4/8b ) a nízká odolnost vůči chybám.

V. U(S)ART/RS232

USART - Universal Synchronous and Asynchronous Receiver and Transmitter. Jedná se vlastně o propojení počítače ( RS232 = COM port ) a procesoru ( USART ) pomocí napěťového převodníku, najčastěji MAX232 ( MAX3232 ). USART je vlastně jednotka v procesoru, která je schopná vysílat synchronní ( s CLK, nejčastěji SPI ) a asynchronní ( přijímač a vysílač pracují na stejné frekvenci, žádný synchronizační signál se nepřenáší - UART ) data. Pro použití ve spojení s PC, se bude používat jen UART - tedy jen asynchronní přenos ( kvůli RS232 ). Lze aplikovat různé přenosové rychlosti, nastavit počet datových bitů, parita a počet stop bitů. Samotná komunikace probíhá na dvou linkách TXD ( vysílání dat ) a RXD ( příjem dat ) - celkově je potřeba mít 3 vodiče včetně GND. Kde TXD je vysílání dat a RXD jejich příjem. Propojení se pak realizuje vlastním překřížením linek TXD/RDX mezi počítačem a procesorem ( TXD procesoru se napojí na RXD počítače a RXD procesoru na TXD počítače ).

Obr. 9 Formát přenášeného slova.

Data se přenáší v definovaném formátu ( Obr. 9 ), který obsahuje Start Bit ( st ), pak 5 až 9 datových bitů ( 0 - 8 ), paritní bit ( p ) - kontrola správnosti dat a Stop Bity ( sp ), kterým přenášený rámec dat končí. Linka je v klidovém stavu ( idle ) v logické úrovni log. 1. Po odesláni stop bitů je možno zahájit přenos hned dalších dat vysláním start bitu.

SP - Start bit - signalizuje zahájení komunikace na lince, jeho hodnota je vždy log.0 a je vždy jen jeden

DATA - po odeslaní start bitu se vysílají datové bity a to tak, že LSB je jako první. Délka dat může být od 5 do 9 bitů.

P - Paritní bit - slouží pro zpětnou kontrolu přijatých dat. Nejčastější parita je sudá a lichá, jedná se o doplnění datových bitů o paritní bit tak, aby součet všech log.1 ( jak data tak parita ) byl sudý nebo lichý - takto jde detekovat chybu v jednom bitu, kdy při přenosu po lince dojde k chybě - Data = 00111011, sudá parita je P = 1 a lichá P = 0.

Obr. 10 Převodník napěťových úrovní RS232 ( +10V/-10V ) na TTL ( 0/5V ). Konektor X1 je 9ti pinový CANNON, kde na pinu 2 je signál RXD a na pinu 3 TXD.

RS232 pracuje ve dvou stavech - log.0 ( tzv. Space state ) a log.1 ( Marking state ). Je velmi důležité vědět, že log.0 se přenáší kladnou napěťovou úrovní a log.1 zápornou! Viz Obr.11.

Obr. 11. Znázornění napěťových úrovní formátu RS232.

Z Obr. 11. je patrno, že pro napojení procesoru na RS232 je nutno použít napěťového převodníku, nejčastěji se používá MAX232 ( MAX3232 ) pro převod na 5V popř. 3V3 logiku. Zapojení takového převodníku je na Obr. 10.

Samotné RS232 obsahuje více signálů a ty jsou určeny pro datový Handshaking ( vysílací jednotka zahájí vysílání, až jí ta jednotka co bude přijímat potvrdí, že je připravena na příjem dat a obráceně ). Tyto signály, ale nejsou standardně zahrnuty v jednotce USART procesoru, proto je při komunikaci nevyužíváme. Jen pro zajímavost ji je uvedeme, výpis je vstažen ke konektoru CANNON 9:

  • pin 1. CD - Carrier Detect
  • pin 2. RXD - Receive Data
  • pin 3. TXD - Transmit Data
  • pin 4. DTR - Data Terminal Ready
  • pin 5. GND - System Ground
  • pin 6. DSR - Data Set Ready
  • pin 7. RTS - Request to Send
  • pin 8. CTS - Clear to Send
  • pin 9. RI - Ring Indicator

Samotný přenos dat pak může být realizován pomocí terminálového programu ( např. ve Windows HyperTerminal ), který poběží na PC a firmware naprogramovaném v procesoru. Lze realizovat i vlastní programy v programovacím prostředí Delphi, C++/C# atd. Výhodou C# je v integrované komponentě serialPort a tek jednoduché realizaci vlastního terminálového programu. Lze i aplikovat převodníky RS232 na USB a pomocí ovladačů virtual COM portu komunikovat přes USB.

Obr. 11. Program pc2avr.exe, vytvořen v C#. Zobrazuje 10 položek v rozsahu 0 - 65535 ( 16 bitů ) s výpisem několika registrů procesoru ATmega88.

Pro vlastní potřebu jsem realizoval program pc2avr.exe, který umí komunikovat s libovolným procesorem vybaveným jednotkou USART. Komunikace je realizovaná pomocí znaku, který procesoru sdělí, že má odeslat data. pc2avr.exe používá znak "\n" - tedy ENTER, dekadicky je to 13. Procesor tedy čeká na příjem znaku "\n" a když ho dostane, tak odešle 10 x word s definovaným obsahem zpět. V programu lze nastavit rychlosti přenosu ( Baud Rate ) od 2400 do 1Mb a zvolit COM port od COM1 až do COM16 - standardně jsou v počítači COM1 a COM2 ( pokud jsou dva ), ale použitím ovladače ( virtual COM port ) na USB převodník se virtuální COMy mapují trochu výše ( na Obr. 11. je COM5 kabel s převodníkem USB/RS232 )

Pomocí RS232 můžeme i do procesoru data odesílat, linka je plně duplexní a tak můžeme měnit parametry a nastavení.

Výhodou komunikace po RS232/UART je vysoká rychlost ( závislé na přenosové rychlosti ), variabilita přenášených dat a možnosti komunikace, včetně možnosti data do procesoru odesílat, šetří se počet I/O linek procesoru.

Nevýhodou komunikace po RS232/UART je potřeba procesoru s jednotkou USART, potřeba vlastnit převodník a kabel, obslužný terminálový program, složitost obslužného firmware.

VI. ZÁVĚR

Jak je patrno, existuje velké množství různých variací jak signalizovat stav procesoru. Lze vybírat s různých rychlostí přenosu/zobrazení, lze volit jednoduchost obslužného firmware, čí jednoduchost zapojení ( PCB ). Osobně jsem už využil všech popsaných způsobů a k nejčastěji používaným patří způsoby I. a V. tedy LED v podobě jednoduchosti a USART/RS232 v podobě vysoké variability. Lze najít i další způsoby signalizace, napadá mě ještě zvuková, ale ta bude asi nejméně příjemná pro uživatele. Dále se dá vylepšit rozhraní signalizace, např. o bezdrátové technologie ( Bluetooth, IRDA, ... ) či Ethernet a vysílat data na internet.

Zdroje:

[1] - Datasheety: ATmega8, 74HC/HCT42, 74HC/HCT163, 74HC/HCT595
[2] - http://cmail.cz/doveda
[3] - http://rs232.hw.cz

Aktualizováno 12:21:54 dop. so, IX 01 2007