Перейти к содержанию
    

eracer

Участник
  • Постов

    17
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о eracer

  • Звание
    Участник
    Участник
  1. А как же тогда делаются интерполирующие ЦАПы с передискретизацией? Фильтр низких низких частот тут вряд ли особо поможет, так как спектр такого сигнала равен произведению спектра исходного сигнала на функцию вида sinx/x. Отсюда идеальный восстанавливающий фильтр должен иметь АЧХ вида x/sinx. Но где ж его взять? Задача, как я понимаю тут сводится не к интерполяции (в привычном понимании), а в выборе фильтра с подходящей реакцией на единичный скачок. Для меня электроника в новинку и тут скорей всего есть простой путь. RC цепочки тоже вариант, но хотелось бы получить на выходе более-менее гладкую функцию. Спасиб, приду домой - сяду за матчасть B)
  2. МК AT90S8515, но мне нужно функцию интерполировать не в контроллере, а уже на выходе после цифро-аналогового преобразования. Сейчас пытаюсь найти что-нибудь про аппаратную реализацию сплайнов, но литературы как то не фонтан.
  3. Отца русской демократии сплайны вряд ли спасут, но ссылку прочитал с большим интересом. Спасиб :rolleyes:
  4. Можно обойтись и одним, но именно так (почему-то) поставлена задача преподавателем. Рискну предположить, что на один ЦАП должен подаваться исходный сигнал, на второй - результат его дискретной фильтрации для получения точек, по которым сигнал будет интерполироваться. Далее они суммируются и фильтруются. Может я неправильно выразился. Но "дискретизованный" - тоже не совсем точное определение. На выходе ЦАПа получается непрерывный сигнал. Математически его можно представить суммой Аk*[1(t-(k-1)*T) - 1(t-k*T)], где Аk - квантованный уровень исходного сигнала, 1(t) - функция Хевисайда, Т - период дискретизации. Предполагается, что частота дискретизации, как минимум, в два раза больше максимальной частоты спектра исходного сигнала.
  5. Огромное спасибо. Буду искать в этом направлении
  6. Помогите справиться с задачкой. Есть МК, два ЦАПа. По последовательному интерфейсу подается массив точек со значениями сигнала произвольной формы. На выходе нужно получить сигнал, близкий к заданному. Вопрос в том каким способом осуществить оптимальную интерполяцию получившегося "кусочного" сигнала.
  7. Одни и те же проекты на разных компах работают по-разному. Прямо мистика какя-то :huh: Могут быть проблемы в лицензии? Подскажите, есть ли версии, в которых модели AVR работают стабильно?
  8. SPI в Proteus 7.6

    Доброго времени суток! Пытаюсь разобраться с работой SPI. Сделал простейшую программу для AT90S8515, в которой активируется интерфейс SPI (PB4 - на выход, режим мастер, прерывание разрешено) и идет передача одного числа. При моделировании в proteus на выводах SCK/MOSI постоянно держится логический 0. Кто работал подскажите, есть ли в proteus такой баг, или я неправильно понял работу интерфейса?
  9. Если, может быть, кто-то столкнется с аналогичной проблемой, в итоге воспользовался программой AVReal для загрузки.
  10. Затруднил себя покопаться поглубже в настройках компилятора )) Мне казалось, что его размер выбирается автоматически
  11. Действительно стек на 32 байта, заполнен полностью. А можете рассказать про причины, или дать ссылку? Знаю, что прерывания не должны "подвешивать" программу. Но в данном случае я проверял по количеству циклов, все вычисления уложаться до начала реверсивного счета. Проблема в том, что потребуется слишком много значений. Можно по идее ограничиться десятью и постепенно подгружать новые, но при этом нужно будет основную программу синхронизировать с прерыванием, чтобы в функцию обработки попадали только "нужные" значения. Это отдельная задача, и я еще над ней не задумывался. Та же проблема с UARTом, который тоже должен работать независимо.
  12. Извиняюсь, что влезаю в чужой топик. Возникла непонятка со спецификатором static, поэтому решил запостить сюда вопрос. Программа осуществляет ЦАП с помощью ШИМ. Запись в регистр сравнения осущетсвляется по прерыванию при переполнению счетчика. Функция обработки прерывания выглядит следующим образом: __interrupt void T1_OVF_Handler() { static unsigned int num = 0; temp = sin(2*pi*Fsin*num/Fpwm); // OCR1A = short(temp*TOP_PWM); num++; if (num >= Fpwm) num = 0; IntToChar(UART_out, 4, OCR1A); PutTextToUART(UART_out, 4); } При пошаговой отладке после вычисления синуса, значение num меняется на 22016 (причем Fpwm=7844), и соответственно при сравнении обнуляется. Если сделать глобальное объявление переменной, то проблема исчезает. Но почему так происходит, к сожалению понять так и не смог.
  13. Огромное спасибо всем кто ответил! Кучу времени потратил, застряв на этой проблеме. :angry2: Надеюсь дальше будет попроще :unsure:
  14. Спасибо, поставил коэффициент деления CK/1024. Со скоростью я напутал - 19200 Бод/с, частота 4 МГц. Проблема тем не меннее осталась - в симуляторе регистр USR = 0x00 независимо от состояния регистра UDR.
×
×
  • Создать...