ADS1262 и 2,2 SPI TFT (два ведомых SPI) с Arduino

Я подключаю два подчиненных модуля SPI, т. е. ADS1262 и 2,2 SPI TFT, к плате Ethernet Arduino.

Когда я тестирую каждое устройство самостоятельно, оно работает. Изначально я подключил TFT к Arduino, и он работает нормально. Аналогично, пример кода ADS1262 отлично работает, когда я запускаю его в одиночку.

Поэтому после успешного запуска TFT в одиночку я подключаю ADS1262, добавляю соответствующий код, однако ADS1262, похоже, не отвечает.

Я думаю, что проблема может быть связана с последовательностью контактов ADS1262_CS или ADS1262_START или ADS1262_DRDY для доступа к ADS1262.

Я использовал библиотеку ProtoCentral_ads1262 с GitHub и использовал пример кода.

Circuit diagram

Из Комментариев:
Мы уже зарезервировали D10 для контроллера Ethernet и D4 для выбора микросхемы SD. Вопрос в том, как общаться с ними обоими, по очереди. Я могу получить доступ к одному из них только тогда, когда код подготовлен для обоих устройств.


// Portion of the code is given here

// https://github.com/adafruit/Adafruit_ILI9341 library used for TFT

// Code start from here


for(j=initvalue;j<=finalvalue;j+=x)
{ 

      dacvalue=((j*5)/65535);

      writeValue(j);

      tft.fillRect(30,150,70,28,ILI9341_BLACK);

      tft.setCursor(30,150);

      tft.println(dacvalue,3); // dac value is showing on TFT

      Serial.println(dacvalue,3);

// ADS1262 is need to communicate here as per https://github.com/Protocentral/ProtoCentral_ads1262 library

// Which pins are need to control here to communicate with ADS1262???    

      volatile int p,data;

      if((digitalRead(ADS1262_DRDY_PIN)) == LOW)               // monitor Data ready(DRDY pin)
     {  
       SPI_RX_Buff_Ptr = PC_ADS1262.ads1262_Read_Data();      // read 6 bytes conversion register
       Responsebyte = true ; 
     }

      if(Responsebyte == true)
      {
       for(p = 0; p <5; p++)
      {
        SPI_RX_Buff[SPI_RX_Buff_Count++] = *(SPI_RX_Buff_Ptr + p);              
      }
      Responsebyte = false;
      }

       if(SPI_RX_Buff_Count >= 5)
      {     
        ads1262_rx_Data[0]= (unsigned char)SPI_RX_Buff[1];  // read 4 bytes adc count
        ads1262_rx_Data[1]= (unsigned char)SPI_RX_Buff[2];
        ads1262_rx_Data[2]= (unsigned char)SPI_RX_Buff[3];
        ads1262_rx_Data[3]= (unsigned char)SPI_RX_Buff[4];


        uads1262Count = (signed long) (((unsigned long)ads1262_rx_Data[0]<<24)|((unsigned long)ads1262_rx_Data[1]<<16)|(ads1262_rx_Data[2]<<8)|ads1262_rx_Data[3]);//get the raw 32-bit adc count out by shifting
        sads1262Count = (signed long) (uads1262Count);      // get signed value
        Serial.println("sads1262Count:");
        Serial.println(sads1262Count);
        resolution = (double)((double)VREF/pow(2,31));       //resolution= Vref/(2^n-1) , Vref=2.5, n=no of bits
        Serial.println(resolution,15);
        volt_V      = (resolution)*(float)sads1262Count;     // voltage = resolution * adc count
        volt_mV   =   volt_V*1000;                           // voltage in mV 
     tft.setCursor(166,150);
     tft.println(volt_mV,3); } //not printed on TFT

В приведенном выше коде ADS1262 не активирован, поэтому не дает значения для последовательного окна или TFT.

Как активировать модуль ADS1262.

, 👍2

Обсуждение

Вы использовали два разных контакта для CS? Можете ли вы показать используемые вами электрические соединения и код, в котором используется TFT?, @frarugi87

Если вы используете плату Ethernet Arduino, вам необходимо зарезервировать и установить контроллер Ethernet и выбрать микросхему SD (D10 и D4)., @Mikael Patel

Мы уже зарезервировали D10 для контроллера Ethernet и D4 для выбора микросхемы SD. Вопрос в том, как общаться с ними обоими, по очереди. Я могу получить доступ к одному из них только тогда, когда код подготовлен для обоих устройств., @ecaits

Не могли бы вы, пожалуйста, дать вам ссылку на дисплей, который вы использовали? Там сотни 2,2 - дюймовых TFT-модулей SPI. Некоторым из них не хватает надлежащей схемы перевода уровня., @next-hack


1 ответ


-1

Я бы предложил, чтобы

1) вы отлаживаете отдельный код и должны убедиться, что они работают отдельно, прежде чем интегрировать их.

2) вы помещаете эти фрагменты кода в логические блоки. например, вы, скорее всего, собираетесь что-то прочитать с АЦП и отобразить это на ЖК-дисплее. таким образом, ваш поток кода должен быть примерно таким:

  vol_adc = ad1262_read(ADC1_CH); //read analog from ADC1_CH
  vol_mv = adc2mv(vol_adc); //convert the adc results to mv
  lcd_display(vol_mv);  //display vol_mv on the lcd

такой подход позволяет значительно упростить программирование и отладку для вас и ваших читателей.

,