Spider 0 December 31, 2024 Posted December 31, 2024 · Report post Всем привет и с наступающим! Подключен значит у меня к 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() - работает. Но как-то.... Как так то? Quote Share this post Link to post Share on other sites More sharing options...
mantech 63 December 31, 2024 Posted December 31, 2024 · Report post 5 часов назад, Spider сказал: Всем привет Как вы этот STC прошиваете? Я в курсе, что есть прога stc-isp-v6.94L.exe и шить через УАРТ, но сам процесс, т.е. там сразу после ресета надо подключать уарт или какая-то другая посл-сть? Quote Share this post Link to post Share on other sites More sharing options...
Spider 0 January 1 Posted January 1 · Report post Да. Шью их утилитой, ещё в PlatformIO встроена автоматизация этого процесса. Единственное, что бутлоадер в этой зверюшке просыпается только после события Power On, на сброс он не реагирует. Когда-то купил на AliExpress программатор (по сути CP2102), но с силовым ключом на борту, завязанным куда-то на RTS или около того, и PlatformIO сама справляется с задачей сброса питания. Quote Share this post Link to post Share on other sites More sharing options...
mantech 63 January 3 Posted January 3 · Report post В 01.01.2025 в 10:27, Spider сказал: бутлоадер в этой зверюшке просыпается только после события Power On, на сброс он не реагирует. Т.е. программирование возможно только в момент подачи питания получается? Если не сложно сможете описать там 1.2.3 что за чем, например: 1) Вкл питание 2) не далее, чем через 1 сек жмем прошить в программе и т.п. Нигде не видел подобное описание... Quote Share this post Link to post Share on other sites More sharing options...
Spider 0 January 3 Posted January 3 · Report post Подключаем RX TX к uart Выбираем в утиле STC ISP номер СОМ порта Жмём в утиле кнопку Check MCU Прога уходит в ожидание события Подаём питание на проц Прога сама это видит и сама себя настраивает на этот процесс. Далее тыкаем настройки по вкусу. Выбираем файл какой шить. Снимаем питание с проца Жмём кнопку Programm Подаём питание на проц. Профит. Quote Share this post Link to post Share on other sites More sharing options...
r_dot 0 January 3 Posted January 3 · Report post 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 И шкурный вопрос. Вам описание протокола программирования не встречалось? Тех материалов с Гитхаба, где делались попытки вкрыть протокол, для написания собственного ПО для программирования недостаточно. Протокол там неполный. Quote Share this post Link to post Share on other sites More sharing options...
Spider 0 January 8 Posted January 8 · Report post 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... Quote Share this post Link to post Share on other sites More sharing options...
r_dot 0 January 8 Posted January 8 · Report post 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 не наткнулся. Quote Share this post Link to post Share on other sites More sharing options...
mantech 63 January 9 Posted January 9 · Report post В 03.01.2025 в 18:42, Spider сказал: Подключаем RX TX к uart Спасибо! Quote Share this post Link to post Share on other sites More sharing options...
Spider 0 January 9 Posted January 9 · Report post 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(); Quote Share this post Link to post Share on other sites More sharing options...
r_dot 0 January 10 Posted January 10 · Report post Да, оба - цифровой выход. А SR и DR наверное по default? Не пробовали менять? Хотя вообще маловероятно, что дело в настройках... Spider, а у вас чип один, или на нескольких так же? Quote Share this post Link to post Share on other sites More sharing options...
Spider 0 January 11 Posted January 11 · Report post 2 макетки ведут себя идентично. Нет не пробовал SR DR. Quote Share this post Link to post Share on other sites More sharing options...
r_dot 0 January 11 Posted January 11 · Report post А в вашей настройке настройке PWMx_CR2 нет? Или defaut используется? В даташите это в п. 20.7.4 Control Registers 2 (PWMx_CR2). Quote Share this post Link to post Share on other sites More sharing options...
Spider 0 January 12 Posted January 12 · Report post Да то что по умолчанию там и стоит. Не вижу его влияния при любом раскладе на PWM4 или PWM8 ну или на ноги.... Quote Share this post Link to post Share on other sites More sharing options...
r_dot 0 January 12 Posted January 12 · Report post Spider Ну, мыслей больше пока нет. Эффект ваш повторить не получается, так что вся надежда на вас. Эффект конечно любопытный. Правда что ли у Shenzhen Guoxin ляп в изделии. Но никаких Errata у них нет... Найдёте - отпишитесь. Интересно. Quote Share this post Link to post Share on other sites More sharing options...