Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Быстрый доступ в срам avr
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
yarunt
Подключая АД9280 , быстрый ацп , столкнулся с ситуацией быстрой записи из порта в срам авра.
Частота процессора 16 мег и адс. Все условия типа if,else не использую так-как занимают от 5 до 8 циклов, 67(количество колонок в дисплее) раз делаю запись из порта подключеного адс в срам ,с инкрементом.Такой доступ должен мне должен какбы обеспечить доступ в срам за 2 цикла. Тоесть полезный каждый 2-й цикл,значит 8 мгц выборки.Чтоб увидеть синусоиду на дисплее мне нужно как минимум 5 выборок , делю 8мгц на 5 выборок получаю полезных 1.6 мгц.

Но нетут-то было получается 300кгц с натягом ,подскажите может где-то я в расчетах ошибся?


Проэкт не могу показать так-как в алгоритм билдере. Приму любую критику на свой счет.
GDI
А что за мега, то? может ацп на шину внешней памяти повесить? и работать с ней как с памятью.
yarunt
Цитата(GDI @ Mar 15 2007, 12:56) *
А что за мега, то? может ацп на шину внешней памяти повесить? и работать с ней как с памятью.

Атмега128 . Я уже думал над внешней памятью,но опять же загвоздка в циклах ,доступ к внешней памяти 3 цикла, а не 2-а значит минус 100кг из 300кгц.
Kuzmi4
2 yarunt -
в принципе есть идея , только не знаю поможет она вам или нет - я гляжу вы запихиваете в срам 67 записей(не сильно много но и не сильно мало..), а почему бы не взять фифо буфер - его цена конечно до 50 грн(за 256 или 512 байт - не вспомню счас), но зато можно запихивать данные с большей скоростью (я работал на 10 мгц - влёт записывал 512 байт после сигнала с дну, потом анализ, вроде можно и более скоростную найти...)
yarunt
Цитата(Kuzmi4 @ Mar 15 2007, 13:40) *
2 yarunt -
в принципе есть идея , только не знаю поможет она вам или нет - я гляжу вы запихиваете в срам 67 записей(не сильно много но и не сильно мало..), а почему бы не взять фифо буфер - его цена конечно до 50 грн(за 256 или 512 байт - не вспомню счас), но зато можно запихивать данные с большей скоростью (я работал на 10 мгц - влёт записывал 512 байт после сигнала с дну, потом анализ, вроде можно и более скоростную найти...)

А есть даташит на фифо буфер интересно посмотреть?Но особо нехочеться навесов делать ,все-же пробник.
Kuzmi4
Сча собой нету(диплом у меня такой был), как доберусь домой , могу скинуть даж схемку подключения, если надо - да и там не сильные навороты ....
+ если не сильно быстро буш цифровать - у тя ещё реалтайм может даже получится( в смысле 2 фифо,попеременно юзаеш то 1 то 2, заливка в накопительную вн память нужное кол-во, а потом передача в комп для анализа..)
muravei
Цитата(yarunt @ Mar 15 2007, 11:07) *
Проэкт не могу показать так-как в алгоритм билдере. Приму любую критику на свой счет.

Посмотрите это http://electronix.ru/forum/index.php?showt...26877&st=45
yarunt
Цитата(muravei @ Mar 15 2007, 14:49) *

Да...тема уже поднималась . Заметил еще факт на АД9280 семплирование прои сходит по переднему фронту а это значит 16мгц делим на 2?
mse
Цитата(yarunt @ Mar 15 2007, 11:07) *
Подключая АД9280 , быстрый ацп , столкнулся с ситуацией быстрой записи из порта в срам авра.
Частота процессора 16 мег и адс. Все условия типа if,else не использую так-как занимают от 5 до 8 циклов, 67(количество колонок в дисплее) раз делаю запись из порта подключеного адс в срам ,с инкрементом.Такой доступ должен мне должен какбы обеспечить доступ в срам за 2 цикла. Тоесть полезный каждый 2-й цикл,значит 8 мгц выборки.Чтоб увидеть синусоиду на дисплее мне нужно как минимум 5 выборок , делю 8мгц на 5 выборок получаю полезных 1.6 мгц.

Но нетут-то было получается 300кгц с натягом ,подскажите может где-то я в расчетах ошибся?
Проэкт не могу показать так-как в алгоритм билдере. Приму любую критику на свой счет.

Ха...А из порта читаешь? Из одного? А запуск АЦП делаешь?.. А счоччик какой есть с переходом по условию? Посмотри листинг, чего там твой билдер наворотил.
yarunt
Цитата(Kuzmi4 @ Mar 15 2007, 14:49) *
Сча собой нету(диплом у меня такой был), как доберусь домой , могу скинуть даж схемку подключения, если надо - да и там не сильные навороты ....
+ если не сильно быстро буш цифровать - у тя ещё реалтайм может даже получится( в смысле 2 фифо,попеременно юзаеш то 1 то 2, заливка в накопительную вн память нужное кол-во, а потом передача в комп для анализа..)

Схемку интересно посмотреть, буду признателен. На yarunt@mail.ru
=GM=
Цитата(yarunt @ Mar 15 2007, 08:07) *
Подключая АД9280 , быстрый ацп , столкнулся с ситуацией быстрой записи из порта в срам авра.
Частота процессора 16 мег и адс. Все условия типа if,else не использую так-как занимают от 5 до 8 циклов, 67(количество колонок в дисплее) раз делаю запись из порта подключеного адс в срам ,с инкрементом.Такой доступ должен мне должен какбы обеспечить доступ в срам за 2 цикла. Тоесть полезный каждый 2-й цикл,значит 8 мгц выборки.Чтоб увидеть синусоиду на дисплее мне нужно как минимум 5 выборок , делю 8мгц на 5 выборок получаю полезных 1.6 мгц.

Но не тут-то было, получается 300 кГц с натягом, подскажите может где-то я в расчетах ошибся?
Проект не могу показать так-как в алгоритм билдере. Приму любую критику на свой счет.

Максимально возможной быстроты записи данных из АЦП во внутреннюю память можно достичь двумя командами, повторенными в вашем случае 67 раз.
Код
     in    r16,pinе
     st    x+,r16

Занимает 3 такта на выборку. При 16 МГц это даст 5.3 Мвыборок/с. Для пробника неплохо. Быстрее нельзя, нет никакой возможности. Для синхронизации выборок подайте клоки на АЦП, тогда без труда (в смысле без затрат на синхронизацию) будете читать каждую третью выборку.

Вот такое предложение, но надо забыть про билдер, си и писать на ассемблере. Не хочу разжигить религиозные войны, но си реально замедляет работу программы в 5-10 раз, что для обработки быстрых процессов неприемлемо.

Кстати, идея не моя, она уже реализована, к сожалению, не могу найти ссылку, на компе порядка 300000 неразобранных файлов, уже трудно ориентироваться(:-(.
yarunt
Цитата(mse @ Mar 15 2007, 15:19) *
Ха...А из порта читаешь? Из одного? А запуск АЦП делаешь?.. А счоччик какой есть с переходом по условию? Посмотри листинг, чего там твой билдер наворотил.

Ну вот пример;
AD_TO PIN
|
$200->y
|
0-> threestate \\ включаем адс
pine->[y++] \\ записываем с порт е в срам с инкриментом
pine->[y++] \\ записываем с порт е в срам с инкриментом
pine->[y++] \\ записываем с порт е в срам с инкриментом
......
и так 67 раз
1-> threestate \\ выключаем адс
|
SR_TO LCD \\ выводим на дисплей
RET \\ назад
=GM=
Нажмите для просмотра прикрепленного файла
Цитата(yarunt @ Mar 15 2007, 11:34) *
Ну вот пример;
AD_TO PIN
|
$200->y
|
0-> threestate \\ включаем адс
pine->[y++] \\ записываем с порт е в срам с инкриментом
pine->[y++] \\ записываем с порт е в срам с инкриментом
pine->[y++] \\ записываем с порт е в срам с инкриментом
......
и так 67 раз
1-> threestate \\ выключаем адс
|
SR_TO LCD \\ выводим на дисплей
RET \\ назад

Ну вот, я говорил, что си замедляет в 5-10 раз, а билдер, значит, ещё больше. Вы с трудом получаете 300 кГц, по сравнению с потенциально достижимым 5333 билдер проигрывает в 17 раз.

Вот, посмотрите, откопал один снапшот с тем пробником на 5333 кГц.
yarunt
Ну вот, я говорил, что си замедляет в 5-10 раз, а билдер, значит, ещё больше. Вы с трудом получаете 300 кГц, по сравнению с потенциально достижимым 5333 билдер проигрывает в 17 раз.

Вот, посмотрите, откопал один снапшот с тем пробником на 5333 кГц.
[/quote]
Вопрос а запись в стек быстрее ,ато мне кажется инкримент добавляет один цикл? Ну а по билдеру это тот-же ассемблер глюков своих в нем хватает.
muravei
Цитата(=GM= @ Mar 15 2007, 14:51) *
Ну вот, я говорил, что си замедляет в 5-10 раз, а билдер, значит, ещё больше. Вы с трудом получаете 300 кГц, по сравнению с потенциально достижимым 5333 билдер проигрывает в 17 раз.

Да не замедляет Билдер, это руки кривые замедляют, на Билдере можно писать таже как и на Асм , команда в команду.
И зачем запуск АЦП делать ? Пусть себе молотит по клокам АВР.
Просто читаете порт и сохраняете с постинкрементом .
PINX->tmp
tmp->[Y++]
.
.
.


Надо было делать на Мегах 48-88 все быстрее -20 мГц.
А запись в стек теже 2 такта.
=GM=
Цитата(yarunt @ Mar 15 2007, 12:02) *
Вопрос, а запись в стек быстрее, а то мне кажется, инкримент добавляет один цикл? Ну а по билдеру это тот-же ассемблер глюков своих в нем хватает.

Значит, по билдеру я не прав. Вообще, я про него ничего толком не знаю, и сужу о нём только с ваших слов о выборке в 300 кГц...

Запись в стек занимает те же 3 такта на выборку, только мороки чуток побольше. Есть ещё один вариант, запись из порта в 32 регистра, 1 такт на выборку, так-то не надо - слишком мало выборок, но можно залудить какую-нибудь электронную лупу (трёхкратную) в заданное время.

Вот еще мысль пришла в голову. Лучше тактировать АЦП не от клоков МК, а с выхода оср, тогда можно будет менять частоту выборок, а следовательно и развёртку, динамически.

И сделайте не 67 выборок, а раз в 10-20 побольше, весь буфер можно будет просматривать в режиме окна. Иногда удобно, особенно для однократных процессов.
muravei
Цитата(=GM= @ Mar 15 2007, 17:05) *
Вот еще мысль пришла в голову. Лучше тактировать АЦП не от клоков МК, а с выхода оср, тогда можно будет менять частоту выборок, а следовательно и развёртку, динамически.

А я давно думаю, чем бы это сделать внешним .
И хорошо бы найти FIFO 16x8 или 32x8 и можно сделать "отрицательное" время.
=GM=
Цитата(muravei @ Mar 15 2007, 14:36) *
Цитата(=GM= @ Mar 15 2007, 14:05) *
Вот еще мысль пришла в голову. Лучше тактировать АЦП не от клоков МК, а с выхода оср, тогда можно будет менять частоту выборок, а следовательно и развёртку, динамически

А я давно думаю, чем бы это сделать внешним

Недопонял(:-). Чем оср хуже?

Цитата(muravei @ Mar 15 2007, 14:36) *
И хорошо бы найти FIFO 16x8 или 32x8 и можно сделать "отрицательное" время

Для периодических сигналов легко сделать, запускаете в Т=Тразв-Тнегатив.
Для непериодических можно писать всё время, не дожидаясь начала развертки, по кругу, при появлении импульса запуска оставлять часть буфера нетронутой в качестве отрицательного времени.

Вообще, большой вопрос, нужно ли оно, это отрицательное время?
muravei
Цитата(=GM= @ Mar 15 2007, 18:41) *
Для непериодических можно писать всё время, не дожидаясь начала развертки, по кругу, при появлении импульса запуска оставлять часть буфера нетронутой в качестве отрицательного времени.

Вообще, большой вопрос, нужно ли оно, это отрицательное время?

Для МК это будет криво- нужно же будет переходить с конца на начало.
А отрицательное время нужно хотябы для того , что бы увидеть момент синхронизации . а то пока МК доберется до записи, куча тактов пройдет.
SasaVitebsk
Если использовать IAR C, то я думаю потерь вообще не будет по сравнению с ассемблером. Или почти не будет в данном куске проги. Это я проверял неоднократно.

Если использовать ADC как внешнюю память, то можно по сигналу RD сформировать оставшуюся диаграмму (например запуск).
=GM=
Цитата(muravei @ Mar 15 2007, 16:01) *
Для МК это будет криво- нужно же будет переходить с конца на начало.
А отрицательное время нужно хотябы для того, чтобы увидеть момент синхронизации, а то пока МК доберется до записи, куча тактов пройдет.

Пожертвовать одним тактом на выборку, сделать andi xh,0x03, чтобы крутиться по памяти, а время засекать по импульсу запуска в icr. Потом это всё ж таки пробник, хоть и осциллографический...
bodja74
Тактирование АЦП от таймера и запись по четырем тактам проца
1 port->R
2 R->[x++] (2 такта)
3 nop

- это можно уже сказать классика ,я уже на этом зубы сьел на подобных приборах,тем более на билдере smile.gif,так что не придумывайте ничего нового.
Нужно будет синхронизировать клок АЦП с выборкой в порт,а так должно работать ,
еще ,выделите память на считывание не 67 ,а 512 байт ,вам потом будет легче делать программный делитель частоты ,а потом непринужденно перейти на условия.
=GM=
Цитата(bodja74 @ Mar 15 2007, 16:52) *
Тактирование АЦП от таймера и запись по четырем тактам проца
1 port->R
2 R->[x++] (2 такта)
3 nop

- это можно уже сказать классика ,я уже на этом зубы сьел на подобных приборах,тем более на билдере smile.gif,так что не придумывайте ничего нового.
Нужно будет синхронизировать клок АЦП с выборкой в порт,а так должно работать ,
еще ,выделите память на считывание не 67 ,а 512 байт ,вам потом будет легче делать программный делитель частоты ,а потом непринужденно перейти на условия.

Богдан, а зачем ноп поставили? Без него быстрее будет, сравните 5333 Квыборки/с без нопа и 4000 с нопом.
yarunt
Цитата(bodja74 @ Mar 15 2007, 20:52) *
Тактирование АЦП от таймера и запись по четырем тактам проца
1 port->R +1такт
2 R->[x++] (2 такта)
3 nop

- это можно уже сказать классика ,я уже на этом зубы сьел на подобных приборах,тем более на билдере smile.gif,так что не придумывайте ничего нового.
Нужно будет синхронизировать клок АЦП с выборкой в порт,а так должно работать ,
еще ,выделите память на считывание не 67 ,а 512 байт ,вам потом будет легче делать программный делитель частоты ,а потом непринужденно перейти на условия.

А разве порт в регистр еще такт не добавляет?
muravei
Цитата(=GM= @ Mar 15 2007, 18:41) *
Недопонял(:-). Чем оср хуже?

А помоему он минимально на 2 делит , а на 1 нет (Можно попробовать занести в него 0)
И как он соотносится с вводом с PIN
Kuzmi4
2 yarunt - название микрухи CY7C421 ..
В приложеном файле - схема подключения(в пикаде).
yarunt
Цитата(Kuzmi4 @ Mar 16 2007, 11:46) *
2 yarunt - название микрухи CY7C421 ..
В приложеном файле - схема подключения(в пикаде).

Если вас не затруднит ,можно в чпеге , п када нет ,рисую в рус-плане.
bodja74
Цитата(yarunt @ Mar 16 2007, 10:29) *
А разве порт в регистр еще такт не добавляет?

Нет не добавляет ,это битовые команды с портами занимают 2 такта.

Цитата
Богдан, а зачем ноп поставили? Без него быстрее будет, сравните 5333 Квыборки/с без нопа и 4000 с нопом.


На шкале делителя частоты деления 25,50,100 ms/Div и т.д. "приятнее" смотрятся и хорошо делятся
для 16 и 20мгц тактовой.
Kuzmi4
2 yarunt -
та схема проста - на вход подаёш через мелкие резисторы цифру с ацп, выход на контроллер.
Есть такие полезные лапки как - показатели пустого, половину заполненного и полного, ну ессно Лапки для записи.+ там есть разные моды - но то уже в ДШ читай..
Ничего сложного в принципе нету если использовать стандартные режимы....
Схема можно сказать классическая - всё не влезло - в выше прицепленном схематике - была целая страница.но я думаю и поэтой скринке всё ясно

Хотя тут где то обсуждался похожий вопрос и ,я так помню, его решали с помощью мег (идея в принципе аналогичная что и с фифо для непрерывного потока)- синхронизация для каждой делалсь, отсчёты - все дела ...так дешевле, в принципе, но если ты хош взять частоту где то под 30 мгц и данных тебе надо не сильно много(в смысле штук до 512 - до объёма фифо smile.gif ), то чтоб не хитромудриться, по моему фифо оптимальный вариант...
yarunt
a14.gif Спасибо за инфу ,поеду закажу микруху.
GDI
Пару лет назад я такую микруху на сайте кипресса как семпл заказывал, прислали 4 штуки, если не ошибаюсь, где то через 1,5 месяца
µµC
Цитата(yarunt @ Mar 15 2007, 12:07) *
Приму любую критику на свой счет.


Можно просто взять другой контроллер, более подходящий для этой работы. Скажем PIC. По цене меги (PIC24HJ128GP206 в тритоне покупал за $6.01), считывать порт умеет каждый цикл - 40 мегасемплов. USB программатор в том же тритоне $41 (pickit 2), и будет щастя.
yarunt
Отвлекся от темы ,борол сименс дисплей сх65. Спасибо всем за советы a14.gif Для начала побпробую срам навесить как фифо ,если не пойдет то фифо в оригинале.
muravei
Цитата(yarunt @ Mar 20 2007, 09:39) *
Для начала побпробую срам навесить как фифо

Боюсь что вокруг много нужно будет сделать.
Цитата(µµC @ Mar 20 2007, 05:01) *
Можно просто взять другой контроллер, более подходящий для этой работы. Скажем PIC. По цене меги (PIC24HJ128GP206 в тритоне покупал за $6.01), считывать порт умеет каждый цикл - 40 мегасемплов. USB программатор в том же тритоне $41 (pickit 2), и будет щастя.

А что Пик уже не делит тактовую частоту на 4?
yarunt
Снял со старой материнки срам GLT751208-15t ,может кто подкинет даташит?
yarunt
Цитата(Kuzmi4 @ Mar 20 2007, 13:49) *

На аллдаташите я уже смотрел там нет,может есть аналог ее ,посмотрел бы по аналогу glare.gif
µµC
Цитата(muravei @ Mar 20 2007, 11:33) *
А что Пик уже не делит тактовую частоту на 4?


И делит тактовую и умножает в широком диапазоне. На входе может быть частота от 1.6 до 16 МГц, на выходе производительность до 40 МИПС. А для данного проекта нужно максимум 32 мегасемпла, значит 32 МИПС для пика.
muravei
Цитата(µµC @ Mar 20 2007, 05:01) *
Можно просто взять другой контроллер, более подходящий для этой работы. Скажем PIC. По цене меги (PIC24HJ128GP206 в тритоне покупал за $6.01), считывать порт умеет каждый цикл - 40 мегасемплов.

Да уж тогда нормальный АРМ и не парится.
µµC
Цитата(muravei @ Mar 20 2007, 14:25) *
Да уж тогда нормальный АРМ и не парится.


Можно и ARM. Кстати, какой из них справится с 32 мерасемплами? Могу сильно ошибаться, но судя по первым lpc2xxx, c периферией они работают значительно медленнее, чем та же мега.
viael
Цитата(muravei @ Mar 20 2007, 15:25) *
Да уж тогда нормальный АРМ и не парится.


Вряд ли нормальный АРМ сможет так быстро ногами дергать.
=GM=
Цитата(viael @ Mar 20 2007, 12:31) *
Вряд ли нормальный АРМ сможет так быстро ногами дергать.

Был проект на TMS320C5402, клок 100 МГц, читал периферию в память со скоростью 100 МГц, всего одна команда. Проц старенький, конечно, но памяти было - вагон.

Щас наверное, такое можно сделать на TMS320C55хх, заодно и потребление будет поменьше.
Nanobyte
Цитата(yarunt @ Mar 20 2007, 13:04) *
На аллдаташите я уже смотрел там нет,может есть аналог ее ,посмотрел бы по аналогу glare.gif

Посмотрите здесь:
http://www.datasheetcatalog.net/cgi-bin/he...p;action=Search
Не совсем то, но других аналогов найдёте много.
yarunt
Цитата(Nanobyte @ Mar 21 2007, 00:05) *
Посмотрите здесь:
http://www.datasheetcatalog.net/cgi-bin/he...p;action=Search
Не совсем то, но других аналогов найдёте много.

Спасибки ситуация немного прояснилась.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.