Обсуждаем цифровые устройства...
Ответить

Термопринтер из старого терминала (кассового аппарата)

Ср сен 04, 2019 22:15:50

Всем привет!
Имеется на руках дохлый терминал Ingenico I5100. Интересного в нем LCD дисплей wd-h12069-6ylyd и Термопринтер ELPM sen701130c. Очень интересно подключить термопринтер к Ардуино. Сам терминал признаков жизни не подает. По этому логическим анализатором (или осциллографом) смотреть нечего...
Что удалось узнать:
- скорость печати (ЛПС) 65 мм / С (при 7.2 В постоянного тока)
- ширина печати (мм) и 48 мм (384 точек),
- импульсный блок питания напряжением 5 ~ 8.5 отрицательного полюса источника питания логики 5В + 5%
- Определение температуры печатающей головки - термистор
(Перевод с Китайского) http://www.youboy.com/s502527612.html

Сама печатающая головка имеет маркировку gp16b337 (в Гугле пусто)
Немного прошелся тестером по плате, получилась (примерно) следующая распиновка:

Где:
VDD - подключается (через мосфет) напрямую к блоку питания
15-й и 18-й соединены вместе
sen723379d RAM FLASH MODULE - "Мозги" терминала. Запаянная коробочка и залитая эпоксидкой....

Примерная схема с некоторыми компонентами:
Изображение
Из распиновки складывается подозрение что принтер подключается по i2c...

Может у вас есть какие-то мысли и идеи как его запустить?
Фото выложу чуть позже.

Re: Термопринтер из старого терминала (кассового аппарата)

Ср сен 04, 2019 22:31:55

Не могу сказать на 100% про вашу "ТермоПечатающуюГоловку", но те, с которыми я сталкивался- это "по сути" - сдвиговый регистр, в который по сигналу "строб" просто записываются "нолики" или "единички", по окончании записи этой "строки пикселей" на ТПГ поступает сигнал "нагрев" соответствующих резисторов, потом ШД перемещает бумагу на "одну строку", а в ТПГ "закачивается" следующая строка "пикселей"..
Вот тут:

кто- то "баловался" с ТПГ от АМС-100..

Я так думаю, что ТПГ, "в основном" мало отличаются друг от друга - можно посмотрет, как реализуются подобные проекты на основе других ТПГ..

http://blog.eiva.info/2014/02/blog-post.html
Последний раз редактировалось АлександрЛ Ср сен 04, 2019 22:40:27, всего редактировалось 2 раз(а).

Re: Термопринтер из старого терминала (кассового аппарата)

Ср сен 04, 2019 22:32:27

Может у вас есть какие-то мысли и идеи как его запустить?
А можно еще для начала поинтересоваться, в чем смысл всей затеи?
Вот напечатал, допустим, с ардуины "нечто" вместо чека, а "оно" через пару месяцев поблекло и почти пропало, как это часто бывает с теми же чеками... И...?

Re: Термопринтер из старого терминала (кассового аппарата)

Чт сен 05, 2019 08:49:33

Обычная распечатка данных/текстов (вплоть до фото низкого разрешения).
8)
Кроме прочего термобумага разная бывает - смотрим термопринтеры для этикеток
(или термотрансфер)...
:roll:

Re: Термопринтер из старого терминала (кассового аппарата)

Чт сен 05, 2019 09:47:16

Один из пинов определен:
16 - термистор (второй контакт идет на GND), только он прозванивается только в одну сторону. Это точно термистор. Проверял на нагрев.
остаются пины:
11 - ?
15+18 - ?
22 - ?
23 - ?

Осталось определить что из них:
DI - данные для регистра (1 - точка, 0 - нет )
CLK - строб для них.
LAT - защёлка для регистра
STB - длительность импульса нагрева для нагревателей. (От неё зависит яркость отпечатка).

Можно как-то определить? Или только экспериментальным путем?

Фото:
Изображение Изображение Изображение Изображение Изображение

Добавлено after 18 minutes 12 seconds:
В саму Термо Печатающую Головку Шлейф заходит немного с другой распиновкой:
1 - VDD
2 - VDD
3 - ???? Пин 23
4 - ???? Пин 22
5 - GND
6 - GND
7 - Тр.Шм. Пин 18
8 - Тр.Шм. Пин 18
9 - Тр.Шм. Пин 18
10 - +3.3
11 - +3.3
12 - Термистор
13 - Тр.Шм. Пин 15
14 - Тр.Шм. Пин 15
15 - Тр.Шм. Пин 15
16 - GND
17 - GND
18 - ???? Пин 11
19 - NC
20 - VDD
21 - VDD

Re: Термопринтер из старого терминала (кассового аппарата)

Чт сен 05, 2019 13:23:12

ЛСД и то интересней применить, в инете пишут "LCD Module PE12864 / driver ST7565S"
и примеры программ для него есть.

Re: Термопринтер из старого терминала (кассового аппарата)

Чт сен 05, 2019 14:12:44

Изображение

Здесь не хватает резинового ролика- вы его сами сняли, или его просто нет?
От какого аппарата этот принтер?
Вот здесь: http://www.kassmehanic.narod.ru/sheme.htm
есть схемы от некоторых кассовых аппаратов, смотрите, может, что- нибудь подойдёт..
У меня есть распиновка ТПГ, но только у неё 28- выводной разъём.. :facepalm:

Re: Термопринтер из старого терминала (кассового аппарата)

Чт сен 05, 2019 14:34:49

Разбираю терминал Ingenico I5100. Ролик есть, установлен на крышке держателя бумаги (часть корпуса). Все детали на месте.
Я в сети много чего пересмотрел. Нашел несколько распиновок, но все они были от одной и той же печатающей головки и тоже на 28 выводов.

Re: Термопринтер из старого терминала (кассового аппарата)

Пт сен 06, 2019 08:35:50

Попробуй в местных ЦСО по обслуживанию кассовых аппаратов поспрашать - может у кого найдутся схемки.
8)

Re: Термопринтер из старого терминала (кассового аппарата)

Пт сен 06, 2019 15:04:06

Ура! распиновку победил! Вот результат:


Пример кода для Ардуино брал здесь: https://yadi.sk/d/xV_qJhSukBSlFg
Но никак не могу заставить правильно печатать. В примере есть тестовая картинка. У меня она "троится". А именно не зеркальные копии, а три слоя печатаются на одной линии, из-за этого изображение получается сжатое по высоте:
Изображение

Попробовал модифицировать скетч, но стало только хуже, прикрепляю скетч
Вложения
termoprint.rar
(9.61 KiB) Скачиваний: 400

Re: Термопринтер из старого терминала (кассового аппарата)

Пт сен 06, 2019 17:10:34

вот есть у мя штук 5 касовых принтоф ..ума не хватает придумать ну нахуя они мне нужны и чо с ними делать...была мысль отдат мчстудням на пыты в Лабораторию ТС
да далеко он

Re: Термопринтер из старого терминала (кассового аппарата)

Сб сен 07, 2019 20:09:00

Я таки "многофайловики" под адуринкой малость удавил...
Теперь можно будет и поиграться в свое удовольствие - может таки и до принтеров доберусь, чуток поотдохнувши.
8)

Re: Термопринтер из старого терминала (кассового аппарата)

Пн сен 09, 2019 09:45:37

В общем, промучился я с весь день... Немного поигравшись с временем прожига выяснил что это не расслоение, а именно дублирование. Печатающая головка похоже неравномерно все пропечатывает, из-за чего копии казались слегка разными (и я подумал что изображение расслаивается). Дублируется изображение из-за неправильно заданных границ печати. Дублирование убрал. В строке for(int i=0; i<16; ++i) 16 заменил на 48.

Настроил печать, теперь по высоте изображение получается нормальным. Печать ускорилась в 2 раза, но все равно очень медленно печатает: более 200!!! мс на каждую строку (длинной 384 точек). Вот код:


Но все равно мне очень сложно разобраться в том как происходит сам процесс вывода данных (прожига). К тому же код нужно оптимизировать. Скорость печати просто ужасная! Я пробовал оптимизировать Вывод данных, но не вышло. Стоит немного что-то изменить в функции, как все перестает вообще печатать. То есть выходит чистая бумага. Из минусов кода - удержание в памяти буфера печати. Который занимает абсолютно всю ОЗУ Atmega328, что тоже не фонтан...
В качестве контроллера возьму плату stm32f103c8t6, это решит проблему с памятью и недостатком пинов, но на скорость печати не повлияет. Остается главный вопрос: как оптимизировать скорость печати??

Re: Термопринтер из старого терминала (кассового аппарата)

Пн сен 09, 2019 12:37:05

Вывод данных подобен выводу в растровой развертке.
Засылаем строку из точек. Даем импульс нагрева. Смотрим температуру головки.
Выполняем сдвиг ленты.
Затем все повторяем.
Одно замечание...
Головка поделена на несколько секторов со своими сдвиговыми регистрами.
Следовательно или те регистры включены последовательно или у каждого еще свой вывод CS.
Если одновременно все получат данные - будем иметь столько копий, сколько тех регистров.
:roll:
Буфер изображения может быть внешний (включая микроСД), расширение количества выводов - используем соответствующие микросхемы из логики-рассыпухи.
8)

Re: Термопринтер из старого терминала (кассового аппарата)

Вт сен 10, 2019 09:27:31

Все регистры включены последовательно, всего 12 регистров по 32 точки. Дерганьем вывода LATCH определяется сколько регистров будут прожигаться.
Ускорил вывод еще больше: убрал все паузы, и вместо digitalWrite(); прописал прямую запись в порт: PORTB &= ~(1<<1);
Из минусов: сейчас нужно каждый регистр прожигать отдельно. То есть:
закинули 32 точки - прожиг - пауза на прожиг 5 мс - следующий регистр... - сдвиг ленты (тоже пауза).
В такой последовательности на печать строки в 384 точки (все 12 регистров) уходит ну очень много времени. Даже с удалением всех пауз и ускорением записи.
Еще не понятно зачем 8 раз подряд передавать одну и ту же точку:

for (int i = 0; i < 48; ++i)
{
for (int j = 0; j < 8; ++j)
{
uint8_t pinValue = LOW;
if (i/4==p)
{
..читаем бит
}
..записываем бит
}
}

Можете мне объяснить как это работает?

Re: Термопринтер из старого терминала (кассового аппарата)

Вт сен 10, 2019 11:05:26

может поискать листинги исходникоф для касовых дел? там вроде очень быстый код написан правда по семью мк51совместимых...но печатае влет даже новые чеки на стакрых касах после апгрейда прошивки где графическая херня идентификатор идут на чеке

Re: Термопринтер из старого терминала (кассового аппарата)

Вт сен 10, 2019 14:03:45

Исходники вряд-ли найти удастся...
А вот типовую схему и кратенькое описание от мини500-02 или ешшо чаво... вполне...
Но там принтера другие... хотя...
Разве что с шаговым движком дополнительно разбираться...
:roll:

Re: Термопринтер из старого терминала (кассового аппарата)

Ср сен 11, 2019 22:07:37

Все заработало с вот такой конструкцией:

Ниже прикрепляю весь код (скетч).

Хоть печать и ускорилась в несколько раз, но все же очень далека от той, какой должна быть. Сейчас картинка "Панды" (тестовой картинки) размерами 384х134 (48х16 мм) печатается за (примерно) 3 секунды. А это в 7 раз медленнее чем должно быть.
Изображение
Вот пример работы аппарата, с которого я взял термопринтер: https://youtu.be/NpgrLEuK3cg?t=57
Вот еще пример: https://youtu.be/pXnbft-Jdpk?t=131
Такая скорость печати возможна ТОЛЬКО если "прожиг" будет происходить вместе с шагом двигателя, то есть без пауз на печать, а одновременно.

Столкнулся еще с одной неприятной вещью. Нагар на печатающей головке. Он образуется сразу же после первой печати, и с каждой последующей печатью становится только хуже. Нагар легко убрать. Но все же он образуется потому что лента во время прожига стоит на месте и прилипает к головке. Кстати, время прожига на это не влияет. "Пригорание" происходит даже на самых блеклых отпечатках. Если делать печать на движущейся ленте, то такого не происходит (проверял).
НО! Текущий алгоритм не подходит для печати "на лету". Я пробовал. Происходит расслоение изображения. Каждые 32 точки происходит 1/2 шага мотора (1 прожиг), таких сегментов 12, 12 полу-шагов мотора, соответствует 3-м строкам... На одной линии (строке) это не заметно, но вот следующая строка (линия) отстоит от первой в 3 раза дальше чем должна быть. Изображение пропечатывается хорошо, но "полосатое" и в 3 раза выше чем должно быть. В общем, данный алгоритм не подходит. Если бы можно было прожигать одновременно всю линию, или несколько сегментов то проблем бы не было...
Может у кого-то есть идеи как сделать одновременный прожиг? То есть как сделать запись сразу во все регистры, а не в 1 из 12?

P.S. ...на заметку: скорость печати на прямую зависит от напряжения питания головки. Если напряжение питания 7-8 вольт то на прожиг одного сегмента нужно примерно 5 мс. Если напряжение 12 вольт то 1 мс вполне достаточно. Как результат - увеличение скорости в 2-3 раза...
Вложения
termoprint.rar
(9.03 KiB) Скачиваний: 445

Re: Термопринтер из старого терминала (кассового аппарата)

Чт сен 12, 2019 21:05:58

Спасибо! Заработало! Немного переделал, теперь летает! На печать всего буфера (384х134 точек) уходит в среднем 600 мс. При чем скорость печати зависит от количества точек в линии: меньше точек - меньше время на прожиг - быстрее печать. А если точек в линии нет, то вообще пропускается без задержки на прожиг!
Три строчки "среднего" шрифта печатаются "примерно" за 500 мс!!!
Картинка панды печатается дольше, до 1 сек. Из-за того что там много сплошных участков.

Функция печати:

Я использовал не линейную зависимость длительности прожига от количества пикселей в линии. График функции выглядит как парабола. Формула выглядит так:
Код:
((FireH-FireL)/100.0*(0.17667*(sq(StrobeEn)/100.0*StrobeEn)))/1000+FireL

где:
FireH - максимальное время прожига линий с наибольшим заполнением. Измеряется в мс. У меня установлено значение 12 мс
FireL - минимальное время прожига, если точек очень мало (на пример одна...) Измеряется в мс. У меня установлено 2 мс
StrobeEn - количество пикселей в строке
0.17667 - коэффициент: 100/566, как высчитал 566, уже не вспомню... расчеты не сохранил. Но он на прямую зависит от количества точек на головке (384).
_Standby() - функция отключает питание шаговика, чтобы не перегрелся.

Функция принимает не линейное значение от 2 до 12 (FireH и FireL)

Конечно, можно было так не заморачиваться, но я хотел добиться одинаковой "яркости" линий с разным заполнением, и при этом не жечь на всю катушку... В общем пытался поймать золотую середину между пережиганием пикселей (когда точки расплываются и сливаются от нагрева) и пропусками от очень слабого нагрева.
Остальной код не менял, но в будущем нужно будет переписать большинство функций.
Завтра скину фотки и видео работы.

Re: Термопринтер из старого терминала (кассового аппарата)

Пт сен 13, 2019 10:11:43

Вот результат:

Ответить