Страница 5 из 8 ПерваяПервая 12345678 ПоследняяПоследняя
Показано с 41 по 50 из 73
  1. #41
    Пользователь
    Регистрация
    01.11.2010
    Возраст
    42
    Сообщений
    57
    Вес репутации
    177

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

    хочу попробовать сделать коммутатор на скутер, суть такова:
    1. считать импульс с датчика Холла
    2. запустить таймер с учетом количества оборотов, прока что будет без ФУОЗ
    3. при срабатывании таймер выдать искру, ну и все по новой.
    Главное чтобы это все не тормозило основную программу, вот и подумал сделать через прерывания. Уже что-то началось получаться

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

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

    А длительность импульса зачем измерять?

    Вот на основе этого скетча можно сделать то что тебе нужно
    PHP код:
    #include <util/delay.h>  

    volatile unsigned int tachBuf;  
    unsigned long tachValue;  

    ISR(TIMER1_CAPT_vect)  
    {   
        
    TCNT1 0;    
        
    tachBuf ICR1+2;  
    }  
    //********************************************************************  
    void setup()      
    {    
       
    pinMode(8INPUT);  //Вход для импульсов спидометра  
       
    pinMode(6OUTPUT);//выход ШИМ  
       
    TCCR0B TCCR0B 0b11111000 5;//частота ШИМ   
       
    analogWrite(6128);  //Запустить ШИМ  
       
    digitalWrite(8HIGH); // включить подтяжку входа  
       
    Serial.begin(115200);  
       
    TIM_Init();//инициализация таймера  
      
    _delay_ms(300);  
    }    
    //********************************************************************  
    void loop()      
    {  
      
    cli();    
      
    tachValue =250000/tachBuf;  
      
    Serial.print("freq=");  
      
    Serial.println(tachValue,DEC);  
      
    tachBuf=1;  
      
    sei();  
      
    _delay_ms(300);  
    }     
    //********************************************************************  
    void TIM_Init(void)  
    {  
       
    TIMSK1=(1<<ICIE1);   
       
    TCCR1A=(0<<COM1A1)|(0<<COM1A0)|(0<<WGM11)|(0<<WGM10);    
       
    TCCR1B=(1<<ICNC1)|(1<<ICES1)|(0<<WGM13)|(0<<WGM12)|(0<<CS12)|(1<<CS11)|(1<<CS10);  
       
    TCNT1 0;                                             

    Последний раз редактировалось Chip; 11.03.2012 в 16:45.

  3. #43
    Пользователь
    Регистрация
    01.11.2010
    Возраст
    42
    Сообщений
    57
    Вес репутации
    177

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

    1. этот код работает от 250Гц, это меня не устраивает
    2. мне длительность импульса не надо мерить, мб я не совсем точно объяснил. вот что мне надо в идеале:
    а. ловим импульс от датчика (пока что буду ловить по спаду)
    б. в зависимости от количества оборотов на данный момент запустить таймер
    в. когда таймер сработает он должен выдать коротко временный импульс и выключиться

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

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

    Этот код работает от 4Гц

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

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

    Цитата Сообщение от sirik Посмотреть сообщение
    ...
    2. мне длительность импульса не надо мерить,... в зависимости от количества оборотов ...
    Длина импульса и есть "количество оборотов": либо длину импульса либо период - что-то одно из двух придётся мерить.

  6. #46
    Пользователь
    Регистрация
    01.11.2010
    Возраст
    42
    Сообщений
    57
    Вес репутации
    177

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

    т.е. получается для статистики (т.е. для тахометра) достаточно измерить длину импульса.. спасибо за подсказку, не догадался

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

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

    Гораздо точнее будут показания если измерять частоту, в моем примере как раз частота и измеряется

  8. #48
    Новичок
    Регистрация
    18.06.2012
    Сообщений
    6
    Вес репутации
    147

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

    Доброго времени Уважаемый Chip, я новичёк в прогрммировании *duino, и уперся в прерывния, есть такая задача зажигать СД на 6-50 мс (регулируется переменником) с паузой 5-60 сек (регулируется другим переменником), значения выводятся на LCD я сделал это с помощью delay, но проц виснит если пауза дольше 30ти сек и вывод на LCD опаздывает (как и регулировка) на длину этих delay, начал копать и до капал до прерыванию по таймеру, но не могу найти хоть что либо похожее под мою ситуацию для примера... Вы не могли бы на брасать хотябы принцип, буду очень благодарен...

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

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

    Возьми пример с MsTimer2
    PHP код:
    //Выполнение процедуры по прерыванию таймера.  
    #include <MsTimer2.h>   
        
    void flash_led() //обработчик прерывания  
    {  
      
    digitalWrite(13HIGH);
      
    delay(30);     //длительность импульса
      
    digitalWrite(13LOW) ;
    }  

    void setup() 
    {  
      
    pinMode(13,OUTPUT);  
      
    MsTimer2::set(30000flash_led); // будет срабатывать каждые 30сек. 
      
    MsTimer2::start();  //включить таймер  
    }  

    void loop()   
    {  
    //здесь может быть Ваш код

    Последний раз редактировалось Chip; 19.06.2012 в 00:13.

  10. #50
    Новичок
    Регистрация
    18.06.2012
    Сообщений
    6
    Вес репутации
    147

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

    Цитата Сообщение от Chip Посмотреть сообщение
    Возьми пример с MsTimer2
    Спасибо огромное, по моему то что нужно....

Страница 5 из 8 ПерваяПервая 12345678 ПоследняяПоследняя

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

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

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

Ваши права

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