|
|
  |
Быстро считать данные с АЦП |
|
|
|
Mar 19 2010, 03:43
|
Частый гость
 
Группа: Свой
Сообщений: 101
Регистрация: 6-12-07
Из: Оренбург
Пользователь №: 33 046

|
Встала задача быстро считывать данные с 24 битного АЦП, для этого использую Mega128 с внутренним тактовым генератором (8 МГц), написал такой код: Код #define SET_SCLK_ADC PORTC|=(1<<3) #define CLR_SCLK_ADC PORTC&=~(1<<3)
#define GET_SDO_ADC ((PINC)?1:0) ....... .......
SET_SCLK_ADC;CLR_SCLK_ADC; bufferA<<=1; bufferA|=GET_SDO_ADC;
..... и так 24 раза, цикл не использую что-бы не тратить время на проверку условия выполнения цикла...... SET_SCLK_ADC;CLR_SCLK_ADC; bufferС<<=1; bufferС|=GET_SDO_ADC; В итоге мой код выполняется за 40 мкс. Как можно его ускорить? Понятно что можно увеличить тактовую частоту а какие есть еще варианты?
|
|
|
|
|
Mar 19 2010, 04:51
|
Частый гость
 
Группа: Участник
Сообщений: 149
Регистрация: 2-06-08
Из: Москва
Пользователь №: 38 003

|
Цитата(nikolas_osu @ Mar 19 2010, 06:43)  Встала задача быстро считывать данные с 24 битного АЦП... В итоге мой код выполняется за 40 мкс. Как можно его ускорить? Понятно что можно увеличить тактовую частоту а какие есть еще варианты? Модель АЦП видимо секретная, но по коду видно что с последовательным интерфейсом (похоже I2C), поэтому вариант следующий - попробовать использовать периферийный модуль TWI микроконтроллера, который сделает всю грязную работу за Вас. Если это не подходит - написать функцию получения отчета АЦП на ассемблере и не париться.
Сообщение отредактировал smac - Mar 19 2010, 04:51
|
|
|
|
|
Mar 19 2010, 05:47
|
Участник

Группа: Участник
Сообщений: 65
Регистрация: 12-11-09
Пользователь №: 53 586

|
Каждый цикл у тебя 0.125мкс. Можно соптимизировать на пару мкс. Легче станет? Читай выше и меняй АЦП на более секретную модель.
|
|
|
|
|
Mar 19 2010, 10:41
|
Частый гость
 
Группа: Свой
Сообщений: 101
Регистрация: 6-12-07
Из: Оренбург
Пользователь №: 33 046

|
Цитата(smac @ Mar 19 2010, 09:51)  Модель АЦП видимо секретная, но по коду видно что с последовательным интерфейсом (похоже I2C), поэтому вариант следующий - попробовать использовать периферийный модуль TWI микроконтроллера, который сделает всю грязную работу за Вас. Если это не подходит - написать функцию получения отчета АЦП на ассемблере и не париться. Модель совсем не секретная - это AD7767, интерфейс у него не I2C, а похож не SPI (это односторонний интерфейс только для считывания)
|
|
|
|
|
Mar 19 2010, 10:57
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Цитата(nikolas_osu @ Mar 19 2010, 13:41)  Модель совсем не секретная - это AD7767, интерфейс у него не I2C, а похож не SPI (это односторонний интерфейс только для считывания) Так, может быть, и приспособить SPI, и не мучаться ? Ну, а если надо программно и быстро, то вполне можно обойтись четырьмя тактами на бит - тактировкой манипулировать, используя предварительно загруженные состояния порта в регистрах (out выполняется за один такт, а SBI/CBI - 2 такта), ввод еще два такта (только там надо правильно сфазировать фронты тактирования относительно выборк). Итого 24x4 такта плюс подготовительные операции (загрузка регистров для вывода в порт и очистка аккумуляторов результата) = меньше 13 uS @ 8 MHz.
|
|
|
|
|
Mar 19 2010, 11:04
|
Профессионал
    
Группа: Свой
Сообщений: 1 526
Регистрация: 8-04-05
Пользователь №: 3 960

|
Цитата(nikolas_osu @ Mar 19 2010, 06:43)  В итоге мой код выполняется за 40 мкс. Как можно его ускорить На АСМе раза в 2 быстрее будет - считывание 1 бита Код sbi PORTС,PIN_CLK clc sbic PINС,PIN_DATA sec rol r0 cbi PORTС,PIN_CLK
|
|
|
|
|
Mar 20 2010, 08:22
|
Участник

Группа: Участник
Сообщений: 65
Регистрация: 12-11-09
Пользователь №: 53 586

|
Блин, как дети... Чего надо добиться-то? Писатели выше пишут как про разгон видеоплат. Слов много, а цена вопроса... Там спортивный интерес, понятно. Андерсон так и не написал нахрена попу гармонь (хоть признался про 7767). 8мГц. А Вы тут про его экономию 5руб. на кварце развлекаете. А то он не знает. Может такие проблеммы надо в корне решать? АСЕм, Си, можно про Паскаль поговогить. Я давно-бы сдох с голоду, если бы про аккумуляторы писал. В пинципе, один раз поголодать можно. Да и профессионалы с пятью квадрариками в последнее время... Маленькую LPC и голову себе не забивать. Iar пока ... Всех уважаю.
Сообщение отредактировал kiv121 - Mar 20 2010, 08:49
|
|
|
|
|
Mar 21 2010, 08:14
|
Участник

Группа: Участник
Сообщений: 65
Регистрация: 12-11-09
Пользователь №: 53 586

|
vvs157, всё понравилось, а на МКС скоро экипаж поменяется.
Сообщение отредактировал kiv121 - Mar 21 2010, 08:22
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|