Страница 1 из 8 1234567 ... ПоследняяПоследняя
Показано с 1 по 10 из 73

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Продвинутый
    Регистрация
    23.02.2009
    Сообщений
    352
    Вес репутации
    264

    По умолчанию Прерывания в Arduino.

    типа как у х86 прерывания по таймеру? а то хочу навесить ардуино для решения пары простых, но длительных по времени задач, было бы сделать проще как обработчик прерывания. или просто на какой-нить вход подать тактовые импульсы и на этом сделать что-то вроде обработчика? опять же, мож есть внутренний таймер для этой цели, чтоб не городить ниче вокруг?

    ну и примеры программки, если есть...

  2. #2
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,382
    Вес репутации
    10

    По умолчанию Re: а есть ли у ардуино прерывания?

    Привожу два примера прерываний.

    Ниже пример кода для Arduino, прерывание по таймеру
    В этом примере процедура flash_led будет выполнятся каждый раз по истечению 0,5 сек.
    PHP код:
    //Выполнение процедуры по прерыванию таймеру.
    #include <MsTimer2.h>
      
    static boolean output HIGH;
      
    void flash_led() //обработчик прерывания
    {
      
    digitalWrite(13, (output==HIGH) ? output=LOW output=HIGH);
    }

    void setup() {
      
    pinMode(13HIGH);

      
    MsTimer2::set(500flash_led); // 500ms период
      
    MsTimer2::start();  //включить таймер
    }

    void loop() 
    {
    //.....

    Еще один пример работы аппаратного прерывания.
    В данном примере при изменении напряжения на ножке D2
    каждый раз будет выполнятся процедура int_on
    Таких входов в Arduino всего 2 (D2,D3)
    И несколько вариантов настройки событий
    LOW - to trigger the interrupt whenever the pin is low,
    CHANGE - to trigger the interrupt whenever the pin changes value
    RISING - to trigger when the pin goes from low to high,
    FALLING - for when the pin goes from high to low.

    PHP код:
    #define PinA  2
    static boolean output HIGH;

    void setup() 
    {   
      
    pinMode(PinAINPUT); 
      
    digitalWrite(PinAHIGH);     // подключить подтягивающий резистор
      
    attachInterrupt(0int_onCHANGE);  // настроить прерывание interrupt 0 на pin 2


    void loop()
    {
    //........
    }

    // обработка прерывания
    void  int_on()
    {
    digitalWrite(13, (output==HIGH) ? output=LOW output=HIGH);

    Вложения Вложения
    Последний раз редактировалось Chip; 04.07.2011 в 12:28.

  3. #3
    Продвинутый
    Регистрация
    23.02.2009
    Сообщений
    352
    Вес репутации
    264

    По умолчанию Re: Прерывания в Arduino.

    а не в курсе, случаем, есть возможности дернуть сигнал откуда-нибудь о достижении скорости километров в 20? или все же придется импульсы с датчика скорости считать? приятнее было бы че-нить с уровнем 0 и 1. двиг 2AZ-FE, на камри в частности ставится. понимаю, что управление меняется и от модели и от года, но вдруг есть наколки какие

  4. #4
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,382
    Вес репутации
    10

    По умолчанию Re: Прерывания в Arduino.

    Акселерометр использовать.

  5. #5
    Пользователь
    Регистрация
    04.07.2011
    Возраст
    47
    Сообщений
    22
    Вес репутации
    169

    По умолчанию Re: а есть ли у ардуино прерывания?

    Цитата Сообщение от Chip Посмотреть сообщение
    Привожу два примера прерываний.

    Ниже пример кода для Arduino, прерывание по таймеру
    В этом примере процедура flash_led будет выполнятся каждый раз по истечению 0,5 сек.
    PHP код:
    //Выполнение процедуры по прерыванию таймеру.
    #include <MsTimer2.h>
      
    static boolean output HIGH;
      
    void flash_led() //обработчик прерывания
    {
      
    digitalWrite(13, (output==HIGH) ? output=LOW output=HIGH);
    }

    void setup() {
      
    pinMode(13HIGH);

      
    MsTimer2::set(500flash_led); // 500ms период
      
    MsTimer2::start();  //включить таймер
    }

    void loop() 
    {
    //.....

    Еще один пример работы аппаратного прерывания.
    В данном примере при изменении напряжения на ножке D2
    каждый раз будет выполнятся процедура int_on
    Таких входов в Arduino всего 2 (D2,D3)
    И несколько вариантов настройки событий
    LOW - to trigger the interrupt whenever the pin is low,
    CHANGE - to trigger the interrupt whenever the pin changes value
    RISING - to trigger when the pin goes from low to high,
    FALLING - for when the pin goes from high to low.

    PHP код:
    #define PinA  2
    static boolean output HIGH;

    void setup() 
    {   
      
    pinMode(PinAINPUT); 
      
    digitalWrite(PinAHIGH);     // подключить подтягивающий резистор
      
    attachInterrupt(0int_onCHANGE);  // настроить прерывание interrupt 0 на pin 2


    void loop()
    {
    //........
    }

    // обработка прерывания
    void  int_on()
    {
    digitalWrite(13, (output==HIGH) ? output=LOW output=HIGH);

    Подскажите
    1) где взять библиотеку MsTimer2.h, которой вы пользуетесь.
    2) где взять описание комманд типа PortA, DDRD
    3) в языке для Ардуино я не нашел описания оператора "?". Вы его применяете в такой связке - digitalWrite(13, (output==HIGH) ? output=LOW : output=HIGH);. Это очень удобный оператор, но где можно увидетьполный список операторов и комманд Ардуины?

  6. #6
    Местный
    Регистрация
    10.11.2010
    Сообщений
    144
    Вес репутации
    201

    По умолчанию Re: а есть ли у ардуино прерывания?

    Цитата Сообщение от RainMan Посмотреть сообщение
    ...
    3) в языке для Ардуино я не нашел описания оператора "?". ... Это очень удобный оператор, но где можно увидетьполный список операторов и комманд Ардуины?
    Вопрос интересный - про источник информации и "недокументированные" функции. А про "удобность"... помоему очень вредный оператор, поскольку наверняка это просто "орфографический" вариант оператора IF, обладающий кратким написанием в тексте и огромной неинформативностью при отладке. Соответственно получается "грязный" текст с одинаковым кодом.

  7. #7
    Местный
    Регистрация
    10.11.2010
    Сообщений
    144
    Вес репутации
    201

    По умолчанию Re: а есть ли у ардуино прерывания?

    Такой вопрос: можно ли сконфигурировать цифровой вход на генерацию прерывания по фронту, затем в обработчике прерывания обнулить таймер по прерыванию затем тут же переконфигурировать ЭТОТ же вход на прерывание по спаду и выйти из обработчика прерывания. Потом по прерыванию по спаду в обработчике прочитать значение таймера и переконфигурировать ЭТОТ же вход снова на прерывание по фронту и т.д. в цикле...

  8. #8
    Модератор
    Регистрация
    06.07.2008
    Возраст
    46
    Сообщений
    414
    Вес репутации
    443

    По умолчанию Re: Прерывания в Arduino.

    я бы рекомендовал либо GPS либо с датчика скорости. С датчика скорости просто импульсы идут. Напрягает больше всего то, что надо провода тащить, а обработать импульсы совсем просто.

  9. #9
    Продвинутый
    Регистрация
    23.02.2009
    Сообщений
    352
    Вес репутации
    264

    По умолчанию Re: Прерывания в Arduino.

    да там проводов-то... метр в салоне. буду щщитать

  10. #10
    Продвинутый
    Регистрация
    23.02.2009
    Сообщений
    352
    Вес репутации
    264

    По умолчанию Re: Прерывания в Arduino.

    кстати, о птичках. а сколько примерно длиться цикл с инкрементом и парой проверок? на атмеге 16-20Мгц. чтоб поменьше гадать

Страница 1 из 8 1234567 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

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