Mam ja sobie mikromocowe urz±dzenie. Ma tylko jeden przycisk.
Dzia³anie jest takie:
-krótkie wci¶niêcie - w³±czenie/wy³±czenie pewnej funkcji
-d³ugie wci¶niêcie - w³±czenie/wy³±czenie
-d³uuuuugie wci¶niêcie - gdy jest w³±czone-reset, gdy jest wy³±czone - bootloader. Po pewnym czasie nieaktywno¶ci urz±dzenie siê wy³±cza.
Wszystko dzia³a piknie. Ale. Trzeba by³o dorobiæ obs³ugê b³êdów. Dosz³y jeszcze dwie fukncjonalno¶ci. To wszystko skomplikowa³o obs³uge przycisku, bo w wielu miejscach jest sprawdzany i w wielu miejscach mo¿e co¶ pój¶æ nie tak.
Zastanawiam siê teraz nad globaln± zmian± koncepcji obs³ugi przycisku. Przerwanie INT0, gdzie jest przycisk da³bym jako wyzwalane poziomem, co by da³o automatycznie reset przez watchdoga, gdy siê przytrzyma d³u¿ej. Wci¶niêcie przycisku startowa³oby licznik i po puszczeniu wystarczy³oby odczytaæ go, aby wiedzieæ, czy krótko, czy d³ugo siê go wcisnê³o.
Problemy jednak dwa:
-drgania styków (na razie nie mam koncepcji jak programowo to omin±æ, wychodzi mi straszna gimnastyka),
-s± dwa miejsca w programie, które nie powinny byæ przerywane, no i tam przerwanie przycisku powinno byæ wy³±czone, co te¿ mi siê ¶rednio podoba...
Dalej dochodzi to nieszczêsne usypianie. Gdy zrobi siê b³±d urz±dzenie zaczyna migac diodkami. Gdy nikt tego nie dostrze¿e, to zamiga siê na ¶mieræ, wiêc tam te¿ powinno siê usypiaæ po jakim¶ czasie nieaktywno¶ci. Na razie to wszystko jest robione z programu, ale zastanawiam siê, czy nie zrobic takiego programowego watchdoga-usypiacza, czyli licznik, który sobie zlicza, a jak doliczy do jakiejs granicy to usypia...
Mnie ju¿ siê mózg lasuje od tego rozmy¶lania - podsuñcie mi jaki¶ ¶wie¿y pomys³ ;-)