Zx80
Участник-
Постов
128 -
Зарегистрирован
-
Посещение
Весь контент Zx80
-
Работа с AD7714
Zx80 ответил Zx80 тема в Операционные усилители и АЦП
Собственно не работает потому что пропадают импульсы DRDY, как только я ее инициализирую -
Работа с AD7714
Zx80 ответил Zx80 тема в Операционные усилители и АЦП
Cупер, выше моего понимания, убрал из программы InitAD7714(); void InitAD7714() { spiWrite( 0x24 ); /* set the channel AIN1-AIN2 and set the next operation as write to the filter high */ spiWrite( 0x4F ); /* set Bipolar mode, 24 bits, boost off, all 4 MSBs of filterword to 1 */ spiWrite( 0x34 ); /* set the channel AIN1-AIN2 the next operation as a write to the filter low register channel AIN1/AIN2 */ spiWrite( 0xA0 ); /* max filter word allowed for low part of the filterword */ spiWrite( 0x14 ); /* set the channel AIN1-AIN2 the operation as a write to the mode register.*/ spiWrite( 0x20 ); /* set gain to 1, burnout current off, no filter sync, and do a self calibration */ } Включаю, работает, сбрасываю - работает. Без инициализации -
Работа с AD7714
Zx80 ответил Zx80 тема в Операционные усилители и АЦП
На сегодня есть детали, но как это устранить пока не соображу. Заметил что когда я шью, я вынимаю MOSI и MISO из разъема. Так вот если вынуть MOSI и MISO из разъема и сбросить, а потом вставить все запускается в полном объеме. Потом обнаружил что достаточно MISO оставить, выдергнуть MOSI, перезапустить, вставить MOSI и все заработает. Но вот не пойму как это влияет и как это реализовать прогррамно правильно. Собственно не пойму где затык, я SPI перед стартом конфигурю, но это же конфигурится Атмега. После сброса питания не работает. Стоит после включения вынуть MOSI, нажать сброс процессора, вставить MOSI и все начинает работать. И если я включаю, вынимаю MOSI сбрасываю, программа не выполняя InitAD7714(); переходит в цикл и потом отдает мне результат оцифровки с непонятно какими настройками. Но блин почему тогда милливольты сходятся ? -
Работа с AD7714
Zx80 ответил Zx80 тема в Операционные усилители и АЦП
Новый этап, и старый затык. Еще на этапе разбирательства заметил такой глюк. Если я зашиваю программу в Атмегу, все работает, уже даже меряет. Но вот нажимаю сброс и мерять перестает. Кто подскажет куда идти рыть ? Спрашивается чем отличается сброс и дальнейший старт от старта после того как я программу зашил. Программа же одна и та же, старт вроде как ничем не отличается, но тем не менее измерять после рестарта перестает ? -
Работа с AD7714
Zx80 ответил Zx80 тема в Операционные усилители и АЦП
Таки разобрался. Кому интересно смотри отличия. while (1) { // Place your code here while(DRDY == 1); spiWrite( 0x5C ); bytesArray[0] = spiWrite( 0xFF ); bytesArray[1] = spiWrite( 0xFF ); bytesArray[2] = spiWrite( 0xFF ); displayAD7714Bytes(bytesArray[0], bytesArray[1], bytesArray[2]); delay_ms(10); } } -
Работа с AD7714
Zx80 ответил Zx80 тема в Операционные усилители и АЦП
Сейчас положил на датчик телефон. Показыает V = 000 000 032 Пересчитываю, натикало - 8192. По расчету Uвх=1.2мВ. Лезу меряю, да 1.2мВ. Вот и вопрос про порядок байтов. Или где я бажу ? При разгруженном датчике V = 000 000 008 По расчету Uвх = 0.3 мВ лезу меряю 0.5 мВ. И потом я когда датчик нагружаю я же вижу как растут значения байт. Не, откуда там отрицательное если еще расчет сходится ? Да вопрос собственно в порядке байт, почему считываю младший, старший, средний ? -
Работа с AD7714
Zx80 ответил Zx80 тема в Операционные усилители и АЦП
Вот расчет, датчик загружен, на входах AIN1-AIN2 10.6В Индикатор показывает V = 255 001 023. Теперь если учесть что 255 это младший байт, 024 средний, 001 старший. Переводим в HEX получаем 0х01 0х017 0х0FF что равно 71679 в десятичном. Цена разряда 2.5 вольта / 2 в степени 24. 2.5/16777216= 0,0000001490116119384765625 вольта. У меня набежало 71679 тогда напряжение на входах Uвх = 0,0000001490116119384765625 * 71679 = 0,0106810033321380615234375 вольта. Т.е. мои 10.6мВ на датчике. Но вот почему у меня такая путаница с байтами ? -
Работа с AD7714
Zx80 ответил Zx80 тема в Операционные усилители и АЦП
Вот смотрите, мой текст программы lcd_init(16); SpiInit(); InitGreen_pin(); InitRstAD7714_pin(); CS_pin_Hight(); Creen_pin_Low(); ResetAD7714(); InitAD7714(); while (1) { // Place your code here while(DRDY == 1); bytesArray[0] = spiWrite( 0x5C ); bytesArray[1] = spiWrite( 0xFF ); bytesArray[2] = spiWrite( 0xFF ); displayAD7714Bytes(bytesArray[0], bytesArray[1], bytesArray[2]); delay_ms(10); } } void displayAD7714Bytes(unsigned char msb, unsigned char mib, unsigned char lsb) { char lcd_buffer[30]; lcd_gotoxy(0,0); lcd_clear(); sprintf(lcd_buffer,"U = %03d %03d %03d", msb, mib, lsb); lcd_puts(lcd_buffer); } На входе AIN1-AIN2 у меня сейчас в максимуме, когда датчик загружен 10мВ. Опора 2.5в. Когда датчик разгружен на входе 0.57мВ. На индикаторе я вижу V = 000 000 016. Слегка прикоснулся к датчику V = 253 000 016. Чуть сильнее придавил он переходит V = 050 000 017 Когда я полностью его загружаю (10мВ) я вижу V = 255 001 000 или V = 255 000 254. Складывается впечатление, что первый принятый байт (bytesArray[0] = spiWrite( 0x5C );) это младший байт, второй принятый байт (bytesArray[1] = spiWrite( 0xFF );) это старший байт, и наконец третий принятый байт (bytesArray[2] = spiWrite( 0xFF );) это средний байт. Подскажите где собака порылась ? -
Работа с AD7714
Zx80 ответил Zx80 тема в Операционные усилители и АЦП
У меня два чипа 7714. Один из них на выходе ничего не дает(кучу времени убил), на втором есть. Подскажите, как читать данные - в смысле какой из байтов выталкивается первым (старший, младший)? -
Работа с AD7714
Zx80 ответил Zx80 тема в Операционные усилители и АЦП
Atmega16, где у меня отписано, про несколько SPI ? SPI по сути сдвиговый регистр. Три байта команды - они же три синхронизации. Четверый байт синхронизации присутствует. Конечно сброс присутствует. Ну конечно все проверено, тем более если смотрели осцилограмма на DOUT есть, но странная. -
Работа с AD7714
Zx80 ответил Zx80 тема в Операционные усилители и АЦП
Привет. Давайте так, у меня два топика - ацп и оу. В теме про ацп, обсуждаем ацп, в теме про оу обсуждаем оу. Не влазит слон в рот, давайте его есть по кускам. Я так и начал. Привел инициализацию старшей части фильтра и попытку ее считать. spiWrite(0x24); /* команда установить канал AIN1-AIN2. И передать данные в старшую часть фильтра. spiWrite(0xAA); /* данные для старшей части фильтра spiWrite(0x2C); /* прочитать данные из старшей части фильтра spiWrite(0xFF); /* байт толкатель для генерации SCK void spiWrite(unsigned char cData) { /* Start transmission */ SPDR = cData; /* Wait for transmission complete */ while(!(SPSR & (1<<SPIF))); } unsigned char spiRead() { /* Wait for reception complete */ while(!(SPSR & (1<<SPIF))); /* Return data register */ return SPDR; } осцилограмму на SCK показываю, что вижу такты на эти команды. На выводе DOUT вижу ноль, с некоторым различием при смене экземпляра чипа. Всего одна команда, всего одно считывание. Подскажете мою ошибку. -
Работа с AD7714
Zx80 ответил Zx80 тема в Операционные усилители и АЦП
Извините, а как мне реагировать на первую часть этой фразы повторяемой с не виданным упорством. Я же ответил, задание мне сделать именно на AD7714. Что не понятного, зачем тогда такой ответ? Про сброс разговора не было, сброс у меня организован. Я сократил поле до записи одной команды, и ее чтения, в ответ в 50й раз у вас чип не такой. Что ж это за помощь(совет) ? -
Работа с AD7714
Zx80 ответил Zx80 тема в Операционные усилители и АЦП
Plain, ваши ответы всегда напоминают ответы продавцов, "покупайте что мы привезли, никого не волнует то что вам надо" -
Работа с AD7714
Zx80 ответил Zx80 тема в Операционные усилители и АЦП
Привет. Я в ступоре. Раз не работает решил записать одну команду и ее же прочитать. На SCK вижу такты для каждого из четырех комманд. На DIN вжу данные четырех комманд. на DOUT вижу ноль. Ау помогите. spiWrite(0x24); /* команда установить канал AIN1-AIN2. И передать данные в старшую часть фильтра. spiWrite(0xAA); /* данные для старшей части фильтра spiWrite(0x2C); /* прочитать данные из старшей части фильтра spiWrite(0xAA); /* байт толкатель для генерации SCK поменял чип и увидел на DOUT эт че получается чип паленый. Я не палил. А что это за шум перед переходом в ноль ? Случайно этот выход не открытый коллектор ? -
Работа с AD7714
Zx80 ответил Zx80 тема в Операционные усилители и АЦП
spiInit(); InitAD7714(); DDRD |= (0<<DDD2); PORTD |= (1<<PORTD2); DDRD |= (1<<DDD6); PORTD |= (0<<PORTD6); while (1) { // Place your code here // if(PIND.2 == 0) // PORTD.6 = 0; // else // PORTD.6 = 1; unsigned char res[3]={255,255,255}; if(PIND.2 == 0) { spiWrite(0x5C); spiWrite(0xFF); res[0] = spiRead(); spiWrite(0xFF); res[1] = spiRead(); spiWrite(0xFF); res[2] = spiRead(); displayAD7714Result(res); } delay_ms(20); } } void InitAD7714() { // spiWrite(0x27); /* set the channel AIN6 and set the next operation as write to the filter high */ // spiWrite(0x4F); /* set Bipolar mode, 24 bits, boost off, all 4 MSBs of filterword to 1 */ // spiWrite(0x37); /* set the next operation as a write to the filter low register channel AIN6 */ // spiWrite(0xA0); /* max filter word allowed for low part of the filterword */ // spiWrite(0x17); /* set the operation as a write to the mode register */ // spiWrite(0x20); /* set gain to 1, burnout current off, no filter sync, and do a self calibration */ spiWrite(0x24); /* set the channel AIN1-AIN2 and set the next operation as write to the filter high */ spiWrite(0x4F); /* set Bipolar mode, 24 bits, boost off, all 4 MSBs of filterword to 1 */ spiWrite(0x34); /* set the channel AIN1-AIN2 the next operation as a write to the filter low register channel AIN1/AIN2 */ spiWrite(0xA0); /* max filter word allowed for low part of the filterword */ spiWrite(0x14); /* set the channel AIN1-AIN2 the operation as a write to the mode register.*/ spiWrite(0x20); /* set gain to 1, burnout current off, no filter sync, and do a self calibration */ } void spiInit(void) { /* Set MOSI, SCK, SS as output */ DDRB |= ((1<<SPI_DDR_MOSI) | (1<<SPI_DDR_SS) | (0<<SPI_DDR_MISO) | (1<<SPI_DDR_SCK)); PORTB &= ~((1<<SPI_PORT_MOSI) | (1<<SPI_PORT_SS) | (1<<SPI_PORT_MISO) | (1<<SPI_PORT_SCK)); /* Enable SPI, Master, set clock rate fck/16 */ SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0); //SPDR = 0b00000000; } void spiWrite(unsigned char cData) { /* Start transmission */ SPDR = cData; /* Wait for transmission complete */ while(!(SPSR & (1<<SPIF))); } unsigned char spiRead() { /* Wait for reception complete */ while(!(SPSR & (1<<SPIF))); /* Return data register */ return SPDR; } Осцилограмма на SCK. Посылаются байты 0х5С, 0хFF, 0хFF, 0хFF. По идее я должен видеть байты результата на DOUT, но ничего там не вижу. Подскажите ? -
Работа с AD7714
Zx80 ответил Zx80 тема в Операционные усилители и АЦП
Нашел у себя ошибку. Я должен читать по коменде 0х5С а не по 0х5F. Возвращаемое значение изменилось. Но все равно возвращается один байт. -
Работа с AD7714
Zx80 ответил Zx80 тема в Операционные усилители и АЦП
-
Работа с AD7714
Zx80 ответил Zx80 тема в Операционные усилители и АЦП
я выше показал как я выбираю канал согласно таблиц, если я не прав, покажите, поправьте -
Работа с AD7714
Zx80 ответил Zx80 тема в Операционные усилители и АЦП
Великолепно. Вы написали тоже, что и я. Посмотрите, у меня три обращения к коммуникационному регистру коде. Красный обращение к коммуникационному регистру, синий - вторая посылка, пишем данные -
Работа с AD7714
Zx80 ответил Zx80 тема в Операционные усилители и АЦП
Не представляю как Вам дать такую диаграмму. Осцилограф двулучевой. Скажу только что CS = 0 у меня завсегда. А насчет канала. spi(0x24); коммуникационный регистр. 0х24 = 00100100 У меня 4 - 100 Пишу в старшую часть регистра фильта. Это в примере 0х27 00100111, тут да 111 -
Работа с AD7714
Zx80 ответил Zx80 тема в Операционные усилители и АЦП
Вот не пойму с каким периодом он должен возвращать вывод DRDY в 1 ? Т.е сколько раз в секунду он обновляет значение, чем это определяется ? Последовательность на DRDY fCLKÊIN = 2.4576MHz Period = 1/fCLKÊIN = 4.07мкс. Если я не читаю чип он должен сам на 500 циклов т.е.(4.07мкс*500=0.2мс) возвращать вывод DRDY в 1. Ну да те 9 клеток по 20мкс те 500 циклов = 0.18мс Добавил команду считывания регистра данных. 0х5F. Вижу что выдает такты на 8 бит. Данные на DOUT соответствующие тактам SCK Почему вы решили что 7канал ? Я по даташиту настраивал и настраивал AIN1-AIN2 дифференц вход. -
Работа с AD7714
Zx80 ответил Zx80 тема в Операционные усилители и АЦП
Подскажите как должено быть видно на осцилографе возвращаемые с АЦП данные. Там же 24бита, это три байта. Возврат данных сказано начинается после спадающего фронта DRDY по команде 0х5F. Событию падения DRDY вызывает прерывание, в нем посылаю 0х5F, становлюсь на DOUT. Что то возвращает, но по виду это один байт. Посылал 0х5F 0х5F 0х5F получал три копии одного и того же байта. И вот еще не пойму, на верхней осцилограмме ноль на DRDY занимает 99% времени, это как данные доступны 99% времени ? -
Работа с AD7714
Zx80 ответил Zx80 тема в Операционные усилители и АЦП
инициализация spi(0x24); /* set the channel AIN1-AIN2 and set the next operation as write to the filter high */ spi(0x4F); /* set Bipolar mode, 24 bits, boost off, all 4 MSBs of filterword to 1 */ spi(0x34); /* set the next operation as a write to the filter low register channel AIN1/AIN2 */ spi(0xA0); /* max filter word allowed for low part of the filterword */ spi(0x14); /* set the operation as a write to the mode register */ spi(0x20); /* set gain to 1, burnout current off, no filter sync, and do a self calibration вкл питания, сброс, инициализация. Я не читаю. По идее должен видеть ноль пока не опрошу данные, а в итоге (импульс послед) вероятно возбуждение. При чем при сбросах иногда вижу устойчивый ноль (данные готовы). Че у меня не так ? -
Работа с AD7714
Zx80 опубликовал тема в Операционные усилители и АЦП
Привет. Подключил по даташиту AD7714. Привожу скриншоты осцилограмм на DRDY. Вижу что цифрует, но не могу по даташиту определить правильные ли длительности. Подскажите плиз как разобраться. -
Входная цепь перед АЦП
Zx80 ответил Zx80 тема в Операционные усилители и АЦП
Вот фраза из моего поста. Тут четко поставлен вопрос