Od dłuższego czasu planowałem wykorzystanie drukarki termicznej razem z terminalem/kolektorem danych Psion Workabout MX. Był pomysł aby taką drukarkę kupić, jednak kiedy dostałem 3 kasy fiskalne do "wypatroszenia" w ramach projektu "rzeźnia kas fiskalnych" to nie mogłem zwyczajnie zostawić tych 3 modułów drukujących. Zdecydowałem się wykorzystać mechanizm z kasy Elzab ECO ponieważ driver tego mechanizmu był na osobnej płytce i opierał się na mikrokontrolerze ATmega 32A, czyli w zasadzie to to samo co dobrze mi znany mikrokontroler ATmega 16, tylko że z dodaną pamięcią. Niestety nie znałem protokołu komunikacji z driverem, zapadła więc decyzja o napisaniu własnego softu na mikrokontroler w Bascom BASIC. Generalnie to wyszedł z tego ciekawy projekt przy którym sporo się nauczyłem.
Na płytce drivera znajduje się wspomniany wyżej mikrokontroler oraz sterownik silnika krokowego przy którego uruchomieniu pomógł mi kolega @excray za co chciałem Mu tutaj podziękować. Reszta elementów to w zasadzie bardziej i mniej potrzebna drobnica jak np. rezystory pull-up które nie są tutaj wcale potrzebne (ATmega posiada wewnętrzne pull-upy). Głowica drukująca to MLT388 do której nie ma w necie datasheetu, jednak zastosowanie datasheetu do oryginalnego drivera okazało się wystarczające aby ustalić pinout dla głowicy. Głowica to w istocie rejestr przesuwny. Czyli wysuwamy dane, zatrzaskujemy poprzez stan niski na wejściu LATCH i podczas kręcenia silnikiem krokowym aktywujemy wejścia STROBE które także są aktywne niskie. Kiedy wejścia STROBE są aktywne grzałki grzeją. Na jeden piksel przypadają normalnie 2 kroki silnika. Głowica posiada wbudowany termistor do kompensacji termicznej, jednak nie posiadam tabelki z wartościami aby zrobić z niego jakiś użytek. Co ciekawe termistor jest podpięty pod port A0 który ma ADC, jednak ten sam pin jest także wyjściem LATCH dla głowicy. Ciekawy zabieg zważając na to że mikrokontroler i tak posiada sporo niewykorzystanych pinów.
Czcionki są w formacie 8x8 pixeli, zgodne z ASCII, udało się znaleźć takie czcionki w internecie razem z programem do ich edycji https://www.min.at/prinz/o/software/pixelfont/. Czcionki siedzą w pamięci EEPROM która ma 1kB, czyli mamy tutaj 128 znaków. Zapisanie ich w pamięci EEPROM umożliwiło łatwą ich zmianę bez ingerencji w kod. Sam kod zajmuje jednak tylko około 16% pamięci FLASH która ma 32kB.
Dodałem funkcję dual width która umożliwia dwukrotne powiększenie czcionki (z jednego pixela robią się 4).
Drukarka jest sterowana poprzez UART (baud rate 4800), można wysyłać tekst oraz komendy. drukarka obsługuje funkcję "dynamicznej szerokości papieru" która umożliwia zaprogramowanie szerokości rolki tak aby zmieścić wydruk na rolce o innej szerokości niż maksymalna. Są także funkcje takie jak margines lewy, prawy, wyśrodkowanie, programowalna interlinia i ustawianie intensywności (czasu) grzania.
Drukarka umożliwia także generowanie kodów kreskowych, aktualnie tylko EAN-8 oraz UPC-A, te kody były łatwe jeśli chodzi o algorytm ich generowania. Można także drukować linie o danej szerokości (np. celem drukowania wykresu). Dodatkowo dodana została funkcja drukowania tablicy czcionek załadowanych do pamięci.
Grzanie głowicy oraz silnik zasilane są przez 2 ogniwa 18650 o wydajności prądowej 20A, logika zasilana jest pasożytniczo z terminala.
Na panelu znajdują się lampki (drivera silnika krokowego, zasilania logiki oraz zasilania głowicy), przycisk wysuwu papieru oraz włącznik zasilania głowicy.
Obudowa jest z tektury, tak było najtaniej, w założeniu projekt miał być w pełni z elementów z odzysku, nawet ogniwa 18650 pochodzą z odzysku. W zasadzie to taki nawyk wykonywania w ten sposób obudów został mi jeszcze z "dawnych czasów" kiedy to jako dzieciak robiłem tak makiety (w tym była także makieta Psiona oraz drukarki do niego) więc nic dziwnego że kiedy przyszedł czas na zrealizowanie dawnych pomysłów to właśnie po tekturę przyszło mi sięgnąć




Cool? Ranking DIY