Страница 1 из 3
AVR и RS485
Добавлено: Пт янв 18, 2013 11:18:04
alex1126
Хочу сделать что бы к мк можно было подключаться по RS485. Описание интерфейса нашел. Исходники нашел, а вот схему рабочую найти не могу

Читал в интернете и на этом сайте. Нашел статью про контроллер освещения, и, казалось бы, когда все разжевано - ничег оне получилось (в протеусе).
Вот схема в приложении. Вроде все просто.
Прошивку пишу в microC PRO, который шел в комплекте с отладочной платой и там есть пример работы с RS485 тоже прилагаю. Сначала я думал что в коде что накосячил, но том использовал примеры в исходном виде, но и тогда ничег оне получилось. Тест прошивок прилагаю тоже.
Кроме того. Даже просто подключив контроллеры друг к другу (вот как на схеме ранее приведенной), протеус, после запускка симуляции, начинает сыпать варнинги
"logic contention detect on net" - это он про А и В линии между MAX487.
"RX frame error" это про мастера.
помогите, плз, начинающему котенку

Re: AVR и RS485
Добавлено: Пт янв 18, 2013 12:36:26
polli123456
Когда занимался 485, для простой проверки собирал на Arduino, по этой ссылке:
http://rln.nnov.ru/index.php?ind=review ... w&iden=227
Там всё на пальцах

Re: AVR и RS485
Добавлено: Пт янв 18, 2013 12:42:14
alex1126
там схемы нет

Re: AVR и RS485
Добавлено: Пт янв 18, 2013 13:04:31
polli123456
Да там и так всё видно, но если Вы настаиваете...
И
здесь ещё.
Re: AVR и RS485
Добавлено: Пт янв 18, 2013 13:11:51
alex1126
polli123456 писал(а):Да там и так всё видно, но если Вы настаиваете...
И
здесь ещё.
ну у меня так же, значит косяк в прошивке... пойду свою реализацию писать
Re: AVR и RS485
Добавлено: Пт янв 18, 2013 13:13:49
Engineer_Keen
alex1126 писал(а):
"logic contention detect on net" - это он про А и В линии между MAX487.
"RX frame error" это про мастера.
Второе скорее всего как следствие первого. Конфликт может быть если оба MAXа пытаются одновременно работать на передачу, это косяк программы - или мастера или слейва. Естественно при этом на линии RS485 получается мусор, мастер его не понимает и пишет frame error... Для начала разберитесь с первой ошибкой, в какой момент она возникает.
Re: AVR и RS485
Добавлено: Пт янв 18, 2013 16:40:37
alex1126
Engineer_Keen писал(а):alex1126 писал(а):
"logic contention detect on net" - это он про А и В линии между MAX487.
"RX frame error" это про мастера.
Второе скорее всего как следствие первого. Конфликт может быть если оба MAXа пытаются одновременно работать на передачу, это косяк программы - или мастера или слейва. Естественно при этом на линии RS485 получается мусор, мастер его не понимает и пишет frame error... Для начала разберитесь с первой ошибкой, в какой момент она возникает.
она возникает сразу же при запуске проекта. Я так понимаю что она из-за того что между этими максами "по умолчанию" линии в неопределенном состоянии. Эта ошибка возникает даже если просто соединить все, но в прошивке даже не использовать ни уарт ни рс485. Ну и, соответственно, около ног серенькие квадратики.
Re: AVR и RS485
Добавлено: Пт янв 18, 2013 16:54:40
alex1126
Вообщем разобрался я, вроде. Заработало все. Похоже где-то невнимателен был, пересобрал прошивки, "залил" и все заработало.
НО, есть одно но. В процессе работы выскакивают ошибки в протеусе периодически. RX frame error. И ошибки logic contention detect on net тоже остались. Но если эти "логик" выскакивают один раз при запуске проекта, то фрейм еррор постояноо неторопясь сыпятся. Причем и для мастера и для слейва. Зависимости какой-то нет, но как правило поочереди, хотя иногда и подряд два раза может пробежать.
Причем в реализации rs485 которую я используют есть свои "ошибки" и вот они то не выскакивают, все шоколадно идет, а в протеусе сыпятся....
Много схем видел где так же как и у меня просто тупо ноги соединены с максом, без всяких подтяжек и прочего..... Или забить на это?
Re: AVR и RS485
Добавлено: Пт янв 18, 2013 18:11:37
Engineer_Keen
Обычно так и делают - ноги контроллера соединяют напрямую с MAX487. И в прошивке первым делом переключают его на прием, этого хватает. Чтобы уж наверняка, подтяните RE/DE к земле. Если logic contention опять вылезет - ищите косяк в прошивке. Как только от этого избавитесь, можно будет разбираться с frame error.
Re: AVR и RS485
Добавлено: Вс янв 20, 2013 12:46:43
alex1126
Нашел какую-то курсовую что ли в интернете где эта ошибка подробно расписана:
Предупреждение симуляции: «Logic contention(s) detected on net # (но-
мер цепи) ». Типичная ошибка для начинающих. В цифровой цепи с номе-
ром #(номер цепи) обнаружен конфликт сигналов. Если щелкнуть мышкой
по номеру откроется список цепи, в которой обнаружен конфликт. Обычно,
когда два или более выхода с различными состояниями 0 и 1 объединены
в одну цепь в текущий момент времени. Часто вылетает, когда использу-
ется интерактивная кнопка, замыкающая вывод на землю или шину пита-
ния без дополнительного резистора, т.е. при симуляции вы ее замкнули, а
в этот момент на выводе элемента появился противоположный сигнал.
Еще одна причина в несогласованности по времени, например, двух мик-
ропроцессоров связанных между собой.
завтра буду искать.
А вот еще вопрос:
У меня мк тактируется от внутренего генератора (или как правильно его называть) и он, вроде на 1мгц. Но в рс485 цепи он будет работать с более другими устройствами. Не помешает ли разница внутренней частоте работе? Скорость там указана в 9600 но относительно чего ее мерить он будет?
Re: AVR и RS485
Добавлено: Вс янв 20, 2013 19:24:27
Engineer_Keen
[quote="alex1126"Не помешает ли разница внутренней частоте работе? Скорость там указана в 9600 но относительно чего ее мерить он будет?[/quote]
Э... Вы вообще в курсе как UART работает, и как битрейт от тактовой частоты МК зависит? Или вопрос в неточности RC-генератора? Если так, то как повезет, некоторые хорошо откалиброваны, некоторые нет. Если используют UART, обычно ставят внешний кварц, так надежнее.
Re: AVR и RS485
Добавлено: Пн янв 21, 2013 10:39:55
alex1126
Engineer_Keen писал(а):Обычно так и делают - ноги контроллера соединяют напрямую с MAX487. И в прошивке первым делом переключают его на прием, этого хватает. Чтобы уж наверняка, подтяните RE/DE к земле. Если logic contention опять вылезет - ищите косяк в прошивке. Как только от этого избавитесь, можно будет разбираться с frame error.
О, спасибо, подтянул RE/DE к земле, ошибка пропала. Фрейм еррор остался. Причем я так понимаю что он на уровне железа, так как в программе ошибки не определяются....
Re: AVR и RS485
Добавлено: Пн янв 21, 2013 10:41:30
alex1126
Engineer_Keen писал(а):alex1126 писал(а):Не помешает ли разница внутренней частоте работе? Скорость там указана в 9600 но относительно чего ее мерить он будет?
Э... Вы вообще в курсе как UART работает, и как битрейт от тактовой частоты МК зависит?
Как работает примерно знаю, а как зависит - нет.
Или вопрос в неточности RC-генератора?
Нет, вопрос именно в том что если в двух мк будет выставленна скорость в 9600, но один будет тактировтаься на 1 мегагерц а второй на 16 - оно вообще заработает?
Re: AVR и RS485
Добавлено: Пн янв 21, 2013 10:52:25
alex1126
А вот еще вопрос. Вот у меня есть в протеусе эта связка - два мк по рс485 общаются. Можно ли как-нить посмотреть что там за байты бегают между ними? ДОбавил в схему виртуальный терминал. Подключил к линиям между максами к А и Б, ртс подтянул к земле. В результате вижу (в хексе) 0х00 и 0х80 в различных комбинациях. Я там понимаю что это те самые нолиуи и единички, т.е. биты. Но я посылаю 0хAA, 0х03 т.е. не совсем то.... или эти данные по времени разнесены? Если подключить напрямую к рх тх, то вообще ничего не видно и мк перестают друг с другом общатся....
Re: AVR и RS485
Добавлено: Пн янв 21, 2013 10:57:46
polli123456
alex1126 писал(а):Нет, вопрос именно в том что если в двух мк будет выставленна скорость в 9600, но один будет тактировтаься на 1 мегагерц а второй на 16 - оно вообще заработает?
Вот засада, а у меня комп 2,1Ггц, а к нему по СОМ порту подключена "шняга" с тактовой 16Мгц ...
При чём тут протоколы обмена и тактовая частота процессора?
Оно вообще
должно заработать.
p.s
Спойлер
Ну и, завершая рассказ о простом использовании Virtual Terminal, отмечу, что связь тут не обязательно должна быть двухсторонней. Вы можете убедиться в этом по предыдущему примеру, если разорвете один из перекрестных проводов. При этом тот терминал, у которого оставлен подключенным выход TXD, сможет только передавать данные, а тот у которого вход RXD – только принимать их. Это тоже иногда бывает нужно. В частности, терминал приемник можно использовать при отладке, как контрольное устройство прохождения информации, например, для проверки связи по последовательному интерфейсу между двумя микроконтроллерами. Для этого достаточно подвесить его приемный вход RXD на контролируемую линию связи и выставить скорость и остальные параметры (четность и т.п.) обмена на этой шине. Фактически таким подключением мы получаем простейший сниффер последовательного интерфейса. Для тех, кто «на бронепоезде»: англ. sniff – нюхать. Термин «сниффер» (нюхач) перекочевал из профессионального хакерского сленга, и означает устройство, позволяющее контролировать траффик по тому или иному интерфейсу, например, в локальной сети, не нарушая при этом основной обмен по этому интерфейсу.
Отсюда
Re: AVR и RS485
Добавлено: Пн янв 21, 2013 11:24:54
alex1126
polli123456 писал(а):alex1126 писал(а):Нет, вопрос именно в том что если в двух мк будет выставленна скорость в 9600, но один будет тактировтаься на 1 мегагерц а второй на 16 - оно вообще заработает?
Вот засада, а у меня комп 2,1Ггц, а к нему по СОМ порту подключена "шняга" с тактовой 16Мгц ...
При чём тут протоколы обмена и тактовая частота процессора?
Оно вообще
должно заработать.
ясно, спасибо, прост оя подумал что как мк будет сокрость нужную вычислять......
Re: AVR и RS485
Добавлено: Пн янв 21, 2013 11:30:18
phenomen
alex1126 писал(а):Можно ли как-нить посмотреть что там за байты бегают между ними? ДОбавил в схему виртуальный терминал. Подключил к линиям между максами к А и Б, ртс подтянул к земле.
Добавьте еще между терминалом и линиями АБ макс485, посадив РЕ/ДЕ на землю.
Re: AVR и RS485
Добавлено: Пн янв 21, 2013 11:32:48
alex1126
phenomen писал(а):alex1126 писал(а):Можно ли как-нить посмотреть что там за байты бегают между ними? ДОбавил в схему виртуальный терминал. Подключил к линиям между максами к А и Б, ртс подтянул к земле.
Добавьте еще между терминалом и линиями АБ макс485, посадив РЕ/ДЕ на землю.
спасибо, пошел пробовать.
Re: AVR и RS485
Добавлено: Пн янв 21, 2013 15:21:49
Engineer_Keen
alex1126 писал(а):ясно, спасибо, прост оя подумал что как мк будет сокрость нужную вычислять......
Он и не будет. Скорость (точнее делитель) вычисляете
вы когда пишите в программе инициализацию регистров UART (UBRRH:UBRRL).
Re: AVR и RS485
Добавлено: Пн янв 21, 2013 20:20:46
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);
}
с этим разобрались
