програмирование AVR на АСЕМБЛЕРЕ для чайников
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: програмирование AVR на АСЕМБЛЕРЕ для чайников
Там UART только скорость нестандартная, 38000 бод что-ли. Осциллографом посмотри, старт, 8 бит, контроль четности и стоп.
- xkp
- Опытный кот
- Сообщения: 781
- Зарегистрирован: Ср ноя 18, 2009 12:50:31
- Откуда: ковров
- Контактная информация:
Re: програмирование AVR на АСЕМБЛЕРЕ для чайников
эм... а что смотретьт то? если только еще собираюсь писать программу? или вы имеете ввиду посмотреть на компе?
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: програмирование AVR на АСЕМБЛЕРЕ для чайников
На клавиатуре. Хотя и правда, что там смотреть - просто так клавиатура ничего не выдаст. Это старые XT-шные клавиатуры работали автономно, современные AT-шные требуют команду инициализации.
- xkp
- Опытный кот
- Сообщения: 781
- Зарегистрирован: Ср ноя 18, 2009 12:50:31
- Откуда: ковров
- Контактная информация:
Re: програмирование AVR на АСЕМБЛЕРЕ для чайников
изначально вопрос стоял как подключить клаву к авр на ассемблере?
команды инициализация, опроса и прочие команды от МК к клавиатуре и обратно входят в изначальный вопрос.
команды инициализация, опроса и прочие команды от МК к клавиатуре и обратно входят в изначальный вопрос.
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
- xkp
- Опытный кот
- Сообщения: 781
- Зарегистрирован: Ср ноя 18, 2009 12:50:31
- Откуда: ковров
- Контактная информация:
Re: програмирование AVR на АСЕМБЛЕРЕ для чайников
по клавиатуре будут ответы?
у кого нито есть примеры разложения звукового сигнала на частотные составляющие на ассемблере? или хотя бы теоритичекое представление.
у кого нито есть примеры разложения звукового сигнала на частотные составляющие на ассемблере? или хотя бы теоритичекое представление.
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: програмирование AVR на АСЕМБЛЕРЕ для чайников
Теория есть на википедии(Дискретное Преобразование Фурье), формула проста. фишка в том что надо считать комплексную функцию e^x. На ассемблере я где-то видел только готовые решения, выделить там функцию ДПФ не так-то просто. Памяти нужно много - N ячеек для сигнала, и N/2 для результата.
- xkp
- Опытный кот
- Сообщения: 781
- Зарегистрирован: Ср ноя 18, 2009 12:50:31
- Откуда: ковров
- Контактная информация:
Re: програмирование AVR на АСЕМБЛЕРЕ для чайников
не стал новую тему заводить а подходящюю не нашел. как и чем программировать ATXMEGA256A3. и где писать программу под нее? студия 4.12 не держит в себе таких. кто пробовал 5 студию? посмотрите есть ли в ней ATXMEGA256A3. и, еще прогер на неё надо, хотя если она есть в 5 студии, то наверно можно и через STK500 по ISP прошить.
хочу купить себе такую игрушку на тестовую платку для поделок.
хочу купить себе такую игрушку на тестовую платку для поделок.
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: програмирование AVR на АСЕМБЛЕРЕ для чайников
В 5-й студии она должна быть, там вроде бы как раз и ввели поддержку XMEGA.
Ну а собственно, для компилятора вообще все фиолетово для какого семейства компилируешь. Поэтому набирая в блокноте, можно написать программу даже для неизвестного микроконтроллера.
Ну а собственно, для компилятора вообще все фиолетово для какого семейства компилируешь. Поэтому набирая в блокноте, можно написать программу даже для неизвестного микроконтроллера.
Re: програмирование AVR на АСЕМБЛЕРЕ для чайников
xkp скачай 4.19 

- xkp
- Опытный кот
- Сообщения: 781
- Зарегистрирован: Ср ноя 18, 2009 12:50:31
- Откуда: ковров
- Контактная информация:
Re: програмирование AVR на АСЕМБЛЕРЕ для чайников
Alexeyslav писал(а):Для таймера выбираешь режим FAST PWM.
Биты регистра TCCR0A: COM0A1=1 COM0A0=0 или 1(инверсный выход)
WGM01=1 ,WGM00=1.
В регистре OCR0A - значение момента при котором будет меняться состояние выхода OC0A.
вернемся к 4 странице темы. но нужно теперь менять частоту в пределах 1-100кГц. иными словами сделать аппаратный генератор частот.
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: програмирование AVR на АСЕМБЛЕРЕ для чайников
А в чем сложности? Хотя, помоему лучше делать такой генератор по топологии DDS, потому что если использовать таймер - будет ограничение на диапазон частот и шаг в диапазоне максимальных частот, поскольку коэффициент деления будет целочисленный. Допустим 100кГц можно получить делением 10Мгц на 100, тогда соседняя частота может быть получена только делением 10Мгц на 101 и будет равна 99кГц. Разрядность таймера (16 бит) не даст получить частоту аппаратно меньше чем 10Мгц/65535 = 152.69Гц, придется вводить как минимум два диапазона переключая предделитель чтобы охватить весь диапазон частот. и у каждого диапазона будет своя "сетка" частот, среди которых точных значений необходимой частоты не будет.
- xkp
- Опытный кот
- Сообщения: 781
- Зарегистрирован: Ср ноя 18, 2009 12:50:31
- Откуда: ковров
- Контактная информация:
Re: програмирование AVR на АСЕМБЛЕРЕ для чайников
точные частоты нужны от 1 до 30 кГц. шаг 0.05 кГц
От 30 до 100 кГц с шагом 1 кГц.
хочу именно на АВР. так как у МК будет только одна задача - выдавать необходимую частоту на PB0/OC0A по запросу от другого МК по I2C, то думаю поставить тини13.
иными словами будет главный МК, к нему по I2C шине будут подключены другие МК. один из них должен выдавать необходимую частоту, другой анализировать входной сигнал, третий будет отвечать за вывод на ЖК-дисплей 128*64 и клавиатуру.
почему так много МК? -спросите вы. Мне нужно быстродействие всей конструкции. если все закошачить в один МК, то просто он не сможет дать большое быстродействие. а тут... главный сказал дать N-частоту - 1-й МК выдает. сказал второму анализировать вход - тот анализирует и передает на третий а тот в свою очередь на ЖК и с кнопок на главный МК. + с первого МК есть провод синхронизации на второй, со второго на третий.
Примерная наброска в картинке.
От 30 до 100 кГц с шагом 1 кГц.
хочу именно на АВР. так как у МК будет только одна задача - выдавать необходимую частоту на PB0/OC0A по запросу от другого МК по I2C, то думаю поставить тини13.
иными словами будет главный МК, к нему по I2C шине будут подключены другие МК. один из них должен выдавать необходимую частоту, другой анализировать входной сигнал, третий будет отвечать за вывод на ЖК-дисплей 128*64 и клавиатуру.
почему так много МК? -спросите вы. Мне нужно быстродействие всей конструкции. если все закошачить в один МК, то просто он не сможет дать большое быстродействие. а тут... главный сказал дать N-частоту - 1-й МК выдает. сказал второму анализировать вход - тот анализирует и передает на третий а тот в свою очередь на ЖК и с кнопок на главный МК. + с первого МК есть провод синхронизации на второй, со второго на третий.
Примерная наброска в картинке.
- Вложения
-
- точечный рисунок (2).rar
- (782 байт) 214 скачиваний
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: програмирование AVR на АСЕМБЛЕРЕ для чайников
Нужно оценить ресурсоемкость задач, возможно дела не настолько плохи. Хотя достичь шага в 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...
Задачка простая, делитель на 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 на АСЕМБЛЕРЕ для чайников
ну а что это за DDS? как и с чем его есть?
на счет загруженности... необходимо будет примерно 300 раз в секунду выдавать разные частоты хотя бы по 3-5 импульсов и между разными частотами должна быть небольшая пауза, равная примерно 2-3 периодам текущей частоты
на счет загруженности... необходимо будет примерно 300 раз в секунду выдавать разные частоты хотя бы по 3-5 импульсов и между разными частотами должна быть небольшая пауза, равная примерно 2-3 периодам текущей частоты
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: програмирование AVR на АСЕМБЛЕРЕ для чайников
Алгоритма описан на страничке, только собственно ЦАП нам здесь не нужен, из всего нужно только отлавливать момент переполнения аккумулятора фазы и в этот момент менять состояние выхода. Для 100кГц необходимо чтобы программно алгоритм каждой итерации отрабатывал 200тыс раз в секунду. К сожалению тут придется сначала разработать алгоритм, просчитать количество необходимых тактов и высчитать минимальную тактовую частоту контроллера. На 20Мгц будет примерно 100 тактов на итерацию. В нее будет входить алгоритм сложения 24-битного числа(каскадно сложить 3 пары регистров) и установка состояния порта в зависимости от признака переполнения в результате операции сложения. Если реализовать этот алгоритм можно одним махом охватить диапазон 0..100кГц с шагом по 0.01Гц задавая частоту без необходимости вычислять её период. Переключение на новую частоту будет практически мгновенным. Так что пожалуй надо будет предусмотреть остановку алгоритма по внешней команде или указывать частоту 0.01Гц на время паузы.
- xkp
- Опытный кот
- Сообщения: 781
- Зарегистрирован: Ср ноя 18, 2009 12:50:31
- Откуда: ковров
- Контактная информация:
Re: програмирование AVR на АСЕМБЛЕРЕ для чайников
еще и на СИ
хотелось бы без науки. прямо.
1. инициализация: в регистр Х закошачиваем х для того-то того-то
разрешаем работу
2. работа: в регистр Y закошачиваем y.
3. в регистре Z (либо на вводе порта) получаем результат.
1. инициализация: в регистр Х закошачиваем х для того-то того-то
разрешаем работу
2. работа: в регистр Y закошачиваем y.
3. в регистре Z (либо на вводе порта) получаем результат.
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
- xkp
- Опытный кот
- Сообщения: 781
- Зарегистрирован: Ср ноя 18, 2009 12:50:31
- Откуда: ковров
- Контактная информация:
Re: програмирование AVR на АСЕМБЛЕРЕ для чайников
выбор МК не должен уйти за пределы tiny13/2313/261/26 mega8/16/32/8535 . просто их у меня навалом.
PS. да, и плата генератора уже спаяна на тини13.
PS. да, и плата генератора уже спаяна на тини13.
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: програмирование AVR на АСЕМБЛЕРЕ для чайников
А как ты спаял плату если не известна еще схема подключения и даже предварительных расчетов не было?
Ты просто почитай как этот генератор работает, проникнись идеей. По запросу гугл тебе выдаст сотню ссылок на алгоритм работы DDS которые может быть будут более понятны.
Просто прибавляй в некий аккумулятор (24 бит например) число пропорциональное необходимой частоте. Частота переполнения этого аккумулятора будет пропорциональна установленному коду и частоте с которой происходит суммирование! Максимальная частота будет равна частоте суммирования деленной на 2 при установленном коде равном $FFFFFF.
Ты просто почитай как этот генератор работает, проникнись идеей. По запросу гугл тебе выдаст сотню ссылок на алгоритм работы DDS которые может быть будут более понятны.
Просто прибавляй в некий аккумулятор (24 бит например) число пропорциональное необходимой частоте. Частота переполнения этого аккумулятора будет пропорциональна установленному коду и частоте с которой происходит суммирование! Максимальная частота будет равна частоте суммирования деленной на 2 при установленном коде равном $FFFFFF.