20.5 Ještě nějaké čítače?

Samozřejmě, že jsou na skladě. Třeba takový Johnsonův čítač.

Představme si řetěz obvodů typu D, podobně jako u výše zmíněných čítačů. Každý vstup D je připojen na výstup Q předchozího obvodu. Vstup D prvního obvodu v řadě je zapojen na invertovaný výstup /Q posledního obvodu.

Všechny klopné obvody mají spojený vstup CLK, a všechny mají vyvedený vstup CLR (Reset).

Začíná se od stavu 0000, a čítač nabývá postupně hodnot 0000, 0001, 0011, 0111, 1111, 1110, 1100, 1000 – a pak zase od 0000. Počítá tedy v takzvaném „Johnsonově kódu“…

20.5.1 Johnsonův kód

Klasický binární kód má jednu nevýhodu – někdy se mění hodnota více bitů najednou, třeba při přechodu ze stavu 0011 do stavu 0100 se mění rovnou tři bity. Pokud změna probíhá pomaleji a ne (ideálně) najednou, objeví se postupně sekvence velmi rychlých změn, např. 0011 -> 0010 -> 0000 -> 0100. Pokud je další zařízení dostatečně rychlé, může tyto změny zaznamenat a fungování obvodů bude narušené. Někdy to lze vyřešit změnou obvodového řešení, ale někdy taková možnost není. Proto se používají i kódy, kde se při přechodu mezi stavy mění vždy hodnota jednoho jediného bitu. Johnsonův kód je příklad jednoho takového kódu. Pro N bitů může nabývat 2N kombinací, jak jsme si ukázali výš.

Čtyřbitový Johnsonův kód tvoří postupně tyto hodnoty: 0000, 0001, 0011, 0111, 1111, 1110, 1100, 1000.

20.5.2 Grayův kód

Další podobný kód je kód Grayův. Vychází z binárního kódu, ale čísla jsou přeuspořádaná tak, že mezi dvěma po sobě následujícími stavy se také mění hodnota právě jednoho jediného bitu:

Hodnota

Binárně

Grayův kód

0

0000

0000

1

0001

0001

2

0010

0011

3

0011

0010

4

0100

0110

5

0101

0111

6

0110

0101

7

0111

0100

8

1000

1100

9

1001

1101

10

1010

1111

11

1011

1110

12

1100

1010

13

1101

1011

14

1110

1001

15

1111

1000

Grayův kód se používá místo binárního tam, kde by případná změna více bitů nemusela proběhnout přesně ve stejný čas. Navíc se poměrně snadno převádí na binární a zpět, pomocí operace XOR. Pokud si bity binárního kódu označíme jako b3-b0 a Grayova kódu jako g3-g0, tak převodní vzorce jsou jednoduché:

g0 = b0 XOR b1

g1 = b1 XOR b2

g2 = b2 XOR b3

g3 = b3 XOR 0 = b3

Tedy vždy jako XOR daného bitu a bitu o řád vyššího (u nejvyššího bereme nulu).

Představte si, že máte cosi, co se otáčí, a vy chcete vědět, jakým směrem je to natočené. Pro jednoduchost řekněme, že vám to stačí znát s přesností plus minus 45 stupňů. Připevníte k otáčivé věci kolo, to si rozdělíte na osm segmentů, a protože osm hodnot zakódujete do tří bitů, tak si uděláte tři soustředné kružnice. A v nich si některé segmenty vybarvíte a jiné ne, takže pak budete moci prostým způsobem, třeba optickým snímačem, určit, jak je kolo natočeno.

První pokus bude vypadat nějak takto:

Jenže stačí drobná nepřesnost, a hned v pozici „nahoře“ vám vznikne přechod 001 – 011 – 010, popřípadě 001 – 000 – 010. Když použijeme Grayův kód, nic takového nehrozí:

Last updated