nikolas_osu 0 19 марта, 2010 Опубликовано 19 марта, 2010 · Жалоба Встала задача быстро считывать данные с 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 мкс. Как можно его ускорить? Понятно что можно увеличить тактовую частоту а какие есть еще варианты? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smac 0 19 марта, 2010 Опубликовано 19 марта, 2010 (изменено) · Жалоба Встала задача быстро считывать данные с 24 битного АЦП... В итоге мой код выполняется за 40 мкс. Как можно его ускорить? Понятно что можно увеличить тактовую частоту а какие есть еще варианты? Модель АЦП видимо секретная, но по коду видно что с последовательным интерфейсом (похоже I2C), поэтому вариант следующий - попробовать использовать периферийный модуль TWI микроконтроллера, который сделает всю грязную работу за Вас. Если это не подходит - написать функцию получения отчета АЦП на ассемблере и не париться. Изменено 19 марта, 2010 пользователем smac Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Игорь121 0 19 марта, 2010 Опубликовано 19 марта, 2010 · Жалоба Каждый цикл у тебя 0.125мкс. Можно соптимизировать на пару мкс. Легче станет? Читай выше и меняй АЦП на более секретную модель. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rx3apf 0 19 марта, 2010 Опубликовано 19 марта, 2010 · Жалоба Модель АЦП видимо секретная, но по коду видно что с последовательным интерфейсом (похоже I2C), поэтому вариант следующий - попробовать использовать периферийный модуль TWI микроконтроллера, который сделает всю грязную работу за Вас. Если это не подходит - написать функцию получения отчета АЦП на ассемблере и не париться. При низких тактовых частотах аппаратная реализация TWI работает существенно медленнее, чем чисто программная. Если, конечно, цикл "вылизать". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nikolas_osu 0 19 марта, 2010 Опубликовано 19 марта, 2010 · Жалоба Модель АЦП видимо секретная, но по коду видно что с последовательным интерфейсом (похоже I2C), поэтому вариант следующий - попробовать использовать периферийный модуль TWI микроконтроллера, который сделает всю грязную работу за Вас. Если это не подходит - написать функцию получения отчета АЦП на ассемблере и не париться. Модель совсем не секретная - это AD7767, интерфейс у него не I2C, а похож не SPI (это односторонний интерфейс только для считывания) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rx3apf 0 19 марта, 2010 Опубликовано 19 марта, 2010 · Жалоба Модель совсем не секретная - это AD7767, интерфейс у него не I2C, а похож не SPI (это односторонний интерфейс только для считывания) Так, может быть, и приспособить SPI, и не мучаться ? Ну, а если надо программно и быстро, то вполне можно обойтись четырьмя тактами на бит - тактировкой манипулировать, используя предварительно загруженные состояния порта в регистрах (out выполняется за один такт, а SBI/CBI - 2 такта), ввод еще два такта (только там надо правильно сфазировать фронты тактирования относительно выборк). Итого 24x4 такта плюс подготовительные операции (загрузка регистров для вывода в порт и очистка аккумуляторов результата) = меньше 13 uS @ 8 MHz. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vvs157 0 19 марта, 2010 Опубликовано 19 марта, 2010 · Жалоба В итоге мой код выполняется за 40 мкс. Как можно его ускорить На АСМе раза в 2 быстрее будет - считывание 1 бита sbi PORTС,PIN_CLK clc sbic PINС,PIN_DATA sec rol r0 cbi PORTС,PIN_CLK Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rx3apf 0 19 марта, 2010 Опубликовано 19 марта, 2010 · Жалоба На АСМе раза в 2 быстрее будет - считывание 1 бита sbi PORTС,PIN_CLK clc sbic PINС,PIN_DATA sec rol r0 cbi PORTС,PIN_CLK На один такт сокращается заменой clc-sbic-sec-rol на lsl-sbic-ori. Но аккумуляторы можно сбросить один раз заранее, и это сокращает еще один такт на бит (но вот тут надо учесть возможную задержку семплирования состояния ноги самим процессором, кажется, там где-то полтакта набегает). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Игорь121 0 20 марта, 2010 Опубликовано 20 марта, 2010 (изменено) · Жалоба Блин, как дети... Чего надо добиться-то? Писатели выше пишут как про разгон видеоплат. Слов много, а цена вопроса... Там спортивный интерес, понятно. Андерсон так и не написал нахрена попу гармонь (хоть признался про 7767). 8мГц. А Вы тут про его экономию 5руб. на кварце развлекаете. А то он не знает. Может такие проблеммы надо в корне решать? АСЕм, Си, можно про Паскаль поговогить. Я давно-бы сдох с голоду, если бы про аккумуляторы писал. В пинципе, один раз поголодать можно. Да и профессионалы с пятью квадрариками в последнее время... Маленькую LPC и голову себе не забивать. Iar пока ... Всех уважаю. Изменено 20 марта, 2010 пользователем kiv121 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 20 марта, 2010 Опубликовано 20 марта, 2010 · Жалоба В итоге мой код выполняется за 40 мкс. Как можно его ускорить? Понятно что можно увеличить тактовую частоту а какие есть еще варианты? Читать не все биты, а например только 12. Скажите вот нафига вам 24 бита на большой скорости? кто их обрабатывать будет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vvs157 0 20 марта, 2010 Опубликовано 20 марта, 2010 · Жалоба Маленькую LPC и голову себе не забивать.Ну как маленькие дети... Если нужно 20 мА на выход, EEPROM на >10000 циклов и вечер перестанет быть томным. Русскую забаву "суп из топора" не предлагать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Игорь121 0 21 марта, 2010 Опубликовано 21 марта, 2010 (изменено) · Жалоба vvs157, всё понравилось, а на МКС скоро экипаж поменяется. Изменено 21 марта, 2010 пользователем kiv121 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться