эм... а что смотретьт то? если только еще собираюсь писать программу? или вы имеете ввиду посмотреть на компе?
_________________ R5VCH Хотелки: СпойлерАналоговый осциллограф С1-112, С1-118, другие не/рабочие модули от комплекса ОДА-102 всё что касается AVR, arduino, raspberry всё что касается КВ-УКВ-радиосвязи, mashtastic
На клавиатуре. Хотя и правда, что там смотреть - просто так клавиатура ничего не выдаст. Это старые XT-шные клавиатуры работали автономно, современные AT-шные требуют команду инициализации.
изначально вопрос стоял как подключить клаву к авр на ассемблере?
команды инициализация, опроса и прочие команды от МК к клавиатуре и обратно входят в изначальный вопрос.
_________________ R5VCH Хотелки: СпойлерАналоговый осциллограф С1-112, С1-118, другие не/рабочие модули от комплекса ОДА-102 всё что касается AVR, arduino, raspberry всё что касается КВ-УКВ-радиосвязи, mashtastic
у кого нито есть примеры разложения звукового сигнала на частотные составляющие на ассемблере? или хотя бы теоритичекое представление.
_________________ R5VCH Хотелки: СпойлерАналоговый осциллограф С1-112, С1-118, другие не/рабочие модули от комплекса ОДА-102 всё что касается AVR, arduino, raspberry всё что касается КВ-УКВ-радиосвязи, mashtastic
Теория есть на википедии(Дискретное Преобразование Фурье), формула проста. фишка в том что надо считать комплексную функцию e^x. На ассемблере я где-то видел только готовые решения, выделить там функцию ДПФ не так-то просто. Памяти нужно много - N ячеек для сигнала, и N/2 для результата.
не стал новую тему заводить а подходящюю не нашел. как и чем программировать ATXMEGA256A3. и где писать программу под нее? студия 4.12 не держит в себе таких. кто пробовал 5 студию? посмотрите есть ли в ней ATXMEGA256A3. и, еще прогер на неё надо, хотя если она есть в 5 студии, то наверно можно и через STK500 по ISP прошить.
хочу купить себе такую игрушку на тестовую платку для поделок.
_________________ R5VCH Хотелки: СпойлерАналоговый осциллограф С1-112, С1-118, другие не/рабочие модули от комплекса ОДА-102 всё что касается AVR, arduino, raspberry всё что касается КВ-УКВ-радиосвязи, mashtastic
В 5-й студии она должна быть, там вроде бы как раз и ввели поддержку XMEGA.
Ну а собственно, для компилятора вообще все фиолетово для какого семейства компилируешь. Поэтому набирая в блокноте, можно написать программу даже для неизвестного микроконтроллера.
Для таймера выбираешь режим FAST PWM. Биты регистра TCCR0A: COM0A1=1 COM0A0=0 или 1(инверсный выход) WGM01=1 ,WGM00=1. В регистре OCR0A - значение момента при котором будет меняться состояние выхода OC0A.
вернемся к 4 странице темы. но нужно теперь менять частоту в пределах 1-100кГц. иными словами сделать аппаратный генератор частот.
_________________ R5VCH Хотелки: СпойлерАналоговый осциллограф С1-112, С1-118, другие не/рабочие модули от комплекса ОДА-102 всё что касается AVR, arduino, raspberry всё что касается КВ-УКВ-радиосвязи, mashtastic
А в чем сложности? Хотя, помоему лучше делать такой генератор по топологии DDS, потому что если использовать таймер - будет ограничение на диапазон частот и шаг в диапазоне максимальных частот, поскольку коэффициент деления будет целочисленный. Допустим 100кГц можно получить делением 10Мгц на 100, тогда соседняя частота может быть получена только делением 10Мгц на 101 и будет равна 99кГц. Разрядность таймера (16 бит) не даст получить частоту аппаратно меньше чем 10Мгц/65535 = 152.69Гц, придется вводить как минимум два диапазона переключая предделитель чтобы охватить весь диапазон частот. и у каждого диапазона будет своя "сетка" частот, среди которых точных значений необходимой частоты не будет.
хочу именно на АВР. так как у МК будет только одна задача - выдавать необходимую частоту на PB0/OC0A по запросу от другого МК по I2C, то думаю поставить тини13. иными словами будет главный МК, к нему по I2C шине будут подключены другие МК. один из них должен выдавать необходимую частоту, другой анализировать входной сигнал, третий будет отвечать за вывод на ЖК-дисплей 128*64 и клавиатуру. почему так много МК? -спросите вы. Мне нужно быстродействие всей конструкции. если все закошачить в один МК, то просто он не сможет дать большое быстродействие. а тут... главный сказал дать N-частоту - 1-й МК выдает. сказал второму анализировать вход - тот анализирует и передает на третий а тот в свою очередь на ЖК и с кнопок на главный МК. + с первого МК есть провод синхронизации на второй, со второго на третий. Примерная наброска в картинке.
_________________ R5VCH Хотелки: СпойлерАналоговый осциллограф С1-112, С1-118, другие не/рабочие модули от комплекса ОДА-102 всё что касается AVR, arduino, raspberry всё что касается КВ-УКВ-радиосвязи, mashtastic
Нужно оценить ресурсоемкость задач, возможно дела не настолько плохи. Хотя достичь шага в 50Гц на нижнем диапазоне до 30кГц будет проблематично. Самое узкое место - это получить шаг 50Гц на частоте в 30кГц. Выше я давал простой рассчет.
Задачка простая, делитель на N дает частоту 30кГц, делитель на N+1 дает частоту 30.05кГц, требуется найти исходную частоту F и делитель N.
Значит, F/N = 30000 и F/(N+1) = 29950 F = 30000*N и F = 29950*N + 29950, откуда следует 30000*N - 29950*N = 29950 = 50*N, (при N <> 0) откуда N = 29950/50 = 599 и F = 30000*599 = примерно 18Мгц надо подать на вход таймера, чтобы обеспечить такой шаг по частоте. Боюсь, тинька такое не обеспечит. Но задача выглядит выполнимой на более быстродействующем контроллере. Но оглянись на расчет... этот контроллер загружен будет практически на 0%, так что задачу генерации можно возложить и на основной контроллер. Сложность с таймером будет заключаться в том что ему надо задавать не частоту а необходимый период. Чтобы задавать ему указанную частоту, необходимо реализовать функцию 1/x или завести массив заранее просчитанных периодов. Тут самое время рассмотреть вариант аппаратного DDS...
ну а что это за DDS? как и с чем его есть? на счет загруженности... необходимо будет примерно 300 раз в секунду выдавать разные частоты хотя бы по 3-5 импульсов и между разными частотами должна быть небольшая пауза, равная примерно 2-3 периодам текущей частоты
_________________ R5VCH Хотелки: СпойлерАналоговый осциллограф С1-112, С1-118, другие не/рабочие модули от комплекса ОДА-102 всё что касается AVR, arduino, raspberry всё что касается КВ-УКВ-радиосвязи, mashtastic
Алгоритма описан на страничке, только собственно ЦАП нам здесь не нужен, из всего нужно только отлавливать момент переполнения аккумулятора фазы и в этот момент менять состояние выхода. Для 100кГц необходимо чтобы программно алгоритм каждой итерации отрабатывал 200тыс раз в секунду. К сожалению тут придется сначала разработать алгоритм, просчитать количество необходимых тактов и высчитать минимальную тактовую частоту контроллера. На 20Мгц будет примерно 100 тактов на итерацию. В нее будет входить алгоритм сложения 24-битного числа(каскадно сложить 3 пары регистров) и установка состояния порта в зависимости от признака переполнения в результате операции сложения. Если реализовать этот алгоритм можно одним махом охватить диапазон 0..100кГц с шагом по 0.01Гц задавая частоту без необходимости вычислять её период. Переключение на новую частоту будет практически мгновенным. Так что пожалуй надо будет предусмотреть остановку алгоритма по внешней команде или указывать частоту 0.01Гц на время паузы.
еще и на СИ хотелось бы без науки. прямо. 1. инициализация: в регистр Х закошачиваем х для того-то того-то разрешаем работу 2. работа: в регистр Y закошачиваем y. 3. в регистре Z (либо на вводе порта) получаем результат.
_________________ R5VCH Хотелки: СпойлерАналоговый осциллограф С1-112, С1-118, другие не/рабочие модули от комплекса ОДА-102 всё что касается AVR, arduino, raspberry всё что касается КВ-УКВ-радиосвязи, mashtastic
выбор МК не должен уйти за пределы tiny13/2313/261/26 mega8/16/32/8535 . просто их у меня навалом.
PS. да, и плата генератора уже спаяна на тини13.
_________________ R5VCH Хотелки: СпойлерАналоговый осциллограф С1-112, С1-118, другие не/рабочие модули от комплекса ОДА-102 всё что касается AVR, arduino, raspberry всё что касается КВ-УКВ-радиосвязи, mashtastic
А как ты спаял плату если не известна еще схема подключения и даже предварительных расчетов не было?
Ты просто почитай как этот генератор работает, проникнись идеей. По запросу гугл тебе выдаст сотню ссылок на алгоритм работы DDS которые может быть будут более понятны.
Просто прибавляй в некий аккумулятор (24 бит например) число пропорциональное необходимой частоте. Частота переполнения этого аккумулятора будет пропорциональна установленному коду и частоте с которой происходит суммирование! Максимальная частота будет равна частоте суммирования деленной на 2 при установленном коде равном $FFFFFF.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения