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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> SIM800l и режим энергосбережения
Bil
сообщение Aug 19 2017, 17:21
Сообщение #1





Группа: Участник
Сообщений: 7
Регистрация: 19-08-17
Пользователь №: 98 880



Добрый день.
Имеется китайская платка с обвесом sim800l.
В целом, все, что хотел получить от модуля через stm32f1x, получил.
Осталось заставить модуль уходить в сон когда ему нечего делать.
Судя по амперметру, модуль вполне уменьшает потреблние вдвойку через 5 сек неактивности в режиме "AT+CSCLK=2".
Но! Модуль непрерывно мечет байты 0x11, 0x13 на вход контроллера по USART.
Без сна все работает идеально, никакой левоты, после вывода из сна все также работает корректно.
Что за мусор идет в порт во сне? Наводки от отключенного передатчика? Пробовал подсунуть резистор 10к с RX контроллера на землю. Никого не впечатлил sm.gif
Есть ли ответ/идеи по подавлению мусора?
Спасибо.
PS. Мусор не дает перевести контроллер в сон. Работе, в принципе, не мешает.
Go to the top of the page
 
+Quote Post
Bil
сообщение Aug 20 2017, 08:39
Сообщение #2





Группа: Участник
Сообщений: 7
Регистрация: 19-08-17
Пользователь №: 98 880



11h - 13h это XON - XOFF.
Откуда они берутся по-прежнему не понятно. Флагов ошибок нет.
Отключить управление потоком на stm32, насколько я понимаю, нельзя.

Go to the top of the page
 
+Quote Post
Mysteo
сообщение Aug 22 2017, 12:01
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 27-09-12
Пользователь №: 73 707



Пробуждайте МК через линию uart_RI, а от uart отвяжите пробуждение. Или на stm это нельзя сделать?
Go to the top of the page
 
+Quote Post
Bil
сообщение Aug 22 2017, 16:27
Сообщение #4





Группа: Участник
Сообщений: 7
Регистрация: 19-08-17
Пользователь №: 98 880



Можно.
Но. Чтение все равно придется сделать по прерыванию. А это будет будить контроллер.
По опросу, как оказалось, не успеваю вычитывать. Да и безобразно это по логике.
Через dma буду постоянно забивать буфер этими xon'ами.
Попробую уводить в сон sim800 по первому варианту - через dtr. Там прозрачнее пробуждение и, судя по описанию, другой вариант мониторинга порта для сна. Может он совсем заснет...
Go to the top of the page
 
+Quote Post
Bil
сообщение Aug 23 2017, 18:11
Сообщение #5





Группа: Участник
Сообщений: 7
Регистрация: 19-08-17
Пользователь №: 98 880



Подключил DTR. SIM800 стала адекватнее просыпаться. Все необходимое работает.
Ксоны-ксофы так и сыпятся.
Забил. При извлечении множу на ноль. Получилось не увеличить заметно потребление.
Go to the top of the page
 
+Quote Post
Цырен.
сообщение Aug 24 2017, 09:32
Сообщение #6


Евгений
***

Группа: Участник
Сообщений: 328
Регистрация: 13-10-11
Пользователь №: 67 706



Цитата(Bil @ Aug 23 2017, 21:11) *
Подключил DTR. SIM800 стала адекватнее просыпаться. Все необходимое работает.
Ксоны-ксофы так и сыпятся.
Забил. При извлечении множу на ноль. Получилось не увеличить заметно потребление.


Странно, все это. А у вас включен CMUX? И какая у вас прошивка? Можете привести весь АТ лог, чтобы я воспроизвел у себя на отладке (на SIM800H)? Я себя я этого не вижу, и это ненормально.


--------------------
Go to the top of the page
 
+Quote Post
Bil
сообщение Aug 25 2017, 18:25
Сообщение #7





Группа: Участник
Сообщений: 7
Регистрация: 19-08-17
Пользователь №: 98 880



Настройка модуля. Условно. Контроль удален. Все выполняется без ошибок
Put_Modem ( "AT+IFC=1,1", 0, TRUE );
Put_Modem ( "AT+IPR=4800", 0, TRUE );
Put_Modem ( "ATE0", 0, TRUE );
Put_Modem ( "ATV1", 0, TRUE );
Put_Modem ( "AT+CMEE=1", 0, TRUE );
Put_Modem ( "AT+CLIP=1", 0, TRUE );
Put_Modem ( "AT+CMGF=0", 0, TRUE );
Put_Modem ( "AT+CSCS=\"UCS2\"", 0, TRUE );
Put_Modem ( "AT+CSCB=1", 0, TRUE );
Put_Modem ( "AT+CPMS=\"ME_P\",\"ME_P\",\"ME_P\"", 0, TRUE );
Put_Modem ( "AT+CMGDA=6", 0, TRUE );
Put_Modem ( "AT+CNMI=3,2", 0, TRUE );
Put_Modem ( "AT+DDET=1,100,0,0", 0, TRUE );
Put_Modem ( "AT+CSGS=0", 0, TRUE );
Put_Modem ( "AT+CNETLIGHT=0", 0, TRUE );
Put_Modem ( "AT+CSCLK=1", 0, TRUE );

Перевод модуля в спать
void Set_Modem_Low_Power ( void ) {
GPIO_WriteBit ( GPIOA, GPIO_Pin_5, Bit_SET );
}

Вывод модуля из спать
void Set_Modem_Std_еPower ( void ) {
uint32_t Time = RTC_GetCounter ();
GPIO_WriteBit ( GPIOA, GPIO_Pin_5, Bit_RESET );
while ( ( RTC_GetCounter () - Time ) < 2 );
}

Извлечение байта
void USART1_IRQHandler ( void ) {
if ( USART_GetFlagStatus ( USART1, USART_FLAG_RXNE ) != RESET ) {
uint8_t Byte = USART_ReceiveData ( USART1 );
if ( ( Byte != 0x11 ) && ( Byte != 0x13 ) ) {
*USART_Write_Pointer++ = Byte;
if ( USART_Write_Pointer == ( USART_Buffer + USART_BUFFER_SIZE ) )
USART_Write_Pointer = USART_Buffer;
}
}
}

Настройка околомодульного железа
GPIO_StructInit ( &GPIO_InitStruct );
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init ( GPIOA, &GPIO_InitStruct );
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;
GPIO_Init ( GPIOA, &GPIO_InitStruct );
USART_StructInit ( &USART_InitStruct );
USART_InitStruct.USART_BaudRate = 4800;
USART_InitStruct.USART_WordLength = USART_WordLength_8b;
USART_InitStruct.USART_StopBits = USART_StopBits_1;
USART_InitStruct.USART_Parity = USART_Parity_No;
USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_Init ( USART1, &USART_InitStruct );
USART_Cmd ( USART1, ENABLE );
USART_ITConfig ( USART1, USART_IT_RXNE, ENABLE );

Сейчас не могу сказать версию, забыл посмотреть. Но. Заменил позапрошлогодний модуль 800l на модуль, купленный в этом году. Никакой разницы.
Сейчас подключил RI от модуля.
Перед переводом в сон контроллера перевожу ноги rx и tx в вывод и верхнее состояние. Чтобы не прерываться от этих ксонов.
По прерыванию от RI перенастраиваю ноги в правильный режим и включаю тактирование usart контроллера. С удивлением вижу, что ничего не теряю. Для этого, на всякий, максимально понизил скорость порта.
Задачу решил. От ксонов не избавился. Что-то я с портом контроллера или модулем не доделал.
Go to the top of the page
 
+Quote Post
serglg
сообщение Aug 26 2017, 03:52
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 58
Регистрация: 19-07-16
Пользователь №: 92 603



XON/XOFF - это ведь программное управление потоком?
Модуль настроен так, что регулярно сообщает - "я готов к приему".
Ну так надо в настройках его порта сказать - "без контроля потока".
Или таких настроек нет?

Сообщение отредактировал serglg - Aug 26 2017, 03:52
Go to the top of the page
 
+Quote Post
Bil
сообщение Aug 26 2017, 07:46
Сообщение #9





Группа: Участник
Сообщений: 7
Регистрация: 19-08-17
Пользователь №: 98 880



Зачем он сообщает при "отключенном" по даташиту порте?
Модуль кастрат. Аппаратного управления сделать не могу.
Без контроля модуль может, контроллер - нет. Да и не знаю что из этого вышло бы.
С другой стороны, почему контроллер не режет управляющие символы?..

Revision:1418B04SIM800L24

Сообщение отредактировал Bil - Aug 26 2017, 07:57
Go to the top of the page
 
+Quote Post
vit496
сообщение Aug 28 2017, 08:07
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 27-09-07
Пользователь №: 30 876



Цитата(Bil @ Aug 20 2017, 12:39) *
Отключить управление потоком на stm32, насколько я понимаю, нельзя.

Не понимаю этой фразы. Как можно включить или выключить в самом контроллере программное управление потоком (software flow)? Оно же ведь в программе (пользователя)?
Попробуйте AT+IFC=0,0 или 2,2 (при 2,2 нужно на RTS подать 0).
Go to the top of the page
 
+Quote Post
CADiLO
сообщение Aug 28 2017, 13:34
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 5 764
Регистрация: 26-08-05
Из: Днепр
Пользователь №: 7 988



Мыши плакали, кололись, но продолжали жрать кактус.
Не надоело еще возиться с SIM800L который был предназначен неизвестно кому на китайском рынке и неизвестно с чем внутри.

Почему у меня на SIM800H и SIM800С все нормально со сном?
Ничего в порт не плюет и потребление меньше миллиампера.
Специально поставил модули на отладку и перепроверил.
Go to the top of the page
 
+Quote Post
Mysteo
сообщение Aug 28 2017, 14:29
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 27-09-12
Пользователь №: 73 707



Я тоже на трех модемах 900 серии D и R проверил, проблем таких не было )
Go to the top of the page
 
+Quote Post
Bil
сообщение Aug 28 2017, 18:57
Сообщение #13





Группа: Участник
Сообщений: 7
Регистрация: 19-08-17
Пользователь №: 98 880



Цитата(vit496 @ Aug 28 2017, 11:07) *
Не понимаю этой фразы. Как можно включить или выключить в самом контроллере программное управление потоком (software flow)? Оно же ведь в программе (пользователя)?


В программе оно когда от порта используется только приемо/передатчик.

Цитата
Попробуйте AT+IFC=0,0 или 2,2 (при 2,2 нужно на RTS подать 0).


2.2 нельзя, китайский модуль sim800l не имеет соответствующих дырок, иначе вопрос и не появился бы.
А вот 0, 0 ЕЩЕ раз попробовал. И офигел, и контроллер все понимал, и ксоны кончились...
С этого, от безысходности, начинал. Похоже, я настраивал поток в начальный затуп, так как из последних изменений только начальная пауза. Ибо положенных мне после старта RDY и других URC я в отладчике так и не увидел. Слишком медлеено он стартует, походу. Натолкнула на паузу странная работа с оповещением о смс. Под отладчиком приходят ожидаемые +CMT. А без отладчика (в реале) присовывал мне +CMTI. В листинге видно сколько всего надо сделать до управления форматом оповещения. Только с большой паузой на старте модем адекватно съел команды когда они ему приходили без паузы отладчика.
Кстати, про сон. Общее потребление приблуды в работе 27мА. При засыпании sim потребление падает до 18мА. При засыпании контроллера - до 13мА. Питая контроллер отлельно, определил, что он жрет в работе около 8мА. То есть, засыпает до 3мА. А вот sim никак на заявленный 1мА близко не выходит. Кроме них есть два dc-dc и два делителя на пол мА в сумме.
Всем спасибо, все , что хотел, получил.
Go to the top of the page
 
+Quote Post
CADiLO
сообщение Aug 28 2017, 19:46
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 5 764
Регистрация: 26-08-05
Из: Днепр
Пользователь №: 7 988



>>>А вот sim никак на заявленный 1мА близко не выходит.

прекрасно выходит, приезжайте в гости - покажу.

дергаем DTR - спать!

UART контроллера в третье состояние чтобы стоповый бит не висел на приеме - порт модуля должен быть в это время вообще отключен и не иметь вытекающего тока.

и контролируем RI

по прерыванию выжидаем положеные 50 миллисекунд, просыпаемся и начинаем общение


читайте доки и используйте нормальные модули и прошивки

кстати есть хитрости которые позволяют на SIM800C получить 0.8 мА без потери сети, а на SIM868 - 0.45 мА
но это для тех кто не только доки на модуль прочел, а и апнотесы и даташит на чипсет
проверено на штатных релизных прошивках - таки работает.

проверялось на EVB KIT и потом на PIC24 и NUC472 и NUC240
Go to the top of the page
 
+Quote Post
ArtemKAD
сообщение Aug 29 2017, 05:37
Сообщение #15


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

Группа: Свой
Сообщений: 1 396
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364



Цитата(CADiLO @ Aug 28 2017, 22:46) *
UART контроллера в третье состояние чтобы стоповый бит не висел на приеме - порт модуля должен быть в это время вообще отключен и не иметь вытекающего тока.

Можно так не извращаться. Даже если использована подтяжка на стороне МК выход модуля по любому в единице. Т.е. токов там или нет или малозаметны на уровне единиц-десятков мкА. Больше вопросов возникает если используется 5В МК и какой нибудь веселый преобразователь уровня который может жрать на уровне модуля...

Цитата(CADiLO @ Aug 28 2017, 22:46) *
и контролируем RI

по прерыванию выжидаем положеные 500 миллисекунд, просыпаемся и начинаем общение

0,5с по прерыванию? Точно со временем не ошиблись? Это откуда такая величина?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 25th September 2017 - 17:10
Рейтинг@Mail.ru


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