сдвиг сигнала по времени

Тема в разделе "Arduino & Shields", создана пользователем nikmih, 2 июн 2014.

  1. nikmih

    nikmih Нуб

    аналоговый сигнал. от 0 до 2 вольт синусоидальной формы. как организовать задержку выходного сигнала относительно входного по времени?
     
  2. ANV

    ANV Гуру

    Пока нет более подробных данных (зачем это надо, какая частота и насколько задерживать сигнал), ответ "километр коаксиала" или АЦП-ФИФО-ЦАП не считается издевательским :)
     
  3. задерживать синусоиду? )))
     
  4. Megakoteyka

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

    Наверное, сдвигать фазу синусоиды?
     
  5. Megakoteyka

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

    Можно записывать отсчеты в кольцевой буфер. По одному указателю пишем, по другому считываем. Разница в позициях указателей даст требуемую задержку.
    Так можно программно сделать задержку для любого сигнала.
    Синусоиду наверняка не очень сложно сдвинуть аппаратно, но я ничего не помню :) Кажется, было слово "фазовращатель".
     
  6. ANV

    ANV Гуру

    Мы можем сколько угодно гадать, пока автор поста не прояснит ситуацию.
    Так то размах у синусоиды может меняться.
     
  7. nikmih

    nikmih Нуб

    уточнение и ответ :)
    есть аналоговый датчик. на выходе что то похожее на синусоиду, от 0 до 2 Вольт. хочу собрать программный преобразователь. сдиг по времени + сжатие/увеличение по амплитуде.
    Код (Text):
    int analogReadPin = A0;
    int analogWritePin = A1;

    const int maxCountValues = 300;
    byte analogReadPinValue = 0;

    byte values[maxCountValues];
    int posWriteToPin = 0;
    int posReadFromPin = 0;

    void setup () {
        Serial.begin(9600);
    }

    void loop () {

      analogReadPinValue = map(analogRead(analogReadPin), 0, 1023, 0, 255);
      values[posReadFromPin] = analogReadPinValue;

      Serial.print("Read ");
      Serial.print(posReadFromPin);
      Serial.print(" ");
      Serial.println(values[posReadFromPin]);

      posReadFromPin++;

      if (posReadFromPin > maxCountValues-1) {
        posReadFromPin = 0;
      }
     
     
     
      if (millis()>300) {

        analogWrite(analogWritePin, values[posWriteToPin]);    
       
        Serial.print("Write ");
        Serial.print(posWriteToPin);
        Serial.print(" ");
        Serial.println(values[posWriteToPin]);

        posWriteToPin++;
       
        if (posWriteToPin > maxCountValues-1) {
        posWriteToPin = 0;
        }
     
      }
       

      delay(50);


    }
     
  8. Megakoteyka

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

    int analogWritePin = A1;
    Не покатит. С ножек А0-А5 можно только читать значения АЦП. ЦАПа в ардуине нету.
    Функция analogWrite делает ШИМ на избранных ногах.
     
  9. ANV

    ANV Гуру

    Судя по delay(50) в цикле(частота 20Г), ЦАП можно соорудить на сглаживании ШИМ или R2R.
     
  10. Megakoteyka

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

    Я увидел строчку
    int analogWritePin = A1;
    и подумалось, что ТС решил писать на соседний пин, ожидая результата, обратного analogRead. Вот и уточнил на всякий случай.
     
  11. ANV

    ANV Гуру

    Я же не спорю :)
    Говорю что если нет ЦАП и при этом частота основного цикла 20Гц, то получить аналоговый сигнал можно и без внешнего ЦАП.
     
  12. nikmih

    nikmih Нуб

    небольшие исправления в коде:
    Код (Text):
    int analogReadPin = A0;
    int analogWritePin = 11;

    void setup () {
    pinMode(analogReadPin, INPUT);
    pinMode(analogWritePin, OUTPUT);
    }
     
  13. ANV

    ANV Гуру

    Еще раз: Вы понимаете, что на выходе у вас не аналоговый сигнал, а ШИМ?

    Чтобы цифровое устройство сделало аналоговый сигнал, надо иметь ЦАП - цифро-аналоговый преобразователь. В ATMega328 нет встроенного.
    Поэтому analogwrite на выходе дает ШИМ с заданной скважность, а не аналоговый сигнал.
    При желании этот ШИМ можно сгладить и получить аналоговый сигнал, но сейчас там выходят прямоугольные импульсы.
     
  14. nikmih

    nikmih Нуб

    да. но он наиболее приближен к форме аналогового сигнала
     
  15. в цитатник. ))))
     
    Unixon нравится это.