Grayův kód
From Wikipedia, the free encyclopedia
Remove ads
Zrcadlový binární kód, známý také jako Grayův kód podle Franka Graye, je binární číselná soustava, ve které se každé dvě po sobě jdoucí hodnoty liší v bitovém vyjádření změnou pouze jedné bitové pozice.

Zrcadlový binární kód byl původně navržen pro zabránění rušivého výstupu z elektromechanických přepínačů (hazardy relé). Dnes je Grayův kód používán pro podporu opravy chyb v digitální komunikaci jako je digitální pozemní televize a některé systémy kabelové televize. Grayův kód využívají také odpovídače sekundárního radaru v letadlech. Také některé snímače polohy (lineární i rotační) udávají absolutní polohu v Grayově kódu, aby byl vyloučen výskyt chybné hodnoty při přechodu mezi dvěma sousedními polohami.
Remove ads
Důvod vzniku

Použití tohoto kódu má význam v elektrických obvodech při čtení hodnoty asynchronních (nesynchronizovaných) čítačů a absolutní snímače polohy. Obecně se problém zajištění "současnosti" v digitálních systémech řeší pomocí synchronizačního (hodinového, vzorkovacího) signálu i použitím synchronních čítačů. V některých případech může být použití synchronizačního signálu nevýhodné.
Při změně hodnoty klasického binárního čítače o hodnotu ±1 dochází u každé druhé změny ve stejném směru (+ nárůst / − pokles hodnoty) ke změně na více bitových pozicích čítače. Například při přechodu z hodnoty 3 (011B) na hodnotu 4 (100B) se současně změní všechny tři bitové pozice. S nárůstem počtu n bitů pro vyjádření hodnoty (= 2n), narůstá i počet takových stavů, ve kterých dochází ke změnám na dvou a více bitových pozicích. Tyto stavy jsou na obrázku vyznačeny červeně, s uvedením počtu změněných bitů při přechodu na hodnotu ±1.
V reálném systému není nikdy možné zaručit, aby se změnilo více logických hodnot naprosto současně a není možno zajistit ani jejich naprosto současné přečtení a vyhodnocení. Toto bývá u elektroniky způsobeno různým zpožděním logických členů, přechodovými charakteristikami, parazitními kapacitami, nesynchronním snímání optického kotouče snímači a dalšími vlivy.
V případě změny na dolních bitech ze stavu 3 (xx011B) na stav 4 (xx100B) může v nejnepříznivějším případě nastat situace, kdy je přečtena hodnota 00000B nebo 00111B, prakticky může nastat libovolná kombinace nedefinovaného stavu na bitech, které jsou měněny při změně hodnoty 3/4 (00xxxB), což je 8 možných stavů. Počet takovýchto nedefinovaných změn je vyznačen na obrázku pro 5 kódových bitů. V tomto případě nastává 16 situací, kdy nelze zaručit správnost kódu. V praxi se však u absolutních snímačů využívá 10–20 bitů pro určení polohy, což zvyšuje počet takových situací. Nejzávažnější je tato situace na horních bitech, kdy může dojít k úplné ztrátě relevantnosti přenášené informace. Podle příkladu na obrázku, při přechodu z hodnoty 15–16 a 31–0.
Grayův kód je navržen tak, aby eliminoval tyto nežádoucí stavy způsobující nejednoznačnost. Na obrázku je uvedeno srovnání dvojkového a Grayova kódu, kde v řádcích jsou uvedeny hodnoty shodné pro oba kódy a ve sloupcích stavy jednotlivých kódových bitů. Z grafického zobrazení je dobře patrný rozdíl mezi kódy i to, že v Grayově kódu při změně hodnoty o ±1 dochází ke změně pouze v jednom kódovém bitu.
Další využití
Pro svou robustnost se Grayův kód používá pro inkrementální (relativní) snímače polohy na principu jedné rotující clonky se dvěma úhlově posunutými optickými senzory, tedy s dvěma kódovými bity vyjadřující stav 0–3. Tento princip se používá nejen u CNC strojů, ale i u obyčejné myši: Vyhodnocující elektronika pak umožňuje nejen načítání vzdálenosti, ale i určení směru pohybu.
Převod kódu
HW řešení


Převod z Grayova kódu na klasický binární kód lze snadno realizovat pomocí dvou logických členů XOR. Jiným zapojením lze uskutečnit převod opačným směrem, tedy z binárního kódu na Grayův.
SW řešení
Převod z binárního do Grayova kódu v jazyku C:
unsigned int gray_encode(unsigned int b) {
return b ^ (b >> 1);
}
O něco málo složitější je převod z Grayova kódu do binárního:
unsigned int gray_decode(unsigned int g) {
unsigned int b;
b = 0;
while(g) {
b ^= g;
g >>= 1;
}
return b;
}
Jednostopý Grayův kód

Ve výše uvedeném příkladu je pro generování kódu použito n stop pro n bitů, minimálně 2. Každý kódový bit je snímán ze samostatné kódové stopy. Existuje však i patentované řešení, pro které postačuje jedna kódová stopa. Snímaný kód je odlišný; je postupný, není zrcadlový a vyjadřuje 30 možných hodnot výstupní kombinace kódu, výstupní kód 0D a 31D (00H a 1FH / 00000B a 11111B) není generován. Podstatné je, že i tento kód splňuje podmínku, že při změně hodnoty o ±1 se výstupní kód mění pouze v jednom bitu.
Související články
Externí odkazy
Obrázky, zvuky či videa k tématu Grayův kód na Wikimedia Commons
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads