Jump to content

    

Zx80

Участник
  • Content Count

    67
  • Joined

  • Last visited

Community Reputation

0 Обычный

1 Follower

About Zx80

  • Rank
    Участник

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. У меня два чипа 7714. Один из них на выходе ничего не дает(кучу времени убил), на втором есть. Подскажите, как читать данные - в смысле какой из байтов выталкивается первым (старший, младший)?
  2. Atmega16, где у меня отписано, про несколько SPI ? SPI по сути сдвиговый регистр. Три байта команды - они же три синхронизации. Четверый байт синхронизации присутствует. Конечно сброс присутствует. Ну конечно все проверено, тем более если смотрели осцилограмма на DOUT есть, но странная.
  3. Привет. Давайте так, у меня два топика - ацп и оу. В теме про ацп, обсуждаем ацп, в теме про оу обсуждаем оу. Не влазит слон в рот, давайте его есть по кускам. Я так и начал. Привел инициализацию старшей части фильтра и попытку ее считать. 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 вижу ноль, с некоторым различием при смене экземпляра чипа. Всего одна команда, всего одно считывание. Подскажете мою ошибку.
  4. Извините, а как мне реагировать на первую часть этой фразы повторяемой с не виданным упорством. Я же ответил, задание мне сделать именно на AD7714. Что не понятного, зачем тогда такой ответ? Про сброс разговора не было, сброс у меня организован. Я сократил поле до записи одной команды, и ее чтения, в ответ в 50й раз у вас чип не такой. Что ж это за помощь(совет) ?
  5. Plain, ваши ответы всегда напоминают ответы продавцов, "покупайте что мы привезли, никого не волнует то что вам надо"
  6. Привет. Я в ступоре. Раз не работает решил записать одну команду и ее же прочитать. На SCK вижу такты для каждого из четырех комманд. На DIN вжу данные четырех комманд. на DOUT вижу ноль. Ау помогите. spiWrite(0x24); /* команда установить канал AIN1-AIN2. И передать данные в старшую часть фильтра. spiWrite(0xAA); /* данные для старшей части фильтра spiWrite(0x2C); /* прочитать данные из старшей части фильтра spiWrite(0xAA); /* байт толкатель для генерации SCK поменял чип и увидел на DOUT эт че получается чип паленый. Я не палил. А что это за шум перед переходом в ноль ? Случайно этот выход не открытый коллектор ?
  7. 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, но ничего там не вижу. Подскажите ?
  8. Нашел у себя ошибку. Я должен читать по коменде 0х5С а не по 0х5F. Возвращаемое значение изменилось. Но все равно возвращается один байт.
  9. ну ка найдите здесь установку номера канала
  10. я выше показал как я выбираю канал согласно таблиц, если я не прав, покажите, поправьте
  11. Великолепно. Вы написали тоже, что и я. Посмотрите, у меня три обращения к коммуникационному регистру коде. Красный обращение к коммуникационному регистру, синий - вторая посылка, пишем данные
  12. Не представляю как Вам дать такую диаграмму. Осцилограф двулучевой. Скажу только что CS = 0 у меня завсегда. А насчет канала. spi(0x24); коммуникационный регистр. 0х24 = 00100100 У меня 4 - 100 Пишу в старшую часть регистра фильта. Это в примере 0х27 00100111, тут да 111
  13. Вот не пойму с каким периодом он должен возвращать вывод 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 дифференц вход.
  14. Подскажите как должено быть видно на осцилографе возвращаемые с АЦП данные. Там же 24бита, это три байта. Возврат данных сказано начинается после спадающего фронта DRDY по команде 0х5F. Событию падения DRDY вызывает прерывание, в нем посылаю 0х5F, становлюсь на DOUT. Что то возвращает, но по виду это один байт. Посылал 0х5F 0х5F 0х5F получал три копии одного и того же байта. И вот еще не пойму, на верхней осцилограмме ноль на DRDY занимает 99% времени, это как данные доступны 99% времени ?
  15. инициализация 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 вкл питания, сброс, инициализация. Я не читаю. По идее должен видеть ноль пока не опрошу данные, а в итоге (импульс послед) вероятно возбуждение. При чем при сбросах иногда вижу устойчивый ноль (данные готовы). Че у меня не так ?