Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

USART в PIC16 перестает работать через некоторое время

Чт авг 29, 2019 15:52:11

Господа, доброго времени суток.
Два контроллера PIC16 общаются по USART через LIN-микросхемы TPIC1021.
Через некоторое время (минут 10-15) контроллер №2 перестаёт отвечать на запросы контроллера №1, хотя все остальные функции контроллера №2 работают. На ножку контроллера №2 приходит сигнал-кодовое слово, а тот не отвечает, хотя должен отвечать по прерыванию.
Перезапустил контроллер №2- всё работает снова.
Может есть какая-то встроенная защита порта С по току/напряжению? Просто условия для функционирования контроллеров промышленные. Везде наводятся помехи с силовых линий, может срабатывает какая-то внутренняя защита порта?
Везде наставили конденсаторов, исказили фронты в байтах USART до безобразия, помех на ножке микроконтроллера уже не наблюдается, но периодически такая проблема возникает. До установки конденсаторов приёмопередатчик зависал через 3-4 минуты.
Контроллер №1 PIC16f690 кварц 20, контроллер №2 PIC16f874A кварц 4.
Может поможет программный перезапуск USART?

Re: USART в PIC16 перестает работать через некоторое время

Чт авг 29, 2019 16:04:20

Увеличение времени нормальной работы с 3-4 до 10-15 минут наводит на мысль, что вы двигаетесь в правильном направлении.
Но одни только конденсаторы не панацея. Стоит использовать и другие средства: экранирование, витую пару, разведение силовых и сигнальных цепей на максимальное расстояние и т.д.

Re: USART в PIC16 перестает работать через некоторое время

Чт авг 29, 2019 16:13:04

Кабеля экранированы, да. Наводка через общий нуль приходит, чтоли.
Больше хотелось понять механику работы контроллера, есть ли там аппаратные защиты и можно ли их сбросить?
Хотя защита не просто же так срабатывает, так долго не посбрасываешь.

Re: USART в PIC16 перестает работать через некоторое время

Чт авг 29, 2019 16:25:02

может срабатывает какая-то внутренняя защита порта?
Ни разу о таком не слышал. По крайней мере, для PIC.
Везде наставили конденсаторов, исказили фронты в байтах USART до безобразия
А это уже другая крайность, перебор.
Я бы понаблюдал осликом некоторое время на линиях USART, питания и других, что там на самом деле происходит.
А уже потом делал какие-нибудь выводы...

Есть еще вот такой букварь на эту тему:
Хабигер Э. "Электромагнитная совместимость. Основы ее обеспечения в технике" 1995г.
Думаю, как минимум стр. 88 - 106 оттуда вам стоит посмотреть.
Последний раз редактировалось ЭлектроKOT Чт авг 29, 2019 16:44:22, всего редактировалось 1 раз.

Re: USART в PIC16 перестает работать через некоторое время

Чт авг 29, 2019 16:43:27

Да мы уж два дня наблюдаем)
А может быть какой-то рассинхрон контроллеров? Кварцы и контроллеры разные.

Re: USART в PIC16 перестает работать через некоторое время

Чт авг 29, 2019 16:46:25

И все чисто? Невероятно. Сколько все это нормально отработало до появления проблем?

Re: USART в PIC16 перестает работать через некоторое время

Чт авг 29, 2019 16:55:14

Опторазвязка между МК есть?

Re: USART в PIC16 перестает работать через некоторое время

Пт авг 30, 2019 06:33:34

И все чисто? Невероятно. Сколько все это нормально отработало до появления проблем?

Нормально это не работало, проблемы сразу появились.
-=Vovka=- писал(а):Опторазвязка между МК есть?

Опторазвязка между МК невозможна, TPIC1021 работает если 5В контроллера и 12В канала объединены общей землёй, то есть питание обоих контроллеров завязано общим нулём через канал приёмопередачи 12В

Re: USART в PIC16 перестает работать через некоторое время

Пт авг 30, 2019 06:56:33

Сколько все это нормально отработало до появления проблем?

Нормально это не работало, проблемы сразу появились.

Хм, в таком случае хорошо бы посмотреть на схему и ее воплощение в железе...

Re: USART в PIC16 перестает работать через некоторое время

Пт авг 30, 2019 07:04:44

питание обоих контроллеров завязано общим нулём через канал приёмопередачи 12В

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

Re: USART в PIC16 перестает работать через некоторое время

Пт авг 30, 2019 07:04:58

А может использовать микросхемы USART<->422, и передавать данные по диф паре, за счёт этого я полагаю многие помехи наведённые в проводах уже не будут иметь такого влияния.
И второе а есть уверенность что второй контроллер после 15 минут попросту не виснет по какой либо причине: нестабильность питания или висяк в коде, вочдог включён?

Re: USART в PIC16 перестает работать через некоторое время

Пт авг 30, 2019 09:12:35

питание обоих контроллеров завязано общим нулём через канал приёмопередачи 12В

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

1 схема - Контроллер №2, который виснет. транзисторы нужны, чтобы переключать канал на три разных контроллера, без введения адресации. По мануалу TPIC нужно землю 5В и 12В объединять. Попробую впаять вместо транзисторов оптопары сейчас.
2 схема - Контроллер №1, который работает. на 1 схеме это "LIN консоль". Вся плата №1 питается от 12VL со 2 платы.

Если кому интересно - программный перезапуск USART решает проблему, всё снова пашет. Даже без перезапуска контроллера. При чём при ошибке отпадает даже не весь PORTC, а только USART.

Добавлено after 1 minute 37 seconds:
А может использовать микросхемы USART<->422, и передавать данные по диф паре, за счёт этого я полагаю многие помехи наведённые в проводах уже не будут иметь такого влияния.
И второе а есть уверенность что второй контроллер после 15 минут попросту не виснет по какой либо причине: нестабильность питания или висяк в коде, вочдог включён?

Спасибо за совет, в следующих проектах я подумаю над этим. В этом проекте сроки поджимают уже.
Контроллер не виснет, все остальные функции, кроме USART пашут. Собаки не имею.
Вложения
2.JPG
2 схема
(44.89 KiB) Скачиваний: 240
1.JPG
1 схема
(60.88 KiB) Скачиваний: 227

Re: USART в PIC16 перестает работать через некоторое время

Пт авг 30, 2019 14:26:18

Спасибо за совет, в следующих проектах я подумаю над этим.

Если уж на то пошло, идите в сторону 485 там и диф пара и всего 2 провода на приём и передачу и устройств можно кучу понавешать на эту шину, минус только один: нужно программно разруливать общение между устройствами.

Re: USART в PIC16 перестает работать через некоторое время

Пт авг 30, 2019 17:30:27

1 схема
2 схема
посмотреть на схему и ее воплощение в железе...

И еще: длина линии связи между МК? Что она из себя представляет (как выполнена)?

Re: USART в PIC16 перестает работать через некоторое время

Пт сен 06, 2019 02:59:16

Зависание УАРТа - это отсутствие в коде контроля за переполнением буфера OERR. Контроль должен быть сделан в суперлупе. Взведение оного бита в регистре RCSTA требует выключения-включения модуля УАРТ. Сбросить бит иначе не выйдет.
Ответить