AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
11.09.2019, 10:39
|
|
Гуру портала
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,707
Сказал спасибо: 189
Сказали Спасибо 3,194 раз(а) в 2,071 сообщении(ях)
|
Re: Странный баг управления драйвером RS-485
Сообщение от akegor
|
Переписывание байта из регистра данных в регистр передачи не говорит о завершении передачи
|
угу. в этом и есть ошибка начинающих
__________________
кагмаподэ магмаподэ
|
|
|
|
11.09.2019, 12:03
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 7,985
Сказал спасибо: 0
Сказали Спасибо 4,943 раз(а) в 2,371 сообщении(ях)
|
Re: Странный баг управления драйвером RS-485
Сообщение от индюк
|
я тогда перешел на lpc17xx lpc13xx
|
ну, наверно, несколько позжее
In October 2008, NXP announced the LPC1700 series In May 2009, NXP announced the LPC1300 seriesда до нас дошли через год, примерно + освоение
Сообщение от индюк
|
да хоть все дам
|
так шо - челюсти на стол! живо! живо, я сказал!
|
|
|
|
11.09.2019, 14:05
|
|
Частый гость
Регистрация: 19.05.2010
Сообщений: 27
Сказал спасибо: 76
Сказали Спасибо 8 раз(а) в 2 сообщении(ях)
|
Re: Странный баг управления драйвером RS-485
Спасибо всем откликнувшимся!
Но контроль последнего отправленного бита выполняется в строке
while(!( UCSR0A & (1 ‹‹ TXC0)));//
а переключение в режим приема выполняется после этой строки.
Что и обеспечивает штатную работу (осциллограмма 2).
Но именно иногда происходит зависание, иллюстрируемое осциллограммой 1, которая и вызывает у меня оторопь. Причем в этом зависании устройство сидит "вечно", до аппаратной инициализации МК.
А функция ModBus1k_init не может прервать выполнение функции RS485_U0_send, ибо обе не в прерывании, а в основном цикле.
Так что глюк пока не ясен.
Я надеялся, что кто-то сталкивался с чем то похожим, ибо хочется придумать "таблетку".
Перевод передачи ответа на прерывания я уже пробовал, но с ходу не получилось, мешал второй канал ModBus2k и собственная рукожопость…
Да и глюк в этом случае тоже может проявиться...
|
|
|
|
11.09.2019, 14:12
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,058
Сказал спасибо: 2,563
Сказали Спасибо 11,890 раз(а) в 5,964 сообщении(ях)
|
Re: Странный баг управления драйвером RS-485
Сообщение от bdn62
|
Но контроль последнего отправленного бита выполняется в строке
while(!( UCSR0A & (1 ‹‹ TXC0)));//
|
Попробуйте тут же проверять наличие/отсутствие байта в регистре данных.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
11.09.2019, 15:05
|
|
Прописка
Регистрация: 27.05.2009
Сообщений: 180
Сказал спасибо: 250
Сказали Спасибо 113 раз(а) в 42 сообщении(ях)
|
Re: Странный баг управления драйвером RS-485
Не пробовали поставить небольшую задержку перед переключением на приём?
|
|
|
|
11.09.2019, 15:36
|
|
Гуру портала
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,707
Сказал спасибо: 189
Сказали Спасибо 3,194 раз(а) в 2,071 сообщении(ях)
|
Re: Странный баг управления драйвером RS-485
Сообщение от jump
|
так шо - челюсти на стол! живо! живо, я сказал!
|
да на на....
я еще потом куплю
все равно последнее что я использовал из авр были 8535
Нажмите, чтобы открыть спойлер
__________________
кагмаподэ магмаподэ
|
|
|
|
11.09.2019, 18:46
|
|
Частый гость
Регистрация: 19.05.2010
Сообщений: 27
Сказал спасибо: 76
Сказали Спасибо 8 раз(а) в 2 сообщении(ях)
|
Re: Странный баг управления драйвером RS-485
Сообщение от akegor
|
Попробуйте тут же проверять наличие/отсутствие байта в регистре данных.
|
Вот такая проверка не работает:
while(!( UCSR0A & (1 ‹‹ UDRE0)));
UCSR0A |= (1 ‹‹ UDRE0);
while(!( UCSR0A & (1 ‹‹ TXC0)));//
UCSR0A |= (1 ‹‹ TXC0);//cleared
|
|
|
|
11.09.2019, 19:56
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.03.2010
Сообщений: 2,897
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
|
Re: Странный баг управления драйвером RS-485
Господа программисты жгутъ.
PB4 падает, когда не передано еще 2 (прописью: два) байта. Фифо в атмеге вроде как не присуцтвует. Вывод - проблема точно не в том месте, которое определяет конец передачи последнего байта. Ибо проблема возникает еще до передачи предпоследнего. Когда до проверки, определяющей, не пора ли ронять ли PB4, еще целый байт слать.
|
|
|
Сказали "Спасибо" AR_Favorit
|
|
|
11.09.2019, 20:18
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,058
Сказал спасибо: 2,563
Сказали Спасибо 11,890 раз(а) в 5,964 сообщении(ях)
|
Re: Странный баг управления драйвером RS-485
Сообщение от bdn62
|
UCSR0A |= (1 ‹‹ UDRE0);
|
Это зачем? Бит сбрасывается аппаратно при записи байта в регистр данных.
Сообщение от bdn62
|
Вот такая проверка не работает:
|
Что значит "не работает"? Что делает и что не делает?
Условием переключения с передачи на прием должно быть "последний бит ушел И передавать больше нечего".
Сообщение от AR_Favorit
|
проблема точно не в том месте
|
Насчет "точно" Вы погорячились. Лучше заменить на "может быть". Почему? Да просто потому, что при нечетком критерии определения конца посылки и переключении на прием может быть то же самое. Сначала четко отработать "хвост", а потом уже (по нужде) чесать репу дальше.
Конечно, наводит на размышления зависание. Обычно это происходит, если стек залазит в область переменных. Но тут уж надо разбираться посерьезней, чем "бегло глянуть"...
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
Последний раз редактировалось akegor; 11.09.2019 в 20:30.
|
|
|
|
11.09.2019, 22:03
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.03.2010
Сообщений: 2,897
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
|
Re: Странный баг управления драйвером RS-485
Сообщение от akegor
|
Насчет "точно" Вы погорячились. Лучше заменить на "может быть". Почему? Да просто потому, что при нечетком критерии определения конца посылки и переключении на прием может быть то же самое. Сначала четко отработать "хвост", а потом уже (по нужде) чесать репу дальше.
|
Я человек простой, вижу обрисованную проблему - про неё и говорю. Опускание PB4 за два байта до окончания посылки происходит не в приведенной процедуре отправки пакета, даже если бы определение окончания передачи было неправильным... Это же мега. Нет фифо, нет перестановки команд в конвейере. Из while не выйдет, пока не запихает в буфер последний байт - а PB4 падает раньше, перед предпоследним. Что там где-то ещё наворочено - надо смотреть, конечно...
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 21:35.
|
|