програмирование AVR на АСЕМБЛЕРЕ для чайников

Обсуждаем контроллеры компании Atmel.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: програмирование AVR на АСЕМБЛЕРЕ для чайников

Сообщение Alexeyslav »

Там UART только скорость нестандартная, 38000 бод что-ли. Осциллографом посмотри, старт, 8 бит, контроль четности и стоп.
Аватара пользователя
xkp
Опытный кот
Сообщения: 781
Зарегистрирован: Ср ноя 18, 2009 12:50:31
Откуда: ковров
Контактная информация:

Re: програмирование AVR на АСЕМБЛЕРЕ для чайников

Сообщение xkp »

эм... а что смотретьт то? если только еще собираюсь писать программу? или вы имеете ввиду посмотреть на компе?
R5VCH
Хотелки:
СпойлерАналоговый осциллограф С1-112, С1-118, другие
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: програмирование AVR на АСЕМБЛЕРЕ для чайников

Сообщение Alexeyslav »

На клавиатуре. Хотя и правда, что там смотреть - просто так клавиатура ничего не выдаст. Это старые XT-шные клавиатуры работали автономно, современные AT-шные требуют команду инициализации.
Аватара пользователя
xkp
Опытный кот
Сообщения: 781
Зарегистрирован: Ср ноя 18, 2009 12:50:31
Откуда: ковров
Контактная информация:

Re: програмирование AVR на АСЕМБЛЕРЕ для чайников

Сообщение xkp »

изначально вопрос стоял как подключить клаву к авр на ассемблере?

команды инициализация, опроса и прочие команды от МК к клавиатуре и обратно входят в изначальный вопрос.
R5VCH
Хотелки:
СпойлерАналоговый осциллограф С1-112, С1-118, другие
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Аватара пользователя
xkp
Опытный кот
Сообщения: 781
Зарегистрирован: Ср ноя 18, 2009 12:50:31
Откуда: ковров
Контактная информация:

Re: програмирование AVR на АСЕМБЛЕРЕ для чайников

Сообщение xkp »

по клавиатуре будут ответы?





у кого нито есть примеры разложения звукового сигнала на частотные составляющие на ассемблере? или хотя бы теоритичекое представление.
R5VCH
Хотелки:
СпойлерАналоговый осциллограф С1-112, С1-118, другие
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: програмирование AVR на АСЕМБЛЕРЕ для чайников

Сообщение Alexeyslav »

Теория есть на википедии(Дискретное Преобразование Фурье), формула проста. фишка в том что надо считать комплексную функцию e^x. На ассемблере я где-то видел только готовые решения, выделить там функцию ДПФ не так-то просто. Памяти нужно много - N ячеек для сигнала, и N/2 для результата.
Аватара пользователя
xkp
Опытный кот
Сообщения: 781
Зарегистрирован: Ср ноя 18, 2009 12:50:31
Откуда: ковров
Контактная информация:

Re: програмирование AVR на АСЕМБЛЕРЕ для чайников

Сообщение xkp »

не стал новую тему заводить а подходящюю не нашел. как и чем программировать ATXMEGA256A3. и где писать программу под нее? студия 4.12 не держит в себе таких. кто пробовал 5 студию? посмотрите есть ли в ней ATXMEGA256A3. и, еще прогер на неё надо, хотя если она есть в 5 студии, то наверно можно и через STK500 по ISP прошить.

хочу купить себе такую игрушку на тестовую платку для поделок.
R5VCH
Хотелки:
СпойлерАналоговый осциллограф С1-112, С1-118, другие
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: програмирование AVR на АСЕМБЛЕРЕ для чайников

Сообщение Alexeyslav »

В 5-й студии она должна быть, там вроде бы как раз и ввели поддержку XMEGA.

Ну а собственно, для компилятора вообще все фиолетово для какого семейства компилируешь. Поэтому набирая в блокноте, можно написать программу даже для неизвестного микроконтроллера.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15539
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: програмирование AVR на АСЕМБЛЕРЕ для чайников

Сообщение BOB51 »

xkp скачай 4.19 :beer:
Аватара пользователя
xkp
Опытный кот
Сообщения: 781
Зарегистрирован: Ср ноя 18, 2009 12:50:31
Откуда: ковров
Контактная информация:

Re: програмирование AVR на АСЕМБЛЕРЕ для чайников

Сообщение xkp »

Alexeyslav писал(а):Для таймера выбираешь режим 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
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: програмирование AVR на АСЕМБЛЕРЕ для чайников

Сообщение Alexeyslav »

А в чем сложности? Хотя, помоему лучше делать такой генератор по топологии DDS, потому что если использовать таймер - будет ограничение на диапазон частот и шаг в диапазоне максимальных частот, поскольку коэффициент деления будет целочисленный. Допустим 100кГц можно получить делением 10Мгц на 100, тогда соседняя частота может быть получена только делением 10Мгц на 101 и будет равна 99кГц. Разрядность таймера (16 бит) не даст получить частоту аппаратно меньше чем 10Мгц/65535 = 152.69Гц, придется вводить как минимум два диапазона переключая предделитель чтобы охватить весь диапазон частот. и у каждого диапазона будет своя "сетка" частот, среди которых точных значений необходимой частоты не будет.
Аватара пользователя
xkp
Опытный кот
Сообщения: 781
Зарегистрирован: Ср ноя 18, 2009 12:50:31
Откуда: ковров
Контактная информация:

Re: програмирование AVR на АСЕМБЛЕРЕ для чайников

Сообщение xkp »

точные частоты нужны от 1 до 30 кГц. шаг 0.05 кГц

От 30 до 100 кГц с шагом 1 кГц.

хочу именно на АВР. так как у МК будет только одна задача - выдавать необходимую частоту на PB0/OC0A по запросу от другого МК по I2C, то думаю поставить тини13.
иными словами будет главный МК, к нему по I2C шине будут подключены другие МК. один из них должен выдавать необходимую частоту, другой анализировать входной сигнал, третий будет отвечать за вывод на ЖК-дисплей 128*64 и клавиатуру.
почему так много МК? -спросите вы. Мне нужно быстродействие всей конструкции. если все закошачить в один МК, то просто он не сможет дать большое быстродействие. а тут... главный сказал дать N-частоту - 1-й МК выдает. сказал второму анализировать вход - тот анализирует и передает на третий а тот в свою очередь на ЖК и с кнопок на главный МК. + с первого МК есть провод синхронизации на второй, со второго на третий.
Примерная наброска в картинке.
Вложения
точечный рисунок (2).rar
(782 байт) 214 скачиваний
R5VCH
Хотелки:
СпойлерАналоговый осциллограф С1-112, С1-118, другие
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: програмирование AVR на АСЕМБЛЕРЕ для чайников

Сообщение Alexeyslav »

Нужно оценить ресурсоемкость задач, возможно дела не настолько плохи. Хотя достичь шага в 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...
Аватара пользователя
xkp
Опытный кот
Сообщения: 781
Зарегистрирован: Ср ноя 18, 2009 12:50:31
Откуда: ковров
Контактная информация:

Re: програмирование AVR на АСЕМБЛЕРЕ для чайников

Сообщение xkp »

ну а что это за DDS? как и с чем его есть?
на счет загруженности... необходимо будет примерно 300 раз в секунду выдавать разные частоты хотя бы по 3-5 импульсов и между разными частотами должна быть небольшая пауза, равная примерно 2-3 периодам текущей частоты
R5VCH
Хотелки:
СпойлерАналоговый осциллограф С1-112, С1-118, другие
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: програмирование AVR на АСЕМБЛЕРЕ для чайников

Сообщение Alexeyslav »

Алгоритма описан на страничке, только собственно ЦАП нам здесь не нужен, из всего нужно только отлавливать момент переполнения аккумулятора фазы и в этот момент менять состояние выхода. Для 100кГц необходимо чтобы программно алгоритм каждой итерации отрабатывал 200тыс раз в секунду. К сожалению тут придется сначала разработать алгоритм, просчитать количество необходимых тактов и высчитать минимальную тактовую частоту контроллера. На 20Мгц будет примерно 100 тактов на итерацию. В нее будет входить алгоритм сложения 24-битного числа(каскадно сложить 3 пары регистров) и установка состояния порта в зависимости от признака переполнения в результате операции сложения. Если реализовать этот алгоритм можно одним махом охватить диапазон 0..100кГц с шагом по 0.01Гц задавая частоту без необходимости вычислять её период. Переключение на новую частоту будет практически мгновенным. Так что пожалуй надо будет предусмотреть остановку алгоритма по внешней команде или указывать частоту 0.01Гц на время паузы.
Аватара пользователя
xkp
Опытный кот
Сообщения: 781
Зарегистрирован: Ср ноя 18, 2009 12:50:31
Откуда: ковров
Контактная информация:

Re: програмирование AVR на АСЕМБЛЕРЕ для чайников

Сообщение xkp »

еще и на СИ :( хотелось бы без науки. прямо.
1. инициализация: в регистр Х закошачиваем х для того-то того-то
разрешаем работу
2. работа: в регистр Y закошачиваем y.
3. в регистре Z (либо на вводе порта) получаем результат.
R5VCH
Хотелки:
СпойлерАналоговый осциллограф С1-112, С1-118, другие
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Аватара пользователя
xkp
Опытный кот
Сообщения: 781
Зарегистрирован: Ср ноя 18, 2009 12:50:31
Откуда: ковров
Контактная информация:

Re: програмирование AVR на АСЕМБЛЕРЕ для чайников

Сообщение xkp »

выбор МК не должен уйти за пределы tiny13/2313/261/26 mega8/16/32/8535 . просто их у меня навалом.

PS. да, и плата генератора уже спаяна на тини13.
R5VCH
Хотелки:
СпойлерАналоговый осциллограф С1-112, С1-118, другие
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: програмирование AVR на АСЕМБЛЕРЕ для чайников

Сообщение Alexeyslav »

А как ты спаял плату если не известна еще схема подключения и даже предварительных расчетов не было?

Ты просто почитай как этот генератор работает, проникнись идеей. По запросу гугл тебе выдаст сотню ссылок на алгоритм работы DDS которые может быть будут более понятны.

Просто прибавляй в некий аккумулятор (24 бит например) число пропорциональное необходимой частоте. Частота переполнения этого аккумулятора будет пропорциональна установленному коду и частоте с которой происходит суммирование! Максимальная частота будет равна частоте суммирования деленной на 2 при установленном коде равном $FFFFFF.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: програмирование AVR на АСЕМБЛЕРЕ для чайников

Сообщение Аlex »

Закрыто

Вернуться в «AVR»