Перейти к содержанию

brusel

Members
  • Постов

    5
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные brusel

  1. 12 часов назад, IMXO сказал:

    .. может это не ваше?

    может и не мое... и нахера такое советовать. Я и без вас знаю что мое, что не мое. Мне этот  проект нада на один раз. Не хочешь помогать - лучше промолчи.

    12 часов назад, IMXO сказал:

    а что нужно когда одновременно нажаты "Старт" и "Стоп" ? а что делает твой код в этой ситуяйции?

    одновременно нажмают "Старт" и "Стоп"  только дебилы, я для их обработчик этого события писать не буду?

    Вопрос к BARS. Помоги с таймером. мне некогда сейчас читать книжки, нада запускать станок.

     

     

  2. Пришлось добавить еще одну кнопку "СТОП". Код ниже. Прошил тиньку, на макетке вроде работает, пауза 8 сек.

    #define F_CPU 1200000UL
    #define OUT PB2
    #define OUT10 PB0
    #define BUT_Start PB4 
    #define BUT_Stop PB3 
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <util/delay.h>
    
    
    // Обработчик прерывания PCINT0
    ISR(PCINT0_vect)
    {
       _delay_ms (60); // антидребезг (использовать задержки в прерываниях некошерно, но пока и так сойдёт)
      if  ((PINB & (1<<BUT_Stop)) == 0) // если нажата кнопка
      {
        PORTB &= ~((1<<OUT)|(1<<OUT10)); //выкл.
      }
    }
    
    int main(void)
    {
      // Пины кнопок
      DDRB &= ~((1<<BUT_Start)|(1<<BUT_Stop)); // входы
      PORTB |= (1<<BUT_Start)|(1<<BUT_Stop); // подтянуты
      // Пин светодиода
      DDRB |= (1<<OUT)|(1<<OUT10); // выход
      PORTB &= ~((1<<OUT)|(1<<OUT10)); // выключен
      
      GIMSK |= (1<<PCIE); // Разрешаем внешние прерывания PCINT0.
      PCMSK |= (1<<BUT_Stop); // Разрешаем по маске прерывания на ногах кнопки 
      sei(); // Разрешаем прерывания глобально
      
        while (1) 
        {
            _delay_ms (60); // антидребезг
            if ( (PINB & (1<<BUT_Start)) == 0 )    // если нажата кнопка
              {
              PORTB |= ((1<<OUT)|(1<<OUT10));           //вкл
              _delay_ms (8000);                       // пауза 
              }
              PORTB &= ~(1<<OUT10);          //выкл         
        }
    }

    Что нужно: кнопка "Стар"т сразу включает 2 реле, одно из которых отключается через 8-10 сек. Второе остается включено пока не нажата кнопка "Стоп".

    Если кто-то подскажет  как улучшить код, чтобы не было сбоев, буду очень благодарен.

  3. On 25.07.2019 at 08:04, BARS_ said:

    Значит неправильно настройки заданы. Пауза должна быть 45 секунд. И вообще, на кой для такой простейшей задачи целый МК?

    проверял в протеусе пауза работает 7-8 секунд, как раз то что надо.

    Задача простая - управлять реле которое включится на 7-10 сек и отключится.

    Идеальный вариант  добавить потенциометр для регулировки таймера. Может поможете с кодом, а то я пока не шарю. Данный пример где-то нашел и пробую.

  4. Правильно? В протеусе вроде работает. Пауза где-то 7-8 сек.

    #define F_CPU 1200000UL
    #define OUT PB2
    #define LED PB0
    #define BUTTON1 PB4 
    #include <avr/io.h>
    #include <util/delay.h>
    
    int main(void)
    {
      // Пины кнопок
      DDRB &= ~((1<<BUTTON1)); // входы
      PORTB |= (1<<BUTTON1); // подтянуты
      // Пин светодиода
      DDRB |= (1<<LED)|(1<<OUT); // выход
      PORTB &= ~((1<<LED)|(1<<OUT)); // выключен
      
        while (1) 
        {
            _delay_ms (50); // антидребезг
            if ( (PINB & (1<<BUTTON1)) == 0 )    // если нажата кнопка
              {
              PORTB |= ((1<<OUT)|(1<<LED));           //вкл
              _delay_ms (45000);                       // пауза 
              }
              PORTB &= ~((1<<OUT)|(1<<LED));          //выкл         
        }
    }

     

  5. Привет, помогите сделать так, чтобы по нажатию кнопки на несколько секунд появлялся высокий уровень на выходах LED и OUT.

    #define F_CPU 1200000UL
    #define OUT PB2
    #define LED PB0
    #define BUTTON1 PB4 
    #include <avr/io.h>
    #include <util/delay.h>
    
    int main(void)
    {
      // Пины кнопок
      DDRB &= ~((1<<BUTTON1)); // входы
      PORTB |= (1<<BUTTON1); // подтянуты
      // Пин светодиода
      DDRB |= (1<<LED)|(1<<OUT); // выход
      PORTB &= ~((1<<LED)|(1<<OUT)); // выключен
      
        while (1) 
        {
            _delay_ms (50); // антидребезг
            if ( (PINB & (1<<BUTTON1)) == 0 )    // если нажата кнопка
              {
              PORTB |= ((1<<OUT)|(1<<LED));           //вкл
              }
              _delay_ms (1000);                       // пауза 
              PORTB &= ~((1<<OUT)|(1<<LED));          //выкл
        }
    }

     

×
×
  • Создать...