Попробовал сделать программу для шапки. Нужно проверить как ЦВМ отреагирует. Отключить магнитофон. Подключить УНУ согласно приведенной карте соединений. Обращаю внимание. СД , УПР, КнП к ногам 2,3,4. НПД НГП к ногам А0 А1. Логанализатор к ногам НПД НГП УПР КнП СД ЛД7 ЛД6 ЛД0.
Запустить программу нажать кнопку ПУСК. Что бы не произошло длину записи лог анализатора не нужно больше 400мс. Пре триггер не более 10мс. Триггер на сигнал УПР на фронт 1->0. По результатам логанализатора будем править программу.
При отключении магнитофона раньше после нажатия старт ЦВМ выдавала 4 байта и загоралась ошибка. Сейчас не так? Отключите плату. Получите 4 импульса ЦВМ, подключите плату и посмотрите что изменилось. Плата после надписи старт тест стоит в режиме высокого сопротивления ног и не может влиять на линии сигналов. По крайней мере хоть один импульс от ЦВМ должен быть.
Значит надо проверить сигналы на линиях до и после подключения ардуины. После подключения и включения ардуины до нажатия кнопки старт. Все линии сигналов Должныбыть +3.3 В. Если какой то сигнал 0 вольт - сообщите. Буду смотреть что в программе не так.
Программа по неизвестной причине генерит непрерывно сигнал НГП после начала цикла. К тому же она не сгенерила сигнал СД по прерыванию от УПР, хотя прерывание сработало. Надо проверить соединения. СД должно быть на ноге D2 уны и на этой ноге должен быть сигнал по окончанию первого сигнала УПР. Это надо проверить. Для этого канал 7 логанализатора надо подсоединит прямо на ногу уны D2. И снять ещё раз отсоединив от уны линию НГП - А1.
Попробуйте без магнитофона, со всеми соединениями. По логанализатору, после фронта УПР 0->1 сразу должны сработать CД и НГП 1->0. Нужно добиться именно такого поведения. Если не получиться - проверять контакты и смотреть осциллографом, где проблема.
Ну вот. Получили необходимые сигналы, но не получили необходимой реакции ЦВМ. . Красная стрелка показывает, что с точностью до нескольких микросекунд ситуация с сигналами смоделирована. Однако, ЦВМ опять выставляет УПР. Необходимо искать причину. Логанализатором необходимо просмотреть все линии - и сигналов и данных, отдельно с магнитофоном и отдельно с программой. Найти в чём разница когда магнитофон подключен и отключен. Без этого двигаться дальше бесполезно.
Хорошо. ЦВМ ответила. Это главное. Теперь шаг за шагом надо добиться выхода на диалог и начало загрузки. Предлагаю оперативно поделать эти шаги. Первый - просто ждём что даёт ЦВМ. Нужны логи шины и данных. Сначала шины. Если ответит много, то и данных.
Снова ответила, но ждёт подтверждения. Следующая программа посылает подтверждение nz раз. Специально ввёл константу nz - Количество запросов магнитофона. Вы можете её менять в пределах 1 - 8, начинаем с двух, и смотреть как ЦВМ реагирует на количество подтверждений. Логер по каналам. НПД, НГП, УПР, СД, КнП, ЛД7, ЛД6, ЛД0. Программа через 2 секунды после начала цикла останавливается и выдаёт все данные, которые пробежали по шине. Этот вывод тоже приводите в постах со ссылками на файлы логера.
Увиденные проблемы - ответ на первый УПР есть, но потом не видит наши запросы. Очень большие интервалы между запросами. Рано читает байт. Попытался сократить. Запустите 1 раз.
Не было контакта логера с линией НГП. ЦВМ съела второй запрос и пошла крутить обмен дальше. Проверьте НГП и поставьте nz=2. И ещё раз снять данные логером.
Звезда в шоке. Не сработало условие while ((bitRead(PINC, 0) == 0 ) && (nc < 250) nc++; Как только НПД - PINC бит 0 - контакт А0 УНЫ - станет равным единицы и соответственно условие bitRead(PINC, 0) == 0 станет ложным программа должна вывалится из while, а вываливается по таймауту через 21 мкс. С чем это связано? Может быть контакт? Кстати, нет контакта между ЛД1 и УНОй Проверьте тестером , а ещё лучше осциллографом прямо на ноге УНЫ А0 соединение с НГП. Прямо на железе ноги должно колебаться что то. Два канала ПНД и СД надо получить чтобы поле перехода ПНД 0->1 через 1 мкс СД тоже перешла 0->1.
Попробуй в подпрограмме i_UPR заменить bitRead(PINC, 0) == 0 на PINC & 0x1 == 0. Может быть что то изменится? Хотя макрос bitRead именно так и разворачивается.
А ещё мне очень не нравиться лишние нули считываемые УНОй. Похоже на плохой контакт СД с УНОй. Проверьте пожалуйста. Нулей 1,4,5,7 быть не должно. Вот вывод:
0 c FD
1 c 0
2 c FB
3 c FB
4 c 0
5 c 0
6 c 83
7 c 0
8 d 0
9 c 0
10 c 29
Стало ещё хуже. Просто непрерывная наводка на СД УНЫ - на логере нет. Поэтому пусто - висит в прерывании на СД и не может выбраться. Посмотрите осциллографом что твориться на ноге 2 УНЫ. Возможно надо подтянуть резистором 1к к +3.3 вольта. Но задержка сработала. Теперь избавиться от наводки и смотреть дальше. Первую ступень отработали. Точное соответствие магнитофону. Всего 4 ступени до запуска обмена программой. Надо проверить землю логера и УНЫ. Бывает что дело не в линии а в земле.
Долго смотрел и анализировал. Чем дальше смотрю, тем меньше понимаю. Если бы это была чистая наводка на СД, то данные падали бы до начала цикла. Однако до начала всё спокойно. Первое ложное срабатывание прерывания идёт после первого нормального. Или по другому наводка идёт только тогда когда сигнал УПР = 0 вольт. Искать надо где то здесь - может какой то "лишний" контакт с УПР.
Подразумевается прямо. Есть лишний контакт. Посмотрите осцилографом на СД на ноге уны во время цикла, и логер на максимальную скорость и два канала на СД один на шину, второй на ногу УНЫ. Чудес не бывает. На СД УНЫ есть импульсы около 200 кГц только когда УПР низкий уровень. Или аккуратно пересоберите схему. Желательно совсем без скруток и длинных петель провода.
Нолики всё равно бегают. В программе есть массив ib - правильная последовательность данных на шине, которую мы должны получить. Попробуйте программу. В ней я закомментировал чтение данных. Снимите данные на скорости оцифровки логера 24МГц. На меньших скоростях наводок не увидеть. Потом раскомментируйте 3 строки с ...attachInterrupt(0... Это включит чтение. Оцифруйте так же - с той же скоростью и соединениями. Можно будет сравнить есть ли лишние импульсы от ложного чтения на шинах.
Попробовал сделать программу для шапки. Нужно проверить как ЦВМ отреагирует. Отключить магнитофон. Подключить УНУ согласно приведенной карте соединений. Обращаю внимание. СД , УПР, КнП к ногам 2,3,4. НПД НГП к ногам А0 А1. Логанализатор к ногам НПД НГП УПР КнП СД ЛД7 ЛД6 ЛД0.
Запустить программу нажать кнопку ПУСК. Что бы не произошло длину записи лог анализатора не нужно больше 400мс. Пре триггер не более 10мс. Триггер на сигнал УПР на фронт 1->0. По результатам логанализатора будем править программу.
P.S. 11:00 Поправил программу.
Подключаю
Магнитофон должен быть отключен от всех шлейфов. Сегодня в 11:00 я поменял программу.
На мониторе только старт тест. На логанализаторе ничего.
При отключении магнитофона раньше после нажатия старт ЦВМ выдавала 4 байта и загоралась ошибка. Сейчас не так? Отключите плату. Получите 4 импульса ЦВМ, подключите плату и посмотрите что изменилось. Плата после надписи старт тест стоит в режиме высокого сопротивления ног и не может влиять на линии сигналов. По крайней мере хоть один импульс от ЦВМ должен быть.
Если ардуино отключить сигнал проходит, если ардуино подключить обратно сигнал пропадает.
Значит надо проверить сигналы на линиях до и после подключения ардуины. После подключения и включения ардуины до нажатия кнопки старт. Все линии сигналов Должныбыть +3.3 В. Если какой то сигнал 0 вольт - сообщите. Буду смотреть что в программе не так.
Это я лопух, земля на соплях была. На мониторе старт тест. На логанализаторе
https://cloud.mail.ru/public/1Yjv/jvAeWHPJd
Не сработала программа.
Добавил тестовый вывод. Посмотрим почему.
Прошу три запуска. Только вывод сериала. Переключать ничего не надо.
На мониторе
1 раз
83 потом нули
2 раз
2 нуля
3 раз
3 нуля
Снять с записью логанализатором.
https://cloud.mail.ru/public/iBn5/UMsMJRHe2
Был вывод в сериал цифры 0?
на мониторе была цифра 1.
Программа по неизвестной причине генерит непрерывно сигнал НГП после начала цикла. К тому же она не сгенерила сигнал СД по прерыванию от УПР, хотя прерывание сработало. Надо проверить соединения. СД должно быть на ноге D2 уны и на этой ноге должен быть сигнал по окончанию первого сигнала УПР. Это надо проверить. Для этого канал 7 логанализатора надо подсоединит прямо на ногу уны D2. И снять ещё раз отсоединив от уны линию НГП - А1.
Понял. В понедельник сделаю.
Честно говоря, я уже не вижу смысла что то делать с уной. Попробовать только отреагирует ли ЦВМ на сигнал СД. Это я к вечеру напишу.
Спасибо.
https://cloud.mail.ru/public/NpYT/Lys6rQXTx
Уже не в понедельник #247, а в четверг. Говорят, что болеют.
Это ничего. Время есть.
Попробуйте без магнитофона, со всеми соединениями. По логанализатору, после фронта УПР 0->1 сразу должны сработать CД и НГП 1->0. Нужно добиться именно такого поведения. Если не получиться - проверять контакты и смотреть осциллографом, где проблема.
https://cloud.mail.ru/public/8a7v/m1zmiNePq
Ну вот. Получили необходимые сигналы, но не получили необходимой реакции ЦВМ. . Красная стрелка показывает, что с точностью до нескольких микросекунд ситуация с сигналами смоделирована. Однако, ЦВМ опять выставляет УПР. Необходимо искать причину. Логанализатором необходимо просмотреть все линии - и сигналов и данных, отдельно с магнитофоном и отдельно с программой. Найти в чём разница когда магнитофон подключен и отключен. Без этого двигаться дальше бесполезно.
Одно отличие нашёл. Попробуйте вот эту.
https://cloud.mail.ru/public/rhAV/6WJsRuoFr
Хорошо. ЦВМ ответила. Это главное. Теперь шаг за шагом надо добиться выхода на диалог и начало загрузки. Предлагаю оперативно поделать эти шаги. Первый - просто ждём что даёт ЦВМ. Нужны логи шины и данных. Сначала шины. Если ответит много, то и данных.
https://cloud.mail.ru/public/v1r3/53sYH6RpY
Снова ответила, но ждёт подтверждения. Следующая программа посылает подтверждение nz раз. Специально ввёл константу nz - Количество запросов магнитофона. Вы можете её менять в пределах 1 - 8, начинаем с двух, и смотреть как ЦВМ реагирует на количество подтверждений. Логер по каналам. НПД, НГП, УПР, СД, КнП, ЛД7, ЛД6, ЛД0. Программа через 2 секунды после начала цикла останавливается и выдаёт все данные, которые пробежали по шине. Этот вывод тоже приводите в постах со ссылками на файлы логера.
https://cloud.mail.ru/public/vWYR/Sra1ru6W9
https://cloud.mail.ru/public/vHWE/tPLM9ns8h
https://cloud.mail.ru/public/nsUx/vQrkfUEvd
https://cloud.mail.ru/public/26XZ/2S1Fmwwst
https://cloud.mail.ru/public/NWS3/nGYLPZK3C
https://cloud.mail.ru/public/mwNB/ccHDBYRAb
https://cloud.mail.ru/public/Ymdc/3aGuqmbW1
https://cloud.mail.ru/public/d3cf/ycCa18Hvs
Увиденные проблемы - ответ на первый УПР есть, но потом не видит наши запросы. Очень большие интервалы между запросами. Рано читает байт. Попытался сократить. Запустите 1 раз.
https://cloud.mail.ru/public/24Cx/vS2sduwhC
https://cloud.mail.ru/public/PJAW/ZfrTFGtQR
Не было контакта логера с линией НГП. ЦВМ съела второй запрос и пошла крутить обмен дальше. Проверьте НГП и поставьте nz=2. И ещё раз снять данные логером.
https://cloud.mail.ru/public/66pv/4KeYUVnY1
https://cloud.mail.ru/public/mc8G/gEAaL5adc
Не успел только nz 2 переправить цех закрывали. Завтра переправлю.
Привёл в соответствие с диаграммами и логами первые три качания УПР. Интересно что получилось. Проверьте канал логера НГП он не пишет.
https://cloud.mail.ru/public/xQi4/V4GTHfmqW
https://cloud.mail.ru/public/SJKY/9ZNmZNF7Y
Звезда в шоке. Не сработало условие while ((bitRead(PINC, 0) == 0 ) && (nc < 250) nc++; Как только НПД - PINC бит 0 - контакт А0 УНЫ - станет равным единицы и соответственно условие bitRead(PINC, 0) == 0 станет ложным программа должна вывалится из while, а вываливается по таймауту через 21 мкс. С чем это связано? Может быть контакт? Кстати, нет контакта между ЛД1 и УНОй Проверьте тестером , а ещё лучше осциллографом прямо на ноге УНЫ А0 соединение с НГП. Прямо на железе ноги должно колебаться что то. Два канала ПНД и СД надо получить чтобы поле перехода ПНД 0->1 через 1 мкс СД тоже перешла 0->1.
Попробуй в подпрограмме i_UPR заменить bitRead(PINC, 0) == 0 на PINC & 0x1 == 0. Может быть что то изменится? Хотя макрос bitRead именно так и разворачивается.
https://cloud.mail.ru/public/PWsf/369vfat7z
https://cloud.mail.ru/public/7G5G/YGkWpUCgV
Из задержки включения УПР тянулась лишняя единичка. Добавим задержки чуть чуть.
А ещё мне очень не нравиться лишние нули считываемые УНОй. Похоже на плохой контакт СД с УНОй. Проверьте пожалуйста. Нулей 1,4,5,7 быть не должно. Вот вывод:
https://cloud.mail.ru/public/6rdR/1mFxdqGBz
На уне почему-то пусто, уже все контакты перетрёс.
Стало ещё хуже. Просто непрерывная наводка на СД УНЫ - на логере нет. Поэтому пусто - висит в прерывании на СД и не может выбраться. Посмотрите осциллографом что твориться на ноге 2 УНЫ. Возможно надо подтянуть резистором 1к к +3.3 вольта. Но задержка сработала. Теперь избавиться от наводки и смотреть дальше. Первую ступень отработали. Точное соответствие магнитофону. Всего 4 ступени до запуска обмена программой. Надо проверить землю логера и УНЫ. Бывает что дело не в линии а в земле.
Долго смотрел и анализировал. Чем дальше смотрю, тем меньше понимаю. Если бы это была чистая наводка на СД, то данные падали бы до начала цикла. Однако до начала всё спокойно. Первое ложное срабатывание прерывания идёт после первого нормального. Или по другому наводка идёт только тогда когда сигнал УПР = 0 вольт. Искать надо где то здесь - может какой то "лишний" контакт с УПР.
В чем подразумевается "лишний"? Задумку пока Вашу не понял.
Подразумевается прямо. Есть лишний контакт. Посмотрите осцилографом на СД на ноге уны во время цикла, и логер на максимальную скорость и два канала на СД один на шину, второй на ногу УНЫ. Чудес не бывает. На СД УНЫ есть импульсы около 200 кГц только когда УПР низкий уровень. Или аккуратно пересоберите схему. Желательно совсем без скруток и длинных петель провода.
Плата nucleo-64 STM32F411 уже у меня. По контактам пока работаю.
Нолики всё равно бегают. В программе есть массив ib - правильная последовательность данных на шине, которую мы должны получить. Попробуйте программу. В ней я закомментировал чтение данных. Снимите данные на скорости оцифровки логера 24МГц. На меньших скоростях наводок не увидеть. Потом раскомментируйте 3 строки с ...attachInterrupt(0... Это включит чтение. Оцифруйте так же - с той же скоростью и соединениями. Можно будет сравнить есть ли лишние импульсы от ложного чтения на шинах.
https://cloud.mail.ru/public/FeB8/kCuxDJnHi
https://cloud.mail.ru/public/5F7E/za1wpHnoo
Можно больше подробностей? Это закомментировано - раскомментировано?
А по графикам - нет контакта УНЫ и НПД.