SPI mit UTFT usw Problem

Code gehört IMMER in code-Tags! Eine solche Wüste schaut sich keiner an. Bitte bearbeite den Post und füge die Tags noch ein.

Hallo
meine Schuld hatte nicht richtig geklickt und nicht weiter konntrolliert :zipper_mouth_face:

#include <Adafruit_GFX.h>   
#include <Adafruit_ST7735.h>
#include <SPI.h>
#define sclk 13
#define mosi 11
#define cs   10
#define dc   9
#define rst  8  // you can also connect this to the Arduino reset
Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, rst);
#define CS_TEMP  3 //   MAX6674/6675 /CS Line
#define MUX_EN   7 // ADG608 MUX Enable
#define MUX_A0   4 // ADG608 Addr0
#define MUX_A1   5 // ADG608 Arrd1
#define MUX_A2   6 // ADG608 Addr2
byte Zaehler = 0 ;
String Geber = "";
float p = 3.1415926;

void setup(void) {
  Serial.begin(9600);
 // pinMode(10,OUTPUT); // Hardware /SS, need to be output
  pinMode(CS_TEMP,OUTPUT); // MAX6675/6674 /CS Line
  pinMode(MUX_EN,OUTPUT); // Enable pin on ADG608
  pinMode(MUX_A0,OUTPUT); // A0 on ADG608
  pinMode(MUX_A1,OUTPUT); // A1 on ADG608
  pinMode(MUX_A2,OUTPUT); // A2 on ADG608
  pinMode(10, OUTPUT);    randomSeed(analogRead(0));
  digitalWrite(CS_TEMP,HIGH); // Set MAX7765 /CS High
  digitalWrite(MUX_EN,HIGH); // Enable on
  tft.initR(INITR_REDTAB);   // initialize a ST7735R chip, red tab
  Serial.println("init");
  uint16_t time = millis();
  tft.fillScreen(ST7735_BLACK);
  time = millis() - time;
  Serial.println(time, DEC);
  delay(50);
    //   Serial.println(tft.getRotation(), DEC); // Display drehen
        tft.setRotation(tft.getRotation()+1); // Anzeige  gedreht
          tft.fillScreen(ST7735_BLACK);
       tft.setTextSize(3);
  tft.println("Hello World!");
  tft.setTextColor(ST7735_BLUE);
  tft.setTextSize(10);
  tft.print(1234.567);

          tft.setRotation(tft.getRotation()+1); // Anzeige  gedreht 
  // tft print function!
  // a single pixel
  tft.drawPixel(tft.width()/2, tft.height()/2, ST7735_GREEN);
  delay(50);
  // line draw test
  testlines(ST7735_YELLOW);
  delay(50);
  // optimized lines
  testfastlines(ST7735_RED, ST7735_BLUE);
  delay(50);
  testdrawrects(ST7735_GREEN);
  delay(50);
  testfillrects(ST7735_YELLOW, ST7735_MAGENTA);
  delay(50);
  tft.fillScreen(ST7735_BLACK);
  testfillcircles(10, ST7735_BLUE);
  testdrawcircles(10, ST7735_WHITE);
  delay(50);
  testroundrects();
  delay(50);
  testtriangles();
  delay(50);
  Serial.println("done");
  delay(1000);
}

void loop() {
  int temperature = 0;
Zaehler = 0 ;
tft.fillScreen(ST7735_BLACK);
while(Zaehler < 8 )
  {
        Zaehler = Zaehler ++ ;
    delay(1);
    Set_Mux_Channel(Zaehler);
   temperature = Read_Temperature();
   tft.setTextSize(2);
     tft.setCursor(0,Zaehler*19-19);
            tft.setTextColor(ST7735_YELLOW); 
    if(temperature == -1)
      {
          Geber = String(Zaehler);
       Serial.println("N/C  Sensor " + Geber);
         tft.println("N/C " + Geber );
     // myGLCD.print("N/C Se", Zaehler * 19 -14,125,270);   //
          //    myGLCD.print("N/C Se" + Geber + " ", Temp * 19 -14,125,270);   //
      }
      else
      {
       Serial.print(temperature,DEC);
        Geber = String(Zaehler);
       Serial.println(" C Sensor " + Geber);
  tft.println("H" + String(temperature,DEC) +" " + Geber );
      //      myGLCD.print(String(temperature,DEC)+"Test", Zaehler * 19 -14,125,270);   //
      // myGLCD.print(String(temperature,DEC)+ " C Se" + Geber + " ", Temp * 19 -14,125,270);   //
        Serial.println(Geber);
      }
  }
}

void testlines(uint16_t color) {
  tft.fillScreen(ST7735_BLACK);
  for (int16_t x=0; x < tft.width(); x+=6) {
    tft.drawLine(0, 0, x, tft.height()-1, color);
  }
  for (int16_t y=0; y < tft.height(); y+=6) {
    tft.drawLine(0, 0, tft.width()-1, y, color);
  }

  tft.fillScreen(ST7735_BLACK);
  for (int16_t x=0; x < tft.width(); x+=6) {
    tft.drawLine(tft.width()-1, 0, x, tft.height()-1, color);
  }
  for (int16_t y=0; y < tft.height(); y+=6) {
    tft.drawLine(tft.width()-1, 0, 0, y, color);
  }
  tft.fillScreen(ST7735_BLACK);
  for (int16_t x=0; x < tft.width(); x+=6) {
    tft.drawLine(0, tft.height()-1, x, 0, color);
  }
  for (int16_t y=0; y < tft.height(); y+=6) {
    tft.drawLine(0, tft.height()-1, tft.width()-1, y, color);
  }
  tft.fillScreen(ST7735_BLACK);
  for (int16_t x=0; x < tft.width(); x+=6) {
    tft.drawLine(tft.width()-1, tft.height()-1, x, 0, color);
  }
  for (int16_t y=0; y < tft.height(); y+=6) {
    tft.drawLine(tft.width()-1, tft.height()-1, 0, y, color);
  }
}
void testdrawtext(char *text, uint16_t color) {
  tft.setCursor(0, 0);
  tft.setTextColor(color);
  tft.setTextWrap(true);
  tft.print(text);
}
void testfastlines(uint16_t color1, uint16_t color2) {
  tft.fillScreen(ST7735_BLACK);
  for (int16_t y=0; y < tft.height(); y+=5) {
    tft.drawFastHLine(0, y, tft.width(), color1);
  }
  for (int16_t x=0; x < tft.width(); x+=5) {
    tft.drawFastVLine(x, 0, tft.height(), color2);
  }
}
void testdrawrects(uint16_t color) {
  tft.fillScreen(ST7735_BLACK);
  for (int16_t x=0; x < tft.width(); x+=6) {
    tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color);
  }
}
void testfillrects(uint16_t color1, uint16_t color2) {
  tft.fillScreen(ST7735_BLACK);
  for (int16_t x=tft.width()-1; x > 6; x-=6) {
    tft.fillRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color1);
    tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color2);
  }
}
void testfillcircles(uint8_t radius, uint16_t color) {
  for (int16_t x=radius; x < tft.width(); x+=radius*2) {
    for (int16_t y=radius; y < tft.height(); y+=radius*2) {
      tft.fillCircle(x, y, radius, color);
    }
  }
}
void testdrawcircles(uint8_t radius, uint16_t color) {
  for (int16_t x=0; x < tft.width()+radius; x+=radius*2) {
    for (int16_t y=0; y < tft.height()+radius; y+=radius*2) {
      tft.drawCircle(x, y, radius, color);
    }
  }
}
void testtriangles() {
  tft.fillScreen(ST7735_BLACK);
  int color = 0xF800;
  int t;
  int w = 63;
  int x = 159;
  int y = 0;
  int z = 127;
  for(t = 0 ; t <= 15; t+=1) {
    tft.drawTriangle(w, y, y, x, z, x, color);
    x-=4;
    y+=4;
    z-=4;
    color+=100;
  }
}
void testroundrects() {
  tft.fillScreen(ST7735_BLACK);
  int color = 100;
  int i;
  int t;
  for(t = 0 ; t <= 4; t+=1) {
    int x = 0;
    int y = 0;
    int w = 127;
    int h = 159;
    for(i = 0 ; i <= 24; i+=1) {
      tft.drawRoundRect(x, y, w, h, 5, color);
      x+=2;
      y+=3;
      w-=4;
      h-=6;
      color+=1100;
    }
    color+=100;
  }
}
void Set_Mux_Channel(unsigned char chan)
{
  switch(chan)
  {
    case 1:
      digitalWrite(MUX_A0,LOW);
      digitalWrite(MUX_A1,LOW);
      digitalWrite(MUX_A2,LOW);
      break;
    case 2:
      digitalWrite(MUX_A0,HIGH);
      digitalWrite(MUX_A1,LOW);
      digitalWrite(MUX_A2,LOW);
      break;
    case 3:
      digitalWrite(MUX_A0,LOW);
      digitalWrite(MUX_A1,HIGH);
      digitalWrite(MUX_A2,LOW);
      break;
    case 4:
      digitalWrite(MUX_A0,HIGH);
      digitalWrite(MUX_A1,HIGH);
      digitalWrite(MUX_A2,LOW);
      break;
    case 5:
      digitalWrite(MUX_A0,LOW);
      digitalWrite(MUX_A1,LOW);
      digitalWrite(MUX_A2,HIGH);
      break;
    case 6:
      digitalWrite(MUX_A0,HIGH);
      digitalWrite(MUX_A1,LOW);
      digitalWrite(MUX_A2,HIGH);
      break;
    case 7:
      digitalWrite(MUX_A0,LOW);
      digitalWrite(MUX_A1,HIGH);
      digitalWrite(MUX_A2,HIGH);
      break;
    case 8:
      digitalWrite(MUX_A0,HIGH);
      digitalWrite(MUX_A1,HIGH);
      digitalWrite(MUX_A2,HIGH);
      break;
    default:
      break;
  }
}
 int Read_Temperature(void)
{
unsigned int temp_reading;
   //force conversion now..
  delay(5); // Ori 5
  digitalWrite(CS_TEMP,LOW); // Set MAX7765 /CS Low
 delay(5); // Ori 5
  digitalWrite(CS_TEMP,HIGH); // Set MAX7765 /CS High
  delay(250); // Ori 250  wait for conversion to finish..
  // read result
  digitalWrite(CS_TEMP,LOW); // Set MAX7765 /CS Low
  delay(1);  // Ori 1
           temp_reading = SPI.transfer(0xff) << 8; 
           temp_reading += SPI.transfer(0xff); 
  digitalWrite(CS_TEMP,HIGH); // Set MAX7765 /CS High
  //delay(1);
  // check result
  if(bitRead(temp_reading,2) == 1) // No Connection
    {     
      return(-1); // Failed / NC Error
    }
    else
    {
      return((int)(temp_reading >> 5)); //Convert to Degc
    }
}

Hallo,
habe mal den MAX6675 gegen den MAX31855 getauscht.
Es haben bei das SPI problem, bei verwendung von weiteren SPI geräten. :zipper_mouth_face:

werde jetzt mal den ADG595 verwenden.
Da der ohne SPI arbeitet müste es ja gehen.

Grüße
Ratlos

Hallo,
da beide MAX IC´s das SPI problem haben.
Benutze ich jetzt ein AD595
Damit ist das problem gelöst

Danke noch einmal pylon ;o)

Grüße
Ratlos

Hallo,
der AD595 mit Multiplexen geht.

Da der AD595 bei 840°C doch arg daneben liegt habe ic hes mit einer Tabelle Korregiert.
Aber kann man anhand des Datenblattes nicht eine Formel benutzen ?

Leider bin ich nicht Klug genug dafür.
Hat jemend eine Libery oder eine Formel ?

Danke Grüße
Ratlos