|
Быстрый доступ в срам avr, Осц.пробник |
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 43)
|
Mar 15 2007, 14:19
|
Знающий
   
Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693

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

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(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 неразобранных файлов, уже трудно ориентироваться(:-(.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Mar 15 2007, 14:34
|

Местный
  
Группа: Участник
Сообщений: 215
Регистрация: 13-12-06
Из: fghgfh
Пользователь №: 23 476

|
Цитата(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 \\ назад
--------------------
|
|
|
|
|
Mar 15 2007, 14:51
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
colourStrips.bmp ( 23.24 килобайт )
Кол-во скачиваний: 73Цитата(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 кГц.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Mar 15 2007, 15:02
|

Местный
  
Группа: Участник
Сообщений: 215
Регистрация: 13-12-06
Из: fghgfh
Пользователь №: 23 476

|
Ну вот, я говорил, что си замедляет в 5-10 раз, а билдер, значит, ещё больше. Вы с трудом получаете 300 кГц, по сравнению с потенциально достижимым 5333 билдер проигрывает в 17 раз.
Вот, посмотрите, откопал один снапшот с тем пробником на 5333 кГц. [/quote] Вопрос а запись в стек быстрее ,ато мне кажется инкримент добавляет один цикл? Ну а по билдеру это тот-же ассемблер глюков своих в нем хватает.
--------------------
|
|
|
|
|
Mar 15 2007, 16:28
|

Гуру
     
Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591

|
Цитата(=GM= @ Mar 15 2007, 14:51)  Ну вот, я говорил, что си замедляет в 5-10 раз, а билдер, значит, ещё больше. Вы с трудом получаете 300 кГц, по сравнению с потенциально достижимым 5333 билдер проигрывает в 17 раз. Да не замедляет Билдер, это руки кривые замедляют, на Билдере можно писать таже как и на Асм , команда в команду. И зачем запуск АЦП делать ? Пусть себе молотит по клокам АВР. Просто читаете порт и сохраняете с постинкрементом . PINX->tmp tmp->[Y++] . . . Надо было делать на Мегах 48-88 все быстрее -20 мГц. А запись в стек теже 2 такта.
|
|
|
|
|
Mar 15 2007, 17:05
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(yarunt @ Mar 15 2007, 12:02)  Вопрос, а запись в стек быстрее, а то мне кажется, инкримент добавляет один цикл? Ну а по билдеру это тот-же ассемблер глюков своих в нем хватает. Значит, по билдеру я не прав. Вообще, я про него ничего толком не знаю, и сужу о нём только с ваших слов о выборке в 300 кГц... Запись в стек занимает те же 3 такта на выборку, только мороки чуток побольше. Есть ещё один вариант, запись из порта в 32 регистра, 1 такт на выборку, так-то не надо - слишком мало выборок, но можно залудить какую-нибудь электронную лупу (трёхкратную) в заданное время. Вот еще мысль пришла в голову. Лучше тактировать АЦП не от клоков МК, а с выхода оср, тогда можно будет менять частоту выборок, а следовательно и развёртку, динамически. И сделайте не 67 выборок, а раз в 10-20 побольше, весь буфер можно будет просматривать в режиме окна. Иногда удобно, особенно для однократных процессов.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Mar 15 2007, 18:41
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

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

Гуру
     
Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591

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

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(muravei @ Mar 15 2007, 16:01)  Для МК это будет криво- нужно же будет переходить с конца на начало. А отрицательное время нужно хотябы для того, чтобы увидеть момент синхронизации, а то пока МК доберется до записи, куча тактов пройдет. Пожертвовать одним тактом на выборку, сделать andi xh,0x03, чтобы крутиться по памяти, а время засекать по импульсу запуска в icr. Потом это всё ж таки пробник, хоть и осциллографический...
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Mar 15 2007, 19:52
|
Знающий
   
Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984

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

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(bodja74 @ Mar 15 2007, 16:52)  Тактирование АЦП от таймера и запись по четырем тактам проца 1 port->R 2 R->[x++] (2 такта) 3 nop - это можно уже сказать классика ,я уже на этом зубы сьел на подобных приборах,тем более на билдере  ,так что не придумывайте ничего нового. Нужно будет синхронизировать клок АЦП с выборкой в порт,а так должно работать , еще ,выделите память на считывание не 67 ,а 512 байт ,вам потом будет легче делать программный делитель частоты ,а потом непринужденно перейти на условия. Богдан, а зачем ноп поставили? Без него быстрее будет, сравните 5333 Квыборки/с без нопа и 4000 с нопом.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Mar 16 2007, 10:29
|

Местный
  
Группа: Участник
Сообщений: 215
Регистрация: 13-12-06
Из: fghgfh
Пользователь №: 23 476

|
Цитата(bodja74 @ Mar 15 2007, 20:52)  Тактирование АЦП от таймера и запись по четырем тактам проца 1 port->R +1такт 2 R->[x++] (2 такта) 3 nop - это можно уже сказать классика ,я уже на этом зубы сьел на подобных приборах,тем более на билдере  ,так что не придумывайте ничего нового. Нужно будет синхронизировать клок АЦП с выборкой в порт,а так должно работать , еще ,выделите память на считывание не 67 ,а 512 байт ,вам потом будет легче делать программный делитель частоты ,а потом непринужденно перейти на условия. А разве порт в регистр еще такт не добавляет?
--------------------
|
|
|
|
|
Mar 16 2007, 16:22
|
Знающий
   
Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984

|
Цитата(yarunt @ Mar 16 2007, 10:29)  А разве порт в регистр еще такт не добавляет? Нет не добавляет ,это битовые команды с портами занимают 2 такта. Цитата Богдан, а зачем ноп поставили? Без него быстрее будет, сравните 5333 Квыборки/с без нопа и 4000 с нопом. На шкале делителя частоты деления 25,50,100 ms/Div и т.д. "приятнее" смотрятся и хорошо делятся для 16 и 20мгц тактовой.
Сообщение отредактировал bodja74 - Mar 16 2007, 16:23
|
|
|
|
|
Mar 16 2007, 16:36
|

Гуру
     
Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329

|
2 yarunt - та схема проста - на вход подаёш через мелкие резисторы цифру с ацп, выход на контроллер. Есть такие полезные лапки как - показатели пустого, половину заполненного и полного, ну ессно Лапки для записи.+ там есть разные моды - но то уже в ДШ читай.. Ничего сложного в принципе нету если использовать стандартные режимы.... Схема можно сказать классическая - всё не влезло - в выше прицепленном схематике - была целая страница.но я думаю и поэтой скринке всё ясно Хотя тут где то обсуждался похожий вопрос и ,я так помню, его решали с помощью мег (идея в принципе аналогичная что и с фифо для непрерывного потока)- синхронизация для каждой делалсь, отсчёты - все дела ...так дешевле, в принципе, но если ты хош взять частоту где то под 30 мгц и данных тебе надо не сильно много(в смысле штук до 512 - до объёма фифо  ), то чтоб не хитромудриться, по моему фифо оптимальный вариант...
Сообщение отредактировал Kuzmi4 - Mar 16 2007, 16:26
Эскизы прикрепленных изображений
|
|
|
|
|
Mar 20 2007, 05:01
|
Участник

Группа: Новичок
Сообщений: 44
Регистрация: 2-05-06
Пользователь №: 16 710

|
Цитата(yarunt @ Mar 15 2007, 12:07)  Приму любую критику на свой счет. Можно просто взять другой контроллер, более подходящий для этой работы. Скажем PIC. По цене меги (PIC24HJ128GP206 в тритоне покупал за $6.01), считывать порт умеет каждый цикл - 40 мегасемплов. USB программатор в том же тритоне $41 (pickit 2), и будет щастя.
|
|
|
|
|
Mar 20 2007, 13:10
|
Участник

Группа: Новичок
Сообщений: 44
Регистрация: 2-05-06
Пользователь №: 16 710

|
Цитата(muravei @ Mar 20 2007, 11:33)  А что Пик уже не делит тактовую частоту на 4? И делит тактовую и умножает в широком диапазоне. На входе может быть частота от 1.6 до 16 МГц, на выходе производительность до 40 МИПС. А для данного проекта нужно максимум 32 мегасемпла, значит 32 МИПС для пика.
|
|
|
|
|
Mar 20 2007, 15:23
|
Участник

Группа: Новичок
Сообщений: 44
Регистрация: 2-05-06
Пользователь №: 16 710

|
Цитата(muravei @ Mar 20 2007, 14:25)  Да уж тогда нормальный АРМ и не парится. Можно и ARM. Кстати, какой из них справится с 32 мерасемплами? Могу сильно ошибаться, но судя по первым lpc2xxx, c периферией они работают значительно медленнее, чем та же мега.
|
|
|
|
|
Mar 20 2007, 15:31
|
Местный
  
Группа: Свой
Сообщений: 200
Регистрация: 10-04-06
Из: Украина,Запорожье
Пользователь №: 15 979

|
Цитата(muravei @ Mar 20 2007, 15:25)  Да уж тогда нормальный АРМ и не парится. Вряд ли нормальный АРМ сможет так быстро ногами дергать.
|
|
|
|
|
Mar 20 2007, 20:56
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(viael @ Mar 20 2007, 12:31)  Вряд ли нормальный АРМ сможет так быстро ногами дергать. Был проект на TMS320C5402, клок 100 МГц, читал периферию в память со скоростью 100 МГц, всего одна команда. Проц старенький, конечно, но памяти было - вагон. Щас наверное, такое можно сделать на TMS320C55хх, заодно и потребление будет поменьше.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Mar 20 2007, 23:05
|

За битами по регистрам гоняюсь
  
Группа: Свой
Сообщений: 457
Регистрация: 24-04-06
Из: Таганрог
Пользователь №: 16 446

|
Цитата(yarunt @ Mar 20 2007, 13:04)  На аллдаташите я уже смотрел там нет,может есть аналог ее ,посмотрел бы по аналогу  Посмотрите здесь: http://www.datasheetcatalog.net/cgi-bin/he...p;action=SearchНе совсем то, но других аналогов найдёте много.
--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
|
|
|
|
|
Mar 21 2007, 09:48
|

Местный
  
Группа: Участник
Сообщений: 215
Регистрация: 13-12-06
Из: fghgfh
Пользователь №: 23 476

|
Цитата(Nanobyte @ Mar 21 2007, 00:05)  Посмотрите здесь: http://www.datasheetcatalog.net/cgi-bin/he...p;action=SearchНе совсем то, но других аналогов найдёте много. Спасибки ситуация немного прояснилась.
--------------------
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|