Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Drukarka termiczna z kasy fiskalnej, inżynieria wsteczna drivera

fotomh-s 29 Nov 2018 19:14 15063 33
  • Drukarka termiczna z kasy fiskalnej, inżynieria wsteczna drivera


    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.

    Drukarka termiczna z kasy fiskalnej, inżynieria wsteczna drivera

    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ąć ;-)

    Drukarka termiczna z kasy fiskalnej, inżynieria wsteczna drivera Drukarka termiczna z kasy fiskalnej, inżynieria wsteczna drivera Drukarka termiczna z kasy fiskalnej, inżynieria wsteczna drivera




    Cool? Ranking DIY
    About Author
    fotomh-s
    Level 24  
    Offline 
    Zajmuję się amatorko elektroniką i informatyką. Programuję mikrokontrolery (Bascom dla AVR, Arduino IDE dla STM-32 oraz ESP-32), aplikacje na komputery PC (Visual Basic w Sharp Develop IDE) i różne inne urządzenia (Epson HX-20, Psion workabout MX, kalkulatory programowalne). Poza programowaniem interesuje mnie wiele dziedzin techniki.
    Has specialization in: amatorsko elektronika i programowanie
    fotomh-s wrote 1078 posts with rating 306, helped 10 times. Live in city Tychy. Been with us since 2008 year.
  • #2
    adversus
    Level 32  
    Witam. Kawał dobrej roboty. Jam mam u siebie kilka "napędów " z podobnych kas czy tam innych wynalazków. Nawet gdzieś w sieci znalazłem datasheeta do głowicy. Niestety brak czasu nie pozwolił do tej pory pochylić się nad tym tematem, więc napędy leżą i czekają na lepsze czasy.
    Czy kolega przewiduje do artykułu dodać jakieś materiały edukacyjne by można coś podobnego wyrzeźbić, uruchomić, pobawić się ???
  • #3
    krisRaba
    Level 31  
    Zamiłowania do kartonowych obudów nie podzielam, bo kojarzy mi się z "hamerykańskim hot-snotem i cardboardem" dobrym na wszystko :P Ale sam projekt bardzo ciekawy :)

    Z tego co zrozumiałem, to wewnątrz tej cudownej obudowy ( ;) :lol: ;) ) masz drukarkę termiczną oraz oryginalną płytkę sterownika z kasy fiskalnej?
    Drukowaniem zawiaduje atmega, którą przeprogramowałeś na własne potrzeby. Ona z kolei wydaje komendy do gotowych sterowników/driverów silnika krokowego i głowicy wystawiającej poszczególne piksele?
    Jak fizycznie jest zrealizowana taka głowica? Ona przytyka mechanicznie jakieś punkty do papieru na grzałce? To papier się zabarwia od punktowego podgrzania (tak myślę, skoro to drukarka termiczna ;) ), czy jest tam jeszcze jakieś tonero-podobne coś? :)

    Czy w kasie fiskalnej była jeszcze jakaś kolejna płytka sterownika, która wydawała komendy tej przeprogramowanej przez Ciebie, czy tylko jakiś konwerter i reszta leciała ze świata zewnętrznego/komputera? Nie było szansy podsłuchać tej komunikacji?
  • #4
    fotomh-s
    Level 24  
    Quote:
    Czy kolega przewiduje do artykułu dodać jakieś materiały edukacyjne by można coś podobnego wyrzeźbić, uruchomić, pobawić się ???

    Generalnie to każdy driver jest inny (mam na myśli driver jako płytkę sterującą drukarką) głowice są jednak podobne. Jeśli chodzi o samą głowicę to sprawa jest dosyć prosta, zwykły rejestr przesuwny + silnik krokowy. Drivery jednak to zbiór różnych gratów, jeden nawet ma P80C32 z zewnętrznym EEPROMem i SRAMem. W sumie to kod jest trochę "zabałaganiony" ale nie wykluczam jego udostępnienia.

    Quote:
    Z tego co zrozumiałem, to wewnątrz tej cudownej obudowy ( ;) :lol: ;) ) masz drukarkę termiczną oraz oryginalną płytkę sterownika z kasy fiskalnej?
    Drukowaniem zawiaduje atmega, którą przeprogramowałeś na własne potrzeby. Ona z kolei wydaje komendy do gotowych sterowników/driverów silnika krokowego i głowicy wystawiającej poszczególne piksele?

    Wewnątrz są także ogniwa 18650 zasilające grzanie głowicy oraz silnik krokowy. Do tego płytka z ATmegą oraz driverem krokowca. Głowica ma zintegrowany układ będący czymś w rodzaju rejestru przesuwnego.

    Quote:
    Jak fizycznie jest zrealizowana taka głowica? Ona przytyka mechanicznie jakieś punkty do papieru na grzałce? To papier się zabarwia od punktowego podgrzania (tak myślę, skoro to drukarka termiczna ;) ), czy jest tam jeszcze jakieś tonero-podobne coś? :)

    Głowica ma 500+ elementów grzejnych w jednej linii przyciśniętych do papieru przez sprężyny. Elementy są nieruchome (to nie drukarka igłowa), toneru ani taśmy też nie ma (to nie drukarka termotransferowa ani laserowa), generalnie papier się przesuwa i załączają się elementy grzejne. Papier termiczny zabarwia się samoczynnie pod wpływem temperatury.

    Quote:
    Czy w kasie fiskalnej była jeszcze jakaś kolejna płytka sterownika, która wydawała komendy tej przeprogramowanej przez Ciebie, czy tylko jakiś konwerter i reszta leciała ze świata zewnętrznego/komputera? Nie było szansy podsłuchać tej komunikacji?


    Oczywiście, kasa ta to samodzielnie działające urządzenie, była płytka z całą masą paści. W nowych kasach Elzab Jota E to dopiero jest tych gratów w środku, praktycznie wszystko w SMD w tym kilka scalaków ATmega32. Kasa Elzab ECO to model gdzieś pomiędzy Jota a Jota E pod względem daty wprowadzenia do produkcji modelu. Rozwiązania wyglądają więc jak krzyżówka tych dwóch.

    Kasa była wyrejestrowana\zablokowana więc nie drukowała. Nie dało się więc podsłuchać komunikacji. Swoją drogą to także wymagam stosownych funkcji jak zmienna szerokość papieru, proste rysowanie linii dla wykresów i łatwa zmiana czcionki, nie mówiąc już o tym że sporo się przy tym nauczyłem.
  • #5
    adversus
    Level 32  
    Do autora, używasz słowa driver, ale sama głowica to rejestr przesuwny jak wspominałeś wcześniej. Nie można z procka prosto na głowice wysłać sekwencji ? Głowica ma jakieś niestandardowe wartości napięć na szynie danych ? Chodzi mi o to czy nie wystarczy podać danych na magistralę głowicy i zasilić ją?gdzieś mi się kołacze że ta głowica co ja mam ma sekwencję że aby wykonać cykl druku linii to raz grzeją pixele parzyste a za chwilę nieparzyste, ze względu na max pobór prądu jaki może pobrać głowica i aby jej nie uszkodzić.
  • #6
    fotomh-s
    Level 24  
    Driver czyli cała płytka sterująca drukarką (z megą i driverem silnika). Nie mylić z samym układem/driverem silnika krokowego.
    Dane do głowicy idą bezpośrednio z procka ATmega 32 będącym na płytce drivera.

    Wiem że trochę tym nazewnictwem namieszałem więc teraz płytkę będę nazywał sterownikiem drukarki :-)

    Co do sekwencji grzania to do tego są wejścia strobujące (STROBE), załączaja one grupy elementów grzejnych, w tym sterowniku były one spięte wszystkie razem i podpięte pod jeden port, nie dało się przez to grzać grupowo co wymusiło zastosowanie ogniw o dużej wydajności prądowej. Na zasilaczu 5A dało sie wydrukować połowę linii z jakimś przypadkowym tekstem ASCII, jeśli linia była szersza (więcej znaków w linii) to już wydruk był słaby. Na tych ogniwach daje radę drukować całą linię znaków ASCII, jednak przy linii wykresu (wszystkie pixele ciemne) nawet one nie dają rady druknąć 500 pixeli na raz.
  • #7
    adversus
    Level 32  
    fotomh-s wrote:
    Driver czyli cała płytka sterująca drukarką (z megą i driverem silnika). Nie mylić z samym układem/driverem silnika krokowego.
    Dane do głowicy idą bezpośrednio z procka ATmega 32 będącym na płytce drivera.

    Wiem że trochę tym nazewnictwem namieszałem więc teraz płytkę będę nazywał sterownikiem drukarki :-)


    Spokojnie, po prostu dopytuje, bo tym tematem zajmowałem sie dawno i nie pamiętałem, wiem że głowica to rejestr przesuwny... i w sumie algorytm sterowania jest prosty jak budowa cepa, a nie powiem le napędy z drukarek leżą i kusza by się nimi zająć :)
  • #8
    xamrex
    Level 28  
    fotomh-s wrote:
    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.


    W jaki sposób zmieniasz czcionki bez integracji w kod?
    Chyba tak czy siak musisz się podpiąć pod złącze ISP i wgrać wsad (plik hex do uC)

    Próbuję po prostu zrozumieć co tobą kierowało, że zdecydowałeś się umieiścić czionki do EEPROM zamiast do FLASHA (którego masz sporo wolnego)
    Rozumiem, że te nie integrowanie w kod (programu) ale i tak musisz przecież zaprogramować atmegę od nowa (nowym eepromem) więc w czym różnica?
  • #9
    krisRaba
    Level 31  
    fotomh-s wrote:
    Głowica ma 500+ elementów grzejnych w jednej linii przyciśniętych do papieru przez sprężyny. Elementy są nieruchome (to nie drukarka igłowa), toneru ani taśmy też nie ma (to nie drukarka termotransferowa ani laserowa), generalnie papier się przesuwa i załączają się elementy grzejne. Papier termiczny zabarwia się samoczynnie pod wpływem temperatury.

    No i o to chodziło :) Dzięki za wyjaśnienie. Takie informacje warto dodawać do opisu swoich prac, szczególnie gdy dany element nie jest popularny (w DIY), a wydaje mi się, że nie jest :)
  • #10
    kris_neofonik.pl
    Level 12  
    Quote:
    Kasa była wyrejestrowana\zablokowana więc nie drukowała

    Gwoli ścisłości, to nie jest prawdą. Kasa wyrejestrowana\zablokowana nie umożliwia prowadzenia sprzedaży. Większość wydruków (np: raporty okresowe, raporty sprzedaży towarów, ...) jest dostępnych.
    Jak je uzyskać? Instrukcja obsługi danego modelu kasy.
  • #11
    fotomh-s
    Level 24  
    xamrex wrote:
    fotomh-s wrote:
    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.


    W jaki sposób zmieniasz czcionki bez integracji w kod?
    Chyba tak czy siak musisz się podpiąć pod złącze ISP i wgrać wsad (plik hex do uC)

    Próbuję po prostu zrozumieć co tobą kierowało, że zdecydowałeś się umieiścić czionki do EEPROM zamiast do FLASHA (którego masz sporo wolnego)
    Rozumiem, że te nie integrowanie w kod (programu) ale i tak musisz przecież zaprogramować atmegę od nowa (nowym eepromem) więc w czym różnica?


    Jeśli chodzi o czcionkę w EEPROMie to pobierasz z internetu i wgrywasz, nie musisz kombinować. Jak chcesz mieć we flashu to musisz znaleźć jakiś sposób aby połączyć kod wynikowy programu i czcionkę w tej samej pamięci. Czcionka w EEPROM = najprostszy i najszybszy sposób.
    Jest też możliwość aby dodać pamięć na I2C i tam wsadzić czcionki, ZTCP piny od I2C są wolne.
  • #12
    tomus2k
    Level 26  
    Niektóre kasy po pewnym czasie od odczytu się blokują i na wyświetlaczu wyświetla się błąd lub "wezwij serwis" - wynika to z algorytmu kontroli poprawności czasu kasy.
    Algorytm ten wymaga aktywacji co jakiś, czas poprzez zalogowanie się do sprzedaży, co w kasie odczytanej jest niemożliwe. - w gwoli ścisłości.

    Można udać się z kasą do serwisu i tam poprosić aby serwisant puścił nam z trybu serwisowego wszystkie napisy i wydruki jakie ma w programie ( w każdej kasie już chyba od 2010 jest taka opcja) i w tym czasie można zaczytać wszystkie komendy sterownika - polecam - normalny serwis nie zrobi problemu jeśli wyjaśnimy co chcemy zrobić z kasy.
    Jest jeszcze opcja do cofnięcia czasu kasy na czas jaki mamy na ostatnim wydruku - taki wydruk trzeba wtedy posiadać - trzeba pogrzebać w układzie RTC - to jeszcze fajniejsza zabawa :twisted: .

    Dość wolno ta drukarka drukuje... co jest tego przyczyną- jaki wystąpił problem ?
  • #13
    fotomh-s
    Level 24  
    Przyczyną jest stały timing, 9ms na cykl silnika. Można zrobić algorytm rozpędzania, wtedy pierwszy krok będzie 9 kolejny 8 potem 7 i tak dalej, powinna wtedy drukować szybciej.
    Kolejna sprawa to samo działanie pocka, wysuw kilkuset linii przez softwareowy shiftout też nie jest zbyt szybki, można jednak dźwignąć zegar z 4MHz na np. 8. Generalnie kod nie jest specjalnie optymalny.
  • #14
    kajtaskajtas
    Level 13  
    Też się kiedyś bawiłem podobną głowicą (LT-286) z kasy fiskalnej. Zachęcam do dalszego rozwijania projektu, bo można fajne obrazki uzyskać z tej drukareczki ;)
    Drukarka termiczna z kasy fiskalnej, inżynieria wsteczna drivera
  • #15
    fotomh-s
    Level 24  
    Też mam LT-286 z kasy Elzab Jota (nie E). Niestety driver jest bazowany na P80C32 z zewnętrznymi pamięciami EEPROM i SRAM. Sam nie zamierzam drukować grafiki, chociaż można to dosyć łatwo zaimplementować, drukarka ma być głównie dla terminala Psion Workabout MX oraz ewentualnego kalkulator programowalnego (projekt takiego mam w planach).

    W planach jest generowanie alfanumerycznych kodów kreskowych, chyba zdecyduje się na CODE93. Dosyć prosty w implementacji i bardzo uniwersalny kod o zmiennej długości z całkiem dobrą gęstością danych.
  • #16
    krisRaba
    Level 31  
    kajtaskajtas wrote:
    Też się kiedyś bawiłem podobną głowicą (LT-286) z kasy fiskalnej. Zachęcam do dalszego rozwijania projektu, bo można fajne obrazki uzyskać z tej drukareczki ;)
    Drukarka termiczna z kasy fiskalnej, inżynieria wsteczna drivera

    Wow, rewelacja! :) Rozumiem, że fizycznie nie ma tam odcieni szarości, tylko uzyskuje się je przez ilościowe mieszanie czarnych i białych pikseli?
  • #17
    fotomh-s
    Level 24  
    Teoretycznie można uzyskać szarość przez zmianę czasu grzania głowic, problemem jest to że nie da się tego zrobić per pixel tylko na grupę elementów sterowaną przez wejście strobujące.
  • #18
    gemiel
    Level 25  
    fotomh-s wrote:
    Teoretycznie można uzyskać szarość przez zmianę czasu grzania głowic, problemem jest to że nie da się tego zrobić per pixel tylko na grupę elementów sterowaną przez wejście strobujące.


    A gdyby tak (zakładając np. 4 stopnie szarości) załadować dane do głowicy 4 razy, piksele najjaśniejsze ustawiamy 1 raz, najciemniejsze 4 razy. Oczywiście nie wykonując w czasie tych operacji ruchu silnikiem. Czas nagrzewania też musi być krótszy. Z drugiej strony drukowanie będzie spowolnione, nawet bardzo.
  • #19
    satanistik
    Level 27  
    Pamiętam jak kiedyś zrobiłem sterownik do podobnej drukarki z kasy i w Bascomie drukowałem pliki .bgf. Miał być z tego rejestrator coś jak EKG tylko do wolno zmiennych przebiegów.
    Mam taki terminal - używałem go do komunikacji rs232 gdyż jest tam taka aplikacja fabryczna, myślałem nad napisaniem jakiegoś softu ale brak dysku mnie zniechęcił a później gdy zdobyłem dysk to mi przeszło.
    Dodając czujnik do synchronizacji można by drukować etykietki samoprzylepne - są takie gotowe taśmy np do Dymo. Można by zrobić zegarek z drukarką przyklejony do lodówki i drukować daty otwarcia produktów.
  • #20
    kajtaskajtas
    Level 13  
    krisRaba wrote:

    Wow, rewelacja! :) Rozumiem, że fizycznie nie ma tam odcieni szarości, tylko uzyskuje się je przez ilościowe mieszanie czarnych i białych pikseli?


    Tak, to jest tzw. dithering. Drukarka ma na tyle dobrą rozdzielczość, że pojedynczych pikseli tak nie widać i efekt szarości wychodzi bardzo dobrze. Tak jak pisali inni można by się pokusić o sterowanie czasem grzania, ale byłoby z tym dużo komplikacji a efekt niekoniecznie byłby lepszy.
  • #21
    krisRaba
    Level 31  
    gemiel wrote:
    A gdyby tak (zakładając np. 4 stopnie szarości) załadować dane do głowicy 4 razy, piksele najjaśniejsze ustawiamy 1 raz, najciemniejsze 4 razy. Oczywiście nie wykonując w czasie tych operacji ruchu silnikiem. Czas nagrzewania też musi być krótszy. Z drugiej strony drukowanie będzie spowolnione, nawet bardzo.

    Też o tym pomyślałem. Wydruk niekoniecznie musi być dłuższy, bo obecny czas maksymalnego grzania punktu, który daje 100% czerni trzeba by podzielić na ilość stopni szarości. Pytanie, czy głowica przyjmuje dane na tyle szybko, że jest to pomijalny czas względem czasu grzania.
    Minusem jest prawdopodobna potrzeba skalibrowania, bo np. 4 z 8 grzań to niekoniecznie musi wyjść 50% szary, a 2 z 8 niekoniecznie 25% itp.

    Ale wspomniany
    kajtaskajtas wrote:
    dithering
    daje świetny efekt, więc nie wiadomo, czy odcienie szarości by coś wniosły. Swoją drogą drukarki czarno-białe też w ten sposób drukują szary ;)
  • #22
    ArturAVS
    Moderator HP/Truck/Electric
    Temat jak dla mnie trochę za późno. :-(
    W zeszłym roku zadobyłem całą paletę kas oddanych do utylizacji.
    To co przydatne( wyświetlacze, układy) zdemontowałem. Same moduły drukarek leżały w pudełku.
    Tydzień temu poszły na złom.

    Szkoda, że Kolega wcześniej nie napisał tego tematu. Może coś bym wykorzystał z tych 70 kg drukarek....
  • #23
    fotomh-s
    Level 24  
    gemiel wrote:
    A gdyby tak (zakładając np. 4 stopnie szarości) załadować dane do głowicy 4 razy, piksele najjaśniejsze ustawiamy 1 raz, najciemniejsze 4 razy. Oczywiście nie wykonując w czasie tych operacji ruchu silnikiem

    Generalnie to nie zaleca się grzania głowic przy zatrzymanym silniku, powinno się to robić podczas kręcenia silnikiem, zapobiega to przywieraniu głowicy do papieru.

    Swoją drogą to kilka lat temu (jakieś 3 albo 4) widziałem kasę Elzab Xcel (normalnie działającą). To było na targu w Tychach, tam gdzie sprzedają tonery i tusze. To był pierwszy model kasy Elzab. W zasadzie to komputer z systemem DOS (z wbudowaną drukarką fiskalną), idealny materiał do przerobienia na kalkulator programowalny, wystarczy tylko zmienić soft.
  • #25
    fotomh-s
    Level 24  
    To zależy także od napięcia i tego jak mocno rozgrzana jest głowica (głowica tak jakby akumuluje ciepło, im więcej grzejesz tym bardziej się nagrzewa). Generalnie ja stosuję czas 1,5ms dla napięcia około 8V. Dla 6V czas był sporo dłuższy, bliżej 3ms. Papier też może mieć znaczenie. Generalnie czas dobrałem "na czuja", papier łapie już przy 1ms dla nieco ponad 6V tylko że wydruk jest nieczytelny.
  • #27
    tomus2k
    Level 26  
    fotomh-s wrote:
    Przyczyną jest stały timing, 9ms na cykl silnika. .....
    Kolejna sprawa to samo działanie pocka, wysuw kilkuset linii przez softwareowy shiftout też nie jest zbyt szybki, można jednak dźwignąć zegar z 4MHz na np. 8. Generalnie kod nie jest specjalnie optymalny.

    fotomh-s wrote:

    .... ja stosuję czas 1,5ms dla napięcia około 8V. ....

    Wg. producenta szybkość drukarki to 480lini na sekundę co daje 6 cm na sekundę.
    Wg. tego co podajesz drukujesz z prędkością 111 linii na sekundę.
    Na linię wg. producenta cały cykl powinien wynosić 2 ms. Ty na samo grzanie poświęcasz aż 1,5ms
    Patrząc na to, stawiam że masz za małą wydajność źródła napięcia VP (grzania głowicy) które wg producenta musi mieć 2,5A
    Warto dodać zmienną zależną od włączonych kropek i czas włączenia napięcia VP (grzania) wyliczać dynamicznie.
    Obsługę silnika wyrzuć do przerwania aby w czasie obrotu wprowadzać bajty do głowicy- shiftout.
  • #28
    fotomh-s
    Level 24  
    tomus2k wrote:
    Patrząc na to, stawiam że masz za małą wydajność źródła napięcia VP (grzania głowicy) które wg producenta musi mieć 2,5A

    Stosuję aku Li-Ion z nominalnym prądem rozładowania 20A. 2,5A dla tej głowicy to nic, no chyba że chcesz wydrukować kilka znaków ASCII w linii. 5A nie dawało rady już przy kilkunastu znakach ASCII w linii. Aktualnie prędkość nie ma dla mnie tak wielkiego znaczenia, taka jak jest mi wystarcza.

    Pamiętaj że jedna linia w trybie single width to 2 kroki silnika, w dual with to aż 4.
  • #29
    tomus2k
    Level 26  
    fotomh-s wrote:

    ......
    5A nie dawało rady już przy kilkunastu znakach ASCII w linii. Aktualnie prędkość nie ma dla mnie tak wielkiego znaczenia, taka jak jest mi wystarcza.
    ....

    Źle sterujesz głowicą ... STB1, STB2, STB3, STB4 ( w zależności od szerokości głowicy jest ich do STB7) to załączanie napięcia na poszczególne zespoły punktów grzania.
    Producent nie przewidział załączania ich na raz. Max liczba załączonych na raz to 64 kropki przy 0,45mJ/dot.
    Pamiętaj też że wraz ze zmianą temperatury głowicy zmienia się moc potrzebna do zaczernienia papieru więc nie możesz liniowo sterować grzaniem i tak 45celc 0.28mJ/dot ; 25celc 0.31mJ/dot; 5celc 0,36mJ/dot; Po to masz w głowicy zamontowany termistor aby na jego podstawie sterować czasem i napięciem grzania.
    fotomh-s wrote:

    Pamiętaj że jedna linia w trybie single width to 2 kroki silnika, w dual with to aż 4.

    Tak dla uściślenia zawsze jak dokumentacja drukarek mówi o lini to chodzi o linię składającą się z jednego piksela nie chodzi tu o linie tekstu.
  • #30
    fotomh-s
    Level 24  
    Już pisałem że nie da się sterować osobno STRB bo są one złączone ze sobą. Jedyna opcja to wymiana płytki sterownika na własną.
    Co do linii to ja tutaj też mam na myśli jeden pixel. W trybie single width jeden pixel przypada na 2 kroki, dla dual width oczywiście 2*2=4. Czyli linia tekstu (bez interlinii) dla single width = 8*2=16 kroków, dual width to 8*2*2=32 kroki.

    Normalnie to robi się to chyba tak że na jednym kroku grzejesz np. połowę grzałek (połowa STRB) a na kolejnym drugą, niestety tutaj na płytce wszystkie STRB są zmostkowane.

    Co do termistora to tak jak już pisałem nie mam tabelki aby to zaimplementować.