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

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

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

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

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

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

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

 
Опции темы
Непрочитано 04.07.2019, 13:20  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,841
Сказал спасибо: 2,531
Сказали Спасибо 11,764 раз(а) в 5,895 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: ATtiny441 и UART. Не могу разобраться

Deniska407, почему бы Вам было не указать в явном виде скорость обмена? Лениво мне, как-то, ковыряться в ДШ...
Откуда взяты 5мс задержки после загрузки байта в УДР ? Вообще-то, гораздо беспроигрышней отлавливать событие "передача байта окончена" по соответствующему флагу.
Вы дрыгаете ножкой направления для каждого байта. А почему бы не сделать прием-передачу через кольцевой буфер на прерываниях? В этом случае ставить на передачу можно один раз на все байты буфера, а переключать на чтение после передачи последнего байта.
У меня все работает именно так.
Реклама:
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Эти 2 пользователя(ей) сказали Спасибо akegor за это сообщение:
ForcePoint (04.07.2019), mike-y-k (04.07.2019)
Непрочитано 04.07.2019, 14:37  
tsb
Прописка
 
Аватар для tsb
 
Регистрация: 25.11.2006
Адрес: Харьков
Сообщений: 295
Сказал спасибо: 25
Сказали Спасибо 71 раз(а) в 60 сообщении(ях)
tsb на пути к лучшему
По умолчанию Re: ATtiny441 и UART. Не могу разобраться

Deniska407, не забывайте, что интерфейс RS485 является полу-дуплексным, т.е. в каждый момент направление передачи данных может быть только одно: от "мастера" к "слейву" или наоборот. Это значит, что "мастер" и "слейв" должны передавать данные строго по очереди, но не одновременно. Этот принцип присутствует в протоколе Modbus RTU, но в Вашей программе он пока не соблюдается. Насколько я понял из приведенного текста программы, передача от устройства ("слейва") активируется в главном цикле через каждые 5 сек, при этом никак не отслеживая, окончился уже прием от "мастера" или нет. Возможно в этом причина описанной "нестабильности" приема...
tsb вне форума  
Непрочитано 04.07.2019, 14:49  
ForcePoint
Почётный гражданин KAZUS.RU
 
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 6,784
Сказал спасибо: 2,911
Сказали Спасибо 3,118 раз(а) в 2,109 сообщении(ях)
ForcePoint на пути к лучшему
По умолчанию Re: ATtiny441 и UART. Не могу разобраться

Сообщение от parovoZZ Посмотреть сообщение
... не стабильная тактовая частота из-за отсутствия кварца.
Она достаточно стабильна, по крайней мере для "комнатных условий". На 38400 Бод работало устойчиво от внутреннего RC-генератора, откалиброванного по app. note Atmel.
А вот записан-ли байт калибровки генератора в OSCCAL - надо проверить.
__________________
Экзорцист 40-го уровня.
ForcePoint вне форума  
Сказали "Спасибо" ForcePoint
mike-y-k (04.07.2019)
Непрочитано 04.07.2019, 14:57  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,246
Сказал спасибо: 11,165
Сказали Спасибо 3,854 раз(а) в 2,925 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: ATtiny441 и UART. Не могу разобраться

tsb, таки они и полнодуплексными бывают (с двумя парами линий).
Собственно правило слушать линию на предмет правильности переданного никто не отменял - так и ошибки, и коллизии отлично детектируются.

Deniska407, анализ происходящего на линии нужно выполнить в первую очередь.
При этом обеспечить нормальное терминирование RS485 (даже на 0.3м). Возьмите это за правило - потом будет меньше печалей.
Осциллограф заодно покажет шумовую картину на линии.
Проверьте осциллографом потенциалы при отсутствии земли между устройствами и при ее подключении.
Какие трансиверы RS485 использованы?
Линии с отдельным внутренним питанием и заземлением изолированных трансиверов показывают лучшие характеристики по помехоустойчивости. 12V/24V с понижением на каждой плате до 5V. Для дома это будет излишеством, но…
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
mike-y-k вне форума  
Непрочитано 04.07.2019, 15:10  
tsb
Прописка
 
Аватар для tsb
 
Регистрация: 25.11.2006
Адрес: Харьков
Сообщений: 295
Сказал спасибо: 25
Сказали Спасибо 71 раз(а) в 60 сообщении(ях)
tsb на пути к лучшему
По умолчанию Re: ATtiny441 и UART. Не могу разобраться

Сообщение от mike-y-k Посмотреть сообщение
tsb, таки они и полнодуплексными бывают (с двумя парами линий).
Чего только, "в принципе", не бывает... Но мы же рассматриваем конкретный случай:
Сообщение от Deniska407 Посмотреть сообщение
Для приема в терминал использую китайский переходник с UART на RS-485 и переходник - RS-485 - USB.
Сообщение от mike-y-k Посмотреть сообщение
Собственно правило слушать линию на предмет правильности переданного никто не отменял - так и ошибки, и коллизии отлично детектируются.
Как это "правило" можно реализовать в данном конкретном случае - не совсем понятно...
tsb вне форума  
Непрочитано 04.07.2019, 15:30  
usr10000
Временная регистрация
 
Регистрация: 12.11.2008
Адрес: LT
Сообщений: 69
Сказал спасибо: 12
Сказали Спасибо 33 раз(а) в 23 сообщении(ях)
usr10000 на пути к лучшему
По умолчанию Re: ATtiny441 и UART. Не могу разобраться

Сообщение от Deniska407 Посмотреть сообщение
Если есть у кого какие мысли
Есть мысль, что у Вас скорость выбрана с большой погрешностью. Получается около 8900. Если хотите 9600, то ставьте бит U2X, а делитель ставьте 12.
usr10000 вне форума  
Сказали "Спасибо" usr10000
mike-y-k (04.07.2019)
Непрочитано 04.07.2019, 16:11  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,246
Сказал спасибо: 11,165
Сказали Спасибо 3,854 раз(а) в 2,925 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: ATtiny441 и UART. Не могу разобраться

tsb, полудуплексные обычно с раздельным управлением приём-передача (Rx_En, Tx_En). При передаче включаем приём и проверяем принятое после каждой передачи.
Аппаратное echo получается.
Из-за этого был вопрос по использованному чипу в конце цепочки USB-UART-RS485 и его подключению.
У ТС вполне может стоять и полнодуплексный чип. Была такая "неожиданность" пару раз при покупке плат и модулей трансиверов на aliexpress , правда у нескольких вторая пара отказалась жить

ТС для начала физический уровень привести в соответствие со стандартом стоит, а потом уже двигаться дальше. Метания в поиске причин между возможными вариантами обеспечивают слабую сходимость процесса к итогу. Тут только на повезёт можно расчитывать и только для однофакторной ошибки…
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…

Последний раз редактировалось mike-y-k; 04.07.2019 в 16:36.
mike-y-k вне форума  
Непрочитано 04.07.2019, 16:14  
parovoZZ
Почётный гражданин KAZUS.RU
 
Регистрация: 15.11.2010
Сообщений: 2,374
Сказал спасибо: 338
Сказали Спасибо 328 раз(а) в 253 сообщении(ях)
parovoZZ на пути к лучшему
По умолчанию Re: ATtiny441 и UART. Не могу разобраться

Сообщение от ForcePoint Посмотреть сообщение
Она достаточно стабильна,
Я даже на ЛА вижу джиттер от 441/841. Разумеется, на не калиброванном осцилляторе.
parovoZZ вне форума  
Непрочитано 04.07.2019, 17:19  
tsb
Прописка
 
Аватар для tsb
 
Регистрация: 25.11.2006
Адрес: Харьков
Сообщений: 295
Сказал спасибо: 25
Сказали Спасибо 71 раз(а) в 60 сообщении(ях)
tsb на пути к лучшему
По умолчанию Re: ATtiny441 и UART. Не могу разобраться

Сообщение от mike-y-k Посмотреть сообщение
tsb, полудуплексные обычно с раздельным управлением приём-передача (Rx_En, Tx_En). При передаче включаем приём и проверяем принятое после каждой передачи.
Аппаратное echo получается.
Это Вы говорите о контроле передачи со стороны микроконтроллера ("слейва"). Но в приведенных примерах полученных посылок от "слейва" контрольные суммы (два последних байта) - везде правильные (с учетом значений первого "нестабильного" байта). Значит у ТС искажение данных происходит на участке передачи от ПК ("мастера") к "слейву".
tsb вне форума  
Непрочитано 04.07.2019, 18:00  
Deniska407
Прохожий
 
Регистрация: 03.07.2019
Сообщений: 7
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Deniska407 на пути к лучшему
По умолчанию

Уважаемые Коллеги!

Я не ожидал что мой вопрос будет кому то интересен и кто то будет на него отвечать. Я увидел столько от ВАС ответов и советов и очень приятно удивлен! ОГРОМНОЕ ВАМ ВСЕМ СПАСИБО ЗА ПОДДЕРЖКУ!

Задачу я решил следующим образом - правильно инициализировал UART:

PHP код:
void USART_Init()
{
    
UBRR0H 0;
    
UBRR0L 12;                    // ‹----
    
    
UCSR0A = (‹‹ U2X0);     // ‹----
    
    
UCSR0B = (1‹‹RXEN0)|(1‹‹TXEN0)|(1‹‹RXCIE0);
    
UCSR0C = (1‹‹USBS0)|(3‹‹UCSZ00);

Ошибок больше не ловил! Буду пилить программу дальше! Теперь, когда я начал принимать без ошибок, то столкнулся со следующей трудностью:
Телеграмма ModBUS RTU состоит из (например) из Адреса устройства (0х10), Номера ф-ции (0х03), Адреса (0х01 и 0х00) и Данных (0х00 и 0х01) и заканчивается все это CRC (0хХХ и 0хХХ). Всего телеграмма состоит из 8-ми байт. Моя же программа принимает только ОДИН ...

Вопрос: как из буфера UART по прерыванию наполнить массив frame[i] 8-ю байтами. Вот код, отвечающий за прием:

PHP код:
ISR (USART0_RX_vect)
{
    
        
i=0;
                while ( !(
UCSR0A & (1‹‹RXC0)) );
                do
                      {
              
frame[i] = UDR0;   //  ‹--- 
                      
i++;                      //  ‹--- 
                      
}
        while( 
я не знаю что тут писать за условие);

Видимо тут нужно организовать цикл и принимать в frame[i] до тех пор из буфера, пока а) что то еще принимается и б) i‹32, иначе переполнится буфер массива frame[i] ......

Вот во вложении что получилось в анализаторе ...
Миниатюры:
Нажмите на изображение для увеличения
Название: 112233.JPG
Просмотров: 0
Размер:	328.7 Кб
ID:	143137  

Последний раз редактировалось mike-y-k; 05.07.2019 в 02:05.
Deniska407 вне форума  
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не могу разобраться с термостатом restorn Proteus 12 05.04.2018 11:27
Помогите разобраться со схемой. я не могу понять что не так. sofist Источники питания и свет 17 15.11.2007 15:52
MP Lab 7.1 Не могу создать проект Dimtr Микроконтроллеры, АЦП, память и т.д 1 10.12.2005 17:09
[Решено] Повредил Geforce FX5900xt, не могу разобраться с деталями Partizan Ремонт оргтехники 2 16.04.2005 21:32
Не могу разобраться с LCD init_sub Информация по радиокомпонентам 6 02.04.2004 04:40


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


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