Как сделать вывод информации на ЭВМ из контрольно проверочной аппаратуры

imp
Offline
Зарегистрирован: 20.06.2020

nik182 пишет:
...В этой программе только вывод слова code: занимает 5 мс. Сколько при этом теряется символов непонятно.
Кстати таки да. Вероятно теряется часть символов. Для начала убери 10 строку.

61732
Offline
Зарегистрирован: 11.10.2020

 т.е  void loop() убрать?

MaksVV
Offline
Зарегистрирован: 06.08.2015

nik182 пишет:
...В этой программе только вывод слова code: занимает 5 мс. Сколько при этом теряется символов непонятно.
 

void setup() 
{
Serial.begin(9600);
uint32_t prevtime = micros();
Serial.println ("Code: ");
Serial.print(micros()-prevtime);
}

void loop() {}

результат 64 мкс.  При скорости 230400 кстати больше времени на отправку в буфер :  72 мкс

 

imp
Offline
Зарегистрирован: 20.06.2020

61732 пишет:

 т.е  void loop() убрать?

Нет. Это я накосорезил, не десятую а двадцатую строку, которая:

Serial.print("Code: ");

61732
Offline
Зарегистрирован: 11.10.2020

imp
Offline
Зарегистрирован: 20.06.2020

Увеличь скорость до 57600 и приложи начало напечатанного документа.

nik182
Offline
Зарегистрирован: 04.05.2015

Хардверный сериал сыпет в буфер. Проблемы только когда буфер переполняется. Именно тогда может теряется информация. Мне не понятно сейчас одно - какой сигнал на осциллограмме, где длительность импульса 6 мкс? По хорошему читать надо только в момент фронта SYNC. 

61732
Offline
Зарегистрирован: 11.10.2020

nik182
Offline
Зарегистрирован: 04.05.2015

Выглядит красиво. Теперь рядом надо то что в этот момент печаталось.

61732
Offline
Зарегистрирован: 11.10.2020

imp
Offline
Зарегистрирован: 20.06.2020

Попробуй вот этот код:

	const int SYNC = 5;
	const int max_counter = 16;
	char buffer[max_counter];
	char char_table[16] = {'0','1','2','3','4','5','6','7','8','9','*','+',',','-','.',' '};
	unsigned int counter = 0; 

	void setup()
	{
	  pinMode(SYNC, INPUT);
	  DDRB = 0b11110000;
	  Serial.begin(9600);
	  buffer[max_counter] = 0;
	}
	 
	void loop()
	{
	  bool m;
	  m = digitalRead(SYNC);
	  if( m )
	  {
	    // Получаем данные и выделяем используемые биты.
		buffer[counter] = char_table[(PINB & 0x0F)];
		counter++;
		if(counter >= max_counter)
		{
            		int t = sizeof(buffer);
			Serial.print(String(buffer));
			counter = 0;
		}

	    while(digitalRead(SYNC));
	  }
	}

 

61732
Offline
Зарегистрирован: 11.10.2020

imp Вы гений. Вся информация пратически, как на чеке, есть неточности но они не на что не влияют. Информация выводится в одной строке. Подскажите, как информацию расположить, как в чеке и вывести в ексель или вворд, лучше конечно в ексель, чтобы потом можно было сохранить и распечатать.

imp
Offline
Зарегистрирован: 20.06.2020

Замените 27 строку на:

        Serial.println(String(buffer));

И про неточности подробнее.

61732
Offline
Зарегистрирован: 11.10.2020

61732
Offline
Зарегистрирован: 11.10.2020

Ноль куда-то убежал. Нижней строки нет. И вместо 0365 число 065.

imp
Offline
Зарегистрирован: 20.06.2020

Попробуй вот этот код, только нужно переключить вход синхроимпульсов с пятого пина на второй.


	const int max_counter = 16;
	char buffer[max_counter+1];
	char char_table[16] = {'0','1','2','3','4','5','6','7','8','9','*','+',',','-','.',' '};
	unsigned int counter = 0; 

	void setup()
	{
      attachInterrupt(0, input_char, RISING);
	  DDRB = 0b11110000;
	  Serial.begin(9600);
	}
	
	void input_char ()
    {
      	buffer[counter] = char_table[(PINB & 0x0F)];
		counter++;
    }

	void loop()
	{

      if(counter >= max_counter)
      {
        int t = sizeof(buffer);
        Serial.println(String(buffer));
        counter = 0;
      }	 
	}

 

61732
Offline
Зарегистрирован: 11.10.2020

Imp cпасибо. Но уже только в понедельник отпишусь выходные. Все закрыто. Ещё один вопрос: если отключить от СЦВМ МПУ(которая печатает чек) и оставить на этом шлейфе только ардуино, СЦВМ выдаёт ошибку. Может сигнал ГТВ играет в этом роль.

SLKH
Offline
Зарегистрирован: 17.08.2015

61732 пишет:
Imp cпасибо. Но уже только в понедельник отпишусь выходные. Все закрыто. Ещё один вопрос: если отключить от СЦВМ МПУ(которая печатает чек) и оставить на этом шлейфе только ардуино, СЦВМ выдаёт ошибку. Может сигнал ГТВ играет в этом роль.
Естественно.

Ещё ПЧТ, ЗПР, ЗПС и СТП нужно читать или писать. Ну и счетчик до 16 программировать. 

 

61732
Offline
Зарегистрирован: 11.10.2020

В начале когда вводится программа на СЦВМ для проверки сразу выдаёт ошибку что отсутствует устройство. Это должен быть один сигнал,
Сигнал ГТВ один единственный, который в покое имеет 3.8в.

SLKH
Offline
Зарегистрирован: 17.08.2015

61732 пишет:
В начале когда вводится программа на СЦВМ для проверки сразу выдаёт ошибку что отсутствует устройство. Это должен быть один сигнал, Сигнал ГТВ один единственный, который в покое имеет 3.8в.

это напряжение формируется в СЦВМ. разъём не подключен - СЦВМ справедливо считает, что печатка не готова.

================

Для начала следует всё же уточнить, в каком режиме вся эта лабуда работает - в минимальном или? (см. примечание 1 к п. 5.4.1.) Заодно  проверить, задействована ли линия ВЗВ

==========

Если "запрос-ответ" (я бы рекомендовал выбрать его, даже если сейчас применен минимальный),  то пишем программу: 

ардуинская программа (АП) при включении должна связаться с программой на компе (ПК);

ПК проверяет готовность принтера, при готовности сообщает об этом АП;

АП выставляет сигнал ГТВ;

дальше смотрим стр. 14 мануала и программируем

после приема 16 символов (или получения сигнала СТП) АП выставляет сигнал ПЧТ и отправляет массив в ПК

ПК печатает строку, сообщает о готовности к приему следующей АП,  АП снимает сигнал ПЧТ

АП принимает следующую строку и т.д.

 

 

imp
Offline
Зарегистрирован: 20.06.2020

Эти скетчи нужны только для лучшего понимания протокола обмена. Для подключения ардуины вместо печаталки, нужно воспроизвести остальные сигналы. Пока что, судя по эпюрам, для работы на прямую, сигналы "АВТ" должен быть подключен на общий, сигнал "ГТВ" на +5 вольт (на всякий случай через резистор 1к). Сигналы "СМС-К" и "ЗПС" никуда не подключены (у нас нет двигателя, который нужно разгонять). С сигналом "СТП" надо потом разбираться, а пока никуда не подключаем. Сигнал "ИНФ-Б" - понятно куда, остается понять что делатть с "ЗПР" и "ПЧТ". Отсюда план работы:

1. Проверить последний скетч. Если он заработает без сбоев, значит без прерываний не обойтись.
2. Проверить на реальной печаталке сигналы "АВТ" и "ГТВ" во время печати, убедиться что "АВТ" = "0" а "ГТВ" = "1".
3. Двухлучевым осциллографом снять осциллограммы с сигналов "ИНФ-Б" и "ЗПР" во время печати, таким образом, что бы было видна задержка "ЗПР" относительно "ИНФ-Б".
4. Осциллографом измерить длительность сигнала "ПЧТ".
5. Осциллографом в режиме "однократного срабатывания" снять сигнал "СТП" если конечно получится (он может не использоваться).

SLKH
Offline
Зарегистрирован: 17.08.2015

imp пишет:

Эти скетчи нужны только для лучшего понимания протокола обмена. Для подключения ардуины вместо печаталки, нужно воспроизвести остальные сигналы. Пока что, судя по эпюрам, для работы на прямую, сигналы "АВТ" должен быть подключен на общий, сигнал "ГТВ" на +5 вольт (на всякий случай через резистор 1к).

не меньше 3к.

Цитата:
Сигналы "СМС-К" и "ЗПС" никуда не подключены (у нас нет двигателя, который нужно разгонять). С сигналом "СТП" надо потом разбираться, а пока никуда не подключаем. Сигнал "ИНФ-Б" - понятно куда, остается понять что делатть с "ЗПР" и "ПЧТ".
надо разбираться с соответствием сигналов из мануала и из картинки в #56 - есть там непонятки.

 

Цитата:
Отсюда план работы:

1. Проверить последний скетч. Если он заработает без сбоев, значит без прерываний не обойтись.
2. Проверить на реальной печаталке сигналы "АВТ" и "ГТВ" во время печати, убедиться что "АВТ" = "0" а "ГТВ" = "1".
3. Двухлучевым осциллографом снять осциллограммы с сигналов "ИНФ-Б" и "ЗПР" во время печати, таким образом, что бы было видна задержка "ЗПР" относительно "ИНФ-Б".
4. Осциллографом измерить длительность сигнала "ПЧТ".
5. Осциллографом в режиме "однократного срабатывания" снять сигнал "СТП" если конечно получится (он может не использоваться).

2 - если АВТ вообще задействован

4 - не надо. пока реальный принтер не подключен, можно сформировать ~50 мс.

5 - если в реале бывают строки меньше 16 символом (имхо, бывают)

=======

ну и можно начинать опторазвязки паять.

и я раньще был неправ - уна предпочтительнее, чем нано - у неё разъем юсб намного надежнее.

61732
Offline
Зарегистрирован: 11.10.2020

1. Информация определилась правильно, как на чеке

2. С ГТВ я ошибся нет там 3,8 в. Перед печатью и во время печати 0, но если отключить печатную машинку то вот такая картина

АВТ - такого вывода нет

3. ЗПР и ИНФ-Б

4. ПЧТ

5. СТП - нет вывода.

 

SLKH
Offline
Зарегистрирован: 17.08.2015

61732 пишет:

1. Информация определилась правильно, как на чеке

 

2. С ГТВ я ошибся нет там 3,8 в. Перед печатью и во время печати 0, но если отключить печатную машинку то вот такая картина

 

АВТ - такого вывода нет

3. ЗПР и ИНФ-Б

 

4. ПЧТ

 

5. СТП - нет вывода.

 

арифметика:

на рис. 5 мануала 14 сигналов, на табличке 12

разница 2^4 (явно) и АВТ (предположительно). 

Нужно как-то привязать в мануалу сигналы "ОШИБКА" и "КР"

 

61732
Offline
Зарегистрирован: 11.10.2020

"КР" сигнал заглушен.

imp
Offline
Зарегистрирован: 20.06.2020

На разьеме "Ш12" сигнала "АВТ" нету. Сигнал "АВТ" можно взять либо с блока "БС" либо непосредственно с разьема. Осцилограмму "ЗПР" и "ИНФ-Б" сделай с разверткой 1ms.

SLKH
Offline
Зарегистрирован: 17.08.2015

61732 пишет:
"КР" сигнал заглушен.
1. что такое "заглушен? не распаян внутри печатки? заземлен с какой-то стороны? 

2. в любом случае необходимо понимание, где у нас какие сигналы из объявленных 14.

61732
Offline
Зарегистрирован: 11.10.2020

SLKH пишет:

61732 пишет:
"КР" сигнал заглушен.
1. что такое "заглушен? не распаян внутри печатки? заземлен с какой-то стороны? 

2. в любом случае необходимо понимание, где у нас какие сигналы из объявленных 14.


Не спаян на входе печатки.

61732
Offline
Зарегистрирован: 11.10.2020

ЗПР и ИНФ-Б

61732
Offline
Зарегистрирован: 11.10.2020

ЗПС во время печати

61732
Offline
Зарегистрирован: 11.10.2020

Сигнал "АВТ" пока разобраться не могу,  Самой схемы на МПУ-16 нет.

imp
Offline
Зарегистрирован: 20.06.2020

Теперь попробуем ардуино вместо печаталки. Подключи третий пин ардуино в качестве "ЗПР" и четвертый пин в качестве "ПЧТ", остальные как было описано выше. Попробуй скетч:

	const int INFB_PIN = 2; // Номер пина принемающего сигнал ИНФ-Б
	const int INFB_INTERRUPT = 0; //Номер прерывания которое использует ИНФ-Б

	const int ZPR_PIN = 3;	// Номер пина генерирующего сигнал ЗПР
	const int PCHT_PIN = 4;		//Номер пина генерирующего сигнал ПЧТ
	const int PCHT_DURATION = 100; //Дополнительная задержка для генерции сигнала ПЧТ

	const int max_counter = 16;	//Количество символов в строке
	char buffer[max_counter+1];	//Буфер под строку вывода
	unsigned int counter = 0;	//Счётчик строки
	char char_table[16] = {'0','1','2','3','4','5','6','7','8','9','*','+',',','-','.',' '};

	bool print_flag = false;
	bool input_char_flag = false;
      
	void setup()
	{
	  pinMode(ZPR_PIN, OUTPUT);
      pinMode(PCHT_PIN, OUTPUT);
      
      digitalWrite(ZPR_PIN, false);
      digitalWrite(PCHT_PIN, false);
      
      attachInterrupt(INFB_INTERRUPT, input_char, CHANGE);
      
	  DDRB = 0b11110000;
	  Serial.begin(9600);
	}
	
	void input_char ()
    {

    	if(digitalRead(INFB_PIN))
        {
        	buffer[counter] = char_table[(PINB & 0x0F)];
			counter++;
          	if(counter >= max_counter)
            {
            	print_flag = true;
              	digitalWrite(PCHT_PIN, true);
            }	
          	else
            {
            	print_flag = false;
            }
          	digitalWrite(ZPR_PIN, true);
        }
      	else
        {
        	digitalWrite(ZPR_PIN, false);
        }

    }

	void loop()
	{
      if(print_flag)
      {
        Serial.println(String(buffer));
        counter = 0;
        print_flag = false;
        delay(PCHT_DURATION);
        digitalWrite(PCHT_PIN, false);
      }
	}

 

 

61732
Offline
Зарегистрирован: 11.10.2020

Если отсоединить от МПУ кабель или его выключить, то после ввода программы, когда должна начаться печать СЦВМ выдает ошибку.

Если МПУ включить то:

imp
Offline
Зарегистрирован: 20.06.2020

Нет, одновременно МПУ и этот скетч включать не нужно. Нужно подключить ардуино вместо МПУ. И если при этом ошибку выдает сразу, то надо искать в чем отличие используемых сигналов. Сделай табличку всех задействованных пинов на разьеме, и заполни их состояние перед началом печати (т.е. СЦВМ включи но на печать ничего не отправляй) сначала с подключенным МПУ затем с ардуиной.

61732
Offline
Зарегистрирован: 11.10.2020

Ошибку выдает только после загрузки программы, когда должна начаться печать. Если отключить ардуино, то будет то же самое, т.е. СЦВМ не видит печатную машинку.

imp
Offline
Зарегистрирован: 20.06.2020

61732 пишет:
Ошибку выдает только после загрузки программы, когда должна начаться печать. Если отключить ардуино, то будет то же самое, т.е. СЦВМ не видит печатную машинку.
То есть отсутствует какой-то важный сигнал. Определить его мы сможем только сравнением. Нужно для всех задействованных пинов разъема получить значения в режиме кода идет печать и когда ничего не подключено и СЦВМ выдала ошибку. Для начала просто измерь напряжения на всех задействованных пинах. Лучше всего сведи эти данные в табличку что-бы было видно напряжение при ошибке и напряжение при печати. Потом некоторые пины возможно придется глядеть осцилографом. Другого пути кроме как понять разницу, я не вижу.

61732
Offline
Зарегистрирован: 11.10.2020

А почему Вы не рассматриваете, что это может быть сигнал "не исправность ПЧТ", он сигнатуру выбивает только во время печати.

imp
Offline
Зарегистрирован: 20.06.2020

61732 пишет:
А почему Вы не рассматриваете, что это может быть сигнал "не исправность ПЧТ", он сигнатуру выбивает только во время печати.
Потому, что:

61732 пишет:
Если отключить ардуино, то будет то же самое, т.е. СЦВМ не видит печатную машинку.
Т.е. все признаки отсутствия или неправильного значения одного из сигналов. Выяснить можно только сравнением.

61732
Offline
Зарегистрирован: 11.10.2020

Но если ардуино и включить СЦВМ его то же не видит. Завтра займусь.

SLKH
Offline
Зарегистрирован: 17.08.2015

61732 пишет:

Ошибку выдает только после загрузки программы, когда должна начаться печать. Если отключить ардуино, то будет то же самое, т.е. СЦВМ не видит печатную машинку.

СЦВМ не будет печатать без сигнала ГТВ от МПУ или её заменителя/имитатора. Кстати, в скетче на #182 я этот сигнал не вижу.

imp
Offline
Зарегистрирован: 20.06.2020

SLKH пишет:

61732 пишет:

Ошибку выдает только после загрузки программы, когда должна начаться печать. Если отключить ардуино, то будет то же самое, т.е. СЦВМ не видит печатную машинку.

СЦВМ не будет печатать без сигнала ГТВ от МПУ или её заменителя/имитатора. Кстати, в скетче на #182 я этот сигнал не вижу.

Про "ГТВ" я писал выше и думаю 61732 все подключил (через резистор на +5 вольт). Но сомнительно что этого достаточно. Скорее всего мы не учли какой-то не документированный сигнал.

61732
Offline
Зарегистрирован: 11.10.2020

Я наверное тогда лохонулся ГТВ я сейчас не подключал.

imp
Offline
Зарегистрирован: 20.06.2020

Подключи и попробуй. Заработает хорошо, не заработает, сравнивай сигналы.

61732
Offline
Зарегистрирован: 11.10.2020

Можно уточнюсь, ГТВ подключаю напрямую ко входу +5в через резистор 1к.

imp
Offline
Зарегистрирован: 20.06.2020

Не напрямую, а через резистор 1кОм. Подключить вместе с ардуино (распиновка как для скетча с прерываниями, плюс два дополнительных пина, которые я описал выше). МПУ не подключать.

Если не заработает, снять значения на всех пинах разъема к которым есть подключение внутри МПУ. Затем подключить МПУ запустить печать, и во время печати так же списать все напряжения на используемых пинах. Нужно выявить пин, отвечающий за начальную готовность. По описанию это "АВТ" но так как его нет на разъеме, должен быть какой-то его заменяющий.

61732
Offline
Зарегистрирован: 11.10.2020

Не печатает, буду снимать значения.

SLKH
Offline
Зарегистрирован: 17.08.2015

61732 пишет:
Можно уточнюсь, ГТВ подключаю напрямую ко входу +5в через резистор 1к.
на хрена? СКЗИ это читает и видит, что печатка НЕ готова.

RTFM хотя бы сейчас!  ясно же тема расписана на уровне школьного кружка - пункты 3.14 и 5.2.2, рисунки 1 и 2.

на данной стадии экспериментов можно приколхозить к пину ардуины диод (шоттки или д9к), катодом к пину(!) и подавать  на пин LOW. или вообще этот выход с gnd соединить (хотя это, конечно, хамство).

 

======

и, может быть, пора уже проверить примечание 1 к 5.4.1 - чтобы сомнений не было?

 

SLKH
Offline
Зарегистрирован: 17.08.2015
61732
Offline
Зарегистрирован: 11.10.2020

SLKH пишет:
и, может быть, пора уже проверить примечание 1 к 5.4.1 - чтобы сомнений не было?

 


Это сигнал ЗПС кинуть на gnd (23 контакт Ш3)?

SLKH
Offline
Зарегистрирован: 17.08.2015

61732 пишет:
SLKH пишет:
и, может быть, пора уже проверить примечание 1 к 5.4.1 - чтобы сомнений не было?

 

 

Это сигнал ЗПС кинуть на gnd (23 контакт Ш3)?
это проверить, к чему контакт подключен в печатке.