реклама на сайте
подробности

 
 
> Проблема с RS 485. Третий день туплю...
Axxel
сообщение Feb 7 2007, 14:42
Сообщение #1


Частый гость
**

Группа: Новичок
Сообщений: 140
Регистрация: 31-01-07
Из: Челябинск
Пользователь №: 24 896



Доброго времени суток!
Проблема с RS485, третий день туплю.

Собрал простой переходник с RS232 на RS485 по этой схемке:

схема.


Схема ИМХО работает, но с передачей данных появились проблемы
использовал Terminal. Для МК была написана простая тестовая программка:

_______________________________________________________________
//ICC-AVR application builder : 05.02.07 16:50:48
// Target : M16
// Crystal: 6.4Mhz

#include <iom16v.h>
#include <macros.h>
#define RXBUF_SIZE 4
#define TXBUF_SIZE 4
unsigned char RxBuffer[RXBUF_SIZE],TxBuffer[TXBUF_SIZE];
unsigned char TranRequest=0,flag=0,done=0;
unsigned char RxIndex=0,TxIndex=0;
void port_init(void)
{
PORTA = 0xFF;
DDRA = 0x00;
PORTB = 0xFF;
DDRB = 0x00;
PORTC = 0xFF; //m103 output only
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0xFF;
TCCR0 = 0x05;
}

//UART0 initialisation
// desired baud rate: 9600
// actual: baud rate:9524 (0,8%)
// char size: 8 bit
// parity: Disabled
void uart0_init(void)
{
UCSRB = 0x00; //disable while setting baud rate
UCSRA = 0x00;
UCSRC = 0x06;
UBRRL = (unsigned char)41; //set baud rate lo
UBRRH = (unsigned char)41>>8; //set baud rate hi
UCSRB = 0xD8;
}


void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
uart0_init();

MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x00; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialised
}

#pragma interrupt_handler uart0_rx_isr:12
void uart0_rx_isr(void)
{
unsigned char RXchar;
RXchar=UDR;
RxBuffer[RxIndex++]=RXchar;
if(RxIndex>=(RXBUF_SIZE)){flag=1;RxIndex=0;PORTD=0xFF;/*на передачу*/}
}

#pragma interrupt_handler uart0_tx_isr:14
void uart0_tx_isr(void)
{
if(done==1){done=0;PORTD=0x00;/*на прием*/}
if(TranRequest==1)
{
unsigned char TXchar;
TXchar=TxBuffer[++TxIndex];
if(TxIndex==(TXBUF_SIZE-1)){TranRequest=0;TxIndex=0;done=1;}
UDR=TXchar;
}
}

void main()
{
init_devices();
while(1)
{
if(flag==1)
{
unsigned char inc;
flag=0;
TranRequest=1;
for(inc=0;inc<=(TXBUF_SIZE-1);inc++){TxBuffer[inc]=RxBuffer[inc];}
UDR=TxBuffer[0];
}



}
}
_______________________________________________________________
Смысл: передаем с ПК 4 любых символа, МК возвращает их обратно
МК их конечно же возвращает, но 1 из 5-7 пакетов-"битый".
На этом форуме я натыкался на тему, где описывалась проблема
с RS 485 с "лишним" 0-вым битом в символе,примерно похоже на мою
проблему: в основном в неверных символах у меня "лишний" как раз или 0-й
или 7-й бит.

Причем проблема именно с передачей с ПК.
МК шлет обратно то, что ему прислали, это
я проверил это следующим способом:

Конструкция типа:

PORTD=0xFF;//всегда передача
.....................
.....................
.....................
while(1)
{
puts("a very long string");
delayms(1500);
}

работает без единой ошибки передачи.
______________________________________

А конструкция типа:

PORTD=0x00;//всегда прием.
..................
.................
.................
................
получаем 4 символа,
проверяем равны ли они
символу(предположим) 'x'
если равны, то зажигаем
св.диод на 1сек.

на 5-7 пакетов дает сбой.



По поводу переходника: линию CTS не получилось
использовать из-за отсутсвия необходимого пина
в разъеме от мыши :-)
Но это так, к слову, я на это даже и не думаю...

Кто-нибудь сталкивался с подобной проблемой?
Можете натолкнуть на свежую мысль?
А то уже 3-й день туплю :-)

Заранее спасибо!
Прикрепленные файлы
Прикрепленный файл  RS232toRS485.bmp ( 250.62 килобайт ) Кол-во скачиваний: 155
 


--------------------
Если боишься - не говори. если сказал - не бойся. ©
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Axxel   Проблема с RS 485. Третий день туплю...   Feb 7 2007, 14:42
- - Andy Mozzhevilov   Если у вас именно двухпроводный RS485, с переключе...   Feb 7 2007, 16:45
|- - IgorKossak   Цитата(Andy Mozzhevilov @ Feb 7 2007, 15...   Feb 7 2007, 17:15
- - SasaVitebsk   С такой схемой не сталкивался. На схеме видно сигн...   Feb 7 2007, 16:53
- - =GM=   Цитата(Axxel @ Feb 7 2007, 11:42) Проблем...   Feb 7 2007, 17:16
|- - IgorKossak   Цитата(=GM= @ Feb 7 2007, 16:16) Ну и над...   Feb 7 2007, 17:25
|- - =GM=   Цитата(IgorKossak @ Feb 7 2007, 14:25) Ци...   Feb 7 2007, 18:40
- - SpiritDance   На время передачи с МК попробуйте выключать его пр...   Feb 7 2007, 18:10
- - muravei   Только что сделал преобразователь RS-232>RS-485...   Feb 7 2007, 18:23
|- - SasaVitebsk   Цитата(muravei @ Feb 7 2007, 19:23) Тольк...   Feb 8 2007, 01:00
|- - rezident   Цитата(SasaVitebsk @ Feb 8 2007, 03:00) Н...   Feb 8 2007, 01:08
|- - muravei   Цитата(rezident @ Feb 8 2007, 01:08) Это ...   Feb 8 2007, 13:50
- - Axxel   Спасибо всем за ответы, буду проверять все вариант...   Feb 8 2007, 05:52
- - Axxel   Всем доброго времени суток! __________________...   Feb 8 2007, 07:32
- - Axxel   А еще скорее всего перепутал hanshaking c flow con...   Feb 8 2007, 11:06
- - Axxel   Да, именно так и вышло, тему можно закрывать.   Feb 8 2007, 11:58


Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 17:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01391 секунд с 7
ELECTRONIX ©2004-2016