Короткий импульс

Тема в разделе "Arduino & Shields", создана пользователем sanik, 8 мар 2013.

  1. sanik

    sanik Гик

    Как решить проблему программно или аппаратно есть короткий импульс от 1 до 3 вольт. Скорость порядка 1/400с. как уловить этот импульс стандартно как кнопку максимально срабатывает на скорости 0,8с. В данный момент хочу попробовать на аналоговый вход подать. Посмотреть что получиться...
     
  2. apomelov

    apomelov Нерд

    1/400 секунды -- это очень много. При тактовой частоте в 16МГц можно позволить себе достаточно редко опрашивать цифровой вход, чтобы поймать такой импульс. С цифровым входом скорее проблема с уровнем напряжения, но тут транзистор вам в помощь, его, думаю, 1/400 секунды тоже не смутит.
     
  3. sanik

    sanik Гик

    А подробней можно насчет транзистора? В смысле схему... У меня импульс поступает с горячего башмака зеркалки не спалю? Как то стремно экспериментировать... Я замерял с аналогово входа выдает 930 в режиме покоя при импульсе примерно 1000 не успевал рассмотреть точно вприцепе срабатывает но не совсем стабильно... Минусовой контакт притянул к земле на плюс с разьема синхронизатора РС подал 5 вольт.
     
  4. roggedhorse

    roggedhorse Гик

    Если напряжение в пике импульса не превышает 5 В, то
    1. Соедините землю (минус питания) устройства с землей (минусом) Ардуино
    2. Подайте импульсный сигнал на ногу Digital pin 2
    3. Напишите код

    Код (Text):

    void setup() {
      pinMode(13, OUTPUT);
      attachInterrupt(0, blink, CHANGE);
    }
     
    void blink() {
      digitalWrite(13, HIGHT);
      digitalWrite(13, LOW);
    }
     
    Если в импульсе напряжение больше или равно 3В, светодиод L на Ардуине будет вспыхивать одновременно с импульсом.
    Открываем datasheet на МК ATMega 2560.
    Смотрим Table 31.1 DC Characteristics:
    для условий VCC = 2.4V - 5.5V параметр Min. Input High Voltage = 0.6 Vcc
    Затем читаем сноску (2): ""Min" means the lowest value where the pin is guaranteed to be read as high"
    Соответственно, 5В х 0.6 = 3 В

    Вспышки будут очень короткие, так как мы последовательно включаем/выключаем светодиод без задержки. В светлом помещении можете и не увидеть :)
    Тогда воспользуйтесь примером из первоисточника:
    http://arduino.cc/en/Reference/AttachInterrupt

    P.S. Не рекомендую вставлять задержку в функцию blink.
     
  5. sanik

    sanik Гик

    P.S. Не рекомендую вставлять задержку в функцию blink.[/quote]

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

    Код (Text):
    int sensPin = 0;
    #define sunhr 940
    void setup()
    {
      analogReference(DEFAULT);
      Serial.begin(9600);
    }
     
    void loop()
    {
      if (analogRead(sensPin) > sunhr)
      {
        Serial.println("Start Start Start Start");
        delay(5);
      }
      Serial.println(analogRead(sensPin));
      delay(5);
    }
     
  6. roggedhorse

    roggedhorse Гик

    Вы хотели посмотреть, что получится. Попробуйте стандартный пример attachInterrupt.
    Хотя бы для того, чтобы понять взаимодействие вашего устройства с Ардуиной через сигнал прерывания.
     
  7. Megakoteyka

    Megakoteyka Оракул Модератор

    Подавайте на аналоговый, не мучайтесь с уровнями.
    Кстати: а надо ли Вам ловить весь импульс? Может, будет достаточно засечь его фронт и сразу начать реагировать?
    В чем суть проекта, если не секрет?
     
  8. sanik

    sanik Гик

    Да устройством управляет фотоаппарат через синхроконтакт Я поставил чтение от нуля в условие если больше 0 то... Просто до меня не сразу дошло что можно в аналог засунуть и глянуть через порт что будет:)