Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Продукция MICROCHIP

Продукция MICROCHIP Технические вопросы по всей продукции Microchip

Ответ
 
Опции темы Опции просмотра
Старый 12.02.2019, 18:04   #1
smart_pic
Senior Member
 
Регистрация: 08.12.2008
Адрес: Ставрополь
Возраст: 55
Сообщений: 1,023
Вес репутации: 2657/76
smart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond repute
Отправить сообщение для smart_pic с помощью Skype™
По умолчанию Ошибка формирования сигнала на выводе RB8 PIC32MX795L

Для формирования команд управления на шине DALI использую PIC32MX795L . Команды формируются обычным ногодрыгом в прерывании таймера.
Словил один интересный глюк. На 20-30 переданных команд , одна команда формируется неправильно. Долго искал ошибки в алгоритме кода - не нашел.
Решил выводить один и тот же сигнал через разные выводы МК помимо глючного LATB8 еще вывел через LATA9 и LATA10. через простенькие подпрограммки
Код:
void DALI_Out1(void)
{
DALI_Control =1;
DALI_Test1=1;
DALI_Test2=1;
}
void DALI_Out0(void)
{
DALI_Control =0;
DALI_Test1=0;
DALI_Test2=0;
}

void DALI_Out_invers(void)
{
DALI_Control ^=1;
DALI_Test1 ^=1;
DALI_Test2 ^=1;
}
В итоге видно, что команда формируется неправильно всего на одном выводе МК, и то в случайные моменты времени.
Переферия для данного вывода МК не используется
Прилагаю скриншоты с лог анализатора, на которых видно формирование глючной команды. Канал2 - это на линии ДАЛИ, канал3- глючный выход МК RB8, Канал0 и Канал1 это дублирование глючного вывода.
Сейчас заменил вывод формирования команды на другой (LATB8 заменил на LATA10) .
На графиках видно что в какойто момент происходит сбой, хотя на все три вывода МК абсолютно одинаково подается управление.

Не хочется в других проектах нарваться на подобный глюк. Может у кого есть советы по решению .
Миниатюры
ошибка ДАЛИ передатчика1_cr.jpg   ошибка ДАЛИ передатчика2_cr.jpg   ошибка ДАЛИ передатчика3_cr.jpg   ошибка ДАЛИ передатчика4_cr.jpg  
smart_pic вне форума   Ответить с цитированием
Старый 12.02.2019, 18:44   #2
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 2,149
Вес репутации: 4017/88
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Ошибка формирования сигнала на выводе RB8 PIC32MX795L

smart_pic
не смог глубоко вникнуть в Ваши проблемы.

очень похоже на то, что у Вам проблемы с RMW.

для управления портами в pic32m используется CLR SET INV.

напишите как Вы в итоге модифицируете биты портов.
besogon вне форума   Ответить с цитированием
Старый 12.02.2019, 18:56   #3
smart_pic
Senior Member
 
Регистрация: 08.12.2008
Адрес: Ставрополь
Возраст: 55
Сообщений: 1,023
Вес репутации: 2657/76
smart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond repute
Отправить сообщение для smart_pic с помощью Skype™
По умолчанию Re: Ошибка формирования сигнала на выводе RB8 PIC32MX795L

В первом посте написано на С манипуляция битами, предварительно объявив

Код:
    #define DALI_Control_TRIS    (TRISAbits.TRISA10)
    #define DALI_Control        (LATAbits.LATA10)

    #define    DALI_Test1_TRIS        (TRISBbits.TRISB8)
    #define    DALI_Test1            (LATBbits.LATB8)

    #define    DALI_Test2_TRIS        (TRISAbits.TRISA9)
    #define    DALI_Test2            (LATAbits.LATA9)
В принципе , компилятор сам должен был сделать изменение бита порта.
или я не прав? и компилятору нужно конкретно указать ?
И почему на других выводах правильно формируется?

Последний раз редактировалось smart_pic; 12.02.2019 в 19:03.
smart_pic вне форума   Ответить с цитированием
Старый 12.02.2019, 19:18   #4
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 2,149
Вес репутации: 4017/88
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Ошибка формирования сигнала на выводе RB8 PIC32MX795L

smart_pic
компилятор сам должен был сделать изменение бита порта - он и сделал что Вы ему сказали - Вы хотели получить проблемы с RMW, Вы их скорее всего и получили.

можете заменить манипуляции с битами?
я не использовал библиотеки microchip.
у меня операции с битом порта выглядят так
Код:
rb->cs_port->latclr = rb->cs_mask;
но у Вас тоже должен быть доступ к clr set inv
void DALI_Out1(void) должен стать выставлением в соответствующие биты latset единичек
void DALI_Out0(void) должен стать выставлением в соответствующие биты latclr единичек
void DALI_Out_invers(void) должен стать выставлением в соответствующие биты latinv единичек
besogon вне форума   Ответить с цитированием
Старый 12.02.2019, 19:23   #5
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 2,149
Вес репутации: 4017/88
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Ошибка формирования сигнала на выводе RB8 PIC32MX795L

у младших mx такие порты

Код:
typedef struct {
	volatile u32 ansel;
	volatile u32 anselclr;
	volatile u32 anselset;
	volatile u32 anselinv;
	volatile u32 tris;
	volatile u32 trisclr;
	volatile u32 trisset;
	volatile u32 trisinv;
	volatile u32 port;
	volatile u32 portclr;
	volatile u32 portset;
	volatile u32 portinv;
	volatile u32 lat;
	volatile u32 latclr;
	volatile u32 latset;
	volatile u32 latinv;
	volatile u32 odc;
	volatile u32 odcclr;
	volatile u32 odcset;
	volatile u32 odcinv;
	volatile u32 wpu;
	volatile u32 wpuclr;
	volatile u32 wpuset;
	volatile u32 wpuinv;
	volatile u32 wpd;
	volatile u32 wpdclr;
	volatile u32 wpdset;
	volatile u32 wpdinv;
	volatile u32 cncon;
	volatile u32 cnconclr;
	volatile u32 cnconset;
	volatile u32 cnconinv;
	volatile u32 cnen;
	volatile u32 cnenclr;
	volatile u32 cnenset;
	volatile u32 cneninv;
	volatile u32 cnstat;
	volatile u32 cnstatclr;
	volatile u32 cnstatset;
	volatile u32 cnstatinv;
} pic32mx_port_t;

***

#define PIC32MX_PORTA ((pic32mx_port_t*)0xbf886000)
#define PIC32MX_PORTB ((pic32mx_port_t*)0xbf886100)
#define PIC32MX_PORTC ((pic32mx_port_t*)0xbf886200)
#define PIC32MX_PORTD ((pic32mx_port_t*)0xbf886300)
#define PIC32MX_PORTE ((pic32mx_port_t*)0xbf886400)
#define PIC32MX_PORTF ((pic32mx_port_t*)0xbf886500)
#define PIC32MX_PORTG ((pic32mx_port_t*)0xbf886600)
скорее и для старших mx тоже самое и по тем же адресам
besogon вне форума   Ответить с цитированием
Старый 12.02.2019, 20:12   #6
smart_pic
Senior Member
 
Регистрация: 08.12.2008
Адрес: Ставрополь
Возраст: 55
Сообщений: 1,023
Вес репутации: 2657/76
smart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond repute
Отправить сообщение для smart_pic с помощью Skype™
По умолчанию Re: Ошибка формирования сигнала на выводе RB8 PIC32MX795L

Применение

Код:
LATBCLR=0x00000100;
LATBSET=0x00000100;
LATBINV=0x00000100;
не помогло.
Маска как раз сообтветсвует RB8 порта В.
Что бы не было проблем RMW ввели специально регистр LATx, и правильный сигнал на двух других выходах подтверждает эту мысль.



Я больше склоняюсь к тому , что незадействованная переферия на этом выводе МК как то все таки влияет. Хотя я этого пока не могу найти.
smart_pic вне форума   Ответить с цитированием
Старый 12.02.2019, 22:23   #7
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 2,149
Вес репутации: 4017/88
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Ошибка формирования сигнала на выводе RB8 PIC32MX795L

smart_pic
Что бы не было проблем RMW ввели специально регистр LATx - кто Вам это сказал? lat это регистр устройства цифрового порта, доступный для управления ядром через шину данных.

ядро будет в случае обращения к биту регистра latx будет выполнять следующую последовательность инструкций

1 загрузить значение через шину памяти из регистра порта в регистр ядра
2 модифицировать ядром значение в регистре
3 сохранить значение через шину памяти из регистра ядра в регистр порта

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

чтобы избежать проблем при доступу к регистрам цифрового порта есть set clr inv

что незадействованная переферия на этом выводе МК как то все таки влияет - к большому сожалению не работал с указанным Вами мк.

в pic32mx1xx2xx такого не наблюдал.
besogon вне форума   Ответить с цитированием
Старый 13.02.2019, 21:46   #8
smart_pic
Senior Member
 
Регистрация: 08.12.2008
Адрес: Ставрополь
Возраст: 55
Сообщений: 1,023
Вес репутации: 2657/76
smart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond reputesmart_pic has a reputation beyond repute
Отправить сообщение для smart_pic с помощью Skype™
По умолчанию Re: Ошибка формирования сигнала на выводе RB8 PIC32MX795L

Спасибо besogon!


Проблемы с RMW могут быть двух типов.
1тип. проблемы с RMW проявлялись на младшем симействе PICов, когда имелся только один регистр порта. Если уровень порта (на физическом выводе МК) был ниже уровня логического 0, то происходило переключение в 0, аналогично с 1. Такое бывало если например вывод порта нагрузить на СД через резистор небольшого номинала. Для этого в старших семействах и добавили регистр LATx



2 тип проблемы с RMW проявляется, если в прерывании дергать пины порта. А с этими проблемами помогает бороться атомарный доступ типа LATxCLR, LATxSET, LATxINV который появился , в частности , в PIC32.

Вот на это я и нарвался.
smart_pic вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чем/как отлаживать код написаный на Си в WinAVR Yokel Микроконтроллеры других производителей 49 30.09.2014 09:48
Присоветуйте тип и способ управления MOSFETом "верхнего" плеча dr_Sash Источники питания и силовая электроника 37 08.09.2012 18:50
подключение магнитолы Sergey1 Общетехнические вопросы 10 27.12.2007 22:39
Помогите, пожалуйста, найти ошибку в коде Катя Микроконтроллеры других производителей 26 08.12.2007 14:58
проблемка с PIC16F628A bereg_ok Продукция MICROCHIP 72 07.09.2007 11:00


Часовой пояс GMT +3, время: 12:11.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot