Jump to content
    

STC8H1K08 при инициализации PWM8 перестаёт работать нога P1.6 как GPIO

Всем привет и с наступающим!

Подключен значит у меня к PWM8P (P3.4) бузер, а к ноге P1.6 светодио, которым я моргаю раз в секунду дабы индицировать свою живость. Моргаю вот так:

P1_6 ^= 1

и всё моргает. Теперь захотел я запищать бузером, и для этого проинициализировал PWM вот так:

static inline void PWMInit(void)
{
    SFRX_ON();
    PWMB_CCE2 &= ~0x30;                         //CC8P = 0, CC8E = 0
    PWMB_CCMR4 = 0x60;                          //OC8M = 110 - PWM Mode 1
    PWMB_CCE2 = 0x10;                           //CC8E = 1, CC8P = 0
    PWMB_CCR4H = 0x19;                          
    PWMB_CCR4L = 0xEC;
    PWMB_ARRH = 0x33;                           
    PWMB_ARRL = 0xD9;                           
    PWMB_ENO |= 0x40;                           //ENO8P = 1 - Enable PWM8 output
    PWMB_IOAUX &= ~0x40;                        //AUX8P = 0 - PWM8 output is directly controlled by ENO8P
    PWMB_BKR |= 0x80;                           //MOEB = 1 - Main output enable
    PWMB_CR1 &= ~0x01;                          //CENB = 1 - Enable the counter
    SFRX_OFF();
}

Далее чтобы пищать использую следующий код:

static void Beep(void)
{
    SFRX_ON();
    PWMB_CR1 |= 0x01;
    SFRX_OFF();
    delay(50);
    SFRX_ON();
    PWMB_CR1 &= ~0x01;
    SFRX_OFF();
}

Это всё ещё тяп ляп, дабы заставить работать, я с этими процами можно сказать впервые...

Так вот после вызова PWMInit() диод на ноге P1.6 перестаёт моргать, при этом проц начинает раз в секнуду жрать дикий ток (100мА с 5В), видно что нога пытается дёргаться и видать закорочена на землю внутри цепями PWM, но вот не могу понять, как инициализация PWMB отразилась на этой ноге. Нигде связей нет. Я уже пробовал явно поотключать все в PWMA (там эта нога перекрывается с PWM4P), но тоже безрезультатно.

Это мой косяк где то? Или так в принципе низя....

 

Сейчас сделал косытль. Перед Beep() я вызываю PWMInit(), пищу, потом делаю PWMDeInit() - работает. Но как-то.... Как так то? 

Share this post


Link to post
Share on other sites

5 часов назад, Spider сказал:

Всем привет

Как вы этот STC прошиваете? Я в курсе, что есть прога stc-isp-v6.94L.exe и шить через УАРТ, но сам процесс, т.е. там сразу после ресета надо подключать уарт или какая-то другая посл-сть?

Share this post


Link to post
Share on other sites

Да. Шью их утилитой, ещё в PlatformIO встроена автоматизация этого процесса.

 

Единственное, что бутлоадер в этой зверюшке просыпается только после события Power On, на сброс он не реагирует.

 

Когда-то купил на AliExpress программатор (по сути CP2102), но с силовым ключом на борту, завязанным куда-то на RTS или около того, и PlatformIO сама справляется с задачей сброса питания.

Share this post


Link to post
Share on other sites

В 01.01.2025 в 10:27, Spider сказал:

бутлоадер в этой зверюшке просыпается только после события Power On, на сброс он не реагирует.

Т.е. программирование возможно только в момент подачи питания получается? Если не сложно сможете описать там 1.2.3 что за чем, например:

1) Вкл питание

2) не далее, чем через 1 сек жмем прошить в программе и т.п.

Нигде не видел подобное описание...

Share this post


Link to post
Share on other sites

Подключаем RX TX к uart

Выбираем в утиле STC ISP номер СОМ порта

Жмём в утиле кнопку Check MCU

Прога уходит в ожидание события

Подаём питание на проц

Прога сама это видит и сама себя настраивает на этот процесс.

Далее тыкаем настройки по вкусу. 

Выбираем файл какой шить.

Снимаем питание с проца

Жмём кнопку Programm

Подаём питание на проц.

Профит.

Share this post


Link to post
Share on other sites

On 12/31/2024 at 10:00 AM, Spider said:

Подключен значит у меня к PWM8P (P3.4) бузер, а к ноге P1.6 светодиод ... после вызова PWMInit() диод на ноге P1.6 перестаёт моргать ... как инициализация PWMB отразилась на этой ноге

Есть смысл сверить получающийся ассемблерный код PWMInit() с даташитом. В даташите написаны всякие тонкости, которые могут очень сильно влиять на функциональность, если их строго не выполнять. Типа вот таких:

Quote

The writing operation of the 16-bit PWMA_CCRi register is completed through the preload register. Two instructions must be used to complete the entire process, one instruction corresponds to one byte. The upper byte must be written first. When writing the upper byte, the shadow register update is prohibited until the write operation of the lower byte is completed.

И (если склероз не изменяет) у этих контроллеров по-моему есть настройка совместного использования всех каналов PWM. Очень похоже, что при включении PWMB у вас включается и PWMA.

 

On 12/31/2024 at 10:00 AM, Spider said:

Или так в принципе низя...

Ничего такого, что не было бы описано в даташите, за этими контроллерами не замечалось.

Посмотрите также инициализацию PWM в примере с сайта производителя. Опять же по памяти, по-моему там есть пример управления моторами квадрокоптера.

 

 

6 hours ago, Spider said:

в утиле STC ISP

И шкурный вопрос. Вам описание протокола программирования не встречалось? Тех материалов с Гитхаба, где делались попытки вкрыть протокол, для написания собственного ПО для программирования недостаточно. Протокол там неполный.

Share this post


Link to post
Share on other sites

On 1/4/2025 at 3:40 AM, r_dot said:

И (если склероз не изменяет) у этих контроллеров по-моему есть настройка совместного использования всех каналов PWM. Очень похоже, что при включении PWMB у вас включается и PWMA.

Да я что мог понять - сверил. Я пробовал явно отключать PWMA

PWMA_CCE2 &= ~0xF0;                         //CC4NP = 0, CC4NE = 0, CC4P = 0, CC4E = 0
PWMA_CCMR4 = 0x60;                          //OC4M = 110 - PWM Mode 1
PWMA_CCE2 = 0x10;                           //CC4E = 1, CC4P = 0
PWMA_CCR4H = 0x19;                          
PWMA_CCR4L = 0xEC;
PWMA_ARRH = 0x33;                           
PWMA_ARRL = 0xD9;                           
PWMA_ENO |= 0x40;                           //ENO4P = 1 - Enable PWM4P output
PWMA_IOAUX &= ~0xC0;                        //AUX4P = 0 - PWM4 output is directly controlled by ENO4P
PWMA_BKR |= 0x80;                           //MOEB = 1 - Main output enable
PWMA_CR1 &= ~0x01;                          //CENB = 1 - Enable the counter

PWMA_ENO = 0x00;
PWMA_IOAUX = 0x00;
PWMA_CR1 = 0x00;
PWMA_PS = 0xFF;

Ну вроде как старался отключить PWM4 и все его хвосты.

 

On 1/4/2025 at 3:40 AM, r_dot said:

Посмотрите также инициализацию PWM в примере с сайта производителя. Опять же по памяти, по-моему там есть пример управления моторами квадрокоптера.

Два вместе они прекрасно работают. Я пробовал настроить PWM4 как таймер переключающий свой вывод максимально длительное время и LED это олично отображает. Но с GPIO вопрос не закрыт...

 

On 1/4/2025 at 3:40 AM, r_dot said:

И шкурный вопрос. Вам описание протокола программирования не встречалось?

Лично мне нет, но PIO отлично справляется с этой задачей утилей https://github.com/grigorig/stcgal Я не вникал, но вроде как OpenSource, ну и что что Python...

Share this post


Link to post
Share on other sites

3 hours ago, Spider said:

Я пробовал настроить PWM...

Не видел вашей настройки портов. Там не может быть?

Попробовал ваш случай (ну почти) на своей плате. Правда на ней STC8H1K17. Настройки PWM и п/п пищика тупо взял ваши. P1.6 просто ставил в "0" и в "1". При вызове что PWMInit, что Beep, уровень на P1.6 не меняется, лишний ток не жрёт, на P3.4 меандр примерно 10 кГц (чего-то высоковато для баззера, не?)...
Но к выходам у меня ничего не подключено, смотрю осциллографом. У вас на плате внешних соединений этих выводов нет случайно?
Или может с P3.4 при каком-то уровне большой ток потребляется, вот и например питание просаживается, затыкается свечение светодиода (чип и от 1,8 В работает, а светодиод уже светить не будет). Как у вас Buzzer подключен?

Я б попробовал проверить в статике, что происходит без PWM, при настройке обоих портов как выход и при всех возможных четырёх комбинациях уровней на выходах P1.6 и P3.4.

За ссылочку спасибо. Искал ведь там, а на stcgal не наткнулся. :bye:

Share this post


Link to post
Share on other sites

В 03.01.2025 в 18:42, Spider сказал:

Подключаем RX TX к uart

Спасибо!

Share this post


Link to post
Share on other sites

9 hours ago, r_dot said:

Я б попробовал проверить в статике, что происходит без PWM, при настройке обоих портов как выход и при всех возможных четырёх комбинациях уровней на выходах P1.6 и P3.4.

То то и оно, что пока PWMInit() не вызываешь. Обе ноги прекрасно работают как gpio. И нет внешние цепи в порядке. Обе ноги во всех положениях работают отлично при условии управления gpio.

9 hours ago, r_dot said:

Не видел вашей настройки портов. Там не может быть?

P1   = 0b00110000;

P1M0 = 0b01000101;
P1M1 = 0b00000010;

P3   = 0b00000010;

P3M0 = 0b00010010;
P3M1 = 0b00001101;

SFRX_ON();

P1PU = 0x00;
P1NCS= 0b00000010;

P3PU = 0x00;
P3NCS= 0b00000000;

SFRX_OFF();

 

Share this post


Link to post
Share on other sites

Да, оба - цифровой выход.  А SR и DR наверное по default? Не пробовали менять? Хотя вообще маловероятно, что дело в настройках...

Spider, а у вас чип один, или на нескольких так же?

Share this post


Link to post
Share on other sites

2 макетки ведут себя идентично.

Нет не пробовал SR DR.

Share this post


Link to post
Share on other sites

А в вашей настройке настройке PWMx_CR2 нет? Или defaut используется?

В даташите это в п. 20.7.4 Control Registers 2 (PWMx_CR2).
 

Share this post


Link to post
Share on other sites

Да то что по умолчанию там и стоит. Не вижу его влияния при любом раскладе на PWM4 или PWM8 ну или на ноги....

Share this post


Link to post
Share on other sites

Spider  Ну, мыслей больше пока нет. Эффект ваш повторить не получается, так что вся надежда на вас. Эффект конечно любопытный. Правда что ли у Shenzhen Guoxin ляп в изделии. Но никаких Errata у них нет...
Найдёте - отпишитесь. Интересно.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...