Sice jsem chtěl úplně něco jiného, ale prostě to tak nějak vyšlo, že jsem nakonec udělal takovou blbůstku…

Před časem se mi zmínil známý, že si koupil digitální hodiny s jednočipem a jestli by to prý nešlo přeprogramovat tak, aby z toho byla spíš kuchyňská minutka.

Po chvíli hledání jsem identifikoval kit YSZ-4. Je tam čtyřmístný LED displej a 89C2051 od Atmelu, což je procesor s jádrem x51 v malém pouzdru. U toho dvě tlačítka a bzučák.

Chtěl jsem nejdřív zjistit, co tam vlastně je a jak to funguje. Podařilo se mi přečíst FLASH, ale disassembling k ničemu nebyl. Chtěl jsem použít aspoň rutiny pro displej, ale pak se ukázalo mnohem snazší to napsat na zelené louce.

Kdybyste náhodou chtěli taky, tak schéma je tady:

Displej má datasheet zde, to nejdůležitější, co vás asi bude zajímat, je, že dvojtečka je zapojená jako DP u pozice 2 (druhá zleva).

S x51 jsem nedělal, no, dobrých sedm let. Takže jsem se musel zorientovat. Použil jsem nakonec překladač SDCC (ne, fakt se mi nechtělo oprašovat assembler) a nad ním IDE s názvem MCU 8051 IDE (autor Moravia Microsystems, tedy ČR – příjemně potěšilo). IDE má i simulátor a emulaci jednoduchého hardware – a je mezi nimi i „multiplex display“, tedy to, co mají ty hodiny. Na rozdíl od hodin jsou v emulaci segmenty spínané jedničkou (přes tranzistor na zem), takže jsem si to musel ošetřit… Ale jinak obrovské zrychlení práce (díky tomu IDE jsem to celé měl za dvě hodiny hotové).

Po úvodním HELLO WORLD to už šlo rychle. Věděl jsem, že multiplex funguje, věděl jsem, jak jsou zapojené segmenty, tak zbývalo už jen nastavit správně časovač. Použil jsem online kalkulačku pro zjištění konstant (16bitový časovač, 50 ms), no a zbytek bylo už jen programování pro ZŠ.

Ovládání jsem vyřešil pomocí těch dvou tlačítek. Jedno jsem nazval SET, tím si nastavím čas v minutách. Při podržení přičítá rychleji. Jakmile ho pustím, začne se po malé pauze odpočítávat k nule. Malá pauza je nezbytná, když člověk „domačkává“ poslední minuty, aby se mu hodiny nespouštěly mezi jednotlivými stisknutími. _(Teď mě napadá, že to šlo udělat elegantněji, než jsem to nakonec vyřešil, jenom úpravou počítadla přerušení, ale už to měnit nebudu.) _Maximální čas je 99 minut, což je nelogické, ale zase praktické, když chcete nastavit časovač na hodinu a půl třeba…

Časovač pak počítá k nule, a když dopočítá, spustí se řev. Drobný detail – to zařízení není reproduktor, se kterým by bylo potřeba kmitat, jak jsem si myslel, je to opravdu bzučák, takže při sepnutí píská, při vypnutí mlčí. No a když je spuštěný alarm, tak ho vypnete stisknutím druhého tlačítka, tlačítka RESET. Tímtéž tlačítkem taky vypnete běžící odpočítávání.

Takhle prosté to je.

A kdybyste někdo chtěli, tak zdroják je zde ke stažení.