Например TDA7294

Форум РадиоКот • Просмотр темы - Таймер для PIC (PIC16F628A)
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 16, 2024 20:22:57

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


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 20 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Таймер для PIC (PIC16F628A)
СообщениеДобавлено: Пт сен 21, 2018 16:10:35 
Родился

Зарегистрирован: Ср фев 15, 2012 04:45:22
Сообщений: 13
Рейтинг сообщения: 0
Всем доброго времени суток. Господа нужна помощ в логике работы таймера для PIC, в упор не могу разобраться как оно работает и как мне правильно все сделать под свой код.... Суть вопроса в том, как сделать так, что бы при нажатии кнопки у меня начинался отчёт таймера, при этом если нажать ещё раз программа завершиться и перейдёт в ожидание, но если не была нажата кнопка и таймер досчитал до определенного момента происходит завершение программы и снова переход в ожидания

У меня есть готовый и полностью работающий код именно для кнопок, т.е кнопку нажал программа начала своё выполнение, ещё раз нажал программа завершилась и ушла в ожидание

Кто может подсказать, у кого будут какие либо мысли??


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймер для PIC (PIC16F628A)
СообщениеДобавлено: Пт сен 21, 2018 16:25:05 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14053
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Воть такое "устройство" (открытый исходник)...
https://radiokot.ru/forum/viewtopic.php ... 8#p3153788
Ежли одновременно и динамическая индикация на светодиодных 7-сегментниках на одном и том же МК - там другое решение потребуется.
А ежли любой тип дисплея с собственным мозгом (хоть ЖКИ, хоть светики) тогда просто заменить обработчик связи с дисплеем на соответствующий.
:beer:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймер для PIC (PIC16F628A)
СообщениеДобавлено: Вт сен 25, 2018 12:00:58 
Родился

Зарегистрирован: Ср фев 15, 2012 04:45:22
Сообщений: 13
Рейтинг сообщения: 0
Воть такое "устройство" (открытый исходник)...
https://radiokot.ru/forum/viewtopic.php ... 8#p3153788
Ежли одновременно и динамическая индикация на светодиодных 7-сегментниках на одном и том же МК - там другое решение потребуется.
А ежли любой тип дисплея с собственным мозгом (хоть ЖКИ, хоть светики) тогда просто заменить обработчик связи с дисплеем на соответствующий.
:beer:

Это немного не то :C
Есть возможность подсказать как сделать в поем случае? Щас пытаюсь добиться хотя бы задержку адекватную сделать, но при этом, что бы и кнопки работали

Сам код:

Спойлер
Код:
 #include <pic.h>
__CONFIG (INTIO & UNPROTECT & LVPDIS & BOREN & MCLRDIS & PWRTEN & WDTDIS );

#define uph1 RB0 // Вверх щуп
#define pump1 RA0 // Помпа
#define auto1 RA1 // Клапан автоподкачки
#define downh1 RB1 // Низ щуп
#define head RA2 // Тен
#define flap RA3 // Клапан группы
#define flapvalve RA7 // Клапан горячий воды
#define h1 RB2 // Кнопки
#define h2 RB3 // *
#define h3 RB4 // *
#define h4 RB5 // *
#define h5 RB6 // *
#define h6 RB7 // Кнопки
#define exitmk2 RA6

#define DLITUD 25 // Таймер задерэки

#define _XTAL_FREQ 4000000

char es1 (void); // Программа кнопи
char es2 (void); // Программа кнопи
char es3 (void); // Программа кнопи
char es4 (void); // Программа кнопи
char es5 (void); // Программа кнопи
char es9 (void); // Программа кнопи
void es8 (void); // Программа щуп

bit h1DOUN, h2DOUN, h3DOUN, h4DOUN, h5DOUN;
char timerpovtor01,timerpovtor02,timerpovtor03, timerpovtor04,timerpovtor05;

bit NAG;
int counter;

void main (void)
        {
        TRISA = 0b00000000; // направление работы ножек порта А
        TRISB = 0b11111111; // направление работы ножек порта В
        CMCON = 0b11111111; // отключение компараторов
        PORTA = 0b00000011; // очищаем порт А
        PORTB = 0b11111111; // очищаем порт Б
        RBPU = 0;  // подтягивающие R (0-вкл, 1-выкл)
        while(1)
                {
                if(es1()==1)                                   // Если присвоили "1" то
                        {
                        flap = 1; // Включается Клапан группы  // Запускается клапан группы (Порт RA3 = 1)
                        pump1 = 1; //Включается Помпа          // Запускается помпа (Порт RA0 = 1)
                        //exitmk2 = 0;
                        }                                     
                else if(es1()==2)                              // Если присвоили "2" то
                        {
                        flap = 0; // Включается Клапан группы  // Отключается клапан группы (Порт RA3 = 0)
                        pump1 = 0; //Включается Помпа          // Отключается помпа (Порт RA0 = 1)
                        }
                if(es2()==1)
                        {
                        flap = 1; // Включается Клапан группы
                        pump1 = 1; //Включается Помпа     
                        }
                else if(es2()==2)                              // Если присвоили "2" то
                        {
                        flap = 0; // Включается Клапан группы  // Отключается клапан группы (Порт RA3 = 0)
                        pump1 = 0; //Включается Помпа          // Отключается помпа (Порт RA0 = 1)
                        }
                if(es3()==1)
                        {
                        flap = 1; // Включается Клапан группы
                        pump1 = 1; //Включается Помпа     
                        }
                else if(es3()==2)                              // Если присвоили "2" то
                        {
                        flap = 0; // Включается Клапан группы  // Отключается клапан группы (Порт RA3 = 0)
                        pump1 = 0; //Включается Помпа          // Отключается помпа (Порт RA0 = 1)
                        }
                if(es4()==1)
                        {
                        flap = 1; // Включается Клапан группы
                        pump1 = 1; //Включается Помпа     
                        }
                else if(es4()==2)                              // Если присвоили "2" то
                        {
                        flap = 0; // Включается Клапан группы  // Отключается клапан группы (Порт RA3 = 0)
                        pump1 = 0; //Включается Помпа          // Отключается помпа (Порт RA0 = 1)
                        }
                if(es5()==1)
                        {
                        flapvalve = 1; // Включается Клапан группы
                        pump1 = 1; //Включается Помпа     
                        }
                else if(es5()==2)                              // Если присвоили "2" то
                        {
                        flap = 0; // Включается Клапан группы  // Отключается клапан группы (Порт RA3 = 0)
                        pump1 = 0; //Включается Помпа          // Отключается помпа (Порт RA0 = 1)
                        }
                es8 ();                                        // Функция Клапана горячий воды
                }     
         }
 

char es1 (void)                            // Программа 1 кнопки   
  {
       if (h1==0)                              // проверяем, кнопка нажата? уровень низкий?
       {
           _delay(10000);                      // подождем 10 мСек. задержка для устранения "дребезга"
           if (h1==0)                          // и еще раз проверим, кнопка нажата
           {
               if (!timerpovtor01&&!h1DOUN)    // проверяем бит, кнопка была нажата до этого?
               {
                   timerpovtor01=DLITUD;       // таймер задежки на время удержание клавиши
                   return 1;                   // одно нажатие, присваиваем "1" для "if es1"
               } 
               else if (h1==0)                          // Иначе
               {   
                   timerpovtor01--;            //
                   if(!timerpovtor01)          //
                   {
                       timerpovtor01=DLITUD;   //
                       h1DOUN=1;               //
                       return 2;               // удержание кнопки, присваиваем "2" для "else if es1"
                   }
                   return 0;                   // ожидание отработки таймера
               }           
            }

        /*else
            {
               /*__delay_ms(10000);                     // ? Не получается сделать задержку через timerpovtor06
               flap = 0; // Включается Клапан группы  // Отключается клапан группы (Порт RA3 = 0) // ? Не могу обраться к функции "else if(es1()==2)" через "return 2"
               pump1 = 0; //Включается Помпа          // Отключается помпа (Порт RA0 = 1)
                   
            }
       */
       }
       h1DOUN=0; // сброс бита сигнал удержания сформирован
       timerpovtor01=0;
       return 0;
  }
 

char es2 (void)
 
 {
       if (h2==0)//&&(auto1==0))                       // проверяем, кнопка нажата? уровень низкий?
       {
           _delay(10000);                       // подождем 10 мСек. задержка для устранения "дребезга"
           if (h2==0)//&&(auto1==0))                    // и еще раз проверим, кнопка нажата
           {
               if (!timerpovtor02&&!h2DOUN)    // проверяем бит, кнопка была нажата до этого?
               {
                   timerpovtor02=DLITUD;         // таймер задежки на время удержание клавиши
                   return 1;                   // одно нажатие
               }
               else if (h2==0)
               {
                   timerpovtor02--;              //
                   if(!timerpovtor02)            //
                   {
                       timerpovtor02=DLITUD;     //
                       h2DOUN=1;         //
                       return 2;               // удержание кнопки
                   }
                   return 0;                   // ожидание отработки таймера
               }
           }
       }
       h2DOUN=0; // сброс бита сигнал удержания сформирован
       timerpovtor02=0;
       return 0;
  }

char es3 (void)
 {
       if (h3==0)                      // проверяем, кнопка нажата? уровень низкий?
       {
           _delay(10000);                      // подождем 10 мСек. задержка для устранения "дребезга"
           if (h3==0)                   // и еще раз проверим, кнопка нажата
           {
               if (!timerpovtor03&&!h3DOUN)    // проверяем бит, кнопка была нажата до этого?
               {
                   timerpovtor03=DLITUD;         // таймер задежки на время удержание клавиши
                   return 1;                   // одно нажатие
               }
               else if (h3==0)
               {
                   timerpovtor03--;              //
                   if(!timerpovtor03)            //
                   {
                       timerpovtor03=DLITUD;     //
                       h3DOUN=1;         //
                       return 2;               // удержание кнопки
                   }
                   return 0;                   // ожидание отработки таймера
               }
           }
       else
            {
               __delay_ms(15000);                     // ? Не получается сделать задержку через timerpovtor06
               flap = 0; // Включается Клапан группы  // Отключается клапан группы (Порт RA3 = 0) // ? Не могу обраться к функции "else if(es1()==2)" через "return 2"
               pump1 = 0; //Включается Помпа          // Отключается помпа (Порт RA0 = 1)
                         
            }

       }
       h3DOUN=0; // сброс бита сигнал удержания сформирован
       timerpovtor03=0;
       return 0;
   }

char es4 (void)
 {
       if (h4==0)                     // проверяем, кнопка нажата? уровень низкий?
       {
           _delay(10000);                      // подождем 10 мСек. задержка для устранения "дребезга"
           if ((h4==0)&&(auto1==0))                    // и еще раз проверим, кнопка нажата
           {
               if (!timerpovtor04&&!h4DOUN)    // проверяем бит, кнопка была нажата до этого?
               {
                   timerpovtor04=DLITUD;         // таймер задежки на время удержание клавиши
                   return 1;                   // одно нажатие
               }
               else if (h4==0)
               {
                   timerpovtor04--;              //
                   if(!timerpovtor04)            //
                   {
                       timerpovtor04=DLITUD;     //
                       h4DOUN=1;         //
                       return 2;               // удержание кнопки
                   }
                   return 0;                   // ожидание отработки таймера
               }
           }
       else
            {
               __delay_ms(10000);                     // ? Не получается сделать задержку через timerpovtor06
               flap = 0; // Включается Клапан группы  // Отключается клапан группы (Порт RA3 = 0) // ? Не могу обраться к функции "else if(es1()==2)" через "return 2"
               pump1 = 0; //Включается Помпа          // Отключается помпа (Порт RA0 = 1)
                         
            }

       }
       h4DOUN=0; // сброс бита сигнал удержания сформирован
       timerpovtor04=0;
       return 0;
   }

char es5 (void)
 {
       if (h5==0)                       // проверяем, кнопка нажата? уровень низкий?
       {
           _delay(10000);                      // подождем 10 мСек. задержка для устранения "дребезга"
           if (h5==0)//&&(auto1==0))                    // и еще раз проверим, кнопка нажата
           {
               if (!timerpovtor05&&!h5DOUN)    // проверяем бит, кнопка была нажата до этого?
               {
                   timerpovtor05=DLITUD;         // таймер задежки на время удержание клавиши
                   return 1;                   // одно нажатие
               }
               else if (h5==0)
               {
                   timerpovtor05--;              //
                   if(!timerpovtor05)            //
                   {
                       timerpovtor05=DLITUD;     //
                       h5DOUN=1;         //
                       return 2;               // удержание кнопки
                   }
                   return 0;                   // ожидание отработки таймера
               }
           }
       else
            {
               __delay_ms(10000);                     // ? Не получается сделать задержку через timerpovtor06
               flap = 0; // Включается Клапан группы  // Отключается клапан группы (Порт RA3 = 0) // ? Не могу обраться к функции "else if(es1()==2)" через "return 2"
               pump1 = 0; //Включается Помпа          // Отключается помпа (Порт RA0 = 1)
                         
            }

       }
       h5DOUN=0; // сброс бита сигнал удержания сформирован
       timerpovtor05=0;
       return 0;
 }


void es8 (void)
 {
    if (uph1==0)
    {
         _delay(5000); // ожидаем 10 мс, пропускаем дребезг
         if (uph1==0&&NAG==0) // снова тестируем состояние порта и флага "кнопка была нажата" // Программа кнопки 1 - Эспрессо мал иначе если h3=1
         { // то
             NAG=1;
             head = 1;
             auto1 = 0; // Включается Клапан группы
             pump1 = 0; //Включается Помпа
             counter++;
         }
         else if (uph1==0)
         {
             _delay(5000);
             if (uph1==0&&NAG==0)
             {
                  NAG=1;
//                  auto1 =1;
//                  pump1 =1;
                  counter--;
             }
         }
         else
         {
             auto1 = 1;
             pump1 = 1;
             head = 0;
             NAG=0;
         }   
    }     
}
 


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Таймер для PIC (PIC16F628A)
СообщениеДобавлено: Вт сен 25, 2018 13:04:41 
Друг Кота
Аватар пользователя

Карма: 49
Рейтинг сообщений: 390
Зарегистрирован: Вс июл 12, 2009 19:15:29
Сообщений: 7010
Откуда: Ижевск
Рейтинг сообщения: 0
...при этом если нажать ещё раз программа завершиться и перейдёт в ожидание...

а таймер в это время чё делать должен?

_________________
Docendo discimus


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Таймер для PIC (PIC16F628A)
СообщениеДобавлено: Вт сен 25, 2018 17:54:46 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14053
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Придется СИшников обождать... Я ассемблером балуюсь...
:roll:


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Таймер для PIC (PIC16F628A)
СообщениеДобавлено: Ср сен 26, 2018 11:24:21 
Родился

Зарегистрирован: Ср фев 15, 2012 04:45:22
Сообщений: 13
Рейтинг сообщения: 0
...при этом если нажать ещё раз программа завершиться и перейдёт в ожидание...

а таймер в это время чё делать должен?

Ждать пока не истечет время, после нажатия кнопки, и завершить программу


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймер для PIC (PIC16F628A)
СообщениеДобавлено: Ср сен 26, 2018 12:15:25 
Друг Кота
Аватар пользователя

Карма: 49
Рейтинг сообщений: 390
Зарегистрирован: Вс июл 12, 2009 19:15:29
Сообщений: 7010
Откуда: Ижевск
Рейтинг сообщения: 1
Код:
Button= h1; // опросили кнопку для первоначальной установки переменной

while(1)
{
_delay_ms(10); // для подавления дребезга кнопки

oldButton= Button; // предыдущее состояние кнопки
Button= h1; // текущее состояние кнопки

if(oldButton && !Button) // момент нажатия кнопки
    {
    if(DataTimer) DataTimer= 0; // если кнопка нажата во время работы таймера, то останавливаем таймер
    else DataTimer= 555; // если таймер стоял, то запускаем его
                                    // число 555 соответствует 555*10мсек= 5550мсек= 5,55 сек таймера
    }

if(DataTimer) --DataTimer;
}

Вот так.

_________________
Docendo discimus


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймер для PIC (PIC16F628A)
СообщениеДобавлено: Ср сен 26, 2018 14:13:53 
Родился

Зарегистрирован: Ср фев 15, 2012 04:45:22
Сообщений: 13
Рейтинг сообщения: 0
Код:
Button= h1; // опросили кнопку для первоначальной установки переменной

while(1)
{
_delay_ms(10); // для подавления дребезга кнопки

oldButton= Button; // предыдущее состояние кнопки
Button= h1; // текущее состояние кнопки

if(oldButton && !Button) // момент нажатия кнопки
    {
    if(DataTimer) DataTimer= 0; // если кнопка нажата во время работы таймера, то останавливаем таймер
    else DataTimer= 555; // если таймер стоял, то запускаем его
                                    // число 555 соответствует 555*10мсек= 5550мсек= 5,55 сек таймера
    }

if(DataTimer) --DataTimer;
}

Вот так.


Идея очень хорошая, но почему то не получилось сделать все, ошибками сыпет
Есть возможность более подробно все расписать, как и куда все добавить? Если все получится в долгу не останусь :beer:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймер для PIC (PIC16F628A)
СообщениеДобавлено: Ср сен 26, 2018 15:24:28 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 155
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 2
Код:
while(1)
{
_delay_ms(10); // для подавления дребезга кнопки
...
}

Вот так.


Это наихудший вариант подавления дребезга...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймер для PIC (PIC16F628A)
СообщениеДобавлено: Пт сен 28, 2018 10:33:20 
Родился

Зарегистрирован: Ср фев 15, 2012 04:45:22
Сообщений: 13
Рейтинг сообщения: 0
Код:
while(1)
{
_delay_ms(10); // для подавления дребезга кнопки
...
}

Вот так.


Это наихудший вариант подавления дребезга...


Согласен, но на данный момент пусть так пока что и будет))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймер для PIC (PIC16F628A)
СообщениеДобавлено: Пт сен 28, 2018 11:28:02 
Друг Кота
Аватар пользователя

Карма: 49
Рейтинг сообщений: 390
Зарегистрирован: Вс июл 12, 2009 19:15:29
Сообщений: 7010
Откуда: Ижевск
Рейтинг сообщения: 0
Хм... А наилучший?

Добавлено after 1 minute 51 second:
BonTens86, распишите подробнее, что и как должно выполнять устройство, и пришлите мне в личку.

_________________
Docendo discimus


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймер для PIC (PIC16F628A)
СообщениеДобавлено: Пт сен 28, 2018 11:31:15 
Родился

Зарегистрирован: Ср фев 15, 2012 04:45:22
Сообщений: 13
Рейтинг сообщения: 0
Код:
Button= h1; // опросили кнопку для первоначальной установки переменной

while(1)
{
_delay_ms(10); // для подавления дребезга кнопки

oldButton= Button; // предыдущее состояние кнопки
Button= h1; // текущее состояние кнопки

if(oldButton && !Button) // момент нажатия кнопки
    {
    if(DataTimer) DataTimer= 0; // если кнопка нажата во время работы таймера, то останавливаем таймер
    else DataTimer= 555; // если таймер стоял, то запускаем его
                                    // число 555 соответствует 555*10мсек= 5550мсек= 5,55 сек таймера
    }

if(DataTimer) --DataTimer;
}

Вот так.


Я правильно понял, DataTimer это по сути TMR0? Если пытаться активировать таймер в коде, то почему то перестает работать вся программа после Инициализации прерываний
Подскажите как правильно все сделать??


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймер для PIC (PIC16F628A)
СообщениеДобавлено: Пт сен 28, 2018 11:46:30 
Друг Кота
Аватар пользователя

Карма: 49
Рейтинг сообщений: 390
Зарегистрирован: Вс июл 12, 2009 19:15:29
Сообщений: 7010
Откуда: Ижевск
Рейтинг сообщения: 0
DataTimer это счётчик таймера. Если там не ноль, то значит таймер взведён. Если 0, то отсчёт закончен. Организовать можно и как переменную, и как железный таймер (тот же TMR0). Просто так взять и вставить в ваш код нельзя. Нужно логически вживлять.

Добавлено after 2 minutes 19 seconds:
2dosikus:
где почитать про наилучший?

_________________
Docendo discimus


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймер для PIC (PIC16F628A)
СообщениеДобавлено: Пт сен 28, 2018 11:54:33 
Родился

Зарегистрирован: Ср фев 15, 2012 04:45:22
Сообщений: 13
Рейтинг сообщения: 0
DataTimer это счётчик таймера. Если там не ноль, то значит таймер взведён. Если 0, то отсчёт закончен. Организовать можно и как переменную, и как железный таймер (тот же TMR0). Просто так взять и вставить в ваш код нельзя. Нужно логически вживлять.

Добавлено after 2 minutes 19 seconds:
2dosikus:
где почитать про наилучший?


Да это понятно) Но видимо где то ошибся, потому и не заработало :C

Про наилучший если я его правильно понял то он про таймер имел ввиду, дабы не стопарить программу если много задержек будет


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймер для PIC (PIC16F628A)
СообщениеДобавлено: Пт сен 28, 2018 12:03:13 
Друг Кота
Аватар пользователя

Карма: 49
Рейтинг сообщений: 390
Зарегистрирован: Вс июл 12, 2009 19:15:29
Сообщений: 7010
Откуда: Ижевск
Рейтинг сообщения: 0
...он про таймер имел ввиду...

dosikus программист опытный и понимает, что я расписал только саму идею. Хотя, возможно, вы и правы.

_________________
Docendo discimus


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймер для PIC (PIC16F628A)
СообщениеДобавлено: Пт сен 28, 2018 16:47:52 
Друг Кота
Аватар пользователя

Карма: 138
Рейтинг сообщений: 2712
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 21790
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Про наилучший если я его правильно понял то он про таймер имел ввиду, дабы не стопарить программу если много задержек будет

Задержек вообще быть не должно.
Антидребезг кнопки, это ее программное чтение с интервалом больше, чем дребезг. Все, точка.
То есть либо в прерывании от таймера, либо в суперлупе. Последнее геморройней, ибо период в суперлупе нестабилен.
Счетные функции кнопки (нажал-отжал) реализуют в месте ее чтения.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймер для PIC (PIC16F628A)
СообщениеДобавлено: Пт сен 28, 2018 17:50:53 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 155
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
Крам, уже все расписал, добавлю только что почитайте о вертикальных счетчиках. На микрочип.сю есть реализация на них от tester...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймер для PIC (PIC16F628A)
СообщениеДобавлено: Пт сен 28, 2018 18:20:33 
Друг Кота
Аватар пользователя

Карма: 49
Рейтинг сообщений: 390
Зарегистрирован: Вс июл 12, 2009 19:15:29
Сообщений: 7010
Откуда: Ижевск
Рейтинг сообщения: 0
...программное чтение с интервалом больше, чем дребезг...

10мс больше чем дребезг?
dosikus писал(а):
... о вертикальных счетчиках...

Согласен, можно отсчитать не 10, а 5 раз по 2.
----------
Стоит ли в программе, управляющей тремя светодиодами в зависимости от состояния одной кнопки, городить такой огород? Впрочем, на вкус и цвет. Опять же - каждый суслик в поле агроном.
От себя: что-то мне это напоминает бритву. Да-да, того самого.

_________________
Docendo discimus


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймер для PIC (PIC16F628A)
СообщениеДобавлено: Пт сен 28, 2018 18:37:19 
Друг Кота
Аватар пользователя

Карма: 138
Рейтинг сообщений: 2712
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 21790
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
10мс обычно хватает, но бывают кнопки, которым нужно 30мс. Легко проверить опытным путем.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Таймер для PIC (PIC16F628A)
СообщениеДобавлено: Пт сен 28, 2018 18:51:59 
Друг Кота
Аватар пользователя

Карма: 49
Рейтинг сообщений: 390
Зарегистрирован: Вс июл 12, 2009 19:15:29
Сообщений: 7010
Откуда: Ижевск
Рейтинг сообщения: 0
Благодарю за ответ. В промконтроллерах дело доходит до 80мсек. И опрашиваются не только кнопки, но и датчики, и блок-контакты, и прочая.

_________________
Docendo discimus


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

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


Кто сейчас на форуме

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


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

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


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y