Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Удаленная работа
Помощь проекту

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы
Непрочитано 10.09.2019, 16:46  
bdn62
Частый гость
 
Регистрация: 19.05.2010
Сообщений: 18
Сказал спасибо: 62
Сказали Спасибо 8 раз(а) в 2 сообщении(ях)
bdn62 на пути к лучшему
По умолчанию Странный баг управления драйвером RS-485

Устройство работает не первый год.
ATmega2560 через UART0 и ADM2483 выполняет роль единственного ведомого по Modbus RTU на 19200 бодах. Обычно работает как часы, но иногда связь МК с панелью оператора (Ведущий) зависает, помогает только рестарт МК.
Уже дважды в разных комплектах оборудования обнаруживал осциллом странную картину зависания: в ответ на запрос Ведущего МК формирует правильный ответ Ведомого, но переключение из режима передачи в режим приема выполняет до передачи последних двух байт (CRC16). Ведомый видит "обрезанный ответ", ждет свой таймаут (у меня 2 с) и все повторяется до бесконечности.
Осциллограмма c "бедой": 1к - TxD (ATmega:TXD0, ADM2483:6), 2к - R/W (ATmega:PB4, ADM2483:4,5)
Нажмите на изображение для увеличения
Название: print_006 NO response TGI IZV.png
Просмотров: 0
Размер:	28.6 Кб
ID:	145124
Штатная осциллограмма (каналы те же):
Нажмите на изображение для увеличения
Название: print_007 Yes resp TGI IZV.png
Просмотров: 0
Размер:	28.5 Кб
ID:	145126
Ответ передается подпрограммой в основном цикле:
Код:
void RS485_U0_send(unsigned char *buff, unsigned char len)
{
	int cnt;
	PORTB |= (1 << PB4);//and set high level

	cnt = 0;
	while(cnt < len)
	{
		while(!( UCSR0A & (1 << UDRE0)));
		UDR0 = buff[cnt ++];
	}
	while(!( UCSR0A & (1 << TXC0)));//

	UCSR0A |= (1 << TXC0); 
	PORTB &= ~(1 << PB4);//set R/W low level
	inc_tranzaction_MB1();
}
Проверил поисковиком редактора все файлы проекта - нигде больше нет обращения к биту PORTB.PB4
Прерывания в МК используются, в том числе приемника UART0, передатчик не использует.
Транслятор старенький AVR GCC под AVR Studio 4.18
Когда увидел в первый раз, вставил программную задержку порядка 1 мс, но... не нравится.
Может ли помочь такое "обрамление":
Код:
__asm__ ("cli");
	PORTB &= ~(1 << PB4);//
__asm__ ("sei");
?
Для автовосстановления обмена данными в основном цикле веду счет успешных запросов, если за секунду ни одного, вызываю функцию инициализации UART0+Modbus. Как видно, не помогает...
Код:
void ModBus1k_init(_ModBusCallBack *ModBusCallBack) 
{
    UCSR0B = 0;
    UBRR0 = 0;
	DDRB |=  (1  << PB4);//485 R/W2
	PORTB &= ~(1 << PB4);//Reciver
	PRR0  &= ~(1 << PRUSART0); //power on
	UBRR0 = F_CPU / 16 / BAUD - 1;//t_bit=1/BAUD=52us, t_Byte=52*10/11=520/572us, t_silent=tB*3.5=1820/2002us
	UCSR0B = (1 << TXEN0) | (1 << RXEN0) | (1 << RXCIE0);  //Enable RX, TX port IO and RX interrupt
	//UCSR0C |= (1 << USBS0);//Stop2  
	Rxcounter1 = 0;
	DataAvalable1=0;
	CallBack = ModBusCallBack;
	frame_error = 0;
	OCR3A  = F_CPU * 45 / 256 / BAUD;//=150 (45*1.1=49.5)
	TIMSK3 = (1 << OCIE3A);
}
Пните, кому не лень!
Вложения:
Тип файла: txt RS485_U0_send.txt (417 байт, 0 просмотров)
Тип файла: txt ModBus1k_init.txt (855 байт, 0 просмотров)
Реклама:

Последний раз редактировалось bdn62; 10.09.2019 в 16:59.
bdn62 вне форума  
Непрочитано 10.09.2019, 18:23  
ForcePoint
Почётный гражданин KAZUS.RU
 
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 4,427
Сказал спасибо: 1,347
Сказали Спасибо 1,752 раз(а) в 1,227 сообщении(ях)
ForcePoint на пути к лучшему
По умолчанию Re: Странный баг управления драйвером RS-485

Сообщение от bdn62 Посмотреть сообщение
Ведомый видит "обрезанный ответ", .....
Свой-же ответ? Т.е полудуплекс с объединёнными DE/!RE ?
Сообщение от bdn62 Посмотреть сообщение
Для автовосстановления ...
Заблокировать на время передачи?


Сообщение от bdn62 Посмотреть сообщение
нигде больше нет обращения к биту PORTB.PB4
А к DDRB.PB4 нет-ли другого доступа?
__________________
Экзорцист 40-го уровня.
ForcePoint вне форума  
Непрочитано 11.09.2019, 02:04  
bdn62
Частый гость
 
Регистрация: 19.05.2010
Сообщений: 18
Сказал спасибо: 62
Сказали Спасибо 8 раз(а) в 2 сообщении(ях)
bdn62 на пути к лучшему
По умолчанию Re: Странный баг управления драйвером RS-485

Оговорился: ...Ведущий видит...
Не понял
К DDRB.PB4 тоже обращение лишь при инициализации
bdn62 вне форума  
Непрочитано 11.09.2019, 02:34  
индюк
Почётный гражданин KAZUS.RU
 
Аватар для индюк
 
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 7,077
Сказал спасибо: 95
Сказали Спасибо 2,060 раз(а) в 1,268 сообщении(ях)
индюк на пути к лучшему
По умолчанию Re: Странный баг управления драйвером RS-485

Сообщение от bdn62 Посмотреть сообщение
while(!( UCSR0A & (1 << TXC0)));//
тупой метод. жрет время проца.
я 15 лет не использовал авр.
у них нет там прерывания по признаку line idle или transaction end??
вот по этим признакам и переключать на прием.
__________________
ОГМ/ПОГМ
индюк на форуме  
Непрочитано 11.09.2019, 08:47  
ForcePoint
Почётный гражданин KAZUS.RU
 
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 4,427
Сказал спасибо: 1,347
Сказали Спасибо 1,752 раз(а) в 1,227 сообщении(ях)
ForcePoint на пути к лучшему
По умолчанию Re: Странный баг управления драйвером RS-485

Сообщение от bdn62 Посмотреть сообщение
Не понял
Может-ли функция "ModBus1k_init" прервать работу "RS485_U0_send"? Если может - запрещать попытки реинициализации на время передачи.
__________________
Экзорцист 40-го уровня.
ForcePoint вне форума  
Непрочитано 11.09.2019, 10:08  
DanilinSA
Почётный гражданин KAZUS.RU
 
Регистрация: 25.11.2010
Адрес: г. Дзержинск Нижегородская обл.
Сообщений: 1,183
Сказал спасибо: 96
Сказали Спасибо 681 раз(а) в 358 сообщении(ях)
DanilinSA на пути к лучшему
По умолчанию Re: Странный баг управления драйвером RS-485

Перед тем, как переводить режим в состояние "прием" проверь состояние передатчика. Где-то в нем должен быть флаг типа "очередь на передачу пуста".
А то похоже программный цикл передачи отработал, а аппаратная часть немного запаздывает, выполняя передачу. В результате ты переключаешь режим до того, как передатчик полностью вытолкнет из своего буфера данные в линию.
DanilinSA вне форума  
Непрочитано 11.09.2019, 10:13  
индюк
Почётный гражданин KAZUS.RU
 
Аватар для индюк
 
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 7,077
Сказал спасибо: 95
Сказали Спасибо 2,060 раз(а) в 1,268 сообщении(ях)
индюк на пути к лучшему
По умолчанию Re: Странный баг управления драйвером RS-485

Бит TXC0 (6) регистра UCSR0A - флаг завершения передачи (1 - после завершения передачи из сдвигового регистра, и если в UDR0 не было загружено нового значения. флаг сбрасывается записью в него 1).
Бит UDRE0 (5) регистра UCSR0A - флаг опустошения регистра данных UDR0 (устанавливается в 1 после пересылки данных из UDR0 в сдвиговый регистр передатчика и означает что в регистр данных можно загружать новое значение. сбрасывается при записи в UDR0 новых данных).

мошт лучше 5 бит мониторить?
__________________
ОГМ/ПОГМ
индюк на форуме  
Непрочитано 11.09.2019, 10:31  
jump
Почётный гражданин KAZUS.RU
 
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 7,285
Сказал спасибо: 0
Сказали Спасибо 3,948 раз(а) в 2,049 сообщении(ях)
jump на пути к лучшему
По умолчанию Re: Странный баг управления драйвером RS-485

Сообщение от индюк Посмотреть сообщение
15 лет не использовал авр
с 2004? зуб даешь?
jump вне форума  
Непрочитано 11.09.2019, 10:34  
индюк
Почётный гражданин KAZUS.RU
 
Аватар для индюк
 
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 7,077
Сказал спасибо: 95
Сказали Спасибо 2,060 раз(а) в 1,268 сообщении(ях)
индюк на пути к лучшему
По умолчанию Re: Странный баг управления драйвером RS-485

Сообщение от jump Посмотреть сообщение
с 2004? зуб даешь?
да хоть все дам.
я тогда перешел на lpc17xx lpc13xx
потом уж на стм32 через несколько лет.

у меня комп на котором я кодил для lpc не включался уж лет 8 точно.
__________________
ОГМ/ПОГМ
индюк на форуме  
Непрочитано 11.09.2019, 10:35  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 16,769
Сказал спасибо: 2,491
Сказали Спасибо 10,022 раз(а) в 5,106 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Странный баг управления драйвером RS-485

Сообщение от индюк Посмотреть сообщение
мошт лучше 5 бит мониторить?
Лучше оба. Переписывание байта из регистра данных в регистр передачи не говорит о завершении передачи и если в этот момент выключить передачу...
А вообще, в АВР-ках у меня прием-передача на прерываниях и через буфер. Загнал в буфер - и не парюсь. Все стабильно принимается и передается.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor на форуме  
Сказали "Спасибо" akegor
makakus (11.09.2019)
 

Закладки
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Книги (не радиотехнической тематики) Mike79 Делимся опытом 4243 08.07.2019 23:21
Ускорить компьютер 7Fantomas7 Ремонт оргтехники 111 08.08.2018 05:27


Часовой пояс GMT +4, время: 23:54.


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