3 термопары и tft дисплей SPI ILI9225 к шине SPI

Подскажите что я делаю не так.
Не Получаетсяподключить 3 термопары и tft дисплей SPI ILI9225 к шине SPI к ардуино уно . Работает либо дисплей или термопары когда удалю дисплей из скетча.
Подключение 3 термоар к SPI шине и дисплея LSD 2004А -V1.1 I2C к шине I2C я сделал все работает.

Мой скетч
//Термопары подключение
#include “max6675.h”
int thermoCLK = 13; // SCK -Serial clock генерируется синхронизирующие импульсы микроконтроллером…на плате термопары max6675 пин SO
int thermoDO = 12; // MOSO на контроллере. линия MOSO отвечает за прием данных в данном случае с термопары.на плате термопары max6675 пин SО
int thermoCS1 = 7;
int thermoCS2 = 6;
int thermoCS3 = 5;

MAX6675 thermocouple1 (thermoCLK, thermoCS1, thermoDO);
MAX6675 thermocouple2 (thermoCLK, thermoCS2, thermoDO);
MAX6675 thermocouple3 (thermoCLK, thermoCS3, thermoDO);

//Подключение Вольтметра
#define analog_pin A0 // Вывод которому подключен датчик

float adc_voltage = 0.0; // Создаем переменную adc_voltage
float in_voltage = 0.0; // Создаем переменную in_voltage
float R1 = 30000.0; // Задаем номинал резистора R1
float R2 = 7500.0; // Задаем номинал резистора R2
float ref_voltage = 5.0; // Задаем опорное напряжение
int adc_value = 0; // Создаем переменную для хранения показаний

// Подключения дисплея
#include “SPI.h” // библиотека работы по интерфейсу (шине) SPI
#include “TFT_22_ILI9225.h” // библиотека дисплея
// назначаем имена контактам дисплея
#define TFT_LED 3 // шим вывод для управления подсветкой (любой шим выход ардуино)
#define TFT_RST 8 // Reset (любой выход ардуино)
#define TFT_RS 9 //SPI Data/Command Select (любой выход ардуино)
// назначаем имена контактам дисплея SPI шине (использую аппаратные контакты SPI шины работают быстрей) фиксированые выводы ардуино уно
#define TFT_CS 10 // SS(Slave Select).- на контроллере. другое обознач CS(Chip Select)на подключеном устройстве
#define TFT_SDI 11 // MOSI на контроллере. линия MOSI отвечает за предачу в данном случае на дисплей.на дисплее пин SDI
#define TFT_CLK 13 // SCK -Serial clock генерируется синхронизирующие импульсы

#define TFT_BRIGHTNESS 100 // яркость дисплея

TFT_22_ILI9225 tft = TFT_22_ILI9225(TFT_RST, TFT_RS, TFT_CS, TFT_LED, TFT_BRIGHTNESS);// подключаем дисплей к проименованым контактам

void setup() {
Serial.begin(9600); //активируем порт передачи используется когда нужно выводить информацию на компьютер
Serial.println(“MAX6675 test”); //ждем стабилизации чипа MAX
Serial.println(“DC Voltage Test”); // Отправляем текст волтметр

tft.begin(); // инициализация ЖК дисплея
tft.clear();
tft.setOrientation(0); // Отрентация текста 0,1,2,3,

tft.setBackgroundColor(COLOR_YELLOW); // фон текста
tft.setFont(Terminal12x16);
tft.drawText(0, 20, “t1=”, COLOR_RED);
tft.drawText(0, 40, “t2=”, COLOR_RED);
tft.drawText(0, 60, “t3=”, COLOR_RED);
tft.drawText(0, 80, “V=”, COLOR_RED);

delay(1000);
}

void loop()
{
// Волтметр
adc_value = analogRead(analog_pin); // Считываем показания с аналогово вывода
adc_voltage = (adc_value * ref_voltage) / 1024.0; // Определение на входе АЦП
in_voltage = adc_voltage / (R2/(R1+R2)) ; // Расчет напряжения

//Выводим показания в монитор порта с термопар
Serial.print(" C1= "); // печатаем в порте C1 =
Serial.print(thermocouple1.readCelsius());// выводим в порт температ в цельсиях 1 термопары

Serial.print("; C2= "); // печатаем в порте C2 =
Serial.print(thermocouple2.readCelsius());// выводим в порт температ в цельсиях 2 термопары

Serial.print("; C3= "); // печатаем в порте C3 =
Serial.print(thermocouple3.readCelsius());// выводим в порт температ в цельсиях 3 термопары со следующей строки

//Выводим показания в монитор порта показания вольтметра
adc_value = analogRead(analog_pin); // Считываем показания с аналогово вывода
adc_voltage = (adc_value * ref_voltage) / 1024.0; // Определение на входе АЦП
in_voltage = adc_voltage / (R2/(R1+R2)) ; // Расчет напряжения
Serial.print("; V= "); // печатаем в порте V =
Serial.println(in_voltage, 2);// выводим в порт показания вольтметра

// Выводим температуры и вольты на диспплей
tft.setBackgroundColor(COLOR_YELLOW);
tft.setFont(Terminal12x16);
tft.drawText(50, 40,“t2”,COLOR_RED);
tft.drawText(50, 60, “t3=”, COLOR_RED);
tft.drawText(50, 80, “V=”, COLOR_RED);

delay(2000);

}

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

@123
Пины SCL и MISO для термопар и они же для дисплея должны быть РАЗНЫМИ!
А у вас они одни и те же. Странно как они должны работать.

//Термопары подключение
#include "max6675.h"
int thermoCLK = 13;  // SCK -Serial clock генерируется синхронизирующие импульсы микроконтроллером..на плате термопары max6675 пин SO
int thermoDO = 12;   // MOSO на контроллере.  линия MOSO отвечает за прием данных в данном случае с термопары.на плате термопары max6675 пин SО
int thermoCS1 = 7;
int thermoCS2 = 6;
int thermoCS3 = 5;

MAX6675 thermocouple1(thermoCLK, thermoCS1, thermoDO);
MAX6675 thermocouple2(thermoCLK, thermoCS2, thermoDO);
MAX6675 thermocouple3(thermoCLK, thermoCS3, thermoDO);

//Подключение Вольтметра
#define analog_pin A0  // Вывод которому подключен датчик

float adc_voltage = 0.0;  // Создаем переменную adc_voltage
float in_voltage = 0.0;   // Создаем переменную in_voltage
float R1 = 30000.0;       // Задаем номинал резистора R1
float R2 = 7500.0;        // Задаем номинал резистора R2
float ref_voltage = 5.0;  // Задаем опорное напряжение
int adc_value = 0;        // Создаем переменную для хранения показаний

//  Подключения дисплея
#include "SPI.h"             // библиотека  работы по интерфейсу (шине) SPI
#include "TFT_22_ILI9225.h"  // библиотека дисплея
  // назначаем имена контактам дисплея
#define TFT_LED 3  // шим вывод для управления подсветкой (любой шим выход ардуино)
#define TFT_RST 8  // Reset          (любой  выход ардуино)
#define TFT_RS 9   //SPI Data/Command Select  (любой  выход ардуино)
  // назначаем имена контактам дисплея SPI шине  (использую аппаратные контакты SPI шины  работают быстрей) фиксированые выводы ардуино уно
#define TFT_CS 10   // SS(Slave Select).- на контроллере. другое обознач CS(Chip Select)на подключеном устройстве
#define TFT_SDI 11  // MOSI на контроллере.  линия MOSI отвечает за предачу в данном случае на дисплей.на дисплее пин SDI
#define TFT_CLK 13  // SCK -Serial clock генерируется синхронизирующие импульсы

#define TFT_BRIGHTNESS 100  // яркость дисплея

TFT_22_ILI9225 tft = TFT_22_ILI9225(TFT_RST, TFT_RS, TFT_CS, TFT_LED, TFT_BRIGHTNESS);  // подключаем дисплей к проименованым контактам


void setup() {
  Serial.begin(9600);                 //активируем порт передачи используется когда нужно выводить информацию на компьютер
  Serial.println("MAX6675 test");     //ждем стабилизации чипа MAX
  Serial.println("DC Voltage Test");  // Отправляем текст волтметр

  tft.begin();  // инициализация ЖК дисплея
  tft.clear();
  tft.setOrientation(0);  // Отрентация текста 0,1,2,3,

  tft.setBackgroundColor(COLOR_YELLOW);  // фон текста
  tft.setFont(Terminal12x16);
  tft.drawText(0, 20, "t1=", COLOR_RED);
  tft.drawText(0, 40, "t2=", COLOR_RED);
  tft.drawText(0, 60, "t3=", COLOR_RED);
  tft.drawText(0, 80, "V=", COLOR_RED);

  delay(1000);
}

void loop() {
  // Волтметр
  adc_value = analogRead(analog_pin);                // Считываем показания с аналогово вывода
  adc_voltage = (adc_value * ref_voltage) / 1024.0;  // Определение на входе АЦП
  in_voltage = adc_voltage / (R2 / (R1 + R2));       // Расчет напряжения

  //Выводим показания в монитор порта с термопар
  Serial.print("  C1= ");                     // печатаем в порте C1 =
  Serial.print(thermocouple1.readCelsius());  // выводим в порт температ в цельсиях 1 термопары

  Serial.print(";   C2= ");                   // печатаем в порте C2 =
  Serial.print(thermocouple2.readCelsius());  // выводим в порт температ в цельсиях 2 термопары

  Serial.print(";   C3= ");                   // печатаем в порте C3 =
  Serial.print(thermocouple3.readCelsius());  // выводим в порт температ в цельсиях 3 термопары со следующей строки

  //Выводим показания в монитор порта показания вольтметра
  adc_value = analogRead(analog_pin);                // Считываем показания с аналогово вывода
  adc_voltage = (adc_value * ref_voltage) / 1024.0;  // Определение на входе АЦП
  in_voltage = adc_voltage / (R2 / (R1 + R2));       // Расчет напряжения
  Serial.print(";   V= ");                           // печатаем в порте V =
  Serial.println(in_voltage, 2);                     // выводим в порт показания вольтметра
  float temp1 = in_voltage(1);

  // Выводим температуры и вольты на диспплей
  tft.setBackgroundColor(COLOR_YELLOW);
  tft.setFont(Terminal12x16);
  tft.drawText(50, 40, "t2", COLOR_RED);
  tft.drawText(50, 60, "t3=", COLOR_RED);
  tft.drawText(50, 80, temp1, COLOR_RED);



  delay(2000);
}

У меня был такой же случай - графический TFT LSD на SPI и MAX6675.

Термометр гадил дисплею периодически, пока не пересадил его на Software SPI.

SCL- это тактовый сигнал (ардуино просто задает ритм как я понимаю
MISO -по нему ардуина принемает значения в моем случае температуру
CS- это сигнал от ардуино с каким устройством она работает эти контакты термопар подключены к разным пинам.

К чему вы это написали мне?
Я в курсе, как работает шина SPI

Скажите, вы библиотеку термопар открывали? Она не использует аппаратный SPI, в ней используется программная имитация на очень низком (в смысле - низкокачественном) уровне. Эта имитация не может работать на одних и тех же пинах с нормальной шиной, их надо разнести на разные пины.

Тоесть получается что дисплей с SPI шиной и термопары на усилителе max6675 SPI шиной работать вместе не могут.
В чем может быть причина?

вы не читаете ответов?
Может причина именно в этом?

Повторяю - ваша библиотека термопар НЕ ИСПОЛЬЗУЕТ spi

У MAX6675 не настоящий SPI! Очень похож, но отличается. Тем более, что в библиотеке используется ногодрыг, а в библиотеке дисплея – аппаратный. Разносите на разные пины с дисплеем

Теоретически - должны. Но, в моем случае, практика показала, что лучше рассадить их по разным ногам.
Т.к. свободные пины были - я не углублялся в проблематику.

Нет!

Во-первых ногодрыг с аппаратным SPI на одних пинах в принципе работать не будет. А сделать MAX на аппаратном SPI не так просто, т.к. протокол немного отличается.

Проклятый алиэкспресс. Прямо нонстоп фейки подкидывает.

Это всё придумал Черчилль в 18-ом году!

Прошу особо не ругать я новичек в програмировании многого не понимаю.
Я подключал 3 термоары к SPI шине с дисплеем LSD 2004А -V1.1 I2C к шине I2C все работало без замечаний . Просто захотелось цветной дисплей

Да зачем мне библиотека… Мы же легких путей не ищем.

ладно, ругать не буду.
Но согласитесь, умными ваши ответы вряд ли можно назвать.
Вам пишут про SPI, а вы отвечаете про i2c.
К чему это тут?

Соблюдайте логику хоть немного.

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

Причем интересно было: вроде как работает - температура читается, цифири на экран выводятся, а иногда раз - и лишние пикселы прорисовываются.
Как-будто термометр попердывал в шину.

Причем вскрылось все на сборке заказчика ))