Имеется код, но при подключении питания немного помигивает, как убрать этот дребезг? может кто знает
RA0-вход RA2-выход
Обработка срабатывания при нажатии в функции interrupt isr.
Проблема в том, что при подаче питания без нажатия кнопки еле еле помигивает на выходе светодиод. А должен формироваться шим-сигнал только по нажатию и ничего кроме него.
#pragma config FOSC = INTOSC //???????? ?????????? ????????? #define _XTAL_FREQ 16000000 // Declare crystal frequency to be 16MHZ (for delay functions) #pragma config WDTE = 00 //????????? ?????? //#pragma config LVP = OFF // Low-Voltage Programming Enable (Low-voltage programming enabled) //#pragma config LPBOR = OFF // Low-Power Brown Out Reset (Low-Power BOR is disabled) /*#pragma config PWRTE = OFF // Power-up Timer Enable (PWRT disabled) #pragma config MCLRE = ON // MCLR Pin Function Select (MCLR/VPP pin function is MCLR) #pragma config BOREN = ON // Brown-out Reset Enable (Brown-out Reset enabled) #pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
// CONFIG2 #pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off) #pragma config STVREN = ON // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will cause a Reset) #pragma config BORV = HI // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.) #pragma config LPBOR = OFF // Low-Power Brown Out Reset (Low-Power BOR is disabled) #pragma config LVP = ON // Low-Voltage Programming Enable (Low-voltage programming enabled) */ uint8_t countMode=0; //????? ?????????? ?????? uint8_t reqChangeMode=0; //????, ???????????? ????? ????????? ???????? ?????
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4510 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Bondosha писал(а):
на ножке RA0
Об этом мы должны догадаться ?
Bondosha писал(а):
хватит издеваться
Кто издевается тут, так это Вы единственный.
Или Вы считаете, что Вам лень выкинуть всё г... из кода, оставив только то, что относится к вопросу, выложив это сюда, хорошо откомментировав и нормально, корректно, внятно задать вопрос; а нам ковыряться в этом г... не лень ? Анализируя всю логику этого г..кода, выискивая проблему ... При всём при этом, ещё догадываться, что у Вас там за сопли напаяны, что куда подключено, и т.д...
Так не включайте ШИМ до нажатия кнопки: PWM1EN = 1; //???????? ?????? PWM
Добавлено after 53 minutes 54 seconds: Еще не понятно зачем проверять нажатие кнопки в прерывании по переполнению таймера? Дребезг не так обычно фильтруют.
А как ? Не паузу же делать для основного цикла программы при обнаружении нажатия кнопки ? Именно в прерывании счётчик времени нажатия кнопки, и флаг отпускания кнопки ...
Добавлено after 12 minutes 37 seconds: В прерывании срабатывает флаг отпуска кнопки, а счётчик времени нажатия оной считает . А в основном цикле уловив что флаг отпуска изменился, проверяем время нажатия , и думаем что делать дальше ...
_________________ Не спрашивай по ком звонит колокол, он звонит по тебе !
А кто мешает прерывание по смене уровня включить? Кто мешает запускать таймер когда надо только? Кто мешает в основном цикле считать без ожидания в конце концов? Ну да ладно, у вас там ошибок предостаточно. Взять хотя бы это:
С комментариями ну совсем не совпадает. Pre и post перепутали местами. Pre выствален в 1:4, а не 1:16 как написано у вас. Ну да ладно. Прерывание, форматирую только сразу в читаемый вид:
Ну во-первых ваш таймер с таким PR2 и делителями переполняется примерно раз в 1мс. Может для фильтра помех и достаточно, но для дребезга самой кнопки очень мало. А во-вторых подумайте чему изначально у вас равно statButton? Если вы не инициализировали значение, то там будут нули изначально. Это Си, компилятор так сделает. Вы тут же впихнете туда 1 из-за не нажатой кнопки и тут же сработает условие statButton == 0b01. Ну и плюс зачем вы дергаете постоянно в цикле LATA2 ? Не мешайте ШИМу работать.
Добавлено after 4 minutes 16 seconds: Это если у вас кнопка к + прижимает при нажатии. Если к земле, то отпускания вы не ждете получается...
Добавлено after 5 minutes 12 seconds: Можно как-то так на скорую руку если по вашему:
Код:
void interrupt isr(void) { static uint8_t statButton; if (TMR2IE && TMR2IF) { if (RA0) { if (statButton < 255) statButton++; } else { if (statButton > 0) statButton--; if (statButton >= 50) { // кнопка была нажата > ~51мс countMode = (countMode + 1) & 0x3; reqChangeMode = 1; statButton = 0; // сбросим } } }
Нудануда, нужно бросить все ресурсы МК на бедную кнопку. Нужно наворотить кучу кода в прерываниях. Это по нашему, по-бразильски... А если кнопок несколько и их количество превышает количество пинов с внешними прерываниями?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения