Весь проект (вместе с этим описанием) можно взять в виде одного zip.
Сначала проект был рассчитан на использование EPP, но потом его пришлось
переделать для возможности работы с SPP.
Проект состоит из двух частей: аппаратной (схема и firmware) и программной (фукция для посылки
данных в термоголовку).
В схеме использованы: термоголовка LTP3445, контроллер Atmel AVR AT90S8515, несколько
мощных полевых транзисторов IRF9540 (потом для экономии места и денег их заменили на сборки IRF7309)
и мелкой логики. Сама схема лежит или в архиве, или здесь
(110 К) (процессорная часть) и здесь (180 К) (обвязка, защита от
перегрева и питание).
Основные характеристики:
Напряжения питания: +3,3 В 0,1 А; +5 В, 0,2 А; +8 В 3,6 А (пиковое, сильно зависит от скорости и черноты
изображения. В принципе, можно печатать и от батарей).
Скорость печати: до 50 мм/с
Разрешение: 8 точек/мм (определяется головкой)
Программа (firmware) для этого термопринтера писалась на бесплатном C с
добавлением ассемблерных вставок. Потом, увидев, насколько хорошо компилятор оптимизировал код
(отличие по быстродействию от ассемблера менее 5 процентов!),
я от большинства этих вставок отказался, чтобы было проще жить, модифицировать и отлаживаться.
(Правда, при этом надо писать на С так, чтобы было удобно оптимизировать, правильно
и аккуратно используя модификаторы register, volatile и прочие. О том, как правильно работать с
GNU C для AVR, написано на дружественном сайте моего коллеги Миши Клокова)
Вкратце: в RAM контроллера организован буфер FIFO примерно на две-три строки. Данные передаются через
LPT с подтверждением приема от контроллера по прерыванию (чтобы не срывать процесс печати, надо передавать
данные длинными массивами). Из контроллера в LPT передается информация о состоянии термоголовки (нет
бумаги, открыт механизм, перегрев и т.д., можно передавать температуру головки) и количестве данных в
FIFO контроллера. Шаговый двигатель подачи бумаги работает с плавным разгоном, иначе его заклинивает и
он начинает дребезжать на месте (впрочем, об этом написано в LTP3445 datasheet (600 K)).
В зависимости от температуры термоголовки изменяется длительность импульса нагрева для печати, чтобы по
всей длине была одинаковая контрастность. Таблицу для конкретной головки можно при желании залить в EEPROM
контроллера, если ее нет, то используются значения по умолчанию.
Кое-какие комментарии по установке и компиляции можно найти внутри проекта в файле howto.txt. Проект
компиляется из среды Visual C++ 6 (очень удобно!) или прямо из DOS при установленном WinAVR C. Возможны
грабли с порядком аргументов портовых операций, если что-то не работает, первым делом смотрите туда.
(Начиная с какой-то версии GCC изменился способ вызова outp() ).
В июле 2004 года я проапгрейдил исходники, чтобы они могли компиляться с помощью последнего релиза WinAVR. Проверено на WinAVR 20040404. На 22 июля 2004 года скачивается отсюда.
Программная часть PC-шной стороны писалась в Borland C 3.1. Основная идея - сформировать битовый
массив размером (104*8)*n байт с растровым изображением, которое хочется напечатать, и послать его
в FIFO контроллера. Естественно, так можно печатать и текст, и графику. Здесь
лежит программа для печати монохромных файлов *.bmp шириной (кажется) 832 пиксел. Ее можно использовать
как заготовку для собственной подпрограммы печати. Она хорошо отлаживается и там все должно быть понятно.
Из непонятного: в принтер можно и нужно посылать команды, например, изменения максимальной скорости печати,
сброса и др. Они посылаются так же, как и данные, в том же массиве.
Весь проект был сделан за пару месяцев по вечерам и затем около года периодически отлаживался и дополнялся. Возможно, выложенная программа для компа уже не работает с этим принтером (с момента ее написания для тестирования что-то могло измениться), но надо попробовать.
Поскольку этот проект делался за деньги, то по отношению к заказчику было бы нечестно выкладывать release-версию. Но работоспособный пререлиз, как мне кажется, вполне нормально - и обязательства не нарушаю, и всем полезно. Желающие могут использовать прямо так, кто-то может и доработать. Например, можно прикрутить более узкую термопечатающую головку или просто головку другого типа.
Этот проект можно бесплатно использовать, распространять и изменять, единственная просьба - вколачивать в исходники строку, по которой меня можно найти. Вдруг кто-то халтурку подкинет :) Строка может выглядеть так: "Разработчик оригинальной версии ПО - Д. Коробков, dkorobkov@mail.ru"
|
|