|
Bluetooth, Все что с ним связано. |
|
|
|
 |
Ответов
(1 - 8)
|
May 6 2007, 18:15
|

Частый гость
 
Группа: Свой
Сообщений: 107
Регистрация: 7-02-06
Из: Moscow
Пользователь №: 14 086

|
Цитата(Stanislav_S @ May 5 2007, 14:59)  Собственно интересует, встраивал ли кто в свои модули данный интерфейс. Какие впечатления, какие подводные камни? На какое железо стоит ориентироваться ( в плане доставабельности, глючности и и т д...), в общем хотелось бы услышать личные впечатления  Посмотрите здесь: Подфорум Wireless/OpticПросто не хочется плодить новые ветки к тому что уже есть.
|
|
|
|
|
Aug 9 2014, 18:31
|

Гуру
     
Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237

|
Подскажите, кто твердо помнит, какие уровни надо подать на линии "рукопожатия", чтобы в дальнейшем модуль BlueTooth не отказывался общаться с МК по USART в обе стороны. При этом МК в рукопожатии не нуждается, а модуль BlueTooth этого требует. Известно, что линии RXD и TXD уже запаяны крест на накрест (RXD модуля с TXD МК, а TXD модуля с RXD МК), и потому к ним вопросов нет. А вопрос возникает в отношении остальных линий (DTR, RTS, CTS, DSR) модуля BlueTooth, которые присоединены к обычному порту МК (CTS напрямую, а остальные через резисторы 220 ом). Код Модуль Микроконтроллер: BlueTooth: Reset ------- 220 --------- PORT PIN0 TXD --------- 220 --------- USART RXD (PIN2) RXD ----------------------- USART TXD (PIN3) DTR --------- 220 --------- PORT PIN4 RTS --------- 220 --------- PORT PIN5 CTS ----------------------- PORT PIN6 DSR --------- 220 --------- PORT PIN7 (пины считаются от нуля: PIN0-PIN7) Вопрос: 1. Какие пины порта следует программировать на ввод, а какие на вывод? 2. Какие уровни (высокие или низкие) следует вывести на этот порт, чтобы модуль почувствовал себя в связке и не молчал в ответ на обращения к нему? Просьба: Ответить без умстовований на тему расшифровки аббревиатур и использования терминов "активных и пассивных линий". Таких умствований в интернете полным-полно, но все дружно помалкивают по поводу того, высокий уровень или низкий следует на них подавать. И совсем был бы кайф, если бы кто-то без рассуждений назвал две цифры (вместо вопросительных знаков) для этого случая: PORT.DIR = 0x?9; PORT.OUT = 0x?1; отдавая себе отчет в том, что ошибка может стоить мне порчи как МК, так и BT-модуля (на линии CTS нет ограничивающего ток резистора). Принципальную схему BT-модуля прилагаю, только она вряд ли может оказаться здесь полезной. http://77.72.19.18/Temp/MOD-BT-schematic.png
|
|
|
|
|
Aug 10 2014, 16:39
|

Гуру
     
Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237

|
Цитата(_Pasha @ Aug 10 2014, 13:27)  [code] | _BV(PIN4); // myDTR->DTR Так, что ли? Это если путаницы нету в реф.доках, они такое полюбляют... Источник не вызывает доверия, т.к. соединение myDTR->DTR явно ошибочное - одноименные линии между контроллером и модулем не соединяются никогда! В норме DTR - выходная линия контроллера, которая должна приниматься модулем на контакт DSR. По общим соображениям (стандарт RS-232), у контроллера на выход должны быть направлены линии TXD, RTS, DTR, а со стороны модуля им соответствуют RXD, CTS, DSR, соответственно. Следующая несуразица: uint8_t BTport_ini = _BV(PIN6) | _BV(PIN4); // rst=0; txd/rxd=alt.driven; myRTS=off; myDTR=off - выдача низкого уровеня на Reset. Этого в принципе делать нельзя, т.к. такие действия ставят внутренний контроллер модуля в стояние сброса: Цитата: "Device Reset. This exit mode is selected by either using the RESET_N line ( reset active low)"
|
|
|
|
|
Aug 11 2014, 19:14
|

Гуру
     
Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237

|
Цитата(_Pasha @ Aug 11 2014, 18:50)  С последующей установкой в "1", а как иначе? Все равно при инициализации ставится сразу на сброс а затем после паузы устанавливается в "1". А вот и нет! В единичку однако не ставится. Здесь (PIN0 упомянут): Код uint8_t BTport_dir = _BV(PIN0) // Rst | _BV(PIN3) // myTxD->RxD | _BV(PIN6) // myRTS->CTS | _BV(PIN4); // myDTR->DTR BTPORT_DDR = BTport_dir; выход на Reset окрывают, но при выдаче значения единичку туда не записывают (PIN0 не упомянут): Код uint8_t BTport_ini = _BV(PIN6) | _BV(PIN4); // rst=0; txd/rxd=alt.driven; myRTS=off; myDTR=off BTPORT = BTport_ini; При таком програмировании порта на линию RST поступит низкий уровень, переводящий МК модуля в состояние непрерывного сброса. Да и вообще, на мой взгляд, все биты порта в этом примере записаны шиворот на выворот, т.к. там не только модуль на ресет ставят, но "off" вроде бы должен соответствовать высокому уровню, а не низкому. По крайней мере, я читала, что у UART'а высокий уровень соотвествует отрицательному напряжению в стандарте RS-232, а низкий - положительному напряжению в стандарте RS-232. Т.е. и тут полярности перепутаны. Из-за чего картина в целом выглядит удручающей своей запутанностью. У меня даже возникло побуждение запрограммировать полный перебор всех возможных вариантов (кроме линий TX и RX, с которыми всё ясно) в режиме по 200 мс на каждый вариант. За 200 мс порты, глядишь, не сгорят, а модуль должен успеть ответить на запрос (согласно инструкции, он отвечает по-человечески "OK", когда выполняет команду, или отвечает "ERROR" с номером ошибки. В любом случае за это время должен успеть подать признаки жизни).
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|