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

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

SLKH пишет:

 на входах ардуины не нужны ни диоды, ни резисторы - достаточно INPUT_PULLUP.

С INPUT_PULLUP согласен. А резистор на 1к между ардуиной и устройством нужен обязательно!  Если напряжение на входе от внешнего устройства превысит напряжение питания ардуины, то без резистора сгорят внутренние защитные диоды и волшебный дым уйдет в воздух. Резистор нужен для защиты. Особенно если напряжение на внешнем устройстве выше питания ардуины. 

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

nik182 пишет:

SLKH пишет:

 на входах ардуины не нужны ни диоды, ни резисторы - достаточно INPUT_PULLUP.

С INPUT_PULLUP согласен. А резистор на 1к между ардуиной и устройством нужен обязательно!  Если напряжение на входе от внешнего устройства превысит напряжение питания ардуины, то без резистора сгорят внутренние защитные диоды и волшебный дым уйдет в воздух. Резистор нужен для защиты. Особенно если напряжение на внешнем устройстве выше питания ардуины. 

нет там напряжения - открытый коллектор. 

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

Если ОК то питание идёт с подсоединяемого устройства. Если подсоединить просто с INPUT_PULLUP без подключаемого устройства то для старых русских устройств может просто не хватить сил дать единичку. Транзисторы тогда имели слишком большие токи утечки. В любом случае после подключения нужно убедиться что единичка получилась больше 2 вольт. И если подключить вместе с внешним устройством то защита нужна.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Это чем же таким формировался логический 0 в ДВА вольта !? Что за старые русские микросхемы-транзисторы ? Даже у старого русского pn-перехода было падение 0.7 вольт. :)

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

Только из уважения к старожилу :-) Открытый коллектор (ОК) в старой аппаратуре часто делали на транзисторах типа МП. 40кОм - среднее значение PULLUP резистора для таких транзисторов может оказаться слишком много, что бы обеспечить логическую единицу при подключении ардуины. Обычно в тех схемах стояли 3.3к или 4.7к на нагрузке ОК. Поэтому не плохо бы проверить, что получается при прямом, без принтера, подключении ардуины к ОК. 2.2 вольта пороговое напряжение ардуины при 5 вольтовом питании переключения входного компаратора в единицу. Если утечка МП транзистора окажется большой ( это может оказаться один из всех на интерфейсе) то при нагрузке на 40кОм напряжение при закрытом транзисторе (= логической единице) может оказаться меньше 2 вольт и ардуина не почувствует единицу. Я не говорю что будет так. Я предлагаю только проверить. Или сразу воткнуть 3.3к от питания к входам ардуины, что бы не заморачиваться на проверки. У меня в мастерской работает токарный станок, который изначально управлялся перфолентой. в какой то момент пришлось переделывать его на LPT порт. Именно тогда и и поимел печальный опыт борьбы с транзисторными интерфейсами.        

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

А что у мп40 не pn переход ? :) Да, он не кремниевый, но это не имеет большого значения. Другой вопрос, что кто то криворукий нарисовал и собрал такй схему где транзистор открывается не полностью, но это не означает, что виноват транзистор :) Значит так было задумано.

Я вполне допускаю, что это вполне возможно и утверждаю, то проверять нужно в любом случае. Но согласиться с тем что причина такого косяка транзистор , какой бы он не был, я не могу. С этим и спорю. Так что ваша причинно следственная цепочка рваная.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

brokly пишет:

А что у мп40 не pn переход ? :) Да, он не кремниевый, но это не имеет большого значения. Другой вопрос, что кто то криворукий нарисовал и собрал такй схему где транзистор открывается не полностью, но это не означает, что виноват транзистор :) Значит так было задумано.

Брокли, НИК182 пишет не о "неполном открытии", а, наоборот, о большом токе утечки германиевых транзисторов, что при высоком сопротивлении нагрузки можно расценивать как "неполное закрытие".

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Это как это? Если он ведет речь о нуле в 2 вольта. При ОК ноль формируется полным открытием транзистора. 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

имел опыт восстановления станка в котором сожгли 400 (Четыреста) корпусов 155 серии, там и нули были больше 1.2 вольта, и единицы в 1.6 вольта )))

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

brokly пишет:

Это как это? Если он ведет речь о нуле в 2 вольта. При ОК ноль формируется полным открытием транзистора. 

Читайте внимательно: закрытый транзистор - это 1, а не 0.

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

brokly пишет:

Это как это? Если он ведет речь о нуле в 2 вольта. При ОК ноль формируется полным открытием транзистора. 

Я веду речь о единице в 2 вольта и меньше из за большой утечки транзистора, нагруженного на большое сопротивление. Ардуина эту единицу может не увидеть - получим неправильный результат. 

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

А ну тогда это я со слепу не разобрался.

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

imp пишет:

Не нужен там светодиод. Простой диод и вот так подключать.


5 вольт с ардуино брать.

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

61732 пишет:
5 вольт с ардуино брать.
Да. Схема только для защиты входов ардуины от возможного превышения напряжения в устройстве над 5 вольтами, по тому, что в таких реликтах всякое бывает. Если осциллографом убедишься, что там при обмене всегда не выше чем +5 вольт, можешь соединять на прямую, без этих висюлек. Главное, что бы напряжение на входе ардуины не превышало питающее напряжение ардуины.

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

imp пишет:

Для Uno подключение:

Данные:
  "2^0" --- "8"
  "2^1" --- "9"
  "2^2" --- "10"
  "2^3" --- "11"
Синхронизация:
  "ИНФ-Б" --- "5"
Земля:
  "Общий" --- "GND"

Код для Uno будет примерно такой:


  const int SYNC = 5;

void setup()
{
  pinMode(SYNC, INPUT);
  DDRB = 0b11110000;
  Serial.begin(9200);
}

void loop()
{
  bool m;
  unsigned char data;
  
  m = digitalRead(SYNC);
  if( !m ) {
    // Получаем данные и выделяем используемые биты.
    data = PINB & 0x0F;

    Serial.print("Code: ");
    Serial.println(data);
    while(!digitalRead(SYNC));
  }
}

На подключенном мониторе UART должны выводится коды печатаемых символов.

Это чек проверки

Это на мониторе UART

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

Здесь что-то не так получилось!!!

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

61732 пишет:

Здесь что-то не так получилось!!!

читать надо по переднему фронту на 5 пине, через прерывание , а так ты просто читаешь многажды одно и тоже

и строку 7 поправь, на 9600

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

Седьмую строку я поправил это опечатка, а вот остальное пока не понимаю!!!

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

61732 пишет:
Седьмую строку я поправил это опечатка, а вот остальное пока не понимаю!!!

вместо пина 5 задействовать пин 2 или 3, это будет 0 или первое прерывание, отрабатывать по переднему фронту

в сетапе - (тебе только по фрону, поменяй)
   // Привязываем к Pin2 прерывание по фронту и спаду сигнала
attachInterrupt(0, Rc1, CHANGE);

процедура Rc1 должна у тебя считывать байт и выводить на печать, хотя выводить можно в лупе

/******Обработчик прерывания по возрастанию и спаду сигнала с приёмника RC******/
void Rc1() {

тут читаем байт

и выставляем флаг, что прочитали, в лупе флаг после вывода, сбрасываем, чтобы второй раз не выводить

}

 

и вообще - существует 99 способов организации чтения, а профессор говорит, что сто

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

Если бы проблема была в многократном повторном чтении, то повторялись бы не только нули. Обработка идет всего синхроимпульса. В 16 строке идет ожидание 0 а в 22 ожидание возвращение из 0 в 1. Использование прерывания могло бы что-либо изменить если бы у нас выполнялся еще какой-нибудь код, а так без разницы. И судя по эпюрам, фиксация значения происходит именно по спаду. А вот работа сигналов "ПЧТ" и "ЗПС" вызывает сомнения. Посмотри, в какой момент они появляются.

Проверь правильно ли сделано подключение, потом посмотри осциллографом импульсы "ИНФ-Б" соответствуют ли они эпюрам, нет ли помех. Попробуй переключить синхронизацию (5 пин ардуино) на "ЗПР", посмотри что будет.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

слона то я и не приметил )))

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

 сигналы (реальные) с вундервафли кто-нибудь видит? все уверены, что вундерфафля что-то выдает без сигналов готовности и запроса?

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

Там тесовое подключение внутрь принтера который при этом печатает, так что туда-сюда все сигналы идут правильными. Если вопрос в правильности подключения ардуинки, то это вопрос к ТС. (Надеюсь он все проконтролировал осциллографом)

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

Схема представленная в сообщении #56 точно от этого прибора? Спрашиваю потому, что на схеме имеется всего 4 разряда данных, а на фотографии прибора в панели имитатора видно пять переключателей.

 

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

imp пишет:

Схема представленная в сообщении #56 точно от этого прибора? Спрашиваю потому, что на схеме имеется всего 4 разряда данных, а на фотографии прибора в панели имитатора видно пять переключателей.

 


Да. Схема родная. Провода полностью выведены из шлейфа, т.е. Мпу к СЦВМ подключена постоянно.

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

Как сейчас подключена адуина? Можно рисунок? Со всеми элементами. И,  если возможно, напряжение на входах ардуины когда нет печати.

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

imp пишет:

Схема представленная в сообщении #56 точно от этого прибора? Спрашиваю потому, что на схеме имеется всего 4 разряда данных, а на фотографии прибора в панели имитатора видно пять переключателей.

 

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

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

imp пишет:

Там тесовое подключение внутрь принтера который при этом печатает, так что туда-сюда все сигналы идут правильными. Если вопрос в правильности подключения ардуинки, то это вопрос к ТС. (Надеюсь он все проконтролировал осциллографом)

"идут правильно" или "надеюсь" ?

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

SLKH пишет:

imp пишет:

Там тесовое подключение внутрь принтера который при этом печатает, так что туда-сюда все сигналы идут правильными. Если вопрос в правильности подключения ардуинки, то это вопрос к ТС. (Надеюсь он все проконтролировал осциллографом)

"идут правильно" или "надеюсь" ?

Сигналы с вундервафли идут правильные, так как печаталка печатает, а вот на правильность подключения ардуино я именно надеюсь.

 

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

Всем привет. Прошу прощения пришлось на время приостановить затеянное. Чертовый ковид. Находился под ИВЛ.

 

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

Схема подключения та которую указал imp

Для Uno подключение:

1 Данные:
2   "2^0" --- "8"
3   "2^1" --- "9"
4   "2^2" --- "10"
5   "2^3" --- "11"
6 Синхронизация:
7   "ИНФ-Б" --- "5"
8 Земля:
9   "Общий" --- "GND"

Вольтаж менее 4 вольтов на каждом проводе. Подключение производил на прямую.

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

Проверь правильность подключения "ИНФ-Б" и посмотри осциллографом на форму сигнала. Судя по приведенным логам, сигнал не нормальный. Он либо подключен не туда, либо форма сигнала сильно искажена (например используются механические контакты для его формирования).

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

"ИНФ-Б" подключил в соответствии со схемой. Сигнал понять не могу. Может что-то не правильно делаю?

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

61732 пишет:

"ИНФ-Б" подключил в соответствии со схемой. 

 

Никакой схемы подключения мы не видели.

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

Измерять 5 вольтовый сигнал на пределе 10 мV на клетку - это круто. Надо хотя бы 1 вольт на клетку выставить и смотреть на скорости 1 мс на деление.

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

Выставь частоту развертки 5-10 герц (тут все сигналы медленные) а чувствительность на 1 вольт. И смотри что передается во время печати. Должно быть примерно как на эпюрах. Размахом 4-5 вольта.

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

"ИНФ-Б"

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

Не та частота развертки нужно 5-10герц (0.2s - 0.1s)

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

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

Разверни так, что бы отдельный импульс был хорошо виден. И еще, посмотри состояние "ИНФ-Б" при отсутствии печати. Судя по эпюрам, там должна быть логическая "1" убедись в этом, возможно на этом контакте импульсы инвертированы. Надо проверить.

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

При отсутствии печати сигнала нет.

 

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

imp пишет:
Разверни так, что бы отдельный импульс был хорошо виден. И еще, посмотри состояние "ИНФ-Б" при отсутствии печати. Судя по эпюрам, там должна быть логическая "1" убедись в этом, возможно на этом контакте импульсы инвертированы. Надо проверить.
там вся логика инверсная: наличие сигнала - около 0 вольт (это и есть лог. "1"), отсутствие - около 4. 

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

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

nik182 пишет:

Измерять 5 вольтовый сигнал на пределе 10 мV на клетку - это круто. Надо хотя бы 1 вольт на клетку выставить и смотреть на скорости 1 мс на деление.

а я вообще никаких клеток на картинках не вижу.

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

nik182 пишет:

Измерять 5 вольтовый сигнал на пределе 10 мV на клетку - это круто. Надо хотя бы 1 вольт на клетку выставить и смотреть на скорости 1 мс на деление.

а я вообще никаких клеток на картинках не вижу.

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

Как же около 3 вольт - 3 клетки - 1 вольт на клетку. 6 мкс импульс, 100 мс между пачками. Вот ещё бы пачку развернуть на развёртке около 500 мкс на клетку. Кроме того надо на всех ногах - цифровых и управляющих при выводе одного и того же. Тогда однозначно можно будет писать программу.  

 

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

nik182 пишет:

Как же около 3 вольт - 3 клетки - 1 вольт на клетку.

"Мартышка к старости слаба глазами стала". Увеличил картинку - что-то разглядел.

Непонятно, почему 3 вольта, а не 4.

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

Импульсы здорово отличаются от эпюр, возможно (очень возможно) на входе стоит инвертор.

Попробуй изменить скетч вот таким образом:


  const int SYNC = 5;

void setup()
{
  pinMode(SYNC, INPUT);
  DDRB = 0b11110000;
  Serial.begin(9600);
}

void loop()
{
  bool m;
  unsigned char data;
  
  m = digitalRead(SYNC);
  if( m ) {
    // Получаем данные и выделяем используемые биты.
    data = PINB & 0x0F;

    Serial.print("Code: ");
    Serial.println(data);
    while(digitalRead(SYNC));
  }
}

Он ожидает в качестве действующего значения синхроимпульса "1" вместо нуля.

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

Вот что получилось.

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

Очень хочется увидеть осцилограмму с развёрткой 1 мс. В этой программе только вывод слова code: занимает 5 мс. Сколько при этом теряется символов непонятно.