Forum: Mikrocontroller und Digitale Elektronik 2 TFT an Arduino-SPI anschließen


von Andreas G. (horstsergio)


Lesenswert?

Hallo zusammen,

ich habe am Nano-SPI 2 TFT Displays angeschlossen. Das Problem ist, 
dass, wenn ich das 2. Display mit TFT2.begin() "starte", das 1. Display 
nicht mehr reagiert und einen weißen Bildschirm anzeigt.
Das ist unabhängig davon, welches Display Nr 1 oder 2 ist.
Die Datenleitungen werden von beiden Displays benutzt und das 2. Display 
hat eine eigene CS-Leitung.
Was mache ich falsch?

Hier der Code:
1
#include <SPI.h>
2
#include <ILI9341_due_config.h>
3
#include <ILI9341_due.h>
4
#include "fonts\SystemFont5x7.h"
5
6
#include <Wire.h>
7
#include <MechaQMC5883.h>
8
9
#define TFT_RST 8
10
#define TFT_DC 9
11
#define TFT_CS 10
12
13
#define TFT2_CS 7
14
15
ILI9341_due tft = ILI9341_due(TFT_CS, TFT_DC, TFT_RST);
16
ILI9341_due tft2 = ILI9341_due(TFT2_CS, TFT_DC, TFT_RST);
17
18
void setup(void)  // Start of setup
19
{
20
 Wire.begin();
21
  tft.begin();
22
  tft.setRotation(iliRotation180);
23
  tft.setTextLetterSpacing(2);
24
  tft.fillScreen(ILI9341_YELLOW);
25
26
 tft2.begin();
27
  tft2.setRotation(iliRotation180);
28
  tft2.setTextLetterSpacing(2);
29
  tft2.fillScreen(ILI9341_BLUE);
30
  
31
  tft2.setFont(SystemFont5x7);
32
  tft2.setTextColor(ILI9341_BLACK,ILI9341_YELLOW);  tft2.setTextScale(5);
33
  tft.setFont(SystemFont5x7);
34
  tft.setTextColor(ILI9341_BLUE,ILI9341_WHITE);  tft.setTextScale(4);
35
  
36
  
37
 }  // End of setup
38
39
void loop(void)  // Start of loop
40
{
41
  tft.cursorToXY(30,20);
42
  tft.print ("Test");
43
  tft.cursorToXY(25,230);
44
  tft.print ("12345");
45
46
  tft2.cursorToXY(25,230);
47
  tft2.print ("tseT");
48
  tft2.cursorToXY(25,230);
49
  tft2.print ("54321");
50
51
 }  // End of loop

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Was macht die Funktion "begin"?

Gibt es ein korrespondierendes "end"?

Was steht in der Dokumentation von "ILI9341_due" drin?

von Andreas G. (horstsergio)


Lesenswert?

Puh - gute Fragen. Ehrlich gesagt überschreitet die Analyse von 
Libraries meine Fähigkeiten - ich bin mehr so der Typ ich baue mir aus 
verschiedenen Bausteinen meine Anwendung zusammen bzw. adaptiere sie und 
entwickle meine Programmierkenntnisse sukzessive (langsam) weiter. 
Leider bin ich noch nicht so weit.

von Mitlesa (Gast)


Lesenswert?

Andreas G. schrieb:
> Was mache ich falsch?

Wenn du willst dass es jemand nachvollzieht soltest du noch
die Quellen deiner Libs/Sourcen angeben.

von Dieter F. (Gast)


Lesenswert?

Du musst hier (ILI9341_due_config.h) auf EXTENDED
1
/*
2
ILI9341_due_config.h - Arduino Due library for interfacing with ILI9341-based TFTs
3
4
Code: https://github.com/marekburiak/ILI9341_due
5
Documentation: http://marekburiak.github.io/ILI9341_due/
6
7
Copyright (c) 2015  Marek Buriak
8
9
*/
10
11
#ifndef _ILI9341_due_configH_
12
#define _ILI9341_due_configH_
13
14
// comment out the SPI mode you want to use (does not matter for AVR)
15
//#define ILI9341_SPI_MODE_NORMAL  // uses SPI library
16
//#define ILI9341_SPI_MODE_EXTENDED  // uses Extended SPI in Due, make sure you use pin 4, 10 or 52 for CS
17
#define ILI9341_SPI_MODE_DMA    // uses DMA in Due

stellen und die angegebenen CS-Pins verwenden.

Davon ausgehend, dass du diese "Copyright (c) 2014  Marek Buriak" 
Library verwendest ...

von Andreas G. (Gast)


Lesenswert?

Moin,
jo ich benutze diese Library. War leider ein paar Tage offline - komme 
aber hoffentlich heute Abend dazu es auszuprobieren.

Gruß und vorab schon mal vielen Dank für die Unterstützung!

Andreas

von Linux T. (Gast)


Lesenswert?

Du benutzt für beide Displays einen GPIO als Reset. Das kann nicht 
funktionieren. Nimm getrennte IOs und alles ist gut.

von M. K. (sylaina)


Lesenswert?

Linux T. schrieb:
> Du benutzt für beide Displays einen GPIO als Reset. Das kann nicht
> funktionieren.

Das ist ja egal.
Für beide den selben CS/DC zu benutzen wäre blöd.

von Linux T. (Gast)


Lesenswert?

M. K. schrieb:
> Linux T. schrieb:
>> Du benutzt für beide Displays einen GPIO als Reset. Das kann nicht
>> funktionieren.
>
> Das ist ja egal.
> Für beide den selben CS/DC zu benutzen wäre blöd.

So ein Quatsch.
In TFT.begin() wird ein Reset gemacht. Daher auch:

> Das Problem ist, dass, wenn ich das 2. Display mit
> TFT2.begin() "starte", das 1. Display nicht mehr
> reagiert und einen weißen Bildschirm anzeigt.

Also: 2 Reset-Pins und alles ist schick.

von Mitlesa (Gast)


Lesenswert?

Linux T. schrieb:
> In TFT.begin() wird ein Reset gemacht.

Richtig! Bei der Klassen-Instanzierung wird ein Reset-Pin
angegeben. Der wird wohl auch genutzt werden.

Andreas G. schrieb:
> ILI9341_due tft = ILI9341_due(TFT_CS, TFT_DC, TFT_RST);
> ILI9341_due tft2 = ILI9341_due(TFT2_CS, TFT_DC, TFT_RST);

von Wolfgang L. (smarty9797)


Lesenswert?

Dieter F. schrieb:
> Du musst hier (ILI9341_due_config.h) auf EXTENDED

Das wird dem TO nicht weiterhelfen, da ein Arduino Nano kein Extended 
SPI hat... Der Autor der Lib schreibt in seiner Doku, dass auf Nano, Uno 
etc. nur ILI9341_SPI_MODE_NORMAL verwendet wird.

von Cyblord -. (cyblord)


Lesenswert?

Andreas G. schrieb:
> ich bin mehr so der Typ ich baue mir aus
> verschiedenen Bausteinen meine Anwendung zusammen

Das geht aber halt nur solange gut, bis man den vorgesehenen Pfad 
verlassen will. Das tust du, in dem du zwei TFTs betreiben willst. Und 
nicht nur ein einziges.
In diesem Moment schlägt das nicht vorhandene Wissen und die an den Tag 
gelegte Faulheit einem frontal in die Kauleiste. Nicht schön, aber 
Mitleid wirst du mit solch einer Einstellung auch nicht bekommen. Sei 
froh dass du mit deinem Nullwissen überhaupt 1 TFT betreiben kannst.

: Bearbeitet durch User
von BlaBla (Gast)


Lesenswert?

Cyblord -. schrieb:
> In diesem Moment schlägt das nicht vorhandene Wissen und die an den Tag
> gelegte Faulheit einem frontal in die Kauleiste. Nicht schön, aber
> Mitleid wirst du mit solch einer Einstellung auch nicht bekommen. Sei
> froh dass du mit deinem Nullwissen überhaupt 1 TFT betreiben kannst.

BlaBlaBla.

von Linux T. (Gast)


Lesenswert?

Cyblord -. schrieb:
> Andreas G. schrieb:
>> ich bin mehr so der Typ ich baue mir aus
>> verschiedenen Bausteinen meine Anwendung zusammen
>
> Das geht aber halt nur solange gut, bis man den vorgesehenen Pfad
> verlassen will. Das tust du, in dem du zwei TFTs betreiben willst. Und
> nicht nur ein einziges.


Er verläßt den vorgesehenen Pfad doch gar nicht.
Um im Bild zu bleiben: Er hat sich den Pfad gar nicht angesehen (nämlich 
die Bedeutung der Parameter), daher ist er auch vom Pfad abgekommen.

von Stuhw (Gast)


Lesenswert?

Linux T. schrieb:
> Er verläßt den vorgesehenen Pfad doch gar nicht.
> ...
> ...daher ist er auch vom Pfad abgekommen.

Was denn nun?

von Linux T. (Gast)


Lesenswert?

Stuhw schrieb:
> Linux T. schrieb:
>> Er verläßt den vorgesehenen Pfad doch gar nicht.
>> ...
>> ...daher ist er auch vom Pfad abgekommen.
>
> Was denn nun?


Beides. cyblord unterstellte, dass er aktiv den vorgesehenen Pfad 
verliess. Das ist nicht der Fall.
Er ist aber davon abgekommen, weil er sich eben denselben nicht richtig 
angesehen hat ;)

von Stuhw (Gast)


Lesenswert?

Es gibt also ein aktives und ein passives Verlassen?
Interessant...

von Andreas G. (horstsergio)


Lesenswert?

Es funktioniert - der Tipp mit dem separaten Reset hat geholfen.
Einen großen Dank an die die mir hier WIRKLICH geholfen haben!

@Cyblord: es tut mir aufrichtig Leid, dass solch ein Wicht wie ich, der 
Deiner wirklich nicht ansatzweise würdig ist, hier so saudämliche Fragen 
stellt.
Sollte ich Dir mit meiner kreuzdoofen Frage den Abend versaut haben, so 
bitte ich dies zu entschuldigen.

Andreas

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.