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

 
 
> AT91SAM7S256 и RS485 ...ерунда какая-то, комунибудь удалось норальный результат получить? - не получается
PrSt
сообщение Jun 13 2006, 09:46
Сообщение #1


http://uschema.com
****

Группа: Свой
Сообщений: 708
Регистрация: 16-02-06
Из: UK(Ukrainian_Kingdom) Kharkov
Пользователь №: 14 394



Люди - подскажите что не впорядке?
вот я инициализирую RS485
// usart1->US_MR = 0x08c0; // rs232
usart1->US_MR = 0x08c1; // rs485
надо заметить, что код программы идеально работает когда идет обмен по RS232
я надеясь на то что 485 у камня аппаратный его же и хочу использовать - а тут такой кастыль...

при этом вроде бы как все работает, да не так как нужно, а именно вот какая проблема
когда идет посылка RTS дергается - вижу осцилом, все вроде - ок
пакеты уходит, ему отвечают, он принимает, но...
корректно по протоколу(своему) принимает только маленькие пакеты до гдето 15 байт
если пакет больше - то там содержимое какоето не понятное и вообще архинепонятное в конце посылки...

что это все может быть?


--------------------
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 14)
aaarrr
сообщение Jun 13 2006, 10:07
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



С AT91SAM7S64 проблем не наблюдалось. Если RTS дергается на всю длину посылки, стоит проверить драйвер. Также посмотрите соответствие битовой скорости передатчика и приемника.
Go to the top of the page
 
+Quote Post
PrSt
сообщение Jun 14 2006, 07:08
Сообщение #3


http://uschema.com
****

Группа: Свой
Сообщений: 708
Регистрация: 16-02-06
Из: UK(Ukrainian_Kingdom) Kharkov
Пользователь №: 14 394



Цитата(aaarrr @ Jun 13 2006, 13:07) *
С AT91SAM7S64 проблем не наблюдалось. Если RTS дергается на всю длину посылки, стоит проверить драйвер. Также посмотрите соответствие битовой скорости передатчика и приемника.

всмысле - "стоит проверить драйвер"? этот же драйвер у нас используется в других приборах
с ним вроде все ок или вы имели ввиду что то иное?

вот что касается скорости то - это на скорости 9600
а на 115200 - просто затык
вот это вообще не ясно такое впечатление как будто линия не согласована


--------------------
Go to the top of the page
 
+Quote Post
Nicholas
сообщение Jun 14 2006, 11:35
Сообщение #4





Группа: Новичок
Сообщений: 3
Регистрация: 7-06-06
Пользователь №: 17 836



Если на том же драйвере с той же линией всё работает, то смотрите скорости. И ещё RTS должен дёргаться на всю посылку. Нет ли переполнения буфера? Очень похоже на левые скорости или отсутствие терминаторов на линии. Ну и код инициализации в студию.
Go to the top of the page
 
+Quote Post
PrSt
сообщение Jun 15 2006, 05:55
Сообщение #5


http://uschema.com
****

Группа: Свой
Сообщений: 708
Регистрация: 16-02-06
Из: UK(Ukrainian_Kingdom) Kharkov
Пользователь №: 14 394



Цитата(Nicholas @ Jun 14 2006, 14:35) *
Если на том же драйвере с той же линией всё работает, то смотрите скорости. И ещё RTS должен дёргаться на всю посылку. Нет ли переполнения буфера? Очень похоже на левые скорости или отсутствие терминаторов на линии. Ну и код инициализации в студию.

RTS действительно деркается вроде как надо бы...
терминаторов действиельно нет
их установка ни чего не меняет

вот моя процедура переинициализации

void init_ComPort1_reinit(unsigned long value){ // Init USART (COM_1) RE_INIT

AT91PS_USART usart1 = AT91C_BASE_US1;
AT91PS_PIO usart1_pio = AT91C_BASE_PIOA;
AT91PS_PMC pmc = AT91C_BASE_PMC;
AT91PS_PDC pdc = AT91C_BASE_PDC_US1;

//Disable usart
usart1->US_CR = 0x00;

//enable the clock of USART
pmc->PMC_PCER = 1<<AT91C_ID_US1;
//set baud rate divisor register

/*
скорость=Fкварца/(CD*16)
CD=Fкварца/(скорость*16)
CD скорость Fкварца
960 1200 18432000
480 2400 18432000
120 9600 18432000
80 14400 18432000
30 38400 18432000
20 57600 18432000
10 115200 18432000 */

// usart1->US_BRGR = 0xA; //((18432000)/115200x16)
usart1->US_BRGR = value;

//write the Timeguard Register
usart1->US_TTGR = 0;

//Set the USART mode
// usart1->US_MR = 0x08c0; // rs232
usart1->US_MR = 0x08c1; // rs485

//Enable the RX and TX PDC transfer requests
pdc->PDC_PTCR = AT91C_PDC_TXTEN | AT91C_PDC_RXTEN;

//Enable usart
usart1->US_CR = 0x50;

// Init IO
// Disable PIO on DBGU pins
usart1_pio->PIO_PDR |= (AT91C_PIO_PA21 | AT91C_PIO_PA22 | AT91C_PIO_PA24);
usart1_pio->PIO_PER &= ~(AT91C_PIO_PA21 | AT91C_PIO_PA22 | AT91C_PIO_PA24);

// Enable peripheral A on DBGU pins
usart1_pio->PIO_ASR |= (AT91C_PIO_PA21 | AT91C_PIO_PA22 | AT91C_PIO_PA24);
usart1_pio->PIO_BSR &= ~(AT91C_PIO_PA21 | AT91C_PIO_PA22 | AT91C_PIO_PA24);

// enableRxInterrupt
usart1->US_IER |= AT91C_US_RXRDY;
usart1->US_IDR &= ~AT91C_US_RXRDY;

}


--------------------
Go to the top of the page
 
+Quote Post
Master
сообщение Jun 15 2006, 06:53
Сообщение #6


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

Группа: Новичок
Сообщений: 170
Регистрация: 26-05-05
Из: Москва
Пользователь №: 5 405



Цитата(PrSt @ Jun 15 2006, 08:55) *
RTS действительно деркается вроде как надо бы...
терминаторов действиельно нет
их установка ни чего не меняет
Надеюсь, это не голые слова.
Цитата
вот моя процедура переинициализации
...
// Init IO
// Disable PIO on DBGU pins
usart1_pio->PIO_PDR |= (AT91C_PIO_PA21 | AT91C_PIO_PA22 | AT91C_PIO_PA24);
usart1_pio->PIO_PER &= ~(AT91C_PIO_PA21 | AT91C_PIO_PA22 | AT91C_PIO_PA24);

// Enable peripheral A on DBGU pins
usart1_pio->PIO_ASR |= (AT91C_PIO_PA21 | AT91C_PIO_PA22 | AT91C_PIO_PA24);
usart1_pio->PIO_BSR &= ~(AT91C_PIO_PA21 | AT91C_PIO_PA22 | AT91C_PIO_PA24);

// enableRxInterrupt
usart1->US_IER |= AT91C_US_RXRDY;
usart1->US_IDR &= ~AT91C_US_RXRDY;

}
А вот это реальный шедевр! Просто зачОт какой-то laugh.gif
Чисто чтоб поржать biggrin.gif давайте попробуем убрать каждую вторую строчку в последних трёх абзацах "процедуры переинициализации". Сообщите о результатах.
Go to the top of the page
 
+Quote Post
PrSt
сообщение Jun 15 2006, 09:58
Сообщение #7


http://uschema.com
****

Группа: Свой
Сообщений: 708
Регистрация: 16-02-06
Из: UK(Ukrainian_Kingdom) Kharkov
Пользователь №: 14 394



[quote name='Master' date='Jun 15 2006, 09:53' post='123869']
...
// Init IO
// Disable PIO on DBGU pins
usart1_pio->PIO_PDR |= (AT91C_PIO_PA21 | AT91C_PIO_PA22 | AT91C_PIO_PA24);
usart1_pio->PIO_PER &= ~(AT91C_PIO_PA21 | AT91C_PIO_PA22 | AT91C_PIO_PA24);

// Enable peripheral A on DBGU pins
usart1_pio->PIO_ASR |= (AT91C_PIO_PA21 | AT91C_PIO_PA22 | AT91C_PIO_PA24);
usart1_pio->PIO_BSR &= ~(AT91C_PIO_PA21 | AT91C_PIO_PA22 | AT91C_PIO_PA24);

// enableRxInterrupt
usart1->US_IER |= AT91C_US_RXRDY;
usart1->US_IDR &= ~AT91C_US_RXRDY;

}
[/quote]А вот это реальный шедевр! Просто зачОт какой-то laugh.gif
Чисто чтоб поржать biggrin.gif давайте попробуем убрать каждую вторую строчку в последних трёх абзацах "процедуры переинициализации". Сообщите о результатах.
[/quote]
ну и что за юмор?
все же в порядке здесь.


--------------------
Go to the top of the page
 
+Quote Post
Nicholas
сообщение Jun 15 2006, 12:17
Сообщение #8





Группа: Новичок
Сообщений: 3
Регистрация: 7-06-06
Пользователь №: 17 836



Ну незнаю как тут насчёт поржать. Но вообще-то PDR и PER доступны только на запись. Когда вы делаете |= это означает, что он сначала читается. Я таким счастьем не страдал, но мне кажется ничего хорошего из него не прочитается. Да и просто не надо это. Если вам надо что-то запретить - пишите в PDR единички. Разрешить - в PER. Совместная запись здесь ни к чему.
Если не понятно изъясняюсь - вот код инита обычного уарта (для примера):

int usart1_Init(void)
{
//Setup USART1

//setup power management controller
AT91C_BASE_PMC->PMC_PCER=(1<<AT91C_ID_US1);

//Enable RxD & TxD pins
AT91C_BASE_PIOA->PIO_PDR= AT91C_PA21_RXD1 | AT91C_PA22_TXD1;

AT91C_BASE_US1->US_CR = AT91C_US_RSTRX | /* Reset Receiver */
AT91C_US_RSTTX | /* Reset Transmitter */
AT91C_US_RXDIS | /* Receiver Disable */
AT91C_US_TXDIS; /* Transmitter Disable */

AT91C_BASE_US1->US_MR = AT91C_US_USMODE_NORMAL | /* Normal Mode */
AT91C_US_CLKS_CLOCK | /* Clock = MCK */
AT91C_US_CHRL_8_BITS | /* 8-bit Data */
AT91C_US_PAR_NONE | /* No Parity */
AT91C_US_NBSTOP_1_BIT; /* 1 Stop Bit */

AT91C_BASE_US1->US_BRGR = USART1_BRD; /* Baud Rate Divisor */

//* open Usart 1 interrupt

//* Disable the interrupt on the interrupt controller
AT91C_BASE_AIC->AIC_IDCR = (1<<AT91C_ID_US1);
//* Save the interrupt handler routine pointer and the interrupt priority
AT91C_BASE_AIC->AIC_SVR[AT91C_ID_US1] = (unsigned int) & USART1_IRQ_Handler ;
//* Store the Source Mode Register
AT91C_BASE_AIC->AIC_SMR[AT91C_ID_US1] = AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL | USART1_INTERRUPT_PRIORITY;
//* Clear the interrupt on the interrupt controller
AT91C_BASE_AIC->AIC_ICCR = (1<<AT91C_ID_US1);

//enable interrupt in AIC
AT91C_BASE_AIC->AIC_IECR =(1<<AT91C_ID_US1);

//interrupt mask
AT91C_BASE_US1->US_IER= AT91C_US_RXRDY ;

AT91C_BASE_US1->US_CR = AT91C_US_RXEN | /* Receiver Enable */
AT91C_US_TXEN; /* Transmitter Enable */

return 0;

}
Go to the top of the page
 
+Quote Post
Master
сообщение Jun 15 2006, 19:26
Сообщение #9


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

Группа: Новичок
Сообщений: 170
Регистрация: 26-05-05
Из: Москва
Пользователь №: 5 405



Цитата(PrSt @ Jun 15 2006, 12:58) *
Цитата
... давайте попробуем убрать каждую вторую строчку в последних трёх абзацах "процедуры переинициализации". Сообщите о результатах.

ну и что за юмор?
все же в порядке здесь.
Чувствуется, обидел. Хотя не хотел. Просто было весело. Причём настолько, что забыл даже упомянуть то, о чём не забыл Nicholas - нужно уберать чтение перез записью.
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 15 2006, 20:30
Сообщение #10


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата
надо заметить, что код программы идеально работает когда идет обмен по RS232


Можно здесь уточнить. Имеется в виду что RS485 драйвер подключен к UART'у, а последний просто настроен на работу без аппаратного RTS? Или вы проверяли режим 232 через драйвер RS232?

Цитата
всмысле - "стоит проверить драйвер"? этот же драйвер у нас используется в других приборах
с ним вроде все ок или вы имели ввиду что то иное?

Что значит драйвер используется в других приборах? Вас спросили о преобразователе уровней UART <> RS485 микросхемка такая. Так вот конкретно в этом девайсе она у вас правильно подключена и 100% работоспособная?
Go to the top of the page
 
+Quote Post
PrSt
сообщение Jun 16 2006, 06:51
Сообщение #11


http://uschema.com
****

Группа: Свой
Сообщений: 708
Регистрация: 16-02-06
Из: UK(Ukrainian_Kingdom) Kharkov
Пользователь №: 14 394



Цитата(defunct @ Jun 15 2006, 23:30) *
Цитата
надо заметить, что код программы идеально работает когда идет обмен по RS232


Можно здесь уточнить. Имеется в виду что RS485 драйвер подключен к UART'у, а последний просто настроен на работу без аппаратного RTS? Или вы проверяли режим 232 через драйвер RS232?

Цитата
всмысле - "стоит проверить драйвер"? этот же драйвер у нас используется в других приборах
с ним вроде все ок или вы имели ввиду что то иное?

Что значит драйвер используется в других приборах? Вас спросили о преобразователе уровней UART <> RS485 микросхемка такая. Так вот конкретно в этом девайсе она у вас правильно подключена и 100% работоспособная?


да - я проверял через драйвер RS232 - все работает отлично.
микросхема ADM485AR, работоспособная и подключена правельно.


--------------------
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 16 2006, 08:44
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Я не знаком с этим SAMом, но у меня практически-теоретический попутный вопрос возник. RTS управляет DE? Т.е. направлением передачи ADM485? А в какой момент устанавливается/снимается RTS? Когда последний байт в сдвиговый регистр UART поступил или когда последний бит из сдвигового регистра UART был выдвинут или все же когда был сформирован последний стоп-бит последнего символа?
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Jun 16 2006, 09:12
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Цитата
А в какой момент устанавливается/снимается RTS?

Хороший вопрос smile.gif Привязан к биту TX_EMPTY. а тот ставится по старту, снимается после стопа + таймгард. Таймгард в приведенном коде 0, что не мешало бы изменить.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
PrSt
сообщение Jun 16 2006, 13:12
Сообщение #14


http://uschema.com
****

Группа: Свой
Сообщений: 708
Регистрация: 16-02-06
Из: UK(Ukrainian_Kingdom) Kharkov
Пользователь №: 14 394



Цитата(rezident @ Jun 16 2006, 11:44) *
Я не знаком с этим SAMом, но у меня практически-теоретический попутный вопрос возник. RTS управляет DE? Т.е. направлением передачи ADM485?

управляет (DE соедененым с RE)


--------------------
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Jun 16 2006, 13:35
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



BTW.
А сама микросхема приемника какая?
И к какому питанию подключена?


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post

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

 


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


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