Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: максимальная скорость COM-порта?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
skopus
Здравствуйте!
Прошу вашей помощи по алгоритму задачи.

Есть контроллер AS-megaM на основе Atmega128 с кварцем 7.232 Мгц.

Стоит задача сделать из него генератор синусоидального сигнала с частотой 780гц . То есть в ком-порт будут отправляться дискретные значения амплитуды, которые беруться из таблицы, хранящейся в памяти контроллера, а верхний софт считает все это из порта и будет выводить на экран в виде графика. Казалось, все довольно просто но!...

1/780 = 0.00128205 секунды
за это время нужно отправить 25 послыок по 18 бит (так как значение амплитуды 16 разрядное)
получается, что COM-порт должен работать на частоте 780*25*18=351000 Гц.

Это же не реально, не так ли? Или есть какой-то другой способ?
yung
Вообще, как-то все странно. Какой смысл брать 16-разрядную точность для амплитуды, если всего 25 выборок на период? Искажения гораздо больше отсюда будут (малое число отсчетов на период). ИМХО, разрядность квантования и дискретизации должна быть сопоставима.
ValeraVi
2 skopus
при UBRR = 0 и U2X = 1 на вашем кварце мега128 может работать и на 904000 bps (RTFM) ... Проблемы могут возникнуть только если вы это дело будете связывать по ком порту с ПК ... хотя ... и они решаемые...
rat
Вообще говоря 25 выборок очень мало, но если их хватает и 25, то должно хватать 6-8 разрядов, 16 совершенно не к чему, если все-таки нужен приличный синус, то ставь ЦАП 8-разрядов, 64 или 128 выборок, а после активный фильтр, лучше 2 , второго порядка каждый, у меня в такой схеме искажения были лучше 0.1%
CDT
Цитата(skopus @ Sep 1 2005, 00:39)
Стоит задача сделать из него генератор синусоидального сигнала с частотой 780гц . То есть в ком-порт будут отправляться дискретные значения амплитуды, которые беруться из таблицы, хранящейся в памяти контроллера, а верхний софт считает все это из порта и будет выводить на экран в виде графика.
*

Интересно, а что, верхний софт такой тупой, что сам не может содержать таблицы синуса и брать их из своей памяти, что бы вывести на экран?
NickB
Может быть стоит подумать о реализации синуса по методу DDS?
А передавать только значение частоты
Посмотрите напримет на телесистемах проект Леонида Ивановича
skopus
Понимаете, задачу ставил не я. Роль ЦАП играет компьютер. Выборок 25. Амплитуда 16- разрядная. Это условие. Менять его нельзя. Это что-то вроде тестововй задачи.
Искажения сейчас не имеют никакого значения. Нужно, чтоб картинка была похоже на синус хотя бы приблизительно.
Быстродействия меги хватит, но меня беспокоит именно проблема слишком высокой скорости передачи данных по com-порту. Может можно обойти этот момент как-то алгоритмически?
BVU
Цитата(skopus @ Sep 1 2005, 01:39)
1/780 = 0.00128205 секунды
за это время нужно отправить 25 послыок по 18 бит (так как значение амплитуды 16 разрядное)
*


Вы можете передавать значения приращения сигнала (дельта-модуляция) это уменьшит разрядность Ваших данных, что 'разгрузит' скорость передачи.
skopus
Цитата(BVU @ Sep 1 2005, 11:20)
Цитата(skopus @ Sep 1 2005, 01:39)
1/780 = 0.00128205 секунды
за это время нужно отправить 25 послыок по 18 бит (так как значение амплитуды 16 разрядное)
*


Вы можете передавать значения приращения сигнала (дельта-модуляция) это уменьшит разрядность Ваших данных, что 'разгрузит' скорость передачи.
*




но ведь если посылка будет 10 байт а не 18, то все равно получается 780*25*10=195000 - это же больше стандартной скорости 115200.
BVU
Цитата(skopus @ Sep 1 2005, 12:28)
Цитата(BVU @ Sep 1 2005, 11:20)
Цитата(skopus @ Sep 1 2005, 01:39)
1/780 = 0.00128205 секунды
за это время нужно отправить 25 послыок по 18 бит (так как значение амплитуды 16 разрядное)
*


Вы можете передавать значения приращения сигнала (дельта-модуляция) это уменьшит разрядность Ваших данных, что 'разгрузит' скорость передачи.
*




но ведь если посылка будет 10 байт а не 18, то все равно получается 780*25*10=195000 - это же больше стандартной скорости 115200.
*



Хорошо давайте так - передавайте скорость изменения вашего сигнала (ускорение). Может быть в 8-бит то уложитесь, а Программе на PC отдать всю остальную обработку по восстановлению сигнала.
По всей видимости 'в лоб' эта не решается (1 выборка значения -> передача в порт). Если уж связались с COM портом здесь необходима информационная компрессия при граничной скорости передачи (во времени).
Есть еще вариант: необходимо рассмотреть, как быстро надо перестраивать параметры амплитуды, частоты и фазы вашего синуса? Передаете Вашей PC программе 'блоком' эти три значения, при изменении снова 'блок' и т.д.
skopus
Цитата(BVU @ Sep 1 2005, 11:56)
Цитата(skopus @ Sep 1 2005, 12:28)
Цитата(BVU @ Sep 1 2005, 11:20)
Цитата(skopus @ Sep 1 2005, 01:39)
1/780 = 0.00128205 секунды
за это время нужно отправить 25 послыок по 18 бит (так как значение амплитуды 16 разрядное)
*


Вы можете передавать значения приращения сигнала (дельта-модуляция) это уменьшит разрядность Ваших данных, что 'разгрузит' скорость передачи.
*




но ведь если посылка будет 10 байт а не 18, то все равно получается 780*25*10=195000 - это же больше стандартной скорости 115200.
*



Хорошо давайте так - передавайте скорость изменения вашего сигнала (ускорение).
*



Ускорение - это вторая производная от синуса. То есть -sin. От этого ничего не меняется абсолютно, но идея красивая smile.gif
BVU
Цитата(skopus @ Sep 1 2005, 13:04)
Цитата(BVU @ Sep 1 2005, 11:56)
Цитата(skopus @ Sep 1 2005, 12:28)
Цитата(BVU @ Sep 1 2005, 11:20)
Цитата(skopus @ Sep 1 2005, 01:39)
1/780 = 0.00128205 секунды
за это время нужно отправить 25 послыок по 18 бит (так как значение амплитуды 16 разрядное)
*


Вы можете передавать значения приращения сигнала (дельта-модуляция) это уменьшит разрядность Ваших данных, что 'разгрузит' скорость передачи.
*




но ведь если посылка будет 10 байт а не 18, то все равно получается 780*25*10=195000 - это же больше стандартной скорости 115200.
*



Хорошо давайте так - передавайте скорость изменения вашего сигнала (ускорение).
*



Ускорение - это вторая производная от синуса. То есть -sin. От этого ничего не меняется абсолютно, но идея красивая smile.gif
*



cool.gif бывает 'зарапортовался'.
Но есть еще возможность - как поднять тактовую частоту Вашего mega128 на кварце скажем 16.000000Mz и получить максимально совместимые для PC скорость передачи по COM порту в 256000.
skopus
Цитата(BVU @ Sep 1 2005, 12:15)
Цитата(skopus @ Sep 1 2005, 13:04)
Цитата(BVU @ Sep 1 2005, 11:56)
Цитата(skopus @ Sep 1 2005, 12:28)
Цитата(BVU @ Sep 1 2005, 11:20)
Цитата(skopus @ Sep 1 2005, 01:39)
1/780 = 0.00128205 секунды
за это время нужно отправить 25 послыок по 18 бит (так как значение амплитуды 16 разрядное)
*


Вы можете передавать значения приращения сигнала (дельта-модуляция) это уменьшит разрядность Ваших данных, что 'разгрузит' скорость передачи.
*




но ведь если посылка будет 10 байт а не 18, то все равно получается 780*25*10=195000 - это же больше стандартной скорости 115200.
*



Хорошо давайте так - передавайте скорость изменения вашего сигнала (ускорение).
*



Ускорение - это вторая производная от синуса. То есть -sin. От этого ничего не меняется абсолютно, но идея красивая smile.gif
*



cool.gif бывает 'зарапортовался'.
Но есть еще возможность - как поднять тактовую частоту Вашего mega128 на кварце скажем 16.000000Mz и получить максимально совместимые для PC скорость передачи по COM порту в 256000.
*



проще припаять обычный ЦАП, чем заменить кварц... Скорее всего так и придется сделать.
bzx
1. А что если работать с LPT? Подключить непосредственно к нему ЦАП. Как?
2. А почему бы не использовать звуковую карту PC. Она 16бит. Очень много софта для работы со звуковой картой?
BVU
Цитата(skopus @ Sep 1 2005, 14:38)
проще припаять обычный ЦАП, чем заменить кварц... Скорее всего так и придется сделать.
*


А смысл передачи данных на COM порт тогда в чем был? Только что бы посмотреть картинку генерируемого сигнала? cranky.gif
Наверно с этого и надо было начинать ("припаять обычный ЦАП"), если Вы собирались делать обыкновенный генератор синусоидального сигнала. А средством визуализации Вашего сигнала при прохождении всевозможных трактов является тривиальный осцилограв или примочка к PC (в данном случае, что доступнее). smile.gif
skopus
Цитата(BVU @ Sep 1 2005, 14:04)
Цитата(skopus @ Sep 1 2005, 14:38)
проще припаять обычный ЦАП, чем заменить кварц... Скорее всего так и придется сделать.
*


А смысл передачи данных на COM порт тогда в чем был? Только что бы посмотреть картинку генерируемого сигнала? cranky.gif
Наверно с этого и надо было начинать ("припаять обычный ЦАП"), если Вы собирались делать обыкновенный генератор синусоидального сигнала. А средством визуализации Вашего сигнала при прохождении всевозможных трактов является тривиальный осцилограв или примочка к PC (в данном случае, что доступнее). smile.gif
*



да нет же. Это тестовая задача. Изменять условие в принципе нельзя. Но если возникнет конфликт физической нереализуемости, то можно попробовать договориться с заказчиком. И кроме того за ЦАп еще надо в магазин съездить, а ком-порты в пределах досигаемости. Пока я все еще пробую наладить связь через ком. Но если не получится, тогда придется заморачиваться с цапом
skopus
Цитата(bzx @ Sep 1 2005, 13:56)
1. А что если работать с LPT? Подключить непосредственно к нему ЦАП. Как?
2. А почему бы не использовать звуковую карту PC. Она 16бит. Очень много софта для работы со звуковой картой?
*


это все излишне усложняет задачу. И удорожает реализацию. Все выдумки по поводу цап оплачивать придется из своего кармана sad.gif это не есть хорошо
bzx
Цитата(skopus @ Sep 1 2005, 15:32)
это все излишне усложняет задачу. И удорожает реализацию. Все выдумки по поводу цап оплачивать придется из своего кармана sad.gif это не есть хорошо
*

Каким это местом вывод гармонического сигнала частотой 780Гц через звуковую карту усложнит задачу и, тем более, удорожает реализацию? Никопейки не будет потрачено! (Если есть звуковая карта) Более того, сидеть с паяльником не придётся!
BVU
Цитата(bzx @ Sep 1 2005, 16:55)
Цитата(skopus @ Sep 1 2005, 15:32)
это все излишне усложняет задачу. И удорожает реализацию. Все выдумки по поводу цап оплачивать придется из своего кармана sad.gif это не есть хорошо
*

Каким это местом вывод гармонического сигнала частотой 780Гц через звуковую карту усложнит задачу и, тем более, удорожает реализацию? Никопейки не будет потрачено! (Если есть звуковая карта) Более того, сидеть с паяльником не придётся!
*



А это действительно вариант! Причем кроме DAC и согласование со входом звуковой карты самому делать ничего не потребуется. Софта на PC для этого предостаточно (бери любую "аудио студию").
Правда должно быть еще одно условие - наличие у контроллера свободного параллельного порта. Либо организовывать все это через другие интерфейсы (последовательные) реализованные на DAC.
_sR_
Цитата(skopus @ Sep 1 2005, 11:15)
Быстродействия меги хватит, но меня беспокоит именно проблема слишком высокой скорости передачи данных по com-порту.
*

Мне в свое время помог HiSerial
CDT
Цитата(skopus @ Sep 1 2005, 14:54)
да нет же. Это тестовая задача. Изменять условие в принципе нельзя. Но если возникнет конфликт физической нереализуемости, то можно попробовать договориться с заказчиком. И кроме того за ЦАп еще надо в магазин съездить, а ком-порты в пределах досигаемости. Пока я все еще пробую наладить связь через ком. Но если не получится, тогда придется заморачиваться с цапом
*

Жалко человека.
Ну тогда есть такая штука, как АДИКМ, когда периодически передаются истинные значения сигнала, а между ними - только отклонение нового значения от истинного или соседнего.
Посмотрите протокол кодирования в телефонах GSM, где на скорости 4800 передается речь (300-3000Гц).
Самое эффективное - передать PC частоту и амплитуду (4 байта) и пусть рисует.
skopus
Цитата(bzx @ Sep 1 2005, 15:55)
Цитата(skopus @ Sep 1 2005, 15:32)
это все излишне усложняет задачу. И удорожает реализацию. Все выдумки по поводу цап оплачивать придется из своего кармана sad.gif это не есть хорошо
*

Каким это местом вывод гармонического сигнала частотой 780Гц через звуковую карту усложнит задачу и, тем более, удорожает реализацию? Никопейки не будет потрачено! (Если есть звуковая карта) Более того, сидеть с паяльником не придётся!
*



усложняет тем, что придется это еще все придумать. Я не знаю как это сделать. Даже если мой контроллер будет по какому-нибудь выводу выдавать значения с частотой 780 гц. Что дальше? неужели провод в аудио-вход воткнуть?
skopus
Цитата(CDT @ Sep 2 2005, 07:19)
Цитата(skopus @ Sep 1 2005, 14:54)
да нет же. Это тестовая задача. Изменять условие в принципе нельзя. Но если возникнет конфликт физической нереализуемости, то можно попробовать договориться с заказчиком. И кроме того за ЦАп еще надо в магазин съездить, а ком-порты в пределах досигаемости. Пока я все еще пробую наладить связь через ком. Но если не получится, тогда придется заморачиваться с цапом
*

Жалко человека.

Самое эффективное - передать PC частоту и амплитуду (4 байта) и пусть рисует.
*



это откровенный обман. Цель задачи в том, чтоб контроллер был генератором, а PC был цап+осцилограф
BVU
И нечего думать bzx предложил Вам наиболее оптимальный вариант, как по временным, так и по материальным затратам. А заказчику не все ли равно как пройдет демонстрация изделия по COM или аудио-входу...!? cheers.gif
skopus
Цитата(BVU @ Sep 2 2005, 15:30)
И нечего думать bzx предложил Вам наиболее оптимальный вариант, как по временным, так и по материальным затратам.  А заказчику не все ли равно как пройдет демонстрация изделия по COM или аудио-входу...!?  cheers.gif
*


Ну посмотрим. Я решил воспользоваться хитростью, которая применяется при передаче телевизионного сигнала. А именно передавать не весь кадр целиком, а сначала четные строки, а потом нечетные. Думаю, что эту идею легко перенести и на мою задачу. А аудиокарта... я уже говорил. Я ни разу так не делал. Это "новые горизонты". Не факт что я смогу съэкономить на этом время.

В любом случае, я очень признателен всем, кто откликнулся. smile.gif хороший форум
skopus
Цитата(_sR_ @ Sep 1 2005, 22:52)
Цитата(skopus @ Sep 1 2005, 11:15)
Быстродействия меги хватит, но меня беспокоит именно проблема слишком высокой скорости передачи данных по com-порту.
*

Мне в свое время помог HiSerial
*



эта штука черезчур сильно аппаратно-зависима sad.gif
_sR_
Цитата(skopus @ Sep 2 2005, 18:45)
эта штука черезчур сильно аппаратно-зависима sad.gif
*

а Вы не пугайтесь черезчур
не много РАЗНЫХ микросхем Вам встретится (тем более последнее время). Я в свое время не смог найти мать, которая не смогла бы работать на частотах более 115200 (хотя допускаю что мне повезло).
По крайней мере мне кажется что это самый простой вариант перед выбором других альтернатив.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.