Страница 8 из 118 ПерваяПервая ... 2345678910111213141858108 ... ПоследняяПоследняя
Показано с 71 по 80 из 1174
  1. #71
    Пользователь
    Регистрация
    04.11.2009
    Сообщений
    30
    Вес репутации
    192

    По умолчанию Re: Панель приборов.

    Код HTML:
    // Сбор данных с пяти АЦП, диапазон значений [0, 255]  
        // 0 - скорость  
        // 1 - тахометр  
        // 2 - температура охлаждающей жидкости  
        // 3 - уровень топлива  
        // 4 - напряжение автомобильной сети  
        for(i=0; i<=4; i++)  
          {  
            resultInput[i]=analogRead(i);    
          }
    я так понимаю считывание информации о напряжении и показания тахометра происходят одним и тем же средством - что не верно.
    Вопрос: Как заставить ардуино считать количество импульсов в заданую еденицу времени?

  2. #72
    Пользователь
    Регистрация
    04.11.2009
    Сообщений
    30
    Вес репутации
    192

    По умолчанию Re: Панель приборов.

    Цитата Сообщение от Chip Посмотреть сообщение
    Нужно параллельный входу подобрать конденсатор
    Уровень напряжения будет изменятся от количества импульсов?

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

    По умолчанию Re: Панель приборов.

    ДА .
    Хотя по хорошему нужно программу переделать.
    Последний раз редактировалось Chip; 03.12.2009 в 15:27.

  4. #74
    Пользователь
    Регистрация
    04.11.2009
    Сообщений
    30
    Вес репутации
    192

    По умолчанию Re: Панель приборов.

    конечно программу потому что с конденсатором не будет работать 2"аппаратный" тахометр. Дайте хотябы направление как на ардуино подсчитать импульсы за определенное время.

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

    По умолчанию Re: Панель приборов.

    На аппаратный тахометр кондер не повлияет , так как он будет висеть на входе Кардуино через резистор
    Настроить пин 2 на прерыване , включить таймер, в подпрограмме прерывания считать импульсы и время
    Последний раз редактировалось Chip; 03.12.2009 в 15:54.

  6. #76
    Пользователь
    Регистрация
    04.11.2009
    Сообщений
    30
    Вес репутации
    192

    По умолчанию Re: Панель приборов.

    А если воспользоватся вот этим
    Код HTML:
    pulseIn(порт, значение); 
    
    Описание: 
    
    Считывает импульс (высокий или низкий) c цифрового порта и возвращает продолжительность импульса в микросекундах. 
    
    Например, если параметр «значение» при вызове функции установлен в HIGH, то pulseIn() ожидает, когда на порт поступит высокий уровень сигнала. С момента его поступления начинается отсчет времени до тех пор, пока на порт не поступит низкий уровень сигнала. Функция возвращает длину импульса (высокого уровня) в микросекундах. Работает с импульсами от 10 микросекунд до 3 минут. Обратите внимание, что эта функция не будет возвращать результат, пока импульс не будет обнаружен. 
    
    Параметры: 
    
    порт: номер порта, с которого считываем импульс 
    
    значение: тип импульса HIGH или LOW 
    
    Возвращаемое значение: возвращает длительность импульса в микросекундах (тип int) 
    
    Пример: 
    
    int duration; // объявление переменной duration типа int
    duration = pulseIn(pin, HIGH); // измеряем длительность импульса
    т.е программа будет такой

    Код HTML:
    // Сбор данных с двух АЦП, и двух цифровых входов   
        // 12 - скорость  
        // 13 - тахометр  
        // 2 - температура охлаждающей жидкости  
        // 3 - уровень топлива  
        // 4 - напряжение автомобильной сети  
        for(i=3; i<=4; i++)  
          {  
            resultInput[i]=analogRead(i);    
          }  
        for(i=12; i<=13; i++)
          {
            resultInput[i]= pulseIn(pin(i), HIGH);
          }
    Последний раз редактировалось Rush; 03.12.2009 в 19:09.

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

    По умолчанию Re: Панель приборов.

    Зачем тебе для тахометра длительность импульса считать?

    Нужно примерно так
    PHP код:
    #define etaho  2
    unsigned long timetpl;
    void setup() 
    {   
      
    pinMode(etahoINPUT); 
      
    digitalWrite(etahoHIGH);     // подключить подтягивающий резистор
      
    attachInterrupt(0tahoFALLING);  // настроить прерывание при перепаде с высокого в никий
      
    Serial.begin (115200);


    void loop()
    {    
      if (
    tpl 0)        //проверить срабатывание прерывания
      
    {
            
    Serial.printlntplDEC); // отправить значение компьютеру  
            
    tpl=0;          //обнулить
      
    }
    }

    // обработка прерывания
    void taho()
    {
      
    cli();
      
    tpl=millis()-time;  //время между импульсами
      
    time millis(); //обнулить
      
    sei();

    Последний раз редактировалось Chip; 03.12.2009 в 23:05.

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

    По умолчанию Re: Панель приборов.

    В последнем примере есть ошибка, хотя вероятность того, что она проявится крайне низка.

    Во время выполнения
    Serial.println( tpl, DEC);
    может вызваться таймер. И что в результате такой коллизии уйдет в порт неизвестно. Поэтому надо сбросить флаг прерываний перед выполнением этой команды и установить сразу после. Еще лучше - сначала скопировать эту переменную в какое-то место и обнулить внутри блока с запрещенными прерываниями, а затем уже отправить в uart.
    примерно так:

    unsigned long temp_tpl;
    cli;
    temp_tpl = tpl;
    tpl=0;
    sei;

    Serial.println( temp_tpl, DEC);

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

    По умолчанию Re: Панель приборов.

    Так вроде как после обработки прерывания контроллер продолжит выполнение с того места где был прерван. Потому что при переходе на прерывание адрес сохраняется в стеке
    Последний раз редактировалось Chip; 04.12.2009 в 01:03.

  10. #80
    торпедопек Аватар для Urvin
    Регистрация
    15.10.2009
    Возраст
    37
    Сообщений
    43
    Вес репутации
    194

    По умолчанию Re: Панель приборов.

    Цитата Сообщение от SBorovkov Посмотреть сообщение
    Поэтому надо сбросить флаг прерываний перед выполнением этой команды и установить сразу после. Еще лучше - сначала скопировать эту переменную в какое-то место и обнулить внутри блока с запрещенными прерываниями, а затем уже отправить в uart.
    volatile

Страница 8 из 118 ПерваяПервая ... 2345678910111213141858108 ... ПоследняяПоследняя

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

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

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

Ваши права

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