Миландр

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

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




Начать новую тему Ответить на тему  [ Сообщений: 71 ]  На страницу Пред.  1, 2, 3, 4, 5 Все  След.
Автор Сообщение
СообщениеДобавлено: 2015-июн-30 11:49 
Не в сети

Зарегистрирован: 2014-дек-22 14:08
Сообщения: 25
Откуда: Киров
-=Sergei=- писал(а):
Но формально в ТУ на 1986ВЕ91 запрещено подавать ниже минус 0,3В. Поэтому если верить спецификации на диоды, то резистором ток должен быть ограничен на уровне 0,1 мА.

Т.е. можно после BAT54 поставить резистор в 1кОм перед входом контроллера, тем самым ограничив ток через защитные диоды и уложившись в ТУ? Я Вас правильно понял? Сигналы медленные. По положительному превышению такая схема будет также поднимать напряжения на остальных каналах АЦП?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2015-июн-30 13:46 
Не в сети

Зарегистрирован: 2009-май-22 09:01
Сообщения: 1296
Откуда: АО "ПКК Миландр"
k1801bm2a писал(а):
-=Sergei=- писал(а):
Но формально в ТУ на 1986ВЕ91 запрещено подавать ниже минус 0,3В. Поэтому если верить спецификации на диоды, то резистором ток должен быть ограничен на уровне 0,1 мА.

Т.е. можно после BAT54 поставить резистор в 1кОм перед входом контроллера, тем самым ограничив ток через защитные диоды и уложившись в ТУ? Я Вас правильно понял? Сигналы медленные. По положительному превышению такая схема будет также поднимать напряжения на остальных каналах АЦП?



Не совсем так, как я понял из описания BAT54 если через них течет 0,1мА, то падение на них 240 мВ. Таким образом ваши диоды обеспечат допустимый уровень минус 300 мВ на входе МК. И схема будет соответствовать ТУ.
Т.е. источник сигнала -> резистор -> диоды -> МК. Резистор должен быть рассчитан таким образом, что бы при отрицательном напряжении на выходе источника сигнала через него текло не более 0,1 мА


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2015-сен-11 11:47 
Не в сети

Зарегистрирован: 2015-июн-05 09:42
Сообщения: 6
UART, FIFO включен

при разрешение прерывания по передаче (регистр UARTx->IMSC бит UART_IT_TX ) ;

сразу не выставляется флаг передачи (регистр UUARTx->MIS бит UART_IT_TX ) (как указано в документации), и соответственно не вызывается прерывание

данный флаг выставляется только после заполнения и освобождения буфера FIFO


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2015-ноя-09 16:24 
Не в сети

Зарегистрирован: 2011-сен-05 12:12
Сообщения: 183
Откуда: Саратов
-=Sergei=- писал(а):
В 1986ВЕ4 мы провели испытания на обратное напряжения и в ТУ написано, что через резисторы можно подавать даже без дополнительных диодов.

а можно и в спецификации написать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Проблема с портом PORTD в 1986ВЕ91Т
СообщениеДобавлено: 2015-ноя-16 11:46 
Не в сети

Зарегистрирован: 2015-янв-29 15:40
Сообщения: 3
Здравствуйте!
Перед тем, как писать это сообщение ещё раз пролистал файл Errata для 1986ВЕ9х и просмотрел все сообщения
на форуме о выявленных проблемах для данного микроконтроллера. Чего-либо похожего на свой случай не нашёл.
Может быть, Вы сумеете объяснить странности, которые я наблюдаю в работе микроконтроллеров 1986ВЕ91Т.

Ситуация следующая. Нашим предприятием на базе микроконтроллера 1986ВЕ91Т выпущена опытная партия модулей
УСО для программируемого логического контроллера. В частности, изготовлено 13 шт. дискретных выходных модулей.
При этом порт MDR_PORTA микроконтроллера используется для управления твердотельными реле (оптронные ключи
К249КП5Р), а MDR_PORTD используется для обратной связи (контроль исправности твердотельных реле и целостности
цепей исполнительных механизмов) через оптроны АОТ165А91. Нагрузка к твердотельным реле подключается через
внешний разъем. Если ток в нагрузке реле отсутствует, на соответствующем выводе порта MDR_PORTD устанавливается
потенциал напряжения питания (+3,3 В) через внешний подтягивающий резистор (две резистивные матрицы НР1-68
по 8 резисторов в каждой). Таким образом, если разъем для исполнительных механизмов (ИМ) не подключен,
На всех выводах порта MDR_PORTD присутствует потенциал напряжения питания (+3,3 В), независимо от состояния
твердотельных реле, управляемых портом MDR_PORTA.

Теперь собственно проблема. После прошивки во внутреннюю Flash-память микроконтроллеров всех 13 модулей
одного и того же кода при отключенном разъёме ИМ у 9 модулей состояние порта MDR_PORTD->RXTX считывается
как 0xFFFF, а у 4-х оставшихся модулей - 0xFFFD, т.е. бит1 (при нумерации с 0) остаётся в состоянии
логического 0. Состояние внутренних регистров порта считывалось JTAG эмулятором-отладчиком фирмы "Фитон"
JEM-ARM-V2. Первое, что пришло в голову - дефекты печатных плат модулей или некачественная пайка. Правда,
настораживало то, что на всех модулях неверно считывается один и тот же бит. Но после того, как осциллографом
с очень тонки щупом были проведены визуальные наблюдения формы сигналов непосредственно на ножках порта
MDR_PORTD "хороших" и "плохих" модулей всё оказалось ещё сложнее. У всех 13-ти модулей, на всех выводах порта
MDR_PORTD, включая PD1 (вывод 66 микроконтроллера) присутствовал абсолютно чистый, без каких-либо шумов или
помех потенциал напряжения питания (+3,3 В). Изначально, я готов был к любым ошибкам: и в моём коде, и в
разводке либо монтаже печатной платы (ПП). После же осциллографических наблюдений оказался в полном тупике.
Ошибка в коде программы исключается тем фактом, что одна и та же программа "заливается" во все 13 микроконтроллеров,
а проявляется эффект лишь на 4-х. Кроме того, все регистры настройки портов на всех 13 модулях считываются
эмулятором отладчиком абсолютно одинаково:
MDR_PORTD->ANALOG = 0xFFFF;
MDR_PORTD->FUNC = 0x0;
MDR_PORTD->OE = 0x0;
MDR_PORTD->GFEN = 0x0;
MDR_PORTD->PD = 0x0;
MDR_PORTD->PULL = 0x0;
MDR_PORTD->PWR = 0xFFFFFFFF.
Ошибка разводки или монтажа ПП исключается наличием на выводах MDR_PORTD потенциала +3,3 В.
Могу только добавить, что все 9 "хороших" микроконтроллеров имеют дату выпуска 1450, а 3 "плохих" - 1452.
Казалось бы, тут-то и "собака порылась", однако 4-й "плохой" микроконтроллер имеет дату выпуска 1450...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с портом PORTD в 1986ВЕ91Т
СообщениеДобавлено: 2015-ноя-16 12:27 
Не в сети

Зарегистрирован: 2009-май-22 09:01
Сообщения: 1296
Откуда: АО "ПКК Миландр"
bold писал(а):
Здравствуйте!
Перед тем, как писать это сообщение ещё раз пролистал файл Errata для 1986ВЕ9х и просмотрел все сообщения
на форуме о выявленных проблемах для данного микроконтроллера. Чего-либо похожего на свой случай не нашёл.
Может быть, Вы сумеете объяснить странности, которые я наблюдаю в работе микроконтроллеров 1986ВЕ91Т.

Ситуация следующая. Нашим предприятием на базе микроконтроллера 1986ВЕ91Т выпущена опытная партия модулей
УСО для программируемого логического контроллера. В частности, изготовлено 13 шт. дискретных выходных модулей.
При этом порт MDR_PORTA микроконтроллера используется для управления твердотельными реле (оптронные ключи
К249КП5Р), а MDR_PORTD используется для обратной связи (контроль исправности твердотельных реле и целостности
цепей исполнительных механизмов) через оптроны АОТ165А91. Нагрузка к твердотельным реле подключается через
внешний разъем. Если ток в нагрузке реле отсутствует, на соответствующем выводе порта MDR_PORTD устанавливается
потенциал напряжения питания (+3,3 В) через внешний подтягивающий резистор (две резистивные матрицы НР1-68
по 8 резисторов в каждой). Таким образом, если разъем для исполнительных механизмов (ИМ) не подключен,
На всех выводах порта MDR_PORTD присутствует потенциал напряжения питания (+3,3 В), независимо от состояния
твердотельных реле, управляемых портом MDR_PORTA.

Теперь собственно проблема. После прошивки во внутреннюю Flash-память микроконтроллеров всех 13 модулей
одного и того же кода при отключенном разъёме ИМ у 9 модулей состояние порта MDR_PORTD->RXTX считывается
как 0xFFFF, а у 4-х оставшихся модулей - 0xFFFD, т.е. бит1 (при нумерации с 0) остаётся в состоянии
логического 0. Состояние внутренних регистров порта считывалось JTAG эмулятором-отладчиком фирмы "Фитон"
JEM-ARM-V2. Первое, что пришло в голову - дефекты печатных плат модулей или некачественная пайка. Правда,
настораживало то, что на всех модулях неверно считывается один и тот же бит. Но после того, как осциллографом
с очень тонки щупом были проведены визуальные наблюдения формы сигналов непосредственно на ножках порта
MDR_PORTD "хороших" и "плохих" модулей всё оказалось ещё сложнее. У всех 13-ти модулей, на всех выводах порта
MDR_PORTD, включая PD1 (вывод 66 микроконтроллера) присутствовал абсолютно чистый, без каких-либо шумов или
помех потенциал напряжения питания (+3,3 В). Изначально, я готов был к любым ошибкам: и в моём коде, и в
разводке либо монтаже печатной платы (ПП). После же осциллографических наблюдений оказался в полном тупике.
Ошибка в коде программы исключается тем фактом, что одна и та же программа "заливается" во все 13 микроконтроллеров,
а проявляется эффект лишь на 4-х. Кроме того, все регистры настройки портов на всех 13 модулях считываются
эмулятором отладчиком абсолютно одинаково:
MDR_PORTD->ANALOG = 0xFFFF;
MDR_PORTD->FUNC = 0x0;
MDR_PORTD->OE = 0x0;
MDR_PORTD->GFEN = 0x0;
MDR_PORTD->PD = 0x0;
MDR_PORTD->PULL = 0x0;
MDR_PORTD->PWR = 0xFFFFFFFF.
Ошибка разводки или монтажа ПП исключается наличием на выводах MDR_PORTD потенциала +3,3 В.
Могу только добавить, что все 9 "хороших" микроконтроллеров имеют дату выпуска 1450, а 3 "плохих" - 1452.
Казалось бы, тут-то и "собака порылась", однако 4-й "плохой" микроконтроллер имеет дату выпуска 1450...


А ИМ подключались уже к микроконтроллерам?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2015-ноя-16 16:27 
Не в сети

Зарегистрирован: 2015-янв-29 15:40
Сообщения: 3
Следует так понимать, что Вы предполагаете возможность выгорания входных цепей порта?
Во первых, ИМ не подключались. При тестировании проверялась только работа в режиме "сам на себя", т.е. берутся два модуля: дискретный входной и дискретный выходной, затем входы входного модуля подключаются к выходам выходного модуля. Во-вторых, ИМ подключаются, как было написано, через гальваническую оптронную развязку с прочностью изоляции 1000 В, притом, что напряжение питания со стороны ИМ - 24 В. На стороне портов микроконтроллера питание только 3,3 В с токоограничивающими резисторами 1 кОм и затемнённым/освещённым фототранзистором. Если нужно, могу представить принципиальную электрическую схему входов/выходов (сразу не дал схему, т.к. её надо конвертировать из P-CAD'а).
Да и почему всегда вылетает PD1, если все разряды либо нагружаются одинаково, либо не нагружаются, но тоже одинаково?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2015-ноя-16 18:00 
Не в сети

Зарегистрирован: 2009-май-22 09:01
Сообщения: 1296
Откуда: АО "ПКК Миландр"
bold писал(а):
Следует так понимать, что Вы предполагаете возможность выгорания входных цепей порта?
Во первых, ИМ не подключались. При тестировании проверялась только работа в режиме "сам на себя", т.е. берутся два модуля: дискретный входной и дискретный выходной, затем входы входного модуля подключаются к выходам выходного модуля. Во-вторых, ИМ подключаются, как было написано, через гальваническую оптронную развязку с прочностью изоляции 1000 В, притом, что напряжение питания со стороны ИМ - 24 В. На стороне портов микроконтроллера питание только 3,3 В с токоограничивающими резисторами 1 кОм и затемнённым/освещённым фототранзистором. Если нужно, могу представить принципиальную электрическую схему входов/выходов (сразу не дал схему, т.к. её надо конвертировать из P-CAD'а).
Да и почему всегда вылетает PD1, если все разряды либо нагружаются одинаково, либо не нагружаются, но тоже одинаково?



Очень сложно что либо предполагать, не имея вашей схемы и не "щупая" ее.
Можно поступить формально, прислать нам рекламацию и пару "испорченых" микросхем для анализа. В 99% в заключении пишется, что они годные и проблем не выявлено
Можно неформально, на основании наших вопросов/советов - посмотреть что к чему и возможно разберемся.

Если можете дать схему и программу, то это сильно облегчает жизнь.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2015-ноя-16 18:15 
Не в сети

Зарегистрирован: 2015-янв-29 15:40
Сообщения: 3
Приношу извинения, вопрос снимается. Оказалось, всё-таки ошибка в разводке печатной платы, причём в части тиража... Человека, делавшего разводку, увы, уже нет... Я же, хоть и занимался в своё время схемотехникой лет 15, уже более 10 лет сижу на программировании встраиваемых систем, поэтому ошибку разводки нашёл не сразу.
Лучше даже удалить мои посты и Ваш ответ, чтобы не отвлекать народ понапрасну.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2019-янв-23 21:20 
Не в сети

Зарегистрирован: 2019-янв-23 20:05
Сообщения: 3
Проблема с появлением ошибки UsageFault при обработке прерывания АЦП сразу после записи в flash.
Изначально обнаружена на 1986ВЕ92У 1733.
Повторилась так же на всех используемых MDR32F9Q2I 1816.
Разработка и отладка в Keil.
Процедура записи в flash находится в ОЗУ, обработчики прерываний в flash.
Частота ядра 80 МГц.

Если АЦП завершил преобразование в момент работы процедуры записи в flash (где все прерывания запрещены __disable_irq (); ), то в конце процедуры сразу после разрешения прерываний __enable_irq () на первой же команде обработчика прерывания АЦП контроллер вылетает в UsageFault. Причем ошибка возникает при указанных условиях не всегда, процесс случайный.
В программе так же есть обработчики прерываний от обоих UART, по ним такой проблемы нет.

Отладчиком ловил UsageFault и смотрел содержимое памяти по адресу, где происходит ошибка. Отладчик показывает в памяти нормальную команду, но процессор видимо иногда считает её некорректной и вылетает в UsageFault. Такое впечатление, что flash иногда остается недоступной после завершения программирования.
Уменьшение частоты ядра и увеличение задержек при работе с flash, а так же увеличение ожидания перед разрешением прерываний ничего не дали.
В качестве временного решения все обработчики прерываний и таблица векторов была перенесена в ОЗУ, ошибка перестала появляться.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2019-мар-05 10:22 
Не в сети

Зарегистрирован: 2017-июн-05 14:53
Сообщения: 6
ТСКЯ.431296.001СП Версия 3.14.0 от 12.10.2018 Замечены ошибки:

1) Стр 285 подпись под Рисунок 72. Пример каскадного соединения таймеров.

Имеется CNT_MODE_1, CNT_MODE_2, CNT_MODE_3 = 00;
Должно быть CNT_MODE_1=00, CNT_MODE_2=10, CNT_MODE_3 = 10;

2) Стр 303 Таблица 278 – Описание бит регистра CHy_CNTRL
Имеется:
110 – 1, если DIR = 0 (счет вверх), CCR< CNT< CCR1, иначе 0;
0, если DIR = 1 (счет вниз), CCR < CNT < CCR1, иначе 1;
111 – 0, если DIR = 0 (счет вверх), CCR< CNT < CCR1, иначе 1;
1, если DIR = 1 (счет вниз), CCR< CNT< CCR1, иначе 0

Рисунок 87. Диаграмма работы схемы в режиме ШИМ, CCR1_EN = 1 соответствует действительности а описание в таблице наоборот.

Судя по сообщениям на Форуме эти ошибки известны давно, но документация не исправлена.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2019-мар-05 14:27 
Не в сети

Зарегистрирован: 2014-июн-25 09:29
Сообщения: 118
Durynda писал(а):
Проблема с появлением ошибки UsageFault при обработке прерывания АЦП сразу после записи в flash.

В свое время, реализуя в проекте запись во внутренний EEPROM МК 1986ВЕ92У и 1986ВЕ4У, натыкался на похожую ошибку. Проблему решил без помещения обработчиков прерываний в ОЗУ. Решение записал в виде комментария в своем проекте и привожу его ниже:
Цитата:
Модули eeprom.c и MDR32F9Qx_eeprom.c должны быть обязательно загружены в ОЗУ (IRAM), поскольку во время записи в EEPROM не должно быть никаких обращений к Flash-памяти МК.
Чтобы разместить модуль в ОЗУ, следует щелкнуть правой кнопкой мыши по имени модуля на дереве объектов и выполнить пункт меню Options for File... В открывшемся окне в списке Code/Const нужно выбрать пункт IRAM1. Признаком того, что модуль размещен в ОЗУ, является особый значек на пиктограмме модуля на дереве объектов (три темно-красных квадратика для Keil 4 или темный четырехугольный узор для Keil 5).
На время выполнения записи в EEPROM нужно обязательно запретить все аппаратные прерывания, чтобы не произошел переход в обработчик прерывания, размещенный во Flash.
Для этого нельзя использовать встроенные функции __disable_irq() и __enable_irq(), так как они сами располагаются во Flash. Следует использовать ассемблерные вставки:
Код:
// Запрет прерываний
__ASM volatile ("cpsid i");

// Операция над EEPROM
...

// Разрешение прерываний
__ASM volatile ("cpsie i");

Попробуйте так. Может быть, поможет.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2019-мар-27 23:00 
Не в сети

Зарегистрирован: 2019-янв-23 20:05
Сообщения: 3
andelie писал(а):
Попробуйте так. Может быть, поможет.

По идее в момент вызова __disable_irq() флэш память еще доступна, так как команды доступа к ней следуют после этой инструкции, а в момент вызова __enable_irq() флэш память уже должна быть доступна, иначе не имеет смысла разрешать прерывания. И это я проверял, даже добавлял дополнительные задержки перед разрешением прерываний.
Поэтому располагать эти команды в ОЗУ вроде как не имеет смысла.

Странно то, что ошибка проявляется только в момент вызова обработчика прерывания АЦП и ни в каком другом обработчике.

Где-то через месяц планируется модификация проекта, попробую подробнее это исследовать, отпишусь по результатам.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2019-мар-28 11:10 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 362
Откуда: ПКК "Миландр"
Если появится возможность, вышлите пожалуйста минимальный проект на support@milandr.ru. Так, чтоб запустить и в исключение попасть.
Интересно что происходит.

Я бы попробовал отключать разрешение прерываний в самом АЦП на время работы с памятью, вероятно обработчики с таблицей не пришлось бы переносить в ОЗУ. Это если ошибка связана с тем, что запрос на прерывание возникает пока идет работа с памятью.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2019-мар-29 11:35 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 362
Откуда: ПКК "Миландр"
Перепробовал все что мог.
Писал и читал три страницы памяти при работающем АЦП с прерываниями, воспроизвести сбой не получается.
1986ВЕ91 с маркировкой 1342.

Код:
    __disable_irq();   

    .... любая работа с EPROM из ОЗУ

    __enable_irq();

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 71 ]  На страницу Пред.  1, 2, 3, 4, 5 Все  След.

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


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

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


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

Найти:
Перейти:  
cron
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB