AVR и RS485

Подключаем наши девайсы к компьютеру. Обсуждаются: порты, протоколы, драйвера, языки программирования и т.д.
Ответить
Вымогатель припоя
Сообщения: 567
Зарегистрирован: Ср дек 19, 2012 12:16:22

Сообщение alex1126 »

Хочу сделать что бы к мк можно было подключаться по RS485. Описание интерфейса нашел. Исходники нашел, а вот схему рабочую найти не могу :( Читал в интернете и на этом сайте. Нашел статью про контроллер освещения, и, казалось бы, когда все разжевано - ничег оне получилось (в протеусе).
Вот схема в приложении. Вроде все просто.
Без имени-1.jpg
(43.03 КБ) 2019 скачиваний
Прошивку пишу в microC PRO, который шел в комплекте с отладочной платой и там есть пример работы с RS485 тоже прилагаю. Сначала я думал что в коде что накосячил, но том использовал примеры в исходном виде, но и тогда ничег оне получилось. Тест прошивок прилагаю тоже.

Кроме того. Даже просто подключив контроллеры друг к другу (вот как на схеме ранее приведенной), протеус, после запускка симуляции, начинает сыпать варнинги
Без имени-2.jpg
(35.98 КБ) 1139 скачиваний
"logic contention detect on net" - это он про А и В линии между MAX487.
"RX frame error" это про мастера.

помогите, плз, начинающему котенку :)
Вложения
RS485_Slave_Example.c
(3.36 КБ) 1137 скачиваний
RS485_Master_Example.c
(4.38 КБ) 969 скачиваний
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 86
Зарегистрирован: Пн мар 07, 2011 15:06:32
Откуда: Murom

Сообщение polli123456 »

Когда занимался 485, для простой проверки собирал на Arduino, по этой ссылке: http://rln.nnov.ru/index.php?ind=review ... w&iden=227

Там всё на пальцах :wink:
Реклама
Вымогатель припоя
Сообщения: 567
Зарегистрирован: Ср дек 19, 2012 12:16:22

Сообщение alex1126 »

polli123456 писал(а):Когда занимался 485, для простой проверки собирал на Arduino, по этой ссылке: http://rln.nnov.ru/index.php?ind=review ... w&iden=227

Там всё на пальцах :wink:
там схемы нет :(
Встал на лапы
Аватара пользователя
Сообщения: 86
Зарегистрирован: Пн мар 07, 2011 15:06:32
Откуда: Murom

Сообщение polli123456 »

Да там и так всё видно, но если Вы настаиваете...
И здесь ещё.
Вложения
modbus-417x600.png
(158.23 КБ) 1821 скачивание
Реклама
Эиком - электронные компоненты и радиодетали
Вымогатель припоя
Сообщения: 567
Зарегистрирован: Ср дек 19, 2012 12:16:22

Сообщение alex1126 »

polli123456 писал(а):Да там и так всё видно, но если Вы настаиваете...
И здесь ещё.
ну у меня так же, значит косяк в прошивке... пойду свою реализацию писать
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

alex1126 писал(а): "logic contention detect on net" - это он про А и В линии между MAX487.
"RX frame error" это про мастера.
Второе скорее всего как следствие первого. Конфликт может быть если оба MAXа пытаются одновременно работать на передачу, это косяк программы - или мастера или слейва. Естественно при этом на линии RS485 получается мусор, мастер его не понимает и пишет frame error... Для начала разберитесь с первой ошибкой, в какой момент она возникает.
Реклама
Вымогатель припоя
Сообщения: 567
Зарегистрирован: Ср дек 19, 2012 12:16:22

Сообщение alex1126 »

Engineer_Keen писал(а):
alex1126 писал(а): "logic contention detect on net" - это он про А и В линии между MAX487.
"RX frame error" это про мастера.
Второе скорее всего как следствие первого. Конфликт может быть если оба MAXа пытаются одновременно работать на передачу, это косяк программы - или мастера или слейва. Естественно при этом на линии RS485 получается мусор, мастер его не понимает и пишет frame error... Для начала разберитесь с первой ошибкой, в какой момент она возникает.
она возникает сразу же при запуске проекта. Я так понимаю что она из-за того что между этими максами "по умолчанию" линии в неопределенном состоянии. Эта ошибка возникает даже если просто соединить все, но в прошивке даже не использовать ни уарт ни рс485. Ну и, соответственно, около ног серенькие квадратики.
Вымогатель припоя
Сообщения: 567
Зарегистрирован: Ср дек 19, 2012 12:16:22

Сообщение alex1126 »

Вообщем разобрался я, вроде. Заработало все. Похоже где-то невнимателен был, пересобрал прошивки, "залил" и все заработало.
НО, есть одно но. В процессе работы выскакивают ошибки в протеусе периодически. RX frame error. И ошибки logic contention detect on net тоже остались. Но если эти "логик" выскакивают один раз при запуске проекта, то фрейм еррор постояноо неторопясь сыпятся. Причем и для мастера и для слейва. Зависимости какой-то нет, но как правило поочереди, хотя иногда и подряд два раза может пробежать.
Причем в реализации rs485 которую я используют есть свои "ошибки" и вот они то не выскакивают, все шоколадно идет, а в протеусе сыпятся....

Много схем видел где так же как и у меня просто тупо ноги соединены с максом, без всяких подтяжек и прочего..... Или забить на это?
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Обычно так и делают - ноги контроллера соединяют напрямую с MAX487. И в прошивке первым делом переключают его на прием, этого хватает. Чтобы уж наверняка, подтяните RE/DE к земле. Если logic contention опять вылезет - ищите косяк в прошивке. Как только от этого избавитесь, можно будет разбираться с frame error.
Вымогатель припоя
Сообщения: 567
Зарегистрирован: Ср дек 19, 2012 12:16:22

Сообщение alex1126 »

Нашел какую-то курсовую что ли в интернете где эта ошибка подробно расписана:
Предупреждение симуляции: «Logic contention(s) detected on net # (но-
мер цепи) ». Типичная ошибка для начинающих. В цифровой цепи с номе-
ром #(номер цепи) обнаружен конфликт сигналов. Если щелкнуть мышкой
по номеру откроется список цепи, в которой обнаружен конфликт. Обычно,
когда два или более выхода с различными состояниями 0 и 1 объединены
в одну цепь в текущий момент времени. Часто вылетает, когда использу-
ется интерактивная кнопка, замыкающая вывод на землю или шину пита-
ния без дополнительного резистора, т.е. при симуляции вы ее замкнули, а
в этот момент на выводе элемента появился противоположный сигнал.
Еще одна причина в несогласованности по времени, например, двух мик-
ропроцессоров связанных между собой.
завтра буду искать.

А вот еще вопрос:
У меня мк тактируется от внутренего генератора (или как правильно его называть) и он, вроде на 1мгц. Но в рс485 цепи он будет работать с более другими устройствами. Не помешает ли разница внутренней частоте работе? Скорость там указана в 9600 но относительно чего ее мерить он будет?
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

[quote="alex1126"Не помешает ли разница внутренней частоте работе? Скорость там указана в 9600 но относительно чего ее мерить он будет?[/quote]
Э... Вы вообще в курсе как UART работает, и как битрейт от тактовой частоты МК зависит? Или вопрос в неточности RC-генератора? Если так, то как повезет, некоторые хорошо откалиброваны, некоторые нет. Если используют UART, обычно ставят внешний кварц, так надежнее.
Вымогатель припоя
Сообщения: 567
Зарегистрирован: Ср дек 19, 2012 12:16:22

Сообщение alex1126 »

Engineer_Keen писал(а):Обычно так и делают - ноги контроллера соединяют напрямую с MAX487. И в прошивке первым делом переключают его на прием, этого хватает. Чтобы уж наверняка, подтяните RE/DE к земле. Если logic contention опять вылезет - ищите косяк в прошивке. Как только от этого избавитесь, можно будет разбираться с frame error.
О, спасибо, подтянул RE/DE к земле, ошибка пропала. Фрейм еррор остался. Причем я так понимаю что он на уровне железа, так как в программе ошибки не определяются....
Вымогатель припоя
Сообщения: 567
Зарегистрирован: Ср дек 19, 2012 12:16:22

Сообщение alex1126 »

Engineer_Keen писал(а):
alex1126 писал(а):Не помешает ли разница внутренней частоте работе? Скорость там указана в 9600 но относительно чего ее мерить он будет?
Э... Вы вообще в курсе как UART работает, и как битрейт от тактовой частоты МК зависит?
Как работает примерно знаю, а как зависит - нет.
Или вопрос в неточности RC-генератора?
Нет, вопрос именно в том что если в двух мк будет выставленна скорость в 9600, но один будет тактировтаься на 1 мегагерц а второй на 16 - оно вообще заработает?
Вымогатель припоя
Сообщения: 567
Зарегистрирован: Ср дек 19, 2012 12:16:22

Сообщение alex1126 »

А вот еще вопрос. Вот у меня есть в протеусе эта связка - два мк по рс485 общаются. Можно ли как-нить посмотреть что там за байты бегают между ними? ДОбавил в схему виртуальный терминал. Подключил к линиям между максами к А и Б, ртс подтянул к земле. В результате вижу (в хексе) 0х00 и 0х80 в различных комбинациях. Я там понимаю что это те самые нолиуи и единички, т.е. биты. Но я посылаю 0хAA, 0х03 т.е. не совсем то.... или эти данные по времени разнесены? Если подключить напрямую к рх тх, то вообще ничего не видно и мк перестают друг с другом общатся....
Встал на лапы
Аватара пользователя
Сообщения: 86
Зарегистрирован: Пн мар 07, 2011 15:06:32
Откуда: Murom

Сообщение polli123456 »

alex1126 писал(а):Нет, вопрос именно в том что если в двух мк будет выставленна скорость в 9600, но один будет тактировтаься на 1 мегагерц а второй на 16 - оно вообще заработает?
Вот засада, а у меня комп 2,1Ггц, а к нему по СОМ порту подключена "шняга" с тактовой 16Мгц ...
При чём тут протоколы обмена и тактовая частота процессора?
Оно вообще должно заработать.
p.s
СпойлерНу и, завершая рассказ о простом использовании Virtual Terminal, отмечу, что связь тут не обязательно должна быть двухсторонней. Вы можете убедиться в этом по предыдущему примеру, если разорвете один из перекрестных проводов. При этом тот терминал, у которого оставлен подключенным выход TXD, сможет только передавать данные, а тот у которого вход RXD – только принимать их. Это тоже иногда бывает нужно. В частности, терминал приемник можно использовать при отладке, как контрольное устройство прохождения информации, например, для проверки связи по последовательному интерфейсу между двумя микроконтроллерами. Для этого достаточно подвесить его приемный вход RXD на контролируемую линию связи и выставить скорость и остальные параметры (четность и т.п.) обмена на этой шине. Фактически таким подключением мы получаем простейший сниффер последовательного интерфейса. Для тех, кто «на бронепоезде»: англ. sniff – нюхать. Термин «сниффер» (нюхач) перекочевал из профессионального хакерского сленга, и означает устройство, позволяющее контролировать траффик по тому или иному интерфейсу, например, в локальной сети, не нарушая при этом основной обмен по этому интерфейсу.
Отсюда
Вымогатель припоя
Сообщения: 567
Зарегистрирован: Ср дек 19, 2012 12:16:22

Сообщение alex1126 »

polli123456 писал(а):
alex1126 писал(а):Нет, вопрос именно в том что если в двух мк будет выставленна скорость в 9600, но один будет тактировтаься на 1 мегагерц а второй на 16 - оно вообще заработает?
Вот засада, а у меня комп 2,1Ггц, а к нему по СОМ порту подключена "шняга" с тактовой 16Мгц ...
При чём тут протоколы обмена и тактовая частота процессора?
Оно вообще должно заработать.
ясно, спасибо, прост оя подумал что как мк будет сокрость нужную вычислять......
Потрогал лапой паяльник
Сообщения: 310
Зарегистрирован: Пт дек 17, 2010 14:41:25

Сообщение phenomen »

alex1126 писал(а):Можно ли как-нить посмотреть что там за байты бегают между ними? ДОбавил в схему виртуальный терминал. Подключил к линиям между максами к А и Б, ртс подтянул к земле.
Добавьте еще между терминалом и линиями АБ макс485, посадив РЕ/ДЕ на землю.
Вымогатель припоя
Сообщения: 567
Зарегистрирован: Ср дек 19, 2012 12:16:22

Сообщение alex1126 »

phenomen писал(а):
alex1126 писал(а):Можно ли как-нить посмотреть что там за байты бегают между ними? ДОбавил в схему виртуальный терминал. Подключил к линиям между максами к А и Б, ртс подтянул к земле.
Добавьте еще между терминалом и линиями АБ макс485, посадив РЕ/ДЕ на землю.
спасибо, пошел пробовать.
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

alex1126 писал(а):ясно, спасибо, прост оя подумал что как мк будет сокрость нужную вычислять......
Он и не будет. Скорость (точнее делитель) вычисляете вы когда пишите в программе инициализацию регистров UART (UBRRH:UBRRL).
Вымогатель припоя
Сообщения: 567
Зарегистрирован: Ср дек 19, 2012 12:16:22

Сообщение alex1126 »

Engineer_Keen писал(а):
alex1126 писал(а):ясно, спасибо, прост оя подумал что как мк будет сокрость нужную вычислять......
Он и не будет. Скорость (точнее делитель) вычисляете вы когда пишите в программе инициализацию регистров UART (UBRRH:UBRRL).
да, в даташите нашел

Код: Выделить всё

#define FOSC 1843200// Clock Speed
#define BAUD 9600
#define MYUBRR FOSC/16/BAUD-1
void main( void )
{
...
USART_Init ( MYUBRR );
...
}
void USART_Init( unsigned int ubrr)
{
/* Set baud rate */
UBRRH = (unsigned char)(ubrr>>8);
UBRRL = (unsigned char)ubrr;
/* Enable receiver and transmitter */
UCSRB = (1<<RXEN)|(1<<TXEN);
/* Set frame format: 8data, 2stop bit */
UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
}
с этим разобрались :)
Ответить

Вернуться в «Интеграция с ПК»