Kommunikationsprobleme: TFT SPI & nRF24L01+

Hallo zusammen,

es funktioniert immer nur das zuletzt Initialisierte, sprich in diesem Bsp. unten Funktioniert nur die Kommunikation mit dem nRF24L01+ und das Display zeigt nichts an.

Wenn ich das tausche, also erst nRF24L01+ und dann das TFT Display Initialisiere funktioniert das Display und meine Kommunikation mit dem nRF24L01+ nicht mehr.

Habe schon versucht die jeweiligen CS Pins manuell auf HIGH/LOW zu setzen um den SPI Bus freizugeben, jedoch ohne Erfolg.

Kann der Fehler vielleicht daran liegen, dass das Display und der nRF24L01+ unterschiedliche SPI Bus Geschwindigkeiten haben? Wenn ja, wie kann ich die gleichsetzen?

Verwende folgende Libraries:

TFT Display, von Henning Karlsen:
http://www.rinkydinkelectronics.com/library.php?id=51

nRF24L01+:

#include <UTFT.h>
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

extern uint8_t franklingothic_normal[];     //  16x16
UTFT myGLCD(TFT01_22SP, 11, 13, 10, 8, 9);  //  (controller, SDI(MOSI), SCK, CS, RESET, D/C)

RF24 myRadio (6, 7);      //   CE = 6, CSN = 7

struct myKeller {
  float temp;
  float hum;
  float pres;
  float errorAnz;
};
myKeller keller;

bool newData = true;
float testA = 5.0;

const uint64_t pipes[6] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0E2LL, 0xF0F0F0F0E3LL };

void setup() {

  Serial.begin(9600);

  pinMode(6, OUTPUT);
  digitalWrite(6, HIGH);
  //pinMode(7, OUTPUT);         //  nRF24L01+ CSN Pin
  //pinMode(10, OUTPUT);        //  TFT Display CS Pin

  myGLCD.InitLCD(PORTRAIT);
  myGLCD.clrScr();
  myGLCD.setBackColor(VGA_BLACK);
  myGLCD.setColor(VGA_SILVER);
  myGLCD.setFont(franklingothic_normal);

  myRadio.begin();
  myRadio.setChannel(108);
  myRadio.setPALevel(RF24_PA_MAX);
  myRadio.setDataRate(RF24_250KBPS);
  myRadio.openReadingPipe(1, pipes[1]);
  myRadio.startListening();
  /*
    myGLCD.InitLCD(PORTRAIT);
    myGLCD.clrScr();
    myGLCD.setBackColor(VGA_BLACK);
    myGLCD.setColor(VGA_SILVER);
    myGLCD.setFont(franklingothic_normal);
  */
}


void loop() {

  //digitalWrite(10, HIGH);       // Zum Deaktivieren   / TFT Display CS Pin
  //digitalWrite(7, LOW);         // Zum Aktivieren     / nRF24L01+ CSN Pin
  getData();
  //digitalWrite(7, HIGH);        // Zum Deaktivieren   / nRF24L01+ CSN Pin
  //digitalWrite(10, LOW);        // Zum Aktivieren     / TFT Display CS Pin
  showData();
}

void getData() {

  byte pipeNum;

  if (myRadio.available(&pipeNum)) {
    if (pipeNum == 1) {
      while (myRadio.available()) {
        myRadio.read(&keller, sizeof(keller));
      }
    }
    switch (pipeNum) {
      case 1:
        myGLCD.print("Temp.: ", 50, 50);
        myGLCD.printNumF(keller.temp, 1, 165, 50);
        Serial.print("Ort: ");
        Serial.print(pipeNum);
        Serial.print("    Temp.: ");
        Serial.print(keller.temp, 1);
        Serial.print("    Hum.: ");
        Serial.print(keller.hum, 0);
        Serial.print("    Pres.: ");
        Serial.print(keller.pres, 0);
        Serial.print("    Err.: ");
        Serial.println(keller.errorAnz, 0);
        Serial.println("");
        newData = true;
        testA += 0.1;
        break;
      default:
        break;
    }
  }
}

void showData() {
  if (newData) {
    //digitalWrite(7, HIGH);        // Zum Deaktivieren   / nRF24L01+ CSN Pin
    //digitalWrite(10, LOW);        // Zum Aktivieren     / TFT Display CS Pin
    myGLCD.print("test", 50, 100);
    myGLCD.printNumF(testA, 1, 50, 150);
    myGLCD.printNumI(testA, 50, 200);
    //digitalWrite(10, HIGH);       // Zum Deaktivieren   / TFT Display CS Pin
    //digitalWrite(7, LOW);         // Zum Aktivieren     / nRF24L01+ CSN Pin
    newData = false;
  }
}

Kann der Fehler vielleicht daran liegen, dass das Display und der nRF24L01+ unterschiedliche SPI Bus Geschwindigkeiten haben? Wenn ja, wie kann ich die gleichsetzen?

UTFT benutzt nicht die SPI Schnittstelle, sondern ein sog. BitBang-Interface, also eine Software-Emulation einer synchronen seriellen Schnittstelle (SPI ist eine solche). Damit ist die Hardware natürlich je nach Bibliothek anders konfiguriert. Du könntest das umgehen, indem Du für UTFT andere Pins verwendest, also 11 und 13 auf andere Pins legst.

Ok, jetzt funktioniert es.

Vielen Dank