Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: RS232 --> AtMega16 --> ЦАП с параллельным входом
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
rasstranger
Нужно передать данные с последовательного порта компа (RS232, естесственно) на AtMega16, который запишет их в память и передаст через порты ввода-вывода на 12-битный цап с параллельным входом..
Никто таким не занимался? Вдруг завалялась программка для МК, желательно на ассемблере.. Ну и советы какие-нибудь приветствуются smile.gif ЦАП MAX507BCNG
mempfis_
Цитата(rasstranger @ May 25 2009, 18:30) *
Нужно передать данные с последовательного порта компа (RS232, естесственно) на AtMega16...


http://atmel.com/dyn/products/app_notes.asp?family_id=607

AVR244: UART as ANSI Terminal Interface
AVR306: Using the AVR UART in C

Даже в документации на AtMega16 есть примеры рабочего кода для работы с uart (на ассемблере и С).
Задача: принять байт или слово, отправить его в паралельный порт управления ЦАП smile.gif
Найдите в приведённых апноутах (а ещё лучше в документации) инициализацию UART, приём символа из UART а дальше делайте с этим символом всё что хотите smile.gif

http://www.gaw.ru/html.cgi/txt/app/micros/avr/index.htm

Тут можно найти на русском по ключевому слову УАПП
Dog Pawlowa
Цитата(rasstranger @ May 25 2009, 18:30) *
Ну и советы какие-нибудь приветствуются smile.gif

Какой нибудь совет.
Продумайте протокол передачи. Или возьмите уже придуманный.
А то сейчас начнется передача двух байт двумя посылками и барахтанье, кто там старший, кто младший.
rasstranger
C USART разобрался.. только вот проблема.. ЦАП-то 12 бит, параллельный вход, то есть необходимо задействовать 2 порта ввода-вывода, а с USART принимается только 1 байт данных.. Нужно как-то считать регистр UDR по прерыванию 2 раза (старший и младший байт), затем выдать их на порты, допустим, старший в портB, младший в портC.. Одновременно, естественно, не получится, тут две команды необходимо задействовать.. Я никак толку не могу дать с этим, ничего в голову не идет..
Палыч
Цитата(rasstranger @ Jun 2 2009, 11:22) *
Одновременно, естественно, не получится, тут две команды необходимо задействовать.. Я никак толку не могу дать с этим, ничего в голову не идет..
Вы переживаете, что не можете одновременно выставить все 12 бит на ЦАП? Не переживайте. Если внимательно посмотреть в документацию на ЦАП, то можно увидеть, что у этой м/с кроме ног D0-D11 есть и другие, которые отвечают за приём кода. Есть CS и WR... В документации приведены сигналы на них при вводе кода в ЦАП.
Dog Pawlowa
Цитата(rasstranger @ Jun 2 2009, 11:22) *
... Я никак толку не могу дать с этим, ничего в голову не идет..

Ну а я что говорил? biggrin.gif

Разбейте 12 бит по 6. Останется два свободных бита в каждом байте. Ими можно закодировать, что где есть старшая половина, а где младшая. А уж как сложить биты опять, может и сумеете.
rasstranger
Спасибо, вроде полегче становится.. понемногу пишется код..
Только задание мне сменили..
Никто не подскажет, как в ОЗУ МК в цифровом виде записать синусоиду, чтобы потом её передать на ЦАП?
Есть мысль записать в ячейки значения углов, при этом синусоиду над осью нужно поднять, чтоб не было отрицательных значений в самой синусоиде..
ищу в инете, нет ничего sad.gif

Вообще, общий смысл теперь таков:
В памяти микроконтроллера записана синусоида, он её выдает на ЦАП, цап преобразует в напряжение и подает на вход модуля АЦП второго МК (хотя можно и на одном все это сделать, мне кажется), где новая синусоида идет через УСАРТ в ком-порт ПК и с помощью проги Terminal by Bray 1.9b выводится график

Для второго МК я код написал(прикреплен), осталось придумать, как синусоиду реализовать...

Нажмите для просмотра прикрепленного файла
Палыч
Цитата(rasstranger @ Jun 2 2009, 16:24) *
В памяти микроконтроллера записана синусоида, он её выдает на ЦАП, цап преобразует в напряжение ... осталось придумать, как синусоиду реализовать...
Собственно, идею Вы уже озвучили. В памяти достаточно иметь только четверть синусоиды: в ячейки памяти заносятся коды ЦАП соответствующие значению sin через равное приращение аргумента. Смещение - прибавление к коду ЦАП некоего кода смещения... Первая четверть синусоиды: вывод через равные промежутки времени на ЦАП значения смещения плюс очередной код из массива синусов; следующая выдача - следующее значение из массива. Вторая четверть: то же, но значения из массива выбираютя начиная с конца массива - к началу. Третья и четвёртая четверти: аналогично первой и второй, но значения из массива вычитаются из смещения. Интервал между выводами на ЦАП - по таймеру или программная задержка. Значения кодов ЦАП для sin прийдётся посчитать "руками" или написать на ПК маленькую программку...
rasstranger
Интервал между выводами на ЦАП - по таймеру или программная задержка...
Ткните носом на какой-нибудь пример, как реализовать программную задержку при выводе в порт.. из задержек знаю только NOP. unsure.gif

Все сильно усложняется тем, что я учил немецкий, перевод документации для меня сущий ад sad.gif
rasstranger
Сделал синусоиду в экселе, первый лист - графики, второй - пояснения.. Частота сигнала и частота дискретизации взяты с потолка.. Попинайте посильнее, главное, по частотам smile.gif

Нажмите для просмотра прикрепленного файла



Да, забыл совсем.. смысл всего этого - исследовать статические характеристики модуля АЦП, в модуле используется 8-битное преобразование, то есть синусоида должна быть более "качественная"
Палыч
Цитата(rasstranger @ Jun 2 2009, 19:35) *
из задержек знаю только NOP.
Собственно, на NOP'ах задержку и делают. Вместо многих NOP пишут цикл выполнения малого (может быть одного) числа NOP'ов
Код
     mov r16, 50; число, заносимое в r16 определяет число выполнений кода ниже
delay:
     nop
     dec r16
     brne delay
Tanya
Цитата(rasstranger @ Jun 2 2009, 23:39) *
Да, забыл совсем.. смысл всего этого - исследовать статические характеристики модуля АЦП, в модуле используется 8-битное преобразование, то есть синусоида должна быть более "качественная"

А зачем для исследования статической характеристики синусоида? Чем пила плоха? Или это очередной диплом?
rasstranger
Диплом smile.gif

Решили просто синусоиду подать и все тут.. пилу все равно не много проще будет, просто точек поменьше чуток, а синусоида нагляднее, да и привычнее
Tanya
Цитата(rasstranger @ Jun 3 2009, 14:01) *
Диплом smile.gif
Решили просто синусоиду подать и все тут.. пилу все равно не много проще будет, просто точек поменьше чуток, а синусоида нагляднее, да и привычнее

Решали-то долго?
Действительно, смешно.
Палыч
Цитата(rasstranger @ Jun 3 2009, 13:01) *
пилу все равно не много проще будет, просто точек поменьше чуток
Ну, да! rolleyes.gif
"Поменьше чуток" - это две: нижняя и верхняя!
rasstranger
Сделаю и пилу тогда, если время останется.. по внешнему прерыванию
По первому - синусоида, по второму - ступенька..
Палыч
Цитата(rasstranger @ Jun 3 2009, 18:46) *
Сделаю и пилу ... по второму - ступенька..
"Пила" и "ступенька" - сигналы разного вида... Возможно, Вас "сбили с пути" мои слова о том, что для пилы требуются всего две точки. Имелось в виду, что для формирования пилы необходимо равномерно наращивать (убавлять) код ЦАП от одного значения до другого.
Tanya
Цитата(Палыч @ Jun 3 2009, 20:16) *
"Пила" и "ступенька" - сигналы разного вида... Возможно, Вас "сбили с пути" мои слова о том, что для пилы требуются всего две точки. Имелось в виду, что для формирования пилы необходимо равномерно наращивать (убавлять) код ЦАП от одного значения до другого.

"Вместе весело шагать...
.......................
Раз ступенька, два ступенька - будет лесенка"
rasstranger
Нет, я все правильно понял про пилу.. просто после преобразования в ЦАП пила все равно будет кучей ступенек, если смотреть на характеристики преобразования.. ЦАП же не идеальный у нас.. И про наращивание сигнала я тоже понял, просто для пилы не нужно вбивать точки (как для синусоиды) в память МК, можно все придумать при помощи цикла..
rasstranger
Все сделал, если кому нужно или просто интересно - пишите - выложу пояснительную записку к диплому и программы на ассемблере для МК...
Генерировал все-таки пилу smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.