A Gray-kód Bináris-kóddá alakításának leírása /Mechatronikai Projekt II. házi feladat/ Bodogán János 2005. április
1. Néhány szó a kódoló átalakítókról Ezek az eszközök kiegészítő számlálók nélkül közvetlenül adják a jelet kimenetükön lineáris és forgó mozgás esetén egyaránt. A forgó tengelyű térbeli átalakítókban a kód rendszerint tárcsán vagy dobon van elhelyezve a dob alkotója, ill. a tárcsa sugara mentén. A kódoló térbeli átalakító egyenes vonalú elrendezésben is készül főleg szerszámgépes optikai mérőműszeres berendezésekhez. A mintázatok lehetnek tisztán bináris ill. binárisan kódolt decimális osztásúak. A kódoló térbeli átalakítókhoz a digitális-technikában is alkalmazott különböző kódok nem egyforma eredménnyel használhatók ugyanis az egyik diszkrét értékről a másikra való átmenet határán egyes kódokban a kétértelműség hibát okozhat. Most csak az átalakító kétértelműségi hibájával kapcsolatban vizsgálunk meg néhány kódot. A tisztán bináris kódnak komoly hibája egy szögérték digitális átalakításában, hogy a decimális szám bináris ábrázolásában egy decimális szám egységnyi változását több mint egy bináris helyérték megváltozása követi. Példaként a decimális 7-nek. 8-ba való átmenetét nézve látható, hogy egyidejűleg 4 bináris helyérték változik meg. A kimeneteket párhuzamosan olvasva a 0111-nek kell 1000-ba átmenni. Ha valamelyik helyérték az átmenet folyamán a lehetséges tűrések miatt előbb változik meg mint a többi akkor a bináris szám szekvenciája nem egyezik meg a valóságos decimális szám szekvenciájával. Ha 2 3 helyértékű számjegy "0"-ból "1"-be változik mielőbb a többi "1"-ből "0"-ba, akkor egyidejűleg a kimeneten decimális 15 jelenik meg. Így a kiolvasás szekvenciája 7-ből a 15-be 15-ből a 8-ba megy át. Ez természetesen tűrhetetlen hibát okoz. Az ilyen hibák kiküszöbölésére több olyan kódot dolgoztak ki, amelyeknél csak egy bináris szám változik egységnyi decimális szám változására. Például a ciklikusan permutált bináris vagy a Gray-kód és a Watts-féle reflektált decimális kód. Gray-kód: Watts-kód:
Az iménti indokok miatt belátható, hogy miért célszerű a leolvasáskor Gray-kódot alkalmazni, viszont ezt a fajta kódolást vissza kell alakítani binárissá, hogy a kettes számrendszerben dolgozó számítógépünk vagy az IC-nk értelmezni tudja. A binárisból gray-kóddá történő átalakítás jóval egyszerűbb, mint a visszaalakítás, ezért először a B G átalakítást teszem közzé. 2. Binárisból Gray-kód Mint ismeretes, a bináris kódolás szabályai szerint az utolsó oszlopban 2 0 -on szerepel, az utolsó előttiben 2 1 -n, aztán 2 2 -on, és így tovább. Ezekből a nulla-egy számkombinációkból minden decimális szám kirakható egy féle kombinációban. Ha például egy 011001 binárisan kódolt számot szeretnénk átírni gray-kódba, akkor ez a következő szabályok szerint történhet: - Az első bináris oszlopot (ami jelen esetben nulla) változtatás nélkül át kell másolni a gray-kódtáblánk első oszlopába. (Ez annyit tesz, hogy ha nulla érték szerepel a bináris első oszlopban, akkor nulla értéket vesz fel a gray táblánk első oszlopa is. Egyes bináris érték esetén pedig értelemszerűen egyes értéket fog felvenni a gray-táblánk első oszlopa). (Jelen esetben 0=0) - A második gray-oszlopot úgy kapjuk meg, hogy a bináris táblánk első két oszlopát a kizáró-vagy (XOR) szabályai szerint összeadjuk, és a kimenetként kapott érték képezi a gray-kódtáblánk második oszlopát. (Jelen esetben 0+1=1) - Minden további gray-kódoszlopot az előbbi szabály szerint kapunk meg. (Jelen esetben a harmadik oszlop: 1+1=0, negyedik oszlop: 1+0=1, ötödik oszlop: 0+0=0, utolsó oszlop: 0+1=1) - A kapott érték: 010101 (A mellékletben található összefoglaló táblázatban ellenőrizhető) 3. Gray-kód bináris-kóddá alakítása Ezennel eljutottunk a Projekt-feladatom fő témájához. A gray-kódból binárissá alakítás első ránézésre épp oly egyszerűnek tűnik, mint az imént tárgyalt átalakítás, viszont ha ugyanazokat a szabályokat alkalmazzunk a kódolásnál, akkor óhatatlanul hibá(k)hoz vezet a kódolási folyamat. Nézzük tehát meg, mely hibákat kellett kikorrigálni: Gray-kód Bináris-kód Gray-kód Bináris-kód 0000 0000 1100 1000 0001 0001 1101 1001 0011 0010 1111 1010 0010 0011 1110 1011 0110 0100 1010 1100 0111 0101 1011 1101 0101 0110 1001 1110 0100 0111 1000 1111
Az iménti táblázatban megvastagítva valamint aláhúzva ábrázoltam azokat a bináris számjegyeket, amik már hibásan jelennének meg, ha csak a B G átalakítás szabályai szerint kódolnánk. Szükséges tehát további szabályt felállítani a dekódoláshoz. Ha jobban megvizsgáljuk a bináris táblázatot, akkor szembetűnő, hogy hibás értékeket csak ott kaptunk, ahol a kettővel nagyobb helyértékű bináris oszlopban egyes érték szerepel. Ha most ismét visszagondolunk a kizáró-vagy (XOR) kapcsolásra, akkor szembetűnő, hogy csak akkor negálja a kimeneti értéket, ha van egy zavaró jel. Minden további esetben a bemenet megegyezik a kimenettel. Tehát: Értelmezzük az A bemenetet alapjelként. Legyen B a zavaró jel. Q pedig legyen a kimenet. Az igazság táblázat a következőképp fog kinézni: A B Q 0 0 (nincs) 0 (Bemenet = kimenet) 1 0 (nincs) 1 (Bemenet = kimenet) 0 1 (van) 1 (Negálódik a bemenet) 1 1 (van) 0 (Negálódik a bemenet) Ez pedig nem más, mint az XOR kapcsolás, és pont erre van szükségünk, mert a bináris táblázatban kettővel nagyobb helyértékű oszlopoknál az egyes érték lesz a zavaró jel, amely befolyásolja a kimeneti értéket. Így tehát már csak egy további szabályt kell bevezetnünk a dekódoláshoz, mégpedig az a következő: - Ha a bináris kódtáblánkban a kettővel nagyobb helyértékű oszlopban egyes érték szerepel, akkor negálnunk kell az aktuális kimeneti értéket a helyes eredmény elérése érdekében. Ezt a negálást pedig a kizáró-vagy (XOR) kapuval/kapukkal érhetjük el legegyszerűbben. 4. Mellékletek A kizáró-vagy (XOR) érintkezők alkalmazásával /szemléltető ábra/:
A kizáró-vagy (XOR) IC-s kapcsolással: Egyetemes Gray Bin kódátalakító kapcsolás: Gray Bin 4 bitre egyszerűsített kapcsolás:
Különböző kódolások rövid összefoglaló táblázata: Decimális-kód Gray-kód Bináris-kód Binárisan kódolt decimális 00 00000 00000 0000 0000 01 00001 00001 0000 0001 02 00011 00010 0000 0010 03 00010 00011 0000 0011 04 00110 00100 0000 0100 05 00111 00101 0000 0101 06 00101 00110 0000 0110 07 00100 00111 0000 0111 08 01100 01000 0000 1000 09 01101 01001 0000 1010 10 01111 01010 0001 0000 11 01110 01011 0001 0001 12 01010 01100 0001 0010 13 01011 01101 0001 0011 14 01001 01110 0001 0100 15 01000 01111 0001 0101 16 11000 10000 0001 0110 17 11001 10001 0001 0111 18 11011 10010 0001 1000 19 11010 10011 0001 1010 20 11110 10100 0010 0000 21 11111 10101 0010 0001 22 11101 10110 0010 0010 23 11100 10111 0010 0011 24 10100 11000 0010 0100 25 10101 11001 0010 0101 26 10111 11010 0010 0110 27 10110 11011 0010 0111 28 10010 11100 0010 1000 29 10011 11101 0010 1010 30 10001 11110 0011 0000 31 10000 11111 0011 0001 Győr, 2005. április 23. Bodogán János