Easyelectronics.ru

Электроника для всех
Текущее время: 20 сен 2020, 20:28

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 17 ] 
Автор Сообщение
 Заголовок сообщения: "Декодер" ASCII кода для принтера на ARM
СообщениеДобавлено: 21 янв 2019, 15:51 
Только пришел

Зарегистрирован: 21 янв 2019, 14:44
Сообщения: 8
Предыстория Дано:
1. Принтер термоструйный китайского про-ва (имеет "свою" корявую ASCII таблицу символов) работает по порту RS232
2. ПК на DOSe с программой на английском языке (без поддержки кириллицы) "заточена под такой принтер"
Исходная задача: Напечатать посредством "чудо принтера" русские слова из программы не поддерживающей кириллицу.

На сегодняшний день чего добился:
1. Узнал что "чудо принтер" может печатать кириллицу если ему в коде настроек печати (данный код содержит размер шрифта, реверс\инверсию, код страницы шрифта и т.д.) указать "его кодовую страницу символов" №5 и для печати символа сообщать ему код символа (в виде "#код символа" из его таблицы символов). Т.е. из программы терминала COM порта посылаю сообщение в виде STX ---настройка печати--кодовая страница №5-- #208(код буквы Э)ETX в порт принтера RS232, и принтер благополучно печатает букву "Э".
2. Программа под DOS ни как не русифицируется, перед печатью текста сообщения не указывает необходимую настройку на кодовую страницу содержащую кириллицу.

В итоге родилась идея посредством ARMа (на STM32) по UART "подправить код" для печати кириллицы. Т.е.:
1. Заменить в коде "настроек печати" один символ с 0 на 5 (указатель на кодовую страницу символов принтера) тут более менее понятно имея одну и туже длину - 16 символ от начала, нужно менять с 0 на 5.
2. использование "символа" (к примеру ~) чтоб заменить код с английской буквы А (имеющую код #065) на русскую Ф (с кодом #192). В этом случае для МЕНЯ Сложно т.к. необходимо каким-то образом из объема текста выцепить символ ~ и заменить следующие за ним цифры
Буду Благодарен за какую либо помощь-информацию по алгоритму кода.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Декодер" ASCII кода для принтера на ARM
СообщениеДобавлено: 21 янв 2019, 16:29 
Старожил

Зарегистрирован: 28 сен 2018, 00:25
Сообщения: 291
Что здесь сложного?
Заводим два уарта, на каждый кольцевой буфер (не особо нужно, но пусть будет на всякий случай), в приемном уарте смотрим на символ прям в прерывании, если входящий символ != '~' просто перекладываем в буфер выходного уарта. Если =='~' заменяем.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Декодер" ASCII кода для принтера на ARM
СообщениеДобавлено: 21 янв 2019, 17:45 
Только пришел

Зарегистрирован: 21 янв 2019, 14:44
Сообщения: 8
Я так понимаю на каждый "конвертируемый" символ надо свое правило заводить ?
А можно пример на 1 символ?
P.S я начинающий
p.p.s В моем случае 2х UARTов и не надо ибо ПК тупо послал сообщение в порт, а что там с ним ему все равно. Связь однонаправленная


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Декодер" ASCII кода для принтера на ARM
СообщениеДобавлено: 21 янв 2019, 18:01 
Старожил
Аватара пользователя

Зарегистрирован: 04 окт 2011, 10:19
Сообщения: 2061
Подключаете любой STM32 с двумя портами к компьютеру.
В один порт суёте что нужно печатать, а на другом смотрите что будет в принтер отправляться.
И точите мастерство программирования, пока не добьётесь правильного результата.
Потом другой порт подключаете к принтеру и радуетесь весне и солнцу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Декодер" ASCII кода для принтера на ARM
СообщениеДобавлено: 21 янв 2019, 18:37 
Старожил

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 4198
Откуда: Чобля - долбаный кетайец
Можно пойти и другим путем. Найти программистов из мира "больших компьютеров" и спросить, как сделать (или где найти) утилиту-перехватчик сообщений в COM-порт. По сути, она должна создавать виртуальный COM-порт, перехватывать сообщения из него, преобразовывать и отправлять в реальный COM-порт.

А про микроконтроллер... Два UART-а. И таблица преобразования символов. Каждый входящий символ преобразуется по таблице и отправляется во второй UART.
Таблица выглядит как массив на 256 элементов:
(часть абстрактной таблицы)
char convert_table[256] = {'A', 'B', 'x', 192, 205, 76, 'C', 189 /*.... ну и так далее*/ }

Преобразование:
out_ch = convert_table[in_ch];
Входящий символ in_ch в исходной кодировке является индексом массива, в котором содержится целевая кодировка.

А вот другая сторона вопроса в том, что если, как вы пишите, что исходная DOS-программа не работает с кириллицей, то соппсна как вы будете получать буквы русского алфавита именно в ней???


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Декодер" ASCII кода для принтера на ARM
СообщениеДобавлено: 21 янв 2019, 18:56 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2795
Откуда: Санкт-Петербург
+1 к предложению BusMaster. Скорей всего, работа с ком-портом в досовской проге идёт через прерывание INT 14h, это довольно легко перехватывается. Единственное - вам придётся найти программиста, который это ещё не забыл либо который готов взять книжку типа Журдена (Джордейна) или "Системное программирование для ПРАВЕЦ-16", перечитать и вспомнить, как пишутся резидентные программы.
Это точно довольно легко делается, 20+ лет назад я так менял форму выводимой на печать платёжки (только там принтер был на LPT - INT 17h).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Декодер" ASCII кода для принтера на ARM
СообщениеДобавлено: 21 янв 2019, 20:43 
Старожил
Аватара пользователя

Зарегистрирован: 04 окт 2011, 10:19
Сообщения: 2061
На нормальном компьютере это сделать вообще плёвое дело. Даже обсуждать нечего.
Но ТС хотел на АРМ. Снифферов порта и эмуляторов - как грязи в Простоквашино.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Декодер" ASCII кода для принтера на ARM
СообщениеДобавлено: 21 янв 2019, 23:42 
Только пришел

Зарегистрирован: 21 янв 2019, 14:44
Сообщения: 8
Зачем мне сниферы?? Я и так знаю какое сообщение отправляет Dos, и в какую "пургу" его надо превратить! "Нормальный" комп не вариант-целый комп ради написания сообщения.... Сваять "BATник" или уж совсем красиво чтоб, то сверстать EXEшник с допотопным граф. Окном для меня оказалось проще чем в СИ разбираться с работой/обработкой данных...
Про кириллицу в DOSе - а она мне там ненужна! В тексте сообщения будет символ ~ (к примеру) и дальше латинская буква. декодер увидел символ ~ перекодировал идущую за ним букву в кириллицу. Естественно для "наглядности" латинская буква будет соотвествовать кириллической той же что и на клавише клавиатуры. А русский текст в DOSе в полне читабелен с "подобными вставками"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Декодер" ASCII кода для принтера на ARM
СообщениеДобавлено: 22 янв 2019, 05:39 
Заглядывает иногда

Зарегистрирован: 16 сен 2018, 10:41
Сообщения: 124
Что-то мне кажется человек никогда не сталкивался с DOS, матричными принтерами, и русификацией всего этого зоопарка, поэтому бурно фантазирует аж с применением ARM... :-)

Есть какая-то программа под DOS, которая вообще не понимает кириллицу, но умеет печатать на этот принтер.
Принтер умеет печатать кириллицу.
Задача: любым жопом вывести русские буквы на этом принтере через эту программу.
То есть если это, допустим, этикетка, то вбиваем в программе что-то типа "-ET-IKETKA" и становимся счастливыми.
Так?

А покажите-ка эту кодовую страницу Шанель номер 5... А то поставим keyrus.com, а оно и заработает :-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Декодер" ASCII кода для принтера на ARM
СообщениеДобавлено: 22 янв 2019, 12:09 
Только пришел

Зарегистрирован: 21 янв 2019, 14:44
Сообщения: 8
1. Касательно русификации DOSа - в моем случае программка удачно работает на DOSе 6.22 rus ( указана клавиатура с 2-мя языками и поддержкой русского, "настроена" графика), НО! эта "программка" почему-то категорически не понимает смены раскладки клавиатуры на рус (т.е. понимает что символы вводятся не англ. она их просто не печатает, курсор на месте зависает при рус раскладке и не хочет отображать символы русские). Более того с командной строкой все ОК - отображается кириллица, по команде print файл с названием "на печать.txt" и содержанием кириллицы благополучно отправляется в указанный порт.
Всю "малину" портит программка!


Вложения:
Комментарий к файлу: таблица символов с кириллицей
таблица символов.jpg
таблица символов.jpg [ 165.57 Кб | Просмотров: 914 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Декодер" ASCII кода для принтера на ARM
СообщениеДобавлено: 22 янв 2019, 13:12 
Заглядывает иногда

Зарегистрирован: 16 сен 2018, 10:41
Сообщения: 124
"по команде print файл с ... содержанием кириллицы благополучно отправляется в указанный порт"
Кириллица в этом файле в какой кодировке? DOS или кодировке принтера?
Если в кодировке DOS и принтер её выводит правильно - такого не может быть без драйвера.

В любом случае imho проще не декодер на ARM делать, а разобраться как именно программа это выводит и написать резидентный драйвер принтера.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Декодер" ASCII кода для принтера на ARM
СообщениеДобавлено: 22 янв 2019, 13:41 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2795
Откуда: Санкт-Петербург
dima12, речь не о выделенном компе для перекодировки, а о том, что вместо лишней железки - достаточно на _тот же_ комп сделать программку (эдак в полкилобайта размером), которая перекодирует всё, что прога отправляет на принтер.

Навскидку нагугленная статья про написание TSR - http://shackmaster.narod.ru/tsr.htm
В вашем случае - надо перехватить прерывание INT 14h, и если вызывают функцию 01 (AH=01h, см. http://www.codenet.ru/progr/dos/int_0013.php ) - то проверить выводимый символ (AL) - ну и там вся логика, если равен 0x7E ('~') - установить себе флаг, поставить AH, будто успешно отправили символ в порт и выйти, иначе, если флаг установлен - перекодировать символ и сбросить флаг, а затем перейти на старый обработчик.

Требуемые инструменты: TASM (+Turbo Linker, идёт в комплекте), Turbo Debugger, любой редактор по выбору. Пробовать можно на том же компе или под DOSBOX на современном.

Хотя, конечно, если вы умеете в ARM (и вам не лень делать плату с двумя MAX3232), и сложность только с алгоритмом перекодировки - то можно и так.


Последний раз редактировалось aamonster 22 янв 2019, 13:54, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Декодер" ASCII кода для принтера на ARM
СообщениеДобавлено: 22 янв 2019, 13:46 
Только пришел

Зарегистрирован: 21 янв 2019, 14:44
Сообщения: 8
pfgx писал(а):
"Кириллица в этом файле в какой кодировке? DOS или кодировке принтера?
Если в кодировке DOS и принтер её выводит правильно - такого не может быть без драйвера.

В любом случае imho проще не декодер на ARM делать, а разобраться как именно программа это выводит и написать резидентный драйвер принтера.

Естественно в порт идет кириллица кодировки DOSа, и естественно принтер печатает "галиматью" т.к. у него коды символов не совпадают с DOSовской. Дело то не в Операционке DOS, а в программе где набирается и откуда оправляется сообщение на печать. Программа походу "грузит свою" кодовую страницу, и "свою клавиатуру" и до кучи свой драйвер принтера.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Декодер" ASCII кода для принтера на ARM
СообщениеДобавлено: 22 янв 2019, 14:32 
Только пришел

Зарегистрирован: 21 янв 2019, 14:44
Сообщения: 8
aamonster писал(а):
достаточно на _тот же_ комп сделать программку

как мало слов в этой фразе , но ОЧЕНЬ много непонимания процессов (пускай даже тривиальных) ДЛЯ МЕНЯ!!!
Я не говорил что код под ARM для меня легко - все относительно. Ваше "aamonster" предложение более грамотней, согласен с Вами полностью, но на сегодняшний день для меня это вернуться к началу решения проблемы. Скорее даже не к "началу проблемы", а к "истоку" своих знаний т.к. придется изучать +Turbo Linker, разбираться с процессом перехвата прерываний и много еще чего (не исключаю что полезного) попутно придется изучить.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Декодер" ASCII кода для принтера на ARM
СообщениеДобавлено: 22 янв 2019, 14:52 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2795
Откуда: Санкт-Петербург
dima12, я правильно понимаю, что спаять плату с ARM и двумя MAX3232 и набросать "рыбу" кода для передачи символов "насквозь" - в пределах ваших знаний и умений, и проблема только в алгоритме перекодировки? Поэтому вам проще сделать плату, чем написать программу под DOS? Если у вас будет такое (что принтер продолжает работать, будучи подключенным через ваш девайс) - с алгоритмом могу помочь и я, и ещё куча народу, он очень простой.

Кстати, при реализации с платой могут быть проблемы: в RS232, кроме линий данных - есть линии RTS/CTS и DTR/DSR, и их своевременное включение может быть критично для принтера (а может быть и нет). Если так - с платой будет заметно труднее, чем с TSR.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Декодер" ASCII кода для принтера на ARM
СообщениеДобавлено: 22 янв 2019, 15:36 
Только пришел

Зарегистрирован: 21 янв 2019, 14:44
Сообщения: 8
aamonster писал(а):
dima12, я правильно понимаю, что спаять плату с ARM и двумя MAX3232 и набросать "рыбу" кода для передачи символов "насквозь" - в пределах ваших знаний и умений, и проблема только в алгоритме перекодировки? Поэтому вам проще сделать плату, чем написать программу под DOS? Если у вас будет такое (что принтер продолжает работать, будучи подключенным через ваш девайс) - с алгоритмом могу помочь и я, и ещё куча народу, он очень простой.

Кстати, при реализации с платой могут быть проблемы: в RS232, кроме линий данных - есть линии RTS/CTS и DTR/DSR, и их своевременное включение может быть критично для принтера (а может быть и нет). Если так - с платой будет заметно труднее, чем с TSR.

Вы меня совершенно правильно поняли!!! с "железом" для меня проблем нет. В наше время и паять то ничего не надо братья китайцы все уже спаяли))) тупо помодульно соединил и "железо" готово!
1. Касательно моих познаний в ARM - боюсь что они минимальны (в рамках поставленной для себя задачи) я пока что пытаюсь научиться на примерах (разжеванных) но "далеких" от моей задачи.
2. Что касается сигналов RTS/CTS и DTR/DSR они ни принтеру ни программе/ПК (с программой) не нужны. Даже подтверждение печати (в "ASCII код 6" - в настройках принтера заложена функция) отсылаемое принтером, как оказалось, программе вообще ниочем не говорит. Как я понял по электрической части достаточно от ПК Tx, а на принтере Rx .
Т.е. говоря бытовыми словами,и совсем поверхностно - ПК с программой "что-то" отправил в порт, а принтер как смог так и понял (принял за текст в печать).
Наглядно "в strig": вот что программа отправляет в принтер T00000002500010 _TEXT_ . Из этого всего: символы  -начало и конец сообщения, T-параметр указывающий что идет текст для печати, 00000002500010 -настройка печати (последний 0 - указатель кодовой странички), _TEXT_ - собственно само текстовое сообщение.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Декодер" ASCII кода для принтера на ARM
СообщениеДобавлено: 25 янв 2019, 14:37 
Только пришел

Зарегистрирован: 21 янв 2019, 14:44
Сообщения: 8
Пришел в тупик! проблема даже с основой - "сквозной передачей символов" между двумя портами UART. в голове просто "каша" от примеров со способами передачи данных по UART.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB