Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Bluetooth
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам
Stanislav_S
Собственно интересует, встраивал ли кто в свои модули данный интерфейс. Какие впечатления, какие подводные камни? На какое железо стоит ориентироваться ( в плане доставабельности, глючности и и т д...), в общем хотелось бы услышать личные впечатления smile.gif
globalist
Цитата(Stanislav_S @ May 5 2007, 14:59) *
Собственно интересует, встраивал ли кто в свои модули данный интерфейс. Какие впечатления, какие подводные камни? На какое железо стоит ориентироваться ( в плане доставабельности, глючности и и т д...), в общем хотелось бы услышать личные впечатления smile.gif


Посмотрите здесь:
Подфорум Wireless/Optic

Просто не хочется плодить новые ветки к тому что уже есть.
Stanislav_S
Цитата(globalist @ May 6 2007, 23:15) *
Посмотрите здесь:
Подфорум Wireless/Optic

Просто не хочется плодить новые ветки к тому что уже есть.

Ага понятно, спасибо.
Xenia
Подскажите, кто твердо помнит, какие уровни надо подать на линии "рукопожатия", чтобы в дальнейшем модуль 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
_Pasha
Код
#define BTPORT PORTA
#define BTPORT_DDR DDRA

#define _BV(n) (1<<n)
uint8_t BTport_dir = _BV(PIN0)//Rst
            | _BV(PIN3)   //myTxD->RxD
            | _BV(PIN6)   // myRTS->CTS
            | _BV(PIN4); // myDTR->DTR

uint8_t BTport_ini = _BV(PIN6) | _BV(PIN4); // rst=0; txd/rxd=alt.driven; myRTS=off; myDTR=off

BTPORT = BTport_ini;
BTPORT_DDR = BTport_dir;


Так, что ли?
Это если путаницы нету в реф.доках, они такое полюбляют...
Xenia
Цитата(_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)"
_Pasha
Цитата(Xenia @ Aug 10 2014, 19:39) *
Этого в принципе делать нельзя, т.к. такие действия ставят внутренний контроллер модуля в стояние сброса:
Цитата: "Device Reset. This exit mode is selected by either using the RESET_N line (reset active low)"

С последующей установкой в "1", а как иначе? Все равно при инициализации ставится сразу на сброс а затем после паузы устанавливается в "1".
Про DTR вроде все правильно. Пусть еще кто-то скажет/рассудит.
Xenia
Цитата(_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" с номером ошибки. В любом случае за это время должен успеть подать признаки жизни).
_Pasha
Ксения, такое впечатление, что мы на разных планетах. laughing.gif
Ну да ладно, не впервой.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.