Każda karta katalogowa układu uważanego za cyfrowy (przerzutnik, bramka, mikrokontroler, pamięć itd.) zawiera informację o maksymalnym czasie narastania napięcia wejściowego. Przykładowo dla układów z rodziny HC wartość ta mierzona jest w setkach nanosekund i zależy od napięcia zasilającego. Dlaczego tak jest? To żadna tajemnica: przełączające się tranzystory PMOS i NMOS, tworzące struktury CMOS, przez krótki czas stanowią zwarcie dla linii zasilającej – jeden z nich jeszcze nie otworzył się w pełni, zaś drugi – nie w pełni zatkał.
Piszę o nich dlatego, że tych pierwszych używam bodaj najczęściej, a ponadto wiąże się z nimi pewna historia, która była przyczynkiem do powstania tego artykułu: jej bohaterem jest układ 74HC595, czyli ośmiobitowy rejestr przesuwny z wyjściem równoległym. Bardzo lubię te układy i polecam je wielu osobom, ponieważ w stanie spoczynku pobierają prąd o zerowym (niemal) natężeniu i łatwo można je łączyć w kaskady. Jedno z opartych na nich rozwiązań zostało dawno temu zaprojektowane przeze mnie do tego, by skonfigurować stanami logicznymi odpowiednie wejścia większego systemu, po czym układ miał się uśpić i pobierać w tym stanie minimalną ilość energii – odpowiedzialny był za to mikrokontroler ATmega8. Tylko czemu ten mały układzik tyle prądu żre?!
Wszystko było zrobione prawidłowo, z jednym małym „ale”. Otóż przez kilkadziesiąt sekund od włożenia baterii wyjścia 74HC595 miały znajdować się w stanie wysokiej impedancji, aby operator miał czas na włożenie tego urządzenia-konfiguratora do przeznaczonego dlań gniazda. Dlatego też, niewiele myśląc, dodałem stosowny układ RC, który miał to opóźnić. Wszystkie wejścia układu cyfrowego są spolaryzowane, więc w czym problem? Odpowiedź jest oczywista: w układzie RC opóźniającym załączenie wyjść.
Specjalnie dałem rezystor (ładujący kondensator) o wysokiej rezystancji, by zapewnić jak najmniejszy pobór prądu. I to było w porządku. Ale już nie w porządku było zastosowanie takiego obwodu do sterowania wejściem, które nie jest zaopatrzone w przerzutnik Schmitta. Liczyłem się z tym, że moment zmiany stanu logicznego, czyli załączenia wyjść, nie zostanie dokładnie ustalony, ale z tym, że układ zacznie pobierać ponad 4 mA – kiedy mikrokontroler jest już dawno uśpiony – ani trochę.
Ostatecznie przerobiłem ten układ tak, by linią Output Enable sterować z mikrokontrolera, co załatwiło problem. Spędziłem jednak na tym sporo czasu zarezerwowanego na wakacyjny wypoczynek.
Piszę o tym, ponieważ podobny błąd jest powielany w wielu miejscach. Jednak czasem godzę się na niego, gdy: takie działanie jest jednorazowe podczas działania urządzenia, przetestowałem to już wielokrotnie, utrzymuję czas narastania nie dłuższy niż kilkadziesiąt milisekund (choć nadal dłuższy niż zaleca nota katalogowa) oraz wiem, że źródło zasilania bez problemu to wytrzyma. Trzeba być świadomym, że się coś takiego robi i jakie to może mieć konsekwencje – najpoważniejszą jest uszkodzenie podzespołu. Najlepiej byłoby stosować w takich miejscach przerzutniki Schmitta, choć nie zawsze jest na to powierzchnia na płytce; ponadto układy tego typu pobierają dodatkowe, niekiedy cenne mikroampery w stanie ustalonym. Dlatego w urządzeniach, od których nie wymaga się wysokiej niezawodności, czasem decyduję się uproszczone, choć nieidealne rozwiązanie.