Миландр

Ключевым подразделением нашей компании
является Центр Проектирования интегральных микросхем
Текущее время: 2021-июн-24 17:26

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 49 сообщений ]  На страницу « 1 2 3 4 »
Автор Сообщение
 Заголовок сообщения: Re: 1886ВЕ4У
СообщениеДобавлено: 2019-мар-12 15:45 
Не в сети

Зарегистрирован: 2018-окт-31 11:38
Сообщения: 12
Организация: ЗАО "Ассоциация ЭВТ"
Понял, спасибо, примерно через неделю отпишусь


Вернуться к началу
 Заголовок сообщения: Re: 1886ВЕ4У
СообщениеДобавлено: 2019-апр-02 12:57 
Не в сети

Зарегистрирован: 2018-окт-31 11:38
Сообщения: 12
Организация: ЗАО "Ассоциация ЭВТ"
Прошу прощение за такой доооОООооолгий ответ :| , я все еще разбираюсь с осцилографом. Может у вас есть небольшой пример кода с чтением с портов C или D ? Может я быдлокодил с ошибкой, и осцилограф не нужен :roll: ?


Вернуться к началу
 Заголовок сообщения: Re: 1886ВЕ4У
СообщениеДобавлено: 2019-апр-17 14:15 
Не в сети

Зарегистрирован: 2018-окт-31 11:38
Сообщения: 12
Организация: ЗАО "Ассоциация ЭВТ"
Всем спасибо, проблема решена.
Думал что спалил мк и поэтому порты Ц и Д чудят. Но потом таки взял в кривые руки мультиметр и понял что все элементы на плате целы но на порт Ц И Д питание не подается. Прошил дефолтную прошивку и обнаружил что питание, ВНЕЗАПНО, есть. Оказалось что питание для портов идет при включени блока с юсб и разрешении на прерывания. Короче мало опыта у меня и внимательности.


Вернуться к началу
 Заголовок сообщения: Re: 1886ВЕ4У
СообщениеДобавлено: 2021-апр-23 08:25 
Не в сети

Зарегистрирован: 2012-окт-23 11:46
Сообщения: 12
Здравствуйте
Ситуация вот какая.
В программе используются внешнее прерывание от РА0 и по таймеру T0. В обработчике прерывания от T0 имеется команда
BCF 0x07,5 // сброс запроса прер от Т0.
Если в момент выполнения этой команды происходит спад на входе PA0, обработчик прерывания от PA0 не запускается.
Кроме того, в программе (написана на языке C с ассемблерными вставками) имеется фрагмент:
...
di ();
....
BCF 0x07,5 // сброс запроса прер от Т0
...
ei ();
...
Здесь наблюдается аналогична ситуация.
Если при выполнении команды BCF приходит спад на PA0, прерывание пропускается, т.е. после ei () выполняется следующая за ней команда.
Кто-нибудь может сказать, что с этим делать?


Вернуться к началу
 Заголовок сообщения: Re: 1886ВЕ4У
СообщениеДобавлено: 2021-апр-23 17:54 
Не в сети
Support

Зарегистрирован: 2017-фев-14 11:21
Сообщения: 213
Организация: АО ПКК Миландр
Откуда: АО "ПКК Миландр"
Здравствуйте!
Виталий2405, выложите, пожалуйста, на форуме или пришлите на support@milandr.ru следующую информацию:
1. В какой версии IDE1886 работаете;
2. Какой версии компилятор используете;
3. маркировку микроконтроллера в формате ГГНН (на крышке корпуса);
4. схему включения;
5. код минимального размера, демонстрирующий проблему.

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Заголовок сообщения: Re: 1886ВЕ4У
СообщениеДобавлено: 2021-апр-26 15:02 
Не в сети

Зарегистрирован: 2012-окт-23 11:46
Сообщения: 12
Поскольку связь с перебоями, ответ разобью на несколько сообщений.
1. Работаю в MPLAB IDE Version 8.02.00.00.
2. Компилятор HI-TECH PICC 8.05.
3. ГГНН - 1924.


Вернуться к началу
 Заголовок сообщения: Re: 1886ВЕ4У
СообщениеДобавлено: 2021-апр-26 15:35 
Не в сети

Зарегистрирован: 2012-окт-23 11:46
Сообщения: 12
Как ответить на вопрос 5 неясно. Я же Вам сообщил минимальный код, в котором наблюдается проблема. Но вот Вам 4 файла, полученных из тестового проекта, (может, Вы об этом спрашиваете?):
- исходник на С;
- hex-файл, которым прошиваю микроконтроллер;
- файл дисассемблера, сформированный правда без обработчика прерываний по адресам 0x08 и 0x10. Что находится по данным адресам видно из следующего файла
- содержимое программной памяти в текстовом виде, с дисассемблерным переводом.
Заодно, я думаю снимается Ваш вопрос о компиляторе. Проблема не в нём, а в микроконтроллере, запрограммированном этой (см.выше) программой.


Вложения:
Комментарий к файлу: Тестовый проект
ve4_tst.zip [166.38 КБ]
24 скачивания
Вернуться к началу
 Заголовок сообщения: Re: 1886ВЕ4У
СообщениеДобавлено: 2021-апр-26 21:16 
Не в сети

Зарегистрирован: 2012-окт-23 11:46
Сообщения: 12
Ответ по пункту 4.
См файл 'схема.jpg'. Здесь С7 - 100 пФ, ZQ2 - 11059 кГц, сигнал WR2, приходящий на порт PA0 идёт с порта PB5 1886ве2у на другой плате. Порты PortD, PortC, PE7 в тестовом проекте не используются (см. тестовый проект).
Подав на устройство питание, можно засечь на логическом анализаторе ситуацию, как на следующих картинках (файлы рис1.jpg, рис2.jpg, рис3.jpg). Здесь показан один и тот же момент в разном масштабе. Осциллограмма D0 снималась с порта PE0,
осц. D1 - порт PE1,
осц. D6 - порт PA0.

Видно, что в какой-то момент прерывание на РА0 пришло (спад сигнала D6 на осцил.), а порт PE0 остался в <0> (сигнал D0 на осц.), что говорит о том, что ве4у запрос прерывания пропустил.
Сопоставление ассемблерного кода обработчика прерываний от таймера Т0 с осциллограммой на рис3.jpg указывает на то, что пропущенный спад сигнала на РА0 приходится на момент выполнения команды BCF 0x07,5. Если спад на данную команду не попадает, прерывание НЕ пропадает.


Вложения:
[ attachment ]
схема.jpg [ 879.64 КБ | 749 просмотров ]
[ attachment ]
рис3.jpg [ 297.08 КБ | 749 просмотров ]
[ attachment ]
рис2.jpg [ 4.77 МБ | 749 просмотров ]
[ attachment ]
рис1.jpg [ 4.25 МБ | 749 просмотров ]
Вернуться к началу
 Заголовок сообщения: Re: 1886ВЕ4У
СообщениеДобавлено: 2021-апр-27 16:15 
Не в сети

Зарегистрирован: 2012-окт-23 11:46
Сообщения: 12
Исследуя железо, запрограммированное тестовым проектом, который выкладывал пару постов назад, обнаружил зеркальный эффект:
Выполнение команды
" BCF 0x07,4 // сброс флага INTF ",
приходящееся на момент переполнения таймера Т0 приводит к НЕзапуску обработчика прерывания по Т0.
То есть прерывание от Т0 происходит, конечно, но не сразу, как только оно будет разрешено командой RETFIE, а только через 23700 мкс, когда Т0 досчитает от 0 до 65535 и заново переполнится.


Вернуться к началу
 Заголовок сообщения: Re: 1886ВЕ4У
СообщениеДобавлено: 2021-апр-28 19:31 
Не в сети
Support
Аватара пользователя

Зарегистрирован: 2018-авг-10 23:14
Сообщения: 274
Организация: АО «ПКК Миландр»
Виталий2405 писал(а): *
Исследуя железо, запрограммированное тестовым проектом, который выкладывал пару постов назад, обнаружил зеркальный эффект:
Выполнение команды
" BCF 0x07,4 // сброс флага INTF ",
приходящееся на момент переполнения таймера Т0 приводит к НЕзапуску обработчика прерывания по Т0.
То есть прерывание от Т0 происходит, конечно, но не сразу, как только оно будет разрешено командой RETFIE, а только через 23700 мкс, когда Т0 досчитает от 0 до 65535 и заново переполнится.
Здравствуйте!

Обратите, пожалуйста, внимание, что Ваш запрос взят в работу, потребуется дополнительное время, чтобы детальнее разобраться в вопросе. Спасибо.

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Заголовок сообщения: Re: 1886ВЕ4У
СообщениеДобавлено: 2021-май-05 11:47 
Не в сети
Support
Аватара пользователя

Зарегистрирован: 2018-авг-10 23:14
Сообщения: 274
Организация: АО «ПКК Миландр»
Виталий2405 писал(а): *
Ответ по пункту 4.
См файл 'схема.jpg'. Здесь С7 - 100 пФ, ZQ2 - 11059 кГц, сигнал WR2, приходящий на порт PA0 идёт с порта PB5 1886ве2у на другой плате. Порты PortD, PortC, PE7 в тестовом проекте не используются (см. тестовый проект).
Подав на устройство питание, можно засечь на логическом анализаторе ситуацию, как на следующих картинках (файлы рис1.jpg, рис2.jpg, рис3.jpg). Здесь показан один и тот же момент в разном масштабе. Осциллограмма D0 снималась с порта PE0,
осц. D1 - порт PE1,
осц. D6 - порт PA0.

Видно, что в какой-то момент прерывание на РА0 пришло (спад сигнала D6 на осцил.), а порт PE0 остался в <0> (сигнал D0 на осц.), что говорит о том, что ве4у запрос прерывания пропустил.
Сопоставление ассемблерного кода обработчика прерываний от таймера Т0 с осциллограммой на рис3.jpg указывает на то, что пропущенный спад сигнала на РА0 приходится на момент выполнения команды BCF 0x07,5. Если спад на данную команду не попадает, прерывание НЕ пропадает.
Здравствуйте!

Приносим извинения за задержку с ответом. К сожалению, ошибку в рамках тестирования микроконтроллера 1886ВЕ4У на отладочном комплекте производства компании Миландр вместе с микроконтроллером 1886ВЕ6У, который формировал ШИМ 5В на вывод PA0 1886ВЕ4У, выявить не удалось (компилятор CC7A - использует также битовую операцию BCF в обработчике для сброса флага статуса). Все прерывания формировались корректно, в случае чего производилось вытеснение одного прерывания и ожидание, когда завершится обработчик другого прерывания (см. рисунки к посту), пропусков прерываний за огромное количество итераций проверок выявлено не было. При этом важно отметить, что дополнительно ШИМ на вывод PA0 микроконтроллера 1886ВЕ4У подавался также с микроконтроллера K1986ВЕ92QI на логике 3.3В, именно в этой конфигурации начали всплывать различные артефакты просто потому, что логика работы 1886ВЕ4У в некоторых сценариях не фиксировала срез ШИМ-сигнала, что приводило к отклонению от ожидаемого поведения - убедитесь, пожалуйста, что внешний сигнал на вывод PA0 микроконтроллера 1886ВЕ4У приходит без каких-либо помех и с соответствующими уровнями. Важен также факт измерения, а именно чувствительность измерительного оборудования. Например, когда измерение на осциллографе производилось мной на больших горизонтальных развертках, когда Ваш обработчик прерывания по фронту на выводе PA0 занимает малое количество времени, поднимая и опуская сигнал PE0, я наблюдал, что действительно часть обработчиков по фронту начинает теряться, но если начинать уменьшать горизонтальную развертку, более отклонений не возникало, при этом увеличение длительности выполнения обработчика положительно сказалось на результатах в ходе исследования из-за удобства.

Дополнительно к посту приложен исходный код проекта, который был адаптирован под использование с компилятором CC7A (переписаны обработчики прерываний), а также .hex файл.
Открыть
Вложение:
[ attachment ]
handl.png [ 20.5 КБ | 512 просмотров ]
Вложение:
[ attachment ]
handl_two.png [ 20.75 КБ | 512 просмотров ]
Закрыть


Вложения:
BE4.7z [1.09 КБ]
16 скачиваний

_________________
Отдел технической поддержки support@milandr.ru
Вернуться к началу
 Заголовок сообщения: Re: 1886ВЕ4У
СообщениеДобавлено: 2021-май-06 18:02 
Не в сети

Зарегистрирован: 2012-окт-23 11:46
Сообщения: 12
Резюмирую сказанное Вами:
1. При 5-вольтовом сигнале, поступающем на РА0, после огромного количества итераций пропуски Вы не обнаружили;
2. При 3,3-вольтовом сигнале проблемы возможны;
3. Возможно, не микроконтроллер потерял сигнал прерывания с РА0, а осциллограф потерял сформированный микроконтроллером импульс на РЕ0.
Всё так?
Не могу не спросить:
Вопрос 1) огромное количество -- это сколько? 50? 150? И что включает в себя одна итерация?
Я-то в своих экспериментах записывал осциллограммы данных трёх сигналов логическим анализатором. Запись ведётся 5 секунд с дискретностью 100 нс (кстати, означает, что пропуск импульсов осциллографом исключён, не так ли?). На вход РА0 подаются импульсы с периодом около 1,1 мс, т.е. на записи фиксируется около 4545 запросов прерывания по РА0. По окончании записи, внимательно просматриваю полученные осциллограммы и обнаруживаю пропуски. Могу, кстати, и не обнаружить, записываю тогда ещё 5 секунд. На второй записи уж точно хоть один пропуск, да попадётся.
Вопрос 2) А как свои опыты строили Вы?
И ещё очень важный
Вопрос 3). Почему Вы никак не отреагировали на моё последнее сообщение?
Вами много было сказано про качество сигнала, поступающего на РА0, однако к пропуску прерывания по таймеру Т0 (см. моё последнее сообщение) качество этого сигнала просто НЕ МОЖЕТ иметь никакого отношения! Но зато всё опять сходится на команде BCF 07,x.
И, кстати, у нас собрали ещё один такой блок с микроконтроллерами того же ГГНН. Ведёт себя так же. Пропускает.


Вернуться к началу
 Заголовок сообщения: Re: 1886ВЕ4У
СообщениеДобавлено: 2021-май-07 17:58 
Не в сети
Support
Аватара пользователя

Зарегистрирован: 2018-авг-10 23:14
Сообщения: 274
Организация: АО «ПКК Миландр»
Виталий2405 писал(а): *
Резюмирую сказанное Вами:
1. При 5-вольтовом сигнале, поступающем на РА0, после огромного количества итераций пропуски Вы не обнаружили;
2. При 3,3-вольтовом сигнале проблемы возможны;
3. Возможно, не микроконтроллер потерял сигнал прерывания с РА0, а осциллограф потерял сформированный микроконтроллером импульс на РЕ0.
Всё так?
Не могу не спросить:
Вопрос 1) огромное количество -- это сколько? 50? 150? И что включает в себя одна итерация?
Я-то в своих экспериментах записывал осциллограммы данных трёх сигналов логическим анализатором. Запись ведётся 5 секунд с дискретностью 100 нс (кстати, означает, что пропуск импульсов осциллографом исключён, не так ли?). На вход РА0 подаются импульсы с периодом около 1,1 мс, т.е. на записи фиксируется около 4545 запросов прерывания по РА0. По окончании записи, внимательно просматриваю полученные осциллограммы и обнаруживаю пропуски. Могу, кстати, и не обнаружить, записываю тогда ещё 5 секунд. На второй записи уж точно хоть один пропуск, да попадётся.
Вопрос 2) А как свои опыты строили Вы?
И ещё очень важный
Вопрос 3). Почему Вы никак не отреагировали на моё последнее сообщение?
Вами много было сказано про качество сигнала, поступающего на РА0, однако к пропуску прерывания по таймеру Т0 (см. моё последнее сообщение) качество этого сигнала просто НЕ МОЖЕТ иметь никакого отношения! Но зато всё опять сходится на команде BCF 07,x.
И, кстати, у нас собрали ещё один такой блок с микроконтроллерами того же ГГНН. Ведёт себя так же. Пропускает.
Здравствуйте!

Спасибо за присланную информацию, мы продолжим исследовать данную проблему, вероятно, с привлечением разработчиков, если не удастся вновь отловить возникновение ошибки при равных условиях.

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

>> 1) огромное количество -- это сколько? 50? 150? И что включает в себя одна итерация?

Это больше сотни итераций с количеством выработки внешнего прерывания в размере 50 штук, то есть фактически 5000 разных ситуаций из-за постоянного сдвига счёта таймера. Однако, важно отметить, что для удобства исследования время, когда микроконтроллер находится в обработчике прерываний, было увеличено, а сигнал ШИМ приходил с коэффициентом заполнения 10% или 40 мкс. В начале следующей недели постараюсь привести все временные параметры к одному виду с Вашими для одинаковых условий в рамках исследования.

>> Вопрос 2) А как свои опыты строили Вы?

Адаптируя Ваш проект под компилятор СС7А по части описания функций обработчиков прерываний, поэтому структурно опыт не отличается, за исключением, что мы не имеем в распоряжении логического анализатора, тем не менее, мы имеем очень хорошие осциллографы для работы.

>> Вопрос 3). Почему Вы никак не отреагировали на моё последнее сообщение?

Вновь возвращаясь к вопросу о зеркальном поведении, рассуждая чисто теоретически, мы можем прийти к результату (если мы зафиксируем ошибку), что действительно проблема в команде BCF, а именно в том, что это команда выполняет операции "чтение - модификация - запись", и в момент её выполнения между первой и второй операцией действительно может прийти и считаться запрос в рамках регистра INTSTA, который на третьей операции даст наблюдаемую ошибку, но более предметно рассуждать об этом можно, когда мы подтвердим такой случай. В таком варианте развития событий можно и нужно в рамках проекта описывать дополнительные условия, возможно, уходить в сторону байтовых команд с полным контролем данных в рассматриваемом регистре, соответственно, с применением ассемблерных вставок.

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Заголовок сообщения: Re: 1886ВЕ4У
СообщениеДобавлено: 2021-май-10 12:45 
Не в сети

Зарегистрирован: 2012-окт-23 11:46
Сообщения: 12
Уточните, пожалуйста, с каким периодом приходили импульсы на вход РА0 в Ваших опытах?
Чтобы я мог повторить Ваш вариант у себя.


Вернуться к началу
 Заголовок сообщения: Re: 1886ВЕ4У
СообщениеДобавлено: 2021-май-11 09:02 
Не в сети

Зарегистрирован: 2012-окт-23 11:46
Сообщения: 12
Здравствуйте
Предлагаю немного изменить тестовую программу. Думаю, если паузы в обработчиках прерываний формировать не конструкцией for..., а соответствующим количеством команд BCF 7,x BCF 7,x BCF 7,x ... , то вероятность появления сбоев вырастет в разы, и их можно будет разглядеть невооружённым взглядом.
Попробуете?


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 49 сообщений ]  На страницу « 1 2 3 4 »

Часовой пояс: UTC+03:00


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

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


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

Перейти: 

Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB