Může mi někdo konečně říct, co to ten jednochip vlastně je ?

Jelikož dostávám různé dotazy ohledně jednochipů a není absolutně v mých silách odpovídat vyčerpávajícím způsobem na každý dotaz, rozhodl jsem se napsat tento článek, který by Vám měl pomoci v začátcích s jednochipy. Už na začátku je mi jasné, jak rozdělím odstavce a už teď je mi jasné, že se nedá přesně dodržet rozdělení, protože vše souvisí se vším. Dále tento článek nemá být návodem, ale jen jakási skica, tedy jakýsi monolog, který má dát začátečníkovi jakousi představu, co to ten jednochip vlastně je.

Co jednochip je a k čemu se vlastně hodí

Jednochip je vlastně zkrácený název pro jednochipový mikropočítač. Někdy také říkáme procesor. Je to jen otázka toho, jak se to vezme. Měkdy také microcontroller. Zapomeňte na to, co si pod pojmem počítač představujete. Zapomeňte na monitor, zapomeňte na klávesnici, zkrátka si představte krabičku se spoustou nožiček. Co teď s tou krabičkou můžete dělat ? Můžete sledovat stav napětí na jednotlivých nožičkách neboli pinech, tedy spíše jen je-li vysoké nebo nízké a nebo můžete napětí na pinech nastavovat do těchto dvou úrovní. To můžete dělat pomocí programu. Tedy v takové krabičce se provádí program, který se ptá, je na prvním pinu nízká úroveň napětí ? Pokud ano nastav na pinu 6 vysokou úroveň na sekundu a pak ji dej do nízké, pokud ne, pak udělej něco jiného atd. V podstatě je jednochipu úplně jedno, jestli tou nožičkou bude rozsvěcovat LED diodu, zapínat elektrické topení nebo vařit kávu a zrovna tak je mu jedno, jestli se na vstupním pinu napětí zvýšilo v důsledku poklesu hladiny kapaliny nebo upadnutí špatně připájeného spoje. Prostě jde jen o to, aby program prováděný jednochipem podchycoval stavy napětí na pinech a na jiných nebo i stejných pinech generoval odpovídající odezvu. Nebo je také možné generovat jen určité stavy, bez jakéhokoli sledování stavů, například blikat LED diodou nebo pískat piezoměničem. Použití jednochipů je velice široké. Od naprosto jednoduchých aplikací, kde jednochip může nahrazovat nějaké hradlo, čítač a podobně a to se zcela speciálním chováním, takže vlastně nahradí sadu hradel a zapojení je pak mnohem menší, nebo i lacinější, až po velice složitá zařízení pracující ve velice obtížných situacích a tam, kde každou chvíli dojde ke zničení takového zařízení a cokoli dražšího by se nevyplatilo. Pokud je jednochip dostatečně výkoný, pak může zvládat operace, jako je dekódování placené televize u kabelových společností, nebo pokud je méně výkoný, pak řídit mirovlnku, hodiny, pračku, myčku nebo domácí kávovar a uvařit ráno v nastavenou hodinu kávu a držet ji teplou nastavenou dobu. Můžete použít jednochip třeba i na dynamické řízení několika LED sedmisegmentovek a co má svítit řídit sériovým portem PC. Prostě fantazii se meze nekladou a hlavně za poměrně málo peněz, si můžete vyhrát s jednochipem do sytosti. Zkrátka pokud má FLASH paměť programu, pak až Vás omrzí v jedné aplikaci, přeprogramujete ho na něco jiného a zapíchnete do patice jiného zařízení. Navíc na rozdíl od jiných integráčů si jich můžete koupit do zásoby více, protože ještě nemusíte vědět k čemu budou, zatímco u specializovaných integráčů je to dopředu jasné. Zatímco jednochipem nabíjení NiCd akumulátoru uřídíte, obvodem pro řízení nabíjení budete asi dost těžko vysílat sériové seqence dat do nějakého portu v naprosto speciáním protokolu. Když už jsme u těch protokolů, je jednochip vlastně tou nejjednodužší možností, jak řídit některé specializované obvody, jako například frekvenční syntézu, takže lze při poměrně malých nákladech vyrobit opravdu komfortní ovládání rádia.

Napájení

Pokud za jednochip nepovažujete dřevěné kuličky na kusech drátů, pak jistě budete potřebovat nějaké napájecí napětí. Většina běžně používaných jednochipů běží při napájení 5V. Některým stačí i 2.7V (AT89C2051, AVR), popřípadě rozsah 2.7 až nějakých 7V, což ale už může být z hlediska dalších obvodů připojených k jednochipu trochu hodně a je to i maximální hodnota, kterou většina CMOS jednochipů přežije. Sice jsem jednou poměrně dlouho napájel AT89C51 omylem 12V, což nesvědčí o mé odvaze, ale o tom že jsem trouba a nerozeznám sovorky zdroje, a chip pracuje dodnes, ale nedoporučuji následovat mého příkladu. Nezáměrně jsem zkoušel i přepólování 5V opačným zasunutím chipu do patice a mohu prohlásit, že 2 sec. AT89C52 bez trvalých následků přežil. Co je dle mého názoru důležité, je blokovat napájení keramickým kondenzátorem 10-100n a to co nejbíže k pinům napájení. On takový jednochip totiž generuje poměrně slušné rušení a kondenzátor na napájení je cesta, jak jej snížit. Další věcí je, že některé integráče, bez blokování na napájení, mají kladný vztah k nechtěnému kmitání. Pokud jednochip nepoužijete s napájením akumulátory, nebo tam, kde silně záleží na spotřebě, pak není od věci použít pro stabilizaci napájecího napětí nějaký třísvorkový stabilizátor jako např. 7805 nebo 78L05. Volbu zdroje napájení je třeba si alespoň trochu rozmyslet. Pokud například plánujeme připojení několika sedmisegmentovek, může se ukázat maximální proud 78L05 nějakých 100mA (většinou dodá o něco více) málo. Právě tak asi není potřeba 1A stabilizátor pro holý jednochip s jednou 2mA LED diodou a tlačítkem. Pozor na stabilizátory 7805. Většinou i naprázdno (tedy bez zátěže) dávají kýžených 5V, ale některé kusy se umoudří, až když dávají několik mA. Sám jsem tomu uvěřil, až když jsem jeden takový kus zakoupil. Takže pokud jednochip poběží na nízkém kmitočtu a nebude k němu připojeno nic, což by stále odebíralo nějaký proud, pak není od věci připojit například LED diodu sériově s odporem k napájení paralelně k jednochipu, takže máme přehled o napájení a zaručen minimální odběr produ ze stabilizátoru. Při velkých odebíraných proudech ze stabilizátoru, např. již vzpomenutými LED sedmisegmentovkami, nezapomeňte na kus chladiče na stabilizátor. Již jsem nakousl nízké kmitočty. Ony totiž CMOS obvody požírají nejvíce proudu, když se překlápí z jednoho stavu do druhého. Tedy čím méně kráte se překlopí, tím méně spotřebují. Tedy nižší taktování znamená i nižší spotřebu a tedy pro napájení z bateríí je vhodné volit kompromis, mezi ztrátou výpočetního výkonu a spotřebou. Volit nižší napájecí napětí pro napájení z bateríí je rozumné. Je třeba si jen dát pozor, při jakém kmitočtu je potřeba jaké napájecí napětí. Jeho snížení totiž může znamenat nefunkčnost jednochipu na vyšším kmitočtu. Některé jednochipy jako např. PIC12C508 běží hezky i s krystalem 32.768Hz přičemž je spotřeba opravdu minimální - ovšem výkon také. Ke snížení spotřeby jednochipu lze také přispět tak, že jednochip v době, kdy od něj nic nechceme, převedeme do úsporného režimu programem, tedy pokud to konkrétní jednochip umí (většinou ano).

Taktování jednochipu

Každý jednochip dnešní koncepce je taktován kmitočtem, buď z externího, nebo interního oscilátoru. Obvykle je jednochip vybaven invertorem, ke kterému se připojí krystal a dva kondenzátory. Například jednochipy řady 51 (AT89C51 ,AT89C2051 apod.). Krystal musí být na první harmonické. Tedy vlastně nemusí, ale s krystalem 24MHz na třetí harmonické poběží oscilátor jednochipu na 8MHz. Někteří prodejci jsou takoví odborníci, že Vám nebudou schopni říci, jestli je krystal který drží v ruce, na první harmonické. Všem obchodníkům, kteří vědí co prodávají a vědí to za rozumné ceny se omlouvám. Do 20MHz jsou krystaly na první harmonické běžné. Krystaly jsou běžně k dostání buď v pouzdře HC49, což je velikost zhruba 14x12x5mm nebo v miniaturním provedení o velikosti zhruba 4x12x5mm. Někdy, tedy poměrně často, se používají krystaly 11.0592MHz nebo podobné nekulaté kmitočny a to z důvodu přenosové rychlosti sériového portu jednochipu, který je na kmitočtu oscilátoru závislý. Pokud jednochip nemá hardwarově sériový kanál implementován, pak se Vám mohou různé nekulaté hodnoty hodit i tak, buď pro softwarové vytvoření sériového kanálu, nebo pro přesné řízení času a pod. Za krystal na běžném kmitočtu zaplatit 30 a více Kč začátkem roku 2001 je nesmysl. 20-25Kč je cena akceptovatelná, tedy maloobchodní s DPH. Při jiných cenách jsou možné následující varianty:

  • Tento článek už je trochu zaprášený.
  • Vzbudil jsem kamaráda po půlnoci, jestli nemá krystal a budu vděčný i kdyby neměl.
  • Vypájel jsem ze staré desky použitý krystal a "mám to zadarmo".
  • Prodavač nebo jeho zaměstnavatel se zbláznili.
  • Ekonomika této země už zase funguje.
  • Je nejvyšší čas emigrovat (stejně mi není jasné, kdo dluhy této země zaplatí a já je nevyrobil).

Samozřejmě, že lze jednochip taktovat i z externího oscilátoru zapojeného například dle obrázku. Většina jednochipů pracuje v rozsahu frekvencí 0Hz až několik jednotek až desítek MHz, tedy mohou se taktovat ve velkých mezích frekvencí, nebo dokonce taktování zastavovat. Některé jednochipy lze taktovat mimo jiné i z externího RC oscilátoru, nebo z interního RC oscilátoru (např. PIC12C508, AT90S1200). K zapojení externího oscilátoru pak stačí pouze jeden odpor a jeden kondenzátor a požadovaný kmitočet zvolit jejich hodnotami. K zapojení interního RC oscilátoru nepotřebujete ani to, stačí zapojit napájení a o taktování ani nevíte, ale jede. Bohužel, nic na světě není zadarmo a tak se musíte u RC oscilátoru v jakékoli podobě spokojit s podstatně menší stabilitou kmitočtu než u krystalového oscilátoru. Čemu to vadí nelze jednoznačně odpovědět, pokud ještě nevíte, k čemu bude jednochip sloužit. Pokud bude například ovládat nějaký spotřebič v závislosti na teplotě, osvětlení apod. a nepoužijete k tomu měření délek pulsů, ale výstupu AD převodníku, pak je to opravdu jedno. Některé jednochipy jako PIC12C508 jsou na použití interního oscilátoru jako dělané, protože pak si uvolníte 2 piny zbylé po nepoužitém krystalu pro IO bránu a citovaný jednochip má jen 8 pinů i s napájením. V závislosti na chipu, lze buď vypálením konfiguračních bitů o typu oscilátoru rozhodnout, nebo je dán výrobcem a při koupi jednochipu již musíte vědět, s jakým oscilátorem poběží (Některé PIC). Oscilátor může také být zapojen jako hradlo, jehož výstupem je taktován jednochip, takže je jedno, jestli toto hradlo kmitá samo, nebo je zvenku krmeno kmitočtem do vstupu. Zmíním se ještě o jednochipu AVR AT90S1200 fy. ATMEL, který obsahuje i interní oscilátor, avšak abyste jej nastavili, budete muset chip programovat paralelně, což nejjednodužší programátory neumožňují, jelikož programují AVR sériově - příliš se o tom nemluví. Lze také koupit AT90S1200A, který je z výroby přepnut na interní oscilátor (vypálen RCEN bit). Je to myslím jediný rozdíl ve verzi A a bez A. Zmíním se ještě o oscilátorech na nízkých kmitočtech. U některých chipů lze zapojit např. 32.768kHz krystal do náramkových hodinek rovnou, u některých je třeba vypálit konfigurační bity pro LP (PIC). Získáte tím velmi malou spotřebu a u krystalu 32.768kHz i velmi příjemný časový interval například pro bateriemi zálohované hodiny, kterým zhasne při výpadku napájení display, ale baterie napájí jednochip dál. Navíc pro hodiny takové taktování většinou stačí. Kolik taktů trvá instrukce závisí na typu jednochipu. U řady 51 je jeden cyklus 12 period oscilátoru a instrukce trvá 1 až 3 cykly, u PIC je cyklus 4 periody oscilátoru a instrukce trvá 1 cyklus (odskok 2) a u AVR trvá instrukce 1 až 5 period oscilátoru (většina instrukcí 1). Zdálo by se, že 51 spotřebuje na všechno moc času. Ano je to vlastně tak i když 51 za tu delší dobu stihne složitější instrukce, není to více než stihne např. PIC. Klony 51 se také vyrábějí na vyšších kmitočtech (přes 30MHz) s interním násobením kmitočtu (DALLAS). Na českém trhu jsem je ovšem nezahlédl a po pravdě řečeno jsem je ani nesháněl, protože si dokážu živě představit jejich cenu. PIC většinou běží na nižší frekvenci, ale to už dnes taky tak úplně neplatí. Vyloženě rychlík je pak AVR. Pro začátek si myslím nejsou PIC ani AVR tak vhodné jako 51. Instrukční soubor 51, je dle mého sromného názoru, jaksi bližší lidskému vnímání světa. Pokud se chystáte jednochipy programovat v nějakém vyšším jazyce jako C apod., pak počítejte se snížením maximálního dosaženého výkonu. Netvrdím ale, že nemohou být efektivní překladače vyšších jazyků, chci jen říci, že správně napsanému programu v assembleru se nic nevyrovná i když to nebude zrovna skvost. Navíc 51 se dá celkem lehce sehnat ve verzi AT89C55 s 20kB FLASH paměti na chipu a běží i na 33MHz. Na tak vysoký kmitočet shánět krystal na první harmonické je zbytečné i když 33MHz je snad ještě proveditelné. Dá se ale koupit krystalový oscilátor, nebo ho vypájet z nějaké staré základní desky PC. V obchodě čekejte cenu za krystalový oscilátor okolo 100.- Kč. Jeho výhodou je přesnost a to, že jistě bude kmitat. Pokud jste někdy přetaktovávali PC procesor, pak věřte, že tady to jde také a také záleží na štěstí, kam až to půjde. AT89C51 - 20MHz mi pohodově 2roky běhá taktovaný krystalovým oscilátorem 24MHz.

Pokud obsahuje Vámi použitý jednochip POR (Power On Reset), pak je oscilátor v jakékoli tedy i interní podobě a napájení to jediné, co ke své práci jednochip potřebuje.

Reset

Jak jsem se již zmínil, některé chipy jako například PIC12C508, nepotřebují mít vyvedený ani RESET. Dá se vypálit bit pro MCLR (RESET) tak, že Vám zbyde další pin pro bránu, zde tedy jen vstupní. Pak se chip resetuje vždy po připojení napájecího napětí. U jednochipů 51 fy. ATMEL zase stačí připojit mezi pin RESET a +5V kondenzátor asi tak 10uF, protože interně je pin RESET připojen k zemi přes odpor asi tak 300k. Pokud ještě přidáte ke kondenzátoru odpor k zemi, a můžete třeba zvětšit i kapacitu kondenzátoru, pak jistě neuděláte chybu a zařízení bude resetovat při připojení napájení i s jednochipy 51 jiných výrobců, kterých není málo. Hezkým řešením je použít hlídač napětí např. TL7705, který Vám vždy zresetuje jednochip v okamžiku, kdy je napájení nižší než zhruba 4.5V a navíc po náběhu napětí na tuto úroveň přidrží RESET ještě po dobu zvolenou externím kondenzátorem. Co se týče AVR (tedy AT90Sxxxx), ty mají POR. U těchto jednochipů postačí ponechat /RESET nezapojen a resetují se vždy po dosažení určité úrovně napájecího napětí. Můžeme také /RESET připojit natvrdo k Vcc, nebo jen posílit vnitřní odpor PULL-UP nějakým párkilovým rezistorem mezi Vcc a /RESET. AVR mají RESET aktivní v opačné úrovni než AT89Cxx, tedy resetují se v nízké úrovni /RESET. Dokonce se dá u AVR zvolit konfiguračním bitem, jestli se má po nárůstu napětí na pracovní úroveň přidržet /RESET kratší nebo delší dobu, kde delší je myšlena hlavně pro zaručený start pomalu se rozbíhajících oscilátorů. TL7705 ale ani u AVR nemusí být právě na škodu. Pokud totiž použijete zdroj s pomalým náběhem napětí a jako okolní součástky chipy, pracující až od dejme tomu 4.5V, pak AVR bude pracovat dříve, než jeho periférie a tomu se právě dá zabránit tím, že přidržíme /RESET v nízké úrovni až do dosažení napětí oněch 4.5V. Samozřejmě se dají různé resetovací obvody z lepší či horší funkcí postavit jednoduše z pár diskrétních součástek a různých zapojení těchto obvodů existuje více. Některé jednochipy obsahují WDT (Watch Dog Timer). Tato hračka stručně řečeno slouží k tomu, aby se jednochip resetoval vždy, když nebude v určitém časovém intervalu obsloužen nebo spíš zresetován WDT. Jde o to, že program který se vymkne kontrole, přestane WDT nulovat a ten procesor po vypršení času zresetuje, čímž se navrátí řízení programu do normálních kolejí. Pokud má jednochip pracovat v silně zarušeném prostředí, nebo je důležité, aby jednochip běžel, je WDT cesta, jak trochu zvýšit spolehlivost systému. Trochu píši úmyslně, protože Vám může utéct nějaká důležitá událost, která se nepodchytí, nezaznamená do EEPROM apod. Prostě všelék na spolehlivost to není. Když už jsme u toho zarušeného prostředí, plechová krabice spojená s GND zdroje neuškodí. Pokud procesor WDT nemá, dá se vyrobit a to tak, že nějaký výstupní pin jednochipu obsluhuje externí obvod a ten pokud nedostane do určité doby puls, jednochip zresetuje. Samozřejmě po připojení napájení musí tento obvod umožnit jednochipu se rozběhnout a také nesmí v případě jeho neobsloužení držet jednochip v resetu navždy. WDT pracuje obdobně.

Paměť

V principu existují dvě možné architektury operační paměti. Buď je paměť pro data a program jedna a nebo je program zvlášť a data zvlášť. Druhá možnost je jednochipům přirozená. Pokud je totiž jediným médiem pro program nějaká ROM paměť, pak je celkem zbytečné ji přesouvat někam do RAM, ale je velice pohodlné, aby program z ROM běžel a data měl v RAM. Samozřejmě není nesmyslem ani druhá varianta. Pokud u 51 použijete externí RAM paměť a signál /PSEN a signál /RD spojíte AND hradlem a výstup spojíte se signálem /OE RAM paměti, signál /WR propojíte se signálem /WE paměti, pak můžete provádět i program z datové paměti. U procesorů 51 existuje vstup /EA, který říká, jestli se má použít interní paměť jednochipu pro program, nebo externí paměť programu. Protože jsou u 51 bity A0-A7 multiplexovány s D0-D7 do pinů AD0-AD7, je potřeba použít 74HC573 pro jejich oddělení a to tak, že do vstupů 74HC573 zapojíte AD0-AD7 jednochipu, AD0-AD7 také připojíte na datové piny paměti, výstupy z 74HC573 na A0-A7 paměti no a A8-A15 na A8-A15 paměti. Pokud je paměť menší něž 64kB, pak příslušné nejvyšší bity Ax vynecháte. Ještě připojíte signál ALE jednochipu na pin LE (v některé dokumentaci označeno C) 74HC573 a pin /OE (někdy označovaný /OC) 74HC573 na GND - tedy zem a je to. Co se externí paměti programu u 51 týče, je její čtení ovládáno signálem /PSEN, tedy patří do /OE ROM. 51 můžete mít až 64kB pro program a 64kB RAM pro data. Program u 51 může být buď celý v externí ROM (EPROM, FLASH), nebo část ve FLASH, EPROM či OTP jednochipu a zbytek v externí ROM a nebo celý v interní FLASH, EPROM nebo OTP. Je třeba si uvědomit, že použití vnější paměti Vám vezme brány P0 a P2 jednochipu a ještě piny P3.7 a P3.6 z brány P3. Tedy při použití externí ROM nebo RAM si jednochip značně ořežete o vstupy a výstupy. Pokud se k tomu chystáte, kupte si raději 80C31 nebo 80C32, které rovnou interní ROM nemají a stojí pakatel. 80C31 má 128B interní RAM, 80C32 má 256B a není o mnoho dražší. Pokud potřebujete hodně paměti programu a nechcete drátovat, kupte si AT89C55, má 20kB interní FLASH - tedy dá se mnohokráte jednodužše přepsat (výrobce říká 1000x). Procesory AT90S8515 mohou používat externí jen paměť dat, ROM programu je jen interní (FLASH). Rozhodně pro AVR doporučuji použití rychlých cache pamětí, vyhnete se tak čekacím cyklům při používání pomalejších pamětí. Dají se koupit i SRAM paměťi 6264 které jsou docela pomalé (70-100ns) a mají jen 8kB. Osobně je nepoužívám. Lze je občas najít na některých (opravdu jen některých) síťových kartách pro PC, z bazaru za pár korun, kde nahrazovaly 2ks těchto pamětí dnes obvykle na chipu integrovanou paměť 16kB u NE2000 kompatibilních, bohužel jsem na těchto kartách zahlédl jen SMD provedení těchto pamětí (karty SMC). Ještě se zmíním o tom, co je co.

  • OTP - Jednou vypálitelná paměť
  • EPROM - UV světlem mazatelná paměť s okénkem
  • EEPROM - Elektricky mazatelná paměť, tedy jednodužše přepsatelná, ať již paralelní nebo sériová
  • FLASH - Elektricky mazatelná paměť, tedy jednodužše přepsatelná
  • RAM - paměť pro zápis i čtení, která se smaže po odpojení napájení

Jako RAM k jednochipu se používají SRAM (statické RAM), nevyžadující obnovovací cykly narozdíl od DRAM. 32kB SRAM jsou levné, díky jejich používání jako cache u PC. Např. W24257 se dají objevit v mnoha starých základních deskách PC - mají 28Pinů v úzkém pouzdru. Samozřejmě vhodných typů je více např. 61C256 apod. Není od věci stáhnout od výrobce pdf soubor ke konkrétnímu typu. Bohužel zakoupit nové cache paměti v prodejnách v jiném něž SMD provedení již může dnes být problém. Ještě bych rád podotknul, že pokud do RAM paměti přistupuje jen jedno zařízení, zde tedy jednochip, pak není vůbec nutné zapojovat datové a adresové dráty ve správném, tedy odpovídajícím pořadí a klidně datové dráty promíchat tak, jak nám to nejlépe sedí na desku. S adresovými dráty se to má stejně, jen pokud nevyužijete celý adresní prostor, nechte na jednochipu volné nejvyšší adresové dráty. Pokud totiž vynecháte nějaký prostřední, naděláte si v adresovém prostoru guláš. Jistě nemusím připomínat, že pokud použijete k adresování například A0-A14, pak se Vám při klasickém zapojení /RD a /WR rovnou do paměti, prostor 32kB objeví dvakráte, tedy na adrese 0000H najdete totéž jako na 8000H. Je samozřejmě velice elegantní, použít drát A15 k multiplexování dvou párů /RD a /WR. Tím z A15, /RD a /WR vyrobíte 4 dráty, tedy můžete je nazvat /RDHIGH, /WRHIGH, /RDLOW a /WRLOW, kde použijete /RDLOW a /WRLOW pro přístup do 32kB paměti dat a druhý pár /RDHIGH a /WRHIGH Vám zůstane pro ovládání adresování 32768 osmibitových I/O portů, ke kterým se pak softwarově přistupuje stejně, jako by se přistupovalo do horních 32kB RAM paměti. Pokud Vám příkon RAM paměti není lhostejný, pak se vyplatí zapojit /RD a /WR do AND hradla a výstup hradla použít k ovládání /CS chipu. Paměť s neaktivním /CS (/ znamená aktivní v nízké úrovni) má totiž podstatně nižší příkon, než když je aktivní a takto ji nahazujete, jen když se z ní čte, nebo do ní zapisuje. Zase je ovšem něco za něco a nezbývá, než si ověřit v dokumentaci ke konkrétní paměti a konkrétnímu jednochipu, jestli paměť stihne i s probuzením předat či zapsat data v době závislé na kmitočtu taktování jednochipu. Pokud Vám může být spotřeba ukradena, pak spojte /CS nebo jak se všelijak může jmenovat CHIPSELECT s úrovní odpovídající aktivnímu chipu, tedy většinou GND zdroje a paměť je aktivní stále. Při použití 15ns cache pamětí z PC se vůbec nezabývejte tím, jestli to stihnou či nikoli, stihnou to vždycky. Pokud se Vám zdá, že jsem jaksi zapoměl na připojení RAM k PIC, pak asi proto, že s připojováním datové paměti k vyšším typům PIC, které to umožňují, nemám absolutně zkušenosti a to jaksi z důvodu vyšších cen vyšších typů PIC jednochipů.

Některé jednochipy obsahují ještě EEPROM paměť pro data. Je to obzvláště výhodné, pokud si má i po vypnutí jednochip něco pamatovat, tedy nějaké nastavené parametry apod. Některé EEPROM jsou připojeny přes I2C sběrnici, jiné mají vlastní speciální komunikaci s jednochipem. Je také možné si připojit k jednochipu externí EEPROM a to prakticky přes libovolné vstupně-výstupní porty. Například paměti s I2C sběrnicí se dají připojit dvěma dráty a dají se lehce sehnat až do kapacity 32kB.

Vstupně výstupní brány

Lze rozdělit do dvou kategorií. Jednou možností je, že I/O pin je přepínán programem buď jako vstup či výstup a to s možností toto přiřazení měnit i v průběhu programu (např. PIC), nebo jen vstup někdy s ST na vstupu (PIC). Druhou možností jsou brány, které slouží jako vstup i výstup zároveň a je toho dosaženo tím, že výstup je vlastně kolektor tranzistoru - tedy výstup s otevřeným kolektorem. Tento kolektor je připojen ke kladnému napájení přes odpor (PULL-UP). Pak je tedy možné naprosto v klidu takový výstup uzemnit a nestane se nic jiného, než to, že proud rezistorem pokračuje do země jinou cestou, než přes vlastní tranzistor a napětí na pinu se stáhne k zemi. Samozřejmě, pokud připojíme takovýto výstup na kladné napájecí napětí a tranzistor výstupu stáhneme programem k zemi, nemůže dojít k ničemu jinému, než zničení výstupního tranzistoru. Pokud je tedy na výstupu jednochipu nahozena vysoká úroveň, pak ji lze externě stáhnout k zemi a protože vstup do jednochipu se bere přímo z pinu, je nízká úroveň i přečtena. Takto pracují jednochipy řady 51. Odpor PULL-UP, tedy z kladného napájení k pinu bývá okolo 50k, přičemž v okamžiku nahození pinu do vysoké úrovně je značně snížen a to z důvodu rychlého nabití kapacity připojeného vstupu periférie. Pokud tedy budete na výstup takového pinu připojovat NPN tranzistor jako BC548C apod., pak můžete spojit bázi přímo s výstupem z jednochipu a emitor do GND, tedy země. Připojení tranzistoru se může leckdy hodit. Výstupy jednochipu dle typu snesou sice poměrně velká zatížení (jednotky až desítky mA), ale celkový proud bránou a jednochipem bývá také stanoven. Takže se může stát, že proud každým jednotlivým pinem by jednochip lehce zvládnul, ale celkový proud jednochipem již překračuje jeho možnosti. Tyto poměrně důležité údaje hledejte vždy v pdf souborech k jednotlivým jednochipům. Je to vlastně jeden z prvních údajů, kterého je nutno si všímat při vlastním kreslení schémat. Jednochipy většinou snesou ledacos (některým kouskům jsem chvílemi velmi ubližoval), ale je lépe se vyvarovat takových stavů, on takový jednochip taky není zadarmo. Navíc na zařízení mimo povolené parametry se nedá nikdy spolehnout. Pokud budete k 51 připojovat obvod, který může generovat na výstupu tvrdé kladné napětí vyvedené do vstupu jenochipu, pak se dá zařadit mezi takové zařízení a jednochip ochranný odpor dejme tomu 1k, který při 50k PULL-UP odporu nehraje podstatnou roli a i kdyby se díky dejme tomu nízkému napájecímu napětí jednochip zbláznil a stáhl nyní pin k zemi, nic se nestane, protože přes něj poteče při 5V jen 5mA a nic se neděje. Někdy, když potřebujete trochu tvrdší vysokou úroveň, stačí připojit mezi výstup a kladné napájení odpor odpovídající Vašim představám. Tady zase jen pozor na přetížení výstupu velkým proudem. Pozor také na rychlé spínání výkonových MOSFET tranzistorů, které mají sice velký vstupní odpor, ale také velkou kapacitu vstupu (někde jsem viděl až nanofarady), takže pokud budeme takový tranzistor rychle spínat, vždy jen mírně nabijeme vstup, tranzistor se neotevře zcela a krásně topí. Navíc výstupní úrovně jednochipu jsou pro některé MOSFET tranzistory trochu málo. Velkému výstupnímu odporu lze samozřejmě pomoci posílením výstupu. Pokud chcete výstupy posílit, mohou se Vám k tomu hodit 74HC540 nebo 74HC541. U PIC jednochipů je situace opačná. Výstupy jsou tvrdé, ale pokud chcete pinem číst úroveň, pak musí být přepnut jako vstup. Zase můžete použít ochranný odpor, protože jako vstup má pin velkou vstupní impedanci. Je dobré si předem uvědomit, co bude jednochip řídit a jak a na základě toho si vybrat vhodný typ. Například pro příčkový DA převodník smontovaný z odporů se hodí rovnou výstupy z PIC, ale výstupy z 51 by bylo nutné nejprve posílit.

Přerušení

Některé jednochipy nemusí disponovat žádným přerušením, některé jich mohou mít mnoho. Přerušení může být vyvoláno úrovní signálu na externím pinu, přijetím nebo odesláním ze sériového kanálu, přetečením čítače nebo časovače, hotovým převodem AD převodníku u jednochipů jím vybavených, zkrátka nějakou událostí. V podstatě při použití přerušení jde o to, že nemusíme například neustále sledovat stav nějakého čidla připojeného na pin jednochipu přerušení vyvolávající, ale je vykonán podprogram, když čidlo stáhne úroveň na pinu k zemi. Další příklad je odeslání série bajtů sériovým kanálem. Vyšlete prostě bajt a pak pokračuje program něčím jiným. Po vyslání celého bytu, což může chvíli trvat, se vyvolá přerušení, které zařídí provedení podprogramu na odpovídající adrese, zde odeslání dalšího bajtu, a pak vrátí řízení zpět programu atd. Jednotlivá přerušení se dají zakázat nebo povolit a nebo je možno zakázat všechna přerušení. Pokud provádí v určitém místě program nějakou kritickou akci, kde by mohlo přerušení uškodit, můžeme jej zakázat. Například pokud budete generovat na základě trvání instrukcí puls na pinu o délce dejme tomu 10 mikrosekund a vznikne Vám během toho nějaké přerušení a obslouží se, pak se může puls pěkně prodloužit. Přerušení, pokud existuje, se dá také využívat k probouzení jednochipu, například z módu IDLE u AVR, do kterého uvedl jednochip program, aby snížil jeho spotřebu v době, kdy jakákoli činnost jednochipu je zbytečná a nyní potřebuje jednochip vzbudit, protože třeba hoří. Pokud uspíme jednochip programem ještě důkladněji, tedy do módu POWER DOWN, pak je u některých jednochipů jediná cesta jak jej vzbudit hardwarový reset jednochipu (jednochip v tomto módu dokonce vypne oscilátor). Konkrétní údaje co se u kterého jednochipu dá všechno vypnout a na co jednochip ještě v těchto módech reaguje, je nutné si zase ověřit v dokumentaci ke konkrétnímu jednochipu.

Sériový kanál

Ne každý jednochip je hardwarově vybaven sériovým kanálem. Ty které jím vybaveny jsou, jej mají implementován co se výstupních a vstupních úrovní týče v CMOS nebo TTL. Tudíž klidový stav sériového portu je ve vysoké úrovni, startbit v nízké, následují datové bity a pak stop bit v klidové, tedy vysoké úrovni. Mluvím tady o klasickém sériovém přenosu, který používají u portů RS232 i PC. Problém je jen v tom, že RS232 má napěťové úrovně v klidovém stavu od -3V až po nějakých -15V a opačné úrovně +3V až +15V. Pro přenos mezi jednochipem a RS232 je tedy nutné použít nějaký převodník. Buď můžete využít MAX232 nebo jeho klony jako je ICL232 a nebo použít převodník s galvanickým oddělením optočlenem. ICL232 je samozřejmě lacinější (necelých 40 Kč i s DPH v maloobchodě). Ke své práci tyto obvody vyžadují jen napájení +5V a záporná a vyšší kladná napětí si generují samy nábojovou pumpou, pro jejíž činost vyžadují připojení 4ks kondenzátorů. Kondenzátory mívají kapacitu 22uF a stačí elektrolytické na 16V i když jsem již viděl i jiné hodnoty a dokonce v tantalu, což se mi zdálo trochu drahé až do chvíle, než jsem zjistil, že ony tantaly pocházejí ze staré základní desky PC. Jen pozor na polaritu kondenzátorů. Četl jsem, že některé klony MAX232 mají polaritu některého kondenzátoru opačnou. Osobně vlastním dvoje různé klony od 2 výrobců a oba typy mají polaritu správnou. Proměřením polarity napětí na kondenzátorech po připojení napájení jistě nic nezkazíte. Pokud zapojíte jen TXD a RXD, tedy vysílající a přijímající pin jednochipu, pak jakýkoli hanshaking je nutné řešit jedině softwarově, nebo lze zapojit další I/O jednochipu a vyrábět handshaking hardwarový, což je možné, ovšem ne příliš často používané. Jelikož MAX232 a jeho klony obsahují na každou stranu 2 převodníky, není při použití pouze jednoho páru od věci připojit TTL vstup volného převodníku k nějaké logické úrovni a spojit výstup v úrovni RS232 se vstupem RS232 opačného převodníku. Prostě jen ošetřit nezapojené 2 převodníky, ať nevisí ve vzduchu. Lze samozřejmě také využít napětí z výstupu nevyužitého převodníku k napájení třeba operačního zesilovače, jež potřebuje 2 napájení a nemá velkou spotřebu, nebo tam kde to potřebujeme. Ještě jsem se nezmínil o tom, že je možno sériový kanál přepínat programem do různých módů (dle typu jednochipu), například pro komunikaci mezi dvěma a více jednochipy, která je podstatně rychlejší než klasická, tedy má vyšší přenosovou rychlost, nebo je také možnost obdržet výstup datových bitů doprovázených hodinovým výstupem pro potvrzování platnosti každého bitu. Některé jednochipy sériový kanál nemají vůbec a navíc mají velice málo I/O pinů (PIC 12C508), takže by se určitě sériová komunikace hodila. Nemusíme ovšem lámat hůl. Není nic jednodužšího, než připojit na I/O piny buď posuvný registr, třeba 74HC595 a hned máme osmibitovou výstupní bránu, nebo pomocí spočítání doby trvání instrukcí si pomocí programu vytvořit odpovídající pulsy sériového kanálu na výstupním pinu sami softwarově. Jde jen o to, kdy se vyplatí ještě se něčím takovým zabývat a kdy už je výhodnější si koupit buď jednochip s větším počtem I/O pinů nebo se sériovým kanálem.

Programování chipů - vložení programu do jednochipu

Co se týče PIC12C5xx můžete nalézt originální programátor i na těchto stránkách v jiné kapitole. Co se týče programování 51, pak až na vyjímky budete potřebovat trochu složitější programátor a to jen z důvodu, že je nutno je programovat paralelně. Paralelní port ale bohužel má trochu omezený počet pinů a tak jak jej původně vymysleli, jistě neměl sloužit programování chipů. Takže nezbývá než počet vstupů a výstupů nějak zvětšit a to je vlastně mimo spínání napájení a programovacího napětí chipu všechno, co tyto programátory dělají. Na internetu najdete těchto konstrukcí mnoho. Jednu vlastní konstrukci jsem také vyrobil. Nicméně si myslím, že není příliš mnoho lidí, kteří potřebují dekódovat z paralelu tolik drátů jako já a spíše je výhodnější sáhnout po nějaké kompletní verzi, než po jakémsi torzu, sice se spoustou možností programovat cokoli, nicméně s potřebou neustále někde něco přepisovat a připisovat v programu. U AVR existuje možnost programovat chip přímo v desce, tedy je možno si AVR zapájet přímo do desky plošných spojů, nechat si vyvedené piny pro programování na konektoru a programovat AVR pomocí jednoduchého přípravku. Návodů na jejich zhotovení včetně software je opravdu dostatek a nejjednodužší se dají smontovat doslova za tří odporů nebo z jednoho 74HC244 + konektory. Atmel v aplikačních listech doporučuje křísnout AVRkama o sebe, tedy jedním naprogramovaným AT90S1200 programovat další AVR. Je to fajn, ale pokud nemáte někoho, kdo Vám křísne první nebo jej nekoupíte, pak je jasným začátkem této konstrukce 74HC244 nebo 3 odpory do paralelu. Pokud použijete vnější paměť programu (třeba u 80C31), pak je samozřejmě nutné programovat tuto paměť. Já používám AT29C512, což je FLASH paměť 64kB, pro takovéto prototypy a u hotového výrobku používám levnější EPROM jako například 27C256 (32kB) nebo 27C512 (64kB). Pro programování dobře známým jednochipů, není nutné kupovat žádný komerční produkt či vývojové prostředí. Web je plný dostatečně funkčních řešení zdarma. Co se týče programátorů jednochipů, pak buď sáhněte po jednochipu se sériovým programováním, pro který se dá lehce vyrobit programátor i na univerzální desce plošných spojů (někdy i do konektoru), nebo si vyrobte jakýkoli programátor dle návodu, popřípadě si kupte stavebnici. Je totiž jasné, že pokud si někdo nedokáže připájet, byť i nehezky, ani součástky do programátoru, budou mu znalosti jednochipů jaksi nanic. Zkrátka stačí se nebát a být opatrný :-).

Shrnutí nejen vzhledem k cenám chipů

Nebudu se zde zmiňovat o přesných cenách, které stejně za měsíc nemusí platit. Takže jen naznačím jak na ceny, nebo v krajním případě uvedu poměry z počátku roku 2001. Pokud je aplikace jednoduchá a nepotřebujete mnoho I/O pinů, pak jsou jednoznačně nejlepší volbou PIC12C508A, které jsou kupodivu levnější než PIC12C508 (rozdíly jsou při cenách kolem 50Kč za kus s DPH v pár korunách). Další takovou levnou volbou je 12C509, 12C509A, 12CE518 a 12CE519 z nichž poslední dva jmenované mají dokonce v jednom pouzdru i 16B (opravdu jen šestnáct bytů) paměti EEPROM s rozhraním I2C. Všechny jmenované běží do 4MHz, jiné jsem v prodeji neviděl. Prodávají se běžně v komerčním i průmyslovém provedení, přičemž za průmyslové provedení nepřiplatíte ani celých 10%, takže je-li nejmenší pravděpodobnost, že poběží mimo teplotní rozsah komerčního provedení, třeba v autě za mrazu, pak určitě těch pár haléřu za průmyslové provedení obětujte. Dle jejich označení průmyslové poznáte dle písmene I (Industry) za označením chipu - např. opsáno z chipu: 12C508A a na dalším řádku 04I/P a další tři písmenka, kde 04 udává maximální kmitočet. Na komerčním pak na druhém řádku bude 04/P a další 3 písmenka. Bohužel neexistují ve variantě s FLASH pamětí programu, alespoň o tom nevím. Jsou tedy OTP a dají se vypálit jen jednou, nebo existují ve verzi EPROM s mazacím okénkem, kde je cena tak příšerná, že při vývoji raději zničím pár OTP, než bych tu příšernost koupil. Pěknou volbou je 16C505, který je v pouzdru DIL14 a má tedy více I/O pinů, jinak se od PIC12C5xx prakticky neliší. Chipy 16C54,55,56 nepoužívám, nezdají se mi výhodné, ale u těchto chipů neberte můj názor příliš vážně, raději se na jejich ceny podívejte sami. PIC 16C84 a 16F84 nejsou špatnou volbou, ale jejich cena se mi také právě nezamlouvá. Nicméně za 10MHz verzi to nejsou vyhozené peníze, chip se dá elektricky smazat, tedy je velice vhodný pro různé testovací účely nebo jako chip do zásoby, když ještě nevíme k čemu bude. Je výkoný a pokud potřebujete jednoduché akce za krátký čas, pak je to alternativa k AVR. Rozhodně to není špatný dárek k narozeninám. Jen ho prosím Vás nedávejte manželce nebo tchýni s tím, že jsem Vám to poradil. Proč říkám dárek ? Inu zručnější dítě pro něj zhotoví programátor i s prstem v nose. No a teď k ATMELům. Píšu ATMELům, myslím řadu 51. Oni i jiní výrobci vyrábějí 8051 a klony, ale buď nemají FLASH paměť, tedy nejsou elektricky mazatelné, nebo jsou drahé. Takže se nakonec neATMELí jednochip řady 51 asi nejvíce vyplatí u 80C31 a 80C32. Pozor na to písmenko C uprostřed. Pokud tam totiž není, není procesor CMOS a tudíž neskutečně žere proud a navíc může mít i RESET v opačné úrovni. Rozhodně koupit bez C jedině na řetízek na krk a to po provrtání vrtákem vhodného průměru. Naopak 80C32 koupit určitě a bude určitě nejlevnější z toho o čem jste zde četli. Ale pozor, nemá pro změnu žádnou paměť programu. Nicméně připojit AT29C512 (přes 74HC573) je hračkou a získáte tím systém s výkonem vyšším než byly legendární domácí počítače ZX Spectrum. Jen pozor na maximální frekvenci. Jsou k mání od různých výrobců a taky pracující v různých frekvenčních rozsazích. Nebojte se připojování sběrnice, nemusí to v prototypu vypadat super a dá se to pospojovat napůl plošňákem a napůl zvonkovým drátem. Pokud to pak chcete nabízet komerčně, desku Vám někdo vyrobí. Nemá cenu hned kupovat fabriku. Osobně si s tím nelámu hlavu, pospojuju na desku co vyjde a pro zbytek si nechám na desce místo pro hezké zapájení drátu, které pak pěkně vedu po desce na straně součástek, popřípadě dráty posvazuju, aby neplandaly. Podívejte se na nějakou hodně starší desku a hned zjistíte, že to co právě děláte není neschopnost, ale jakási nostalgie (abych si to nějak zdůvodnil :). Jednodužší je koupit AT89C51 se 4kB FLASH paměti nebo AT89C52 s 8kB. Vyrábí se i v průmyslovém provedení a dají se v něm i sehnat. Cena AT89C51 v jednu dobu klesla pod 60Kč v jedné Pražské prodejně a dodnes si rvu vlasy z hlavy, když si vzpomenu, že jsem mohl koupit bednu za babku a teď, ač je to podivně nezpůsobeno inflací, stojí kolem 130Kč za AT89C51. Cena to není určitě zlá a pořád se za ni vyplatí chip koupit, ale už to není to nadšení co dříve. Běžně se prodává 20MHz varianta. O co jde se pozná dle označení za jménem chipu kde číslo udává frekvenci v MHz a PC znamená komerční, PI pak průmyslové provedení. Setkal jsem se i s tím, že je prodavač nerozlišuje, takže můžete koupit PI za cenu PC, což Vám jistě vadit nebude. Samotnou kapitolu by si jistě zasloužily AT89C1051, AT89C2051 a AT89C4051. Jsou to 51, jen se nedá připojit externí paměť ani dat ani programu. Pokud někdo namítne že dá, tak tedy dá, ale jen přes piny bran s obsluhou více instrukcemi a se záchytnými buffery a velikostně se pak nic neušetří oproti plné 51, takže je o tom zbytečné polemizovat - jen kdyby se našel nějaký rejpal. Všechny ostatní vlastnosti odpovídají plnokrevné 51. Jinak na AT89C1051 zapomeňte, málokdo ji prodává a když už, není levněší než AT89C2051, která má 2x tolik paměťi, tedy celé 2kB (ne jedenkráte tolik, 1 krát 1 je zase jedna - zase pro rejpaly). AT89C4051 má 4kB, vyplatí se jen tehdy, když se Vám program do 2kB opravdu nevejde. Co je u nich hezké je to, že spolehlivě běží od napájení 2.7V. Běžně se vyrábějí pro 24MHz a to jak průmyslové tak komerční. Cenově jsou srovnatelné s AT89C51. Pokud nepotřebujete moc paměti programu ani moc paměti pro data, ale hodila by se Vám rychlost a paměť i po vypnutí napájení, nebo nechcete připojovat krystal pak sáhněte po AVR, tedy po AT90S1200. Je to nejlevnější jednochip této řady a dá se pořídit kolem 100.- Kč i s DPH. Bohužel nedisponuje na rozdíl od vyšších verzí AVR sériovým kanálem. Někdy sériový port člověk nepotřebuje, někdy je čas v programu si ho vytvořit programově a někdy je čas sáhnout po AT90S2313, který má oproti předešlému mimo 32B registrů i 128B interní RAM, místo 1KB u předchozího má 2kB FLASH a EEPROM pro data má také 2x více, tedy 128B a také zmíněný sériový kanál. Přiznám se bez mučení, AT90S2313 jsem nikdy v ruce neměl, nebyl totiž skladem, když jsem jej potřeboval (spíše chtěl) a nakonec jsem vystačil s AT90S1200, který skladem byl. AT90S1200 se vyrábí dle katalogových listů do 16MHz, já jsem v prodeji objevil nejrychlejší 12MHz, což ovšem není málo pokud si uvědomíte, že většinu instrukcí stihne za jedenu periodu oscilátoru. Další volbou jsou AVR AT90S4414 a AT90S8515. Běžně je v prodeji AT908515 na 8MHz za který jsem zaplatil v lednu 2001 400.-Kč v maloobchodě s DPH, což je asi hodně, ale já ho moc chtěl :-). O AT90S4414 Vám opět řeknu jen to, že existuje, já jej bohužel nevlastním, nicméně je to dle katalogu AT90S8515 s polovinou pamětí, takže bude snad lacinější, ale nevím, jestli se ještě vyrábí. Existují i další typy, takže jde jen o to, zvolit ten správný do aplikace a popřípadě jej sehnat.

Co se týká jednochipů méně obvyklých výrobců, připočtěte k jejich ceně okolnost, že Vám s nimi asi málokdo poradí a čas strávený zkoumáním není nikdy zadarmo. Nejde jen o poměr cena/výkon, ale i o dostatek materiálů nebo čas, strávený jejich sháněním. Zkrátka než nějaký exotický jednochip koupíte, přesvědčte se o tom, že máte všechno co k němu potřebujete už před jeho koupí a nejlépe zdarma, pak následuje porovnání ceny a až pak nákup. No uznejte sami, k čemu by bylo učit se něco dalšího, kdyby to nepřineslo podstané výhody a stálo to drahocený čas. Neznamená to ale, že nelze používat i jednochipy neobvyklé a stát se tím, kdo bude radit ostatním.

K fyzickému provedení konstrukcí

SMD sice vypadá hezky, ale pokud potřebujete někde něco doladit, někam dotáhnout dodatečně kousek drátu nebo nejste právě špičkově vybaveni, pak je obyčejná klasická montáž výhodnější. Nikde není napsáno, že pokud se výtvor povede, nemůže být přehozen do SMD a pokud se Vám to vyplatí, pak jsou i firmy, které Vám dle schématu nejen vyrobí desku spojů, ale ji i navrhnou a klidně i osadí. Pro jeden kus, pokud nechcete někoho sponzorovat pro radost to rozhodně nedoporučuji. Chci tím jen říci, že se nemusíte cítit trapně s hromadou drátů a nedokonalou deskou v ruce a klidně se jí chlubte. U prototypu nejde přece o to, jak to vypadá, ale jak to funguje a třeba se najde i dost lidí, kteří si to rádi také postaví. Pokud neumíte hezky pájet, pak se také nestyďte, na něčem se to naučit musíte a smát se Vám bude jen člověk, který si na své začátky nepamatuje.

Malý dovětek

Tento článek jsem si dovolil napsat přesto, že nejsem ani nejlepší, ani nevím všechno a ani nemám dostatek času se naučit všechno, co bych rád ovládal. Rozhodně bych byl také nerad, kdyby se zdálo, že se stavím do role Supermana. Každý normální člověk i po létech používání jednochipů je nucen občas nahlédnout do dokumnetace. Pokud se zde vyskytují nepřesnosti, matoucí formulace apod., pak mne prosím omluvte, nebo mi prosím pošlete email a pokud se Vám to nebude příčit, společnými silami pak uvedeme věci na pravou míru. Tyto stránky dělám sobě a snad i Vám pro radost a tedy zdarma. Tento článek nesponzorovala žádná firma a názory na produkty výše uvedených firem jsou jen mé subjektivní, bez nároku na objektivitu.

Autorův e-mail: jiri@bezstarosti.cz