1. června 2014 v 5:37 | Petr
|
Dnešní článek by klidně mohl vyjít ve
vidlákovu elektru pod seriozním názvem "
Rošíření počtu pinů mikrokontrolérů" a mohl by se tvářit šíleně věděcky, ale dnes to nebude jenom o blikání LED diodami, ale spíše o tom jaká složitost elektrického obvodu je "
přiměřená složitost".
Vždy je totiž možné postupovat "akademicky" vzít "učebnicové zapojení" a to prostě okopírovat. výsledkem budou elektrické obvody důkladné a seriozní, ve velké krabici s velikými přepínači, konektory atd.
Pak můžeme postupovat cestou "čínské hračky" kdy vyhazujeme z elektrického obvodu komponenty tak dlouho až to přestane fungovat. Proč stavět harmonický oscilátor, když z antény RC autíčka poleze i hradlem vyrobený pravoúhlý signál ? Proč dávat krystal i do přijímače, když stačí udělat místo něho RC oscilátor a mezifrekvenční filtr nahradit kondenzátorem aby i "ujetá mezifrekvence nějak prolezla" ne?
Je vám jasné, že s oběma přístupy se neztotožňuju a místo toho razím teorii "
geniální jednoduchosti" kdy obvody podávají výkon jako "
školní zapojení" ale přitom jsou jednoduché jako "
RC autíčko ze Shangaje". Tedy tato jednoduchost není totéž co "
ošizenost". A taky jednoduché obvody tohoto typu nebudete produkovat tím, že budetě o problému vědět
méně než učebnice. Smutné je že jednoduchost tothoto typu se rodí přes zkušenosti, které často přesahují učebnicové kapitoly a jsou lemovány nefungujícími prototypy. Příkladem budiž
kmitočtová ústředna a "
dva oscilátory na jednom čipu" které jsem tam vestavěl (poté co 2 předchozí prototypy byly úplná katastrofa).
Dnes tedy zabrousíme do oblasti "blinkenlicten" alias LEDek, které má mít každý robot aby jejich velevědeckým blikáním zaujal dětičky a páníčkovi už na dálku signalizoval své "vnitřní stavy". Když nastudujete učebnicové zapojení, dozíte se, že pokud nemáme dost pinů procesoru, na které můžete připojit LEDky přímo dělá se to takto: Vezme se 74HC595 - posuvný registr, který má 3 vstupy DATA, CLOCK a OUTPUT_ENABLE. Nejprve se to které LEDky mají svítit "naclockuje" do posuvného registru a pak se pinem OUTPUT_ENABLE uložená data vypustí ven a tím se nová kombinace LEDek bleskově
rozsvítí.
Pokud tedy máte mít někde na vnějším povrchu robota LEDky musíme k nim přivést 3 žíly datového kabelu + 2 žíly napájení. Což není kompatibilní s nejoblíbenějším stylem "USB drátů" kde jdou robotem kablely s +5V, ZEMí, DATA A a DATA B. Jak tedy z toho ven ? Vykašlat se na bleskové přepínání - zapomeňte na 74HC595 a místo toho použijte 74HC164 - ten nemá žádný pin OUTUT_ENABLE - a tedy změny v datech se projevují okamžitě. To znamená, že při "clockování" dat do registru budou LEDky ošklivě blikat !
napíšeme si tedy v AVR Assembleru clockovací proceduru abychom měli představu jak ošlivé to bude :
LED_Write: ;Vystup bytu do posuvneho registru LED na predku robota Vstup je R16 (LEDINPUT)
ldi count, 8 ; prenos 8 bitu
push LEDINPUT
com LEDINPUT ; negace bitu - DIODA SVITI KDYZ JE BIT NULA
LED_Write1:
cbi LEDDataPORT, LEDDataBit
ror LedInput
brcc LED_Write2 ; je li bit nulovy skoc
sbi LEDDataPort, LEDDataBit ; nastav datovy bit
LED_Write2:
sbi LEDClockPort, LEDClockBit ; nastav hodinovy bit
nop ; cekej
cbi LEDClockPort, LEDClockBit ; vymaz hodinovy bit
cbi LEDDataPort, LEDDataBit ; vymaz datovy bit
dec count
brne LED_Write1 ; dalsi bit
pop LEDINPUT
ret
Ať počítám jak počítám - vychází mi něco kolem 100 taktů na AVR což při 16 MHz je 6,25 mikrosekund. Myslíte že "ošklivé blikání" v délce 6 mikrosekund bude lidské oko vnímat ?
Pokud potřebujete 16 LEDek - prostě zřetězíte dva posuvné registry za sebou a "ošlkivé blikání" bude trvat celých 13 mikrosekund atd. Viz schémátko kdychličky LEDEk velikosti 5x5x5 řízenýchmi 7 piny. Šlo by to i méně piny, mám doma displej kde spínání řádků i sloupců řídí posuvné registry. jediná limitace je, že s rostoucím počtem LEDek se dostáváme k množství kdy "ošklivé blikání" stane se opravdu zřetelným, ale to je až při stovkách LEDek - což je více než váš robot pro okouzlení dětiček na robotické soutěži potřebuje.
Pro dnešek jsme skončili, zbývá už jenom rada pro brunety - než nějakého pomatence s trafopájkou odsoudíte jako "
nemožného"- zkuste si představit jak stejnou trafopájkou staví
hračky pro vaše (společné) dětičky.
Pokud bude oblíbených USB kabelů více než jeden, je nutné aby +U vedlo všemi?
Jinak u 74HC595 je potřeba 4 vodiče - DATA, CLK, /OE a STROBE, ale dvou z nich se lze „elegantně zbavit” tím, že se zapojí natrvalo, a tím onen obvod funkčně degradujeme na tu 74HC164 (což se občas může i tak vyplatit, protože 74HC595 je schopna dodat na výstupních pinech větší proud)
K těm 6µs asi takhle: Zkušené oko elektronikovo to možná uvidí, dětské oko asi nikoliv - záleží hlavně na tom, jak často by to mělo být obnovováno (případný „smoothing” - prosvěcování)?