аналоговый сигнал. от 0 до 2 вольт синусоидальной формы. как организовать задержку выходного сигнала относительно входного по времени?
Пока нет более подробных данных (зачем это надо, какая частота и насколько задерживать сигнал), ответ "километр коаксиала" или АЦП-ФИФО-ЦАП не считается издевательским
Можно записывать отсчеты в кольцевой буфер. По одному указателю пишем, по другому считываем. Разница в позициях указателей даст требуемую задержку. Так можно программно сделать задержку для любого сигнала. Синусоиду наверняка не очень сложно сдвинуть аппаратно, но я ничего не помню Кажется, было слово "фазовращатель".
Мы можем сколько угодно гадать, пока автор поста не прояснит ситуацию. Так то размах у синусоиды может меняться.
уточнение и ответ есть аналоговый датчик. на выходе что то похожее на синусоиду, от 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); }
int analogWritePin = A1; Не покатит. С ножек А0-А5 можно только читать значения АЦП. ЦАПа в ардуине нету. Функция analogWrite делает ШИМ на избранных ногах.
Я увидел строчку int analogWritePin = A1; и подумалось, что ТС решил писать на соседний пин, ожидая результата, обратного analogRead. Вот и уточнил на всякий случай.
Я же не спорю Говорю что если нет ЦАП и при этом частота основного цикла 20Гц, то получить аналоговый сигнал можно и без внешнего ЦАП.
небольшие исправления в коде: Код (Text): int analogReadPin = A0; int analogWritePin = 11; void setup () { pinMode(analogReadPin, INPUT); pinMode(analogWritePin, OUTPUT); }
Еще раз: Вы понимаете, что на выходе у вас не аналоговый сигнал, а ШИМ? Чтобы цифровое устройство сделало аналоговый сигнал, надо иметь ЦАП - цифро-аналоговый преобразователь. В ATMega328 нет встроенного. Поэтому analogwrite на выходе дает ШИМ с заданной скважность, а не аналоговый сигнал. При желании этот ШИМ можно сгладить и получить аналоговый сигнал, но сейчас там выходят прямоугольные импульсы.