Перейти к содержанию
    

Quote

Чтобы выбрать канал - надо записать в сам Communications Register значение вида 0b00000xxx, где ххх - номер канала.

1.thumb.png.a35567fbb2e5aaf700b8043ee070b2b5.png

ну ка найдите здесь установку номера канала

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нашел у себя ошибку. Я должен читать по коменде 0х5С а не по 0х5F. Возвращаемое значение изменилось. Но все равно возвращается один байт.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

31 минуту назад, Zx80 сказал:

Но все равно возвращается один байт

Как он может возвращаться один, если такты для всех байтов генерите вы? Хотите читать 10 байтов - пошлите 10 байтов мусора, таков SPI.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 часов назад, Zx80 сказал:

Не представляю как Вам дать такую диаграмму. Осцилограф двулучевой. Скажу только что CS = 0 у меня завсегда

Если CS не используется, тогда паспорт требует программно сбрасывать интерфейс 4-мя пустыми байтами.

 

И далее, Вам здесь уже каждый первый ответил, действовать точно так же — чтобы прочитать 3 байта данных, требуется написать руками код, посылающий по SPI четыре байта, и вот этот код можно показать здесь вместо осциллограмм.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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, но ничего там не вижу. Подскажите ?

sckpin.png.8fd3a694c0da978b20200d5ebf73cbc4.png

Изменено пользователем Zx80

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Привет.

Я в ступоре. Раз не работает решил записать одну команду и ее же прочитать. На SCK вижу такты для каждого из четырех комманд. На DIN вжу данные четырех комманд.

на DOUT вижу ноль. Ау помогите.

      spiWrite(0x24);        /* команда установить канал AIN1-AIN2. И передать данные в старшую часть фильтра.
      spiWrite(0xAA);        /* данные для старшей части фильтра   
      spiWrite(0x2C);        /* прочитать данные из старшей части фильтра
      spiWrite(0xAA);		 /* байт толкатель для генерации SCK

поменял чип и увидел на DOUT

NewFile0.png.c99d028607f1bb662e9cb7bf7b20a249.png

эт че получается чип паленый. Я не палил. А что это за шум перед переходом в ноль ? Случайно этот выход не открытый коллектор ?

Изменено пользователем Zx80

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

35 минут назад, Zx80 сказал:

помогите

Да уже много раз пробовали — начиная с того, чтобы выкинуть нерабочую схему, и заканчивая сбросом — всё без толку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 часов назад, Zx80 сказал:

эт че получается чип паленый. Я не палил. А что это за шум перед переходом в ноль ? Случайно этот выход не открытый коллектор ?

нет - это схема переходит в z-состояние и разряжается емкость монтажа.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Plain, ваши ответы всегда напоминают ответы продавцов, "покупайте что мы привезли, никого не волнует то что вам надо"

Quote

Да уже много раз пробовали — начиная с того, чтобы выкинуть нерабочую схему, и заканчивая сбросом — всё без толку.

 

Изменено пользователем Zx80

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

19 часов назад, Zx80 сказал:

Plain, ваши ответы всегда напоминают ответы продавцов, "покупайте что мы привезли, никого не волнует то что вам надо"

 

А Ваши вопросы напоминают вопросы прогульщика уроков.

30.12.2021 в 14:50, Zx80 сказал:

 На SCK вижу такты для каждого из четырех комманд. На DIN вжу данные четырех комманд.

 Ау помогите.

эт че получается чип паленый.

 

Напоминаю Вам п.2.1.в Правил форума.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Quote

Да уже много раз пробовали — начиная с того, чтобы выкинуть нерабочую схему, и заканчивая сбросом — всё без толку.

Извините, а как мне реагировать на первую часть этой фразы повторяемой с не виданным упорством. Я же ответил, задание мне сделать именно на AD7714. Что не понятного, зачем тогда такой ответ? Про сброс разговора не было, сброс у меня организован. Я сократил поле до записи одной команды, и ее чтения, в ответ в 50й раз у вас чип не такой. Что ж это за помощь(совет) ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, Zx80 сказал:

в ответ в 50й раз у вас чип не такой. Что ж это за помощь(совет) ?

Так Вы ещё и читать не умеете? Тогда все советы будут бесполезными. Где, хоть раз (!?) Вам написали, что у Вас "чип не такой"?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, Zx80 сказал:

зачем тогда такой ответ?

Совет был — выбросить ОУ и прочее, затем подключить датчик правильно и в мост, для измерений на переменном токе, и добавить защиту на каждый из 6-ти входных контактов, а советов выкинуть AD7714 лично я не давал — отличный АЦП, если прочитать его паспорт и затем делать так, как там написано. И ещё, Вы сразу сказали, что оригинальный экземпляр платы у Вас издох от неосторожного с ней обращения — Ваше право полагать, что её немецкие авторы тут не при чём, но другие участники форума уверены в обратном.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Привет. Давайте так, у меня два топика - ацп и оу. В теме про ацп, обсуждаем ацп, в теме про оу обсуждаем оу. Не влазит слон в рот, давайте его есть по кускам. Я так и начал. Привел инициализацию старшей части фильтра и попытку ее считать.

   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 показываю, что вижу такты на эти команды.

sckpin.png.8fd3a694c0da978b20200d5ebf73cbc4.png

На выводе DOUT вижу ноль, с некоторым различием при смене экземпляра чипа. Всего одна команда, всего одно считывание. Подскажете мою ошибку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 hours ago, Zx80 said:

На выводе DOUT вижу ноль, с некоторым различием при смене экземпляра чипа. Всего одна команда, всего одно считывание. Подскажете мою ошибку.

1. Вы бы двумя каналами осциллографа работали и приводили осциллограммы с двух каналов.

2. Вы не привели марку микроконтроллера. И обычно у AVR один SPI. И по нему же он прошивается. Если вы после 

    прошивки МК не передергиваете питание или не подаете сброс на АЦП, то возможно АЦП рассинхронизирован.

    Вам уже тут советовали отправлять 4-е фиктивных байта по SPI, чтобы восстановить синхронизацию.

3. Может у вас просто короткое замыкание по линии DOUT АЦП или наоборот обрыв или непропай.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...