Easyelectronics.ru

Электроника для всех
Текущее время: 12 ноя 2018, 23:15

Часовой пояс: UTC + 5 часов



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин комплектующих.

Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Помогите грамотно загнать STM8 в halt()
СообщениеДобавлено: 16 авг 2018, 21:04 
Заглядывает иногда

Зарегистрирован: 27 май 2013, 20:25
Сообщения: 82
Господа, сварганил программку, которая по нажатию кнопки включает режим HALT, а по следующему нажатию выводит из него.
Но вот беда, в HALT контроллер жрет 40 мА (именно миллиампер).
Да, я знаю, что нужно отключать периферию и прочее, я пошел проще - для читоты эксперимента включил halt сразу после void main(void) {...
Стало 35 мА.

Нашел в интернете код, но он для STM8L, и мой компилятор не хочет жрать некоторые команды. Привожу его ниже, то, на что компилятор ругается - закомментировано. У меня IAR если что и последний SPL
Цитата:
void Halt_Init(void)
{

TIM1_Cmd(DISABLE);
//TIM2_CtrlPWMOutputs(DISABLE);
TIM2_Cmd(DISABLE);
//TIM3_Cmd(DISABLE);
TIM4_Cmd(DISABLE);
ADC1_Cmd(DISABLE);
//PWR_PVDCmd(DISABLE);

/* Switch to LSI as system clock source */
/* system clock prescaler: 1*/
// CLK_SYSCLKDivConfig(CLK_SYSCLKDIV_1);
// CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_LSI);
//CLK_SYSCLKSourceSwitchCmd(ENABLE);

// while (CLK_GetFlagStatus(CLK_FLAG_LSIRDY) == 0);
CLK_HSICmd(DISABLE);
//CLK_HSEConfig(CLK_HSE_OFF);

/* Set STM8 in low power */
//PWR_UltraLowPowerCmd(ENABLE);

/* Set GPIO in low power*/
GPIO_LowPower_Config(); // C ЭТИМ У МЕНЯ ВСЕ В ПОРЯДКЕ, НАПИСАЛ СВОЙ, НО ОН ДАЕТ ЭКОНОМИИ В ЕДИНИЦЫ мА.

/* Stop RTC Source clock */
//CLK_RTCClockConfig(CLK_RTCCLKSource_Off, CLK_RTCCLKDiv_1);

/* Stop clock RTC and LCD */
// CLK_PeripheralClockConfig(CLK_Peripheral_RTC, DISABLE);
//CLK_PeripheralClockConfig(CLK_Peripheral_LCD, DISABLE);
}


C одной стороны, как бы хочется просить, что нужно для STM8S вместо этих строк. Порылся в самом SPL но к примеру аналог CLK_SYSCLKDivConfig не нашел. Есть CLK_SYSCLKConfig, но по-моему это что-то не то.
С другой стороны, хочтся спросить, а зачем эти манипуляции с тактированием, если, по идее сама команда halt() останавливает генератор. Может я тут потрачу уйму времени на то, чтобы перевети код тактирования под STM8, а у меня в чем-то другом причина...

ЧТо за устройство? Китайский индикатор заряда аккумулятора. Хочу изменить режимы его работы, но в илу закрытости прошивки, занимаюсь ревер инжинирингом. Все уже сделал, не могу сделать главное - обеспечить микропотребление в спящем режиме. Так вот плата эта в оригинале, с китайской прошивкой в спящем режиме кушает 15 мкА. То есть проблем с железом точно нет, вопрос в том, как написать код.
Может у кого есть кусок кода "правильного" посылания контроллера на halt() ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите грамотно загнать STM8 в halt()
СообщениеДобавлено: 17 авг 2018, 02:35 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 2931
Откуда: КЧР, поселок Нижний Архыз
У L же по умолчанию все выключено, а у S — включено. RM почитать, однако...
И да, пихать говноSPL в STM8 — это вообще [censored]!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите грамотно загнать STM8 в halt()
СообщениеДобавлено: 17 авг 2018, 10:20 
Заглядывает иногда

Зарегистрирован: 04 окт 2017, 22:23
Сообщения: 102
zheka писал(а):
Но вот беда, в HALT контроллер жрет 40 мА (именно миллиампер).

Что???? Как вам это удалось?????


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите грамотно загнать STM8 в halt()
СообщениеДобавлено: 17 авг 2018, 10:22 
Заглядывает иногда

Зарегистрирован: 04 окт 2017, 22:23
Сообщения: 102
zheka писал(а):
Может у кого есть кусок кода "правильного" посылания контроллера на halt() ?

asm("HALT");


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите грамотно загнать STM8 в halt()
СообщениеДобавлено: 17 авг 2018, 11:28 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 2931
Откуда: КЧР, поселок Нижний Архыз
radioslon писал(а):
Как вам это удалось?

Думаю, если бы ТС использовал калокуб для STM8 (к счастью, пока еще такого Г нет), то и все 150мА было бы запросто!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите грамотно загнать STM8 в halt()
СообщениеДобавлено: 17 авг 2018, 12:41 
Заглядывает иногда

Зарегистрирован: 04 окт 2017, 22:23
Сообщения: 102
https://www.st.com/content/ccc/resource ... 219011.pdf тоже полезно почитать... ЕМНИП перевод неиспользуемого порта на выход это минус 10мкА на каждую ногу


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите грамотно загнать STM8 в halt()
СообщениеДобавлено: 19 авг 2018, 00:40 
Заглядывает иногда

Зарегистрирован: 27 май 2013, 20:25
Сообщения: 82
В общем я взял обычную китайскую отладочную плату, запитал ее не через имеющийся LDO, а непоредственно от разъема программирования. Сам LDO отпаял, потому как в этм случае ток куда-то в него уходит, потребляется то бишь.
Простым вызовом halt() сразу после void main (void) { у меня получилось 35 мкА. манипуляции переводом в нужное состояние портов, выключений всего что нужно, удалось снизить потребление до 11 мкА. Иными словами, все пляски с бубнами, описанные даташиты, нужны там, где речь идет о борьбе за единицы микроампер.

Возвращаемся к моей китайской плате - она в режиме Halt жрет 21 мА. Если же отключить ее от программатора - 50 мА. То есть проблема в схемотехнике. Но на плате ошибок нет, потому как, повторюсь, исходной прошивкой она жрала те же 11 мкА. То есть китайская прошивка прежде чем перевести в halt, как то мотивирует обвязку контроллера на голодание.

Господа не обессудьте, выкладываю то что набросал на листе бумаги. Понятно, что шлак, я не требую подсказать решение по этой схеме. Если дойдет до того, что в схеме действительно кто-то "ворует электричество", но из-за качества схемы непонятно, тогда нарисую в КАДе и выложу.
А сейчас выкладываю этот шлак на случай, если косяк лежит на поверхности и его не оставит труда заметить даже на такой схеме

Трехногая микруха слева - преоразователь питания на 3.3 вольт. Транзисторный ключ справа - управляет подсветкой. Неизвестный эемент вверху. левая нога которого идет к двум коненсаторам и земле - похожа на чип индуктивность. Микруха справа - драйвер дисплея. Питается с ноги PC4 14 пина (он отключен, если что).
Нижняя кнопка - она-то и включает и выключает устройство.



Может мне кто объяснит назначение МОСФЕТа внизу? Если вы обратите внимание, то с его истока проводник идет к LDO, питающему контроллер. То есть МОСФЕТ должен быть открыт. И открывается он внешним питанием, через резистор. Но видите ли, в этом случае эту функцию транзистора с успехом заменил бы обычный проводник. Но там еще два диода, развязывающие его от остальных частей схемы. Кстати, я дергал PD3 и в ноль и в плюс - управляя его затвором - эффекта не возымело.

Будут мысли у кого-нибудь?


Вложения:
777.jpg
777.jpg [ 107.58 Кб | Просмотров: 628 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите грамотно загнать STM8 в halt()
СообщениеДобавлено: 19 авг 2018, 02:21 
Старожил

Зарегистрирован: 11 сен 2012, 11:19
Сообщения: 5124
ТС , вам лень местный форум и сообщество пролистать? И не обесудьте на стм8 с спл пишут только *****"....


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB