megaalex 0 24 марта, 2007 Опубликовано 24 марта, 2007 · Жалоба Помогите драйверами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=GM= 0 24 марта, 2007 Опубликовано 24 марта, 2007 · Жалоба Помогите драйверами. AD7792 вполне можно подключить к АВР, используя аппаратный SPI. Например, для непрерывного чтения посылаете 0х5С, ждёте RDY, посылаете 0х00 три раза, получая взамен 24-битный код из АЦП. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
add 0 26 марта, 2007 Опубликовано 26 марта, 2007 · Жалоба AD7792 вполне можно подключить к АВР, используя аппаратный SPI. Например, для непрерывного чтения посылаете 0х5С, ждёте RDY, посылаете 0х00 три раза, получая взамен 24-битный код из АЦП. AD7792 это 16 бит (24бит у 7793). Тут же вопросик по интерфейсу. Подскажите пожалуста так ли делать инициализацию(reset)?: После включения подаем на ~CS "0", а потом на DIN "1", и после этого 32 такта на клок? И в каких случаях он (reset) вообще нужен? Как сообщить(какую команду) МС о начале преобразования? Заранее спасибо за ответы! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
slog 0 26 марта, 2007 Опубликовано 26 марта, 2007 · Жалоба Datashit читать пробовал? Я думаю там есть все ответы на твои вопросы. Готовый драйвер вряд ли найдешь, да там несколько строк на Си. Я тоже собрался использовать AD7792 только до драйвера доберусь на следующей неделе, не раньше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergeiCh 0 27 марта, 2007 Опубликовано 27 марта, 2007 · Жалоба Использовал AD7793 + ТСП100 + ATmega64 для измерения температуры. Поскольку без ОС, обошелся несколькими функциями на Си. Всё стандартно, глюков не наблюдалось. Разве что у AD7793 источники тока согласованы не достаточно (3%), IMHO, чтобы использовать приведенную трехпроводную схему. Вернее, эталонное сопротивление уже можно брать любой точности :), т.к. ток ч/з него не будет равен удвоенному току ч/з терморезистор. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
add 0 27 марта, 2007 Опубликовано 27 марта, 2007 · Жалоба Может есть кто мог бы про инициализацию AD7792/93 расказать? SergeiCh если рботали поделитесь пожалуйста инфой. Неужели для одиночного преобразования достаточно послать 0х58 и забрать данные? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergeiCh 0 27 марта, 2007 Опубликовано 27 марта, 2007 · Жалоба У AD7792/3 много регистров, они нормально описаны в дейташите. Сначала АЦП конфигурируется под задачу (какой ИОН, генератор, усиление и т.д.). void ad7793_init(void) { int8_t i; /* Настройка порта */ DDRSPI |= (_BV(SPISS)|_BV(SPIMO)|_BV(SPISCK)); spi_ss_clear(); SPCR = _BV(SPE)|_BV(MSTR)|_BV(CPOL)|_BV(CPHA); /* MSB первый, mode 3, f/4 */ for (i = 0; i < 4;i++) spi_rw(0xFF); /* настройка АЦП */ spi_rw(AD_CR_CON_W); spi_rw(high(AD_CON)); spi_rw(low(AD_CON)); spi_rw(AD_CR_IO_W); spi_rw(AD_IO); /* Калибровка */ spi_rw(AD_CR_MD_W); spi_rw(high(AD_MR_INT_ZSC)); spi_rw(low(AD_MR_INT_ZSC)); _delay_ms(10); loop_until_bit_is_clear(PINSPI,PINRDY); spi_rw(AD_CR_MD_W); spi_rw(high(AD_MR_INT_FSC)); spi_rw(low(AD_MR_INT_FSC)); _delay_ms(10); loop_until_bit_is_clear(PINSPI,PINRDY); } Потом устанавливается режим. void ad7793_mode_set(uint16_t mode) { spi_rw(AD_CR_MD_W); spi_rw(high(mode)); spi_rw(low(mode)); } Есть три режима работы (которые также описаны в дейташите), если не ошибаюсь. В одном из них действительно достаточно посылать один байт. uint32_t ad7793_data_get(void) { uint32_t t = 0; loop_until_bit_is_clear(PINSPI,PINRDY); spi_rw(AD_CR_DR_R); *((uint8_t *)(&t) + 2) = spi_rw(0xFF); *((uint8_t *)(&t) + 1) = spi_rw(0xFF); *((uint8_t *)(&t)) = spi_rw(0xFF); return t; } Удачи! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ruslan1 17 5 апреля, 2007 Опубликовано 5 апреля, 2007 · Жалоба Использовал AD7793 + ТСП100 + ATmega64 для измерения температуры. Поскольку без ОС, обошелся несколькими функциями на Си. Всё стандартно, глюков не наблюдалось. Разве что у AD7793 источники тока согласованы не достаточно (3%), IMHO, чтобы использовать приведенную трехпроводную схему. Вернее, эталонное сопротивление уже можно брать любой точности :), т.к. ток ч/з него не будет равен удвоенному току ч/з терморезистор. Совершенно согласен. Вообще не понимаю, зачем брать 16-битный АЦП и считать равными генераторы тока, которые могут разойтись на 5%. :) Я несколько иначе сделал входную схему: --- L1------ Iout1,AIN1+ ! ! -----L2---- AIN1-, AIN2+ ! ! Rx ! ! ----L3------ AIN2-, REFIN+ nnnnn ! nnnnn ! nnnnn Re nnnnn ! nnnnn ! nnnnn ----- REFIN-, GND L1,L2,L3 - линия связи (трехпроводка) n- просто чтобы сдвинуто было на экране красиво В Этом случае Rx = Re *((A2-A1)/65536) где A1,A2 - соответственно код, измеренный с входов AIN1 и AIN2 Rx - измеряемое сопротивление Re - эталонное сопротивление То есть я избавился от влияния разброса токов. Минус применения- нужно два измерения, но для меня это совсем не критично. Нужно помнить о том, что REFIN имеет неслабый входной ток, но зато малый дрейф этого тока. У меня например все равно есть калибровка после монтажа, так что я эту величину учитываю. В принципе, можно наверное и дрейф тока учесть (термометр-то внутри есть), но это уже чересчур. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
slog 0 9 апреля, 2007 Опубликовано 9 апреля, 2007 · Жалоба Вообще не понимаю, зачем брать 16-битный АЦП и считать равными генераторы тока, которые могут разойтись на 5%. :) И не 5%, а ±0.5% typ Matching between IEXC1 and IEXC2; VOUT = 0V А 5% это Initial Tolerance at 25°C, что вообщем-то не влияет на результат измерения. А зачем 3-х проводная схема подключения RTD, если найти кабель с двумя витыми парами внутри никаких проблем нет, тот же UTP-5. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ruslan1 17 10 апреля, 2007 Опубликовано 10 апреля, 2007 · Жалоба И не 5%, а ±0.5% typ Matching between IEXC1 and IEXC2; VOUT = 0V А 5% это Initial Tolerance at 25°C, что вообщем-то не влияет на результат измерения. Точно. Ошибся. Но мне и этого много. Более того- никогда не закладываюсь на типичное значение, а максимальное не привели. А зачем 3-х проводная схема подключения RTD, если найти кабель с двумя витыми парами внутри никаких проблем нет, тот же UTP-5. Все зависит от количества и расстояния. Если у тебя будет около 400 RTD на расстояниях до пары сотен метров, проводку к которым провели и эксплуатируют не второй десяток лет - то твоя точка зрения может и поменяться. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sergey K 0 30 октября, 2008 Опубликовано 30 октября, 2008 (изменено) · Жалоба Вот и я начал мучать эту AD7792. Естественно измерить сопротивление 100 Омного резистора (по 3х проводной схеме из документации) не вышло. Микросхема выдает 0x0 :( Для проверки, попробовал прочитать CONFIGURATION REGISTER. получилось 0x0710, как и должно быть после сброса. (после сброса это и читалось!) Только что перенастроил м/с для измерения температуры через внутрений датчик. Получил 0х350С. Положил на нее палец, показания возросли до 0x359A. В документации я не нашел, как это пересчитать в температуру (там указанно, что в этом случае делитель переключается к 1:1 и подключается внутрений источник опорного напряжения - сколько вольт?) Если предположить, что опорное = половина от питания, то при +23 градусах выходит 0x00ED (если однополярное) или 0x80F6 (если двухполярное). Но и то и то далекое от того, что я получаю :( Инициализацию провожу следующим образом: //Сброс Посылаю: FF FF FF FF delay_ms(255); //Пауза //IO REG SendSPI(0b00101000,8); //28h SendSPI(0b00000010,8); //02h //Config REG SendSPI(0b00010000,8); // 10h SendSPI(0b0001010100010000,16); //1510h ...... //Далее в цикле запускаю одиночное преобразование и считываю результат //Mode REG SendSPI(0b00001000,8); //08h SendSPI(0b0010000000001001,16); //2009h //Жду 0,5 сек delay_ms(255);delay_ms(255); //Читаю данные //DATA REG SendSPI(0b01011000,8); //58h Val=ReadSPI(16); За битом RDY не наблюдаю (т.к. пока это конструктивно-отладочно сложно), но вместо 250 мс даю на преобразование 500 мс. Также попробовал замерять напряжение на измеряемом сопротивлении и на опорном. Везде 0В, но осцилографа нету. При одиночных преобразованиях источники тока в паузах отключаются :( попробую запустить непрерывное.... также на измеряемом сопротивлении и на опорном 0В (по мультиметру). ..... Кажется я забыл заземлить вывод "ref-" :( ОНО! Это ж нужн было, при перерисовке схемы забыть заземление :( Теперь все работает. Полученное значение с АЦП отличается от расчетного менее, чем на 0,9% (это с учетом погрешности китайских мультиметров и без самокалибровки микросхемы). Спасибо за внимание. Вопрос закрыт :) Изменено 30 октября, 2008 пользователем Сергей К Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sergey K 0 6 ноября, 2008 Опубликовано 6 ноября, 2008 · Жалоба 1. Но вот вопрос с измерением температуры кристалла остался. Как пересчитать код в температуру? 2. Есть ли хитрости, при работе с одиночным преобразованием? Если я ее делаю, (т.е. запускаю преобразование и затем, через 1 сек, считываю результат, то он всегда 0х0000). При непрерывном преобразовании все в порядке. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SeregaB 0 10 ноября, 2008 Опубликовано 10 ноября, 2008 · Жалоба 1. Но вот вопрос с измерением температуры кристалла остался. Как пересчитать код в температуру? В разделе SPECIFICATIONS TEMPERATURE SENSOR Sensitivity 0.81 mV/°C typ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sergey K 0 13 ноября, 2008 Опубликовано 13 ноября, 2008 (изменено) · Жалоба Спасибо. Но эту цифру я видел, но зато теперь нашел, что Vref=1.17В :) Насколько я понял, получается следующее: GAIN=1 раз Vref=1.17 В AIN=23*0,81*10^-3 В Code=(2^16 * 23*0,81*10^-3 * 1) / 1.17=1044=0x0414 (для однополярного) или Code=2^15 [(23*0,81*10^-3 * 1) / 1.17) +1]=33290=0x820A (для двухполярного) но это очень далеко от моего 0х350С (примерно +23) и 0x359A (после прогрева пальцем) :( Изменено 13 ноября, 2008 пользователем Сергей К Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
firstvald 24 13 июня, 2010 Опубликовано 13 июня, 2010 · Жалоба бЛИН, заложил 7793 и уже начал раскаиваться. Пока не удается получить работу в режиме одиночного преобразования. То, что написано в доках не работает. Фактически, вы не можете, запустив однократное преобразование, прочитать результат, выждав время с запасом на преобразование, вы получите 0. Что происходит фактически: после окончания однократного преобразования есть маленькое временное окно, в течении которого надо успеть прочитать результат преобразования, если постоянно смотреть регистр статуса, то это удается, если не смотреть, то скорее всего, получите 0. Если посмотреть состояние регистра статуса в режиме однократного преобразования, то видно, что там продолжаются какие-то процессы уходящие в бесконечность. Видно в автомате который ацп управляет что то недоработано и он пока сырой и скорее всего таким и останется до снятия кристалла. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться