TFT Display mit Canshield

Hallo zusammen,

ich hätte da noch eine kleine Frage in die Runde :slight_smile:

Ist es möglich, dieses Display

Mit diesem Canshield
http://www.seeedstudio.com/wiki/CAN-BUS_Shield
zu betreiben?

Mir stellt sich da nun das Problem mit der Pinbelegeung CS / MOSI / MISO / SCK

Wäre es auch möglich, das TFT Display über ein Schieberegister zu betreiben?

Ich benutze diese Lib für das Display

Vielen Dank Vorab und Gruß

MOSI / MISO / SCK können paralell genutzt werden
CS brauch jedes Gerät seinen eigenen.
Du kannst CS auf einem Shield umlöten und den Sketch/Bibliothek ändern.
http://www.seeedstudio.com/wiki/CAN-BUS_Shield#How_to_Change_SS_Pin

Grüße Uwe

Hallo Uwe, vielen Dank!

Das mit dem CS Pin bei Seedstudio hatte ich mal gelesen!
Allerdings habe ich genau dort mein Problem.
Pin 13,12,11 und 10 für das Display wobei hier 10 der CS Pin ist. Pin 9 wird ab Version 1.1 vom Canshield standardmäßig für den CS genutzt.

Nun sollte ja eigentlich alles schön sein, Pin 9 CS Canshield und Pin 10 CS Tft, oder habe ich das falsch verstanden? Das mit der parallel Nutzung von MISO / MOSI / SCK war mir neu, danke für die Info :slight_smile:

Viele Grüße

Funktioniert soweit, danke !!!

Guten Abend, ich habe "leider" doch noch eine Frage :frowning:

Wie ist es möglich, dass man die Zahl die ausgegeben wird zu sehen, ohne das sie sich selber überschreibt (siehe Anhang)?
Ich hatte es schon mit drawChar (als reset) versucht, habe dann allerdings nur mehr "geblinke" als alles andere.

Würde mich über eine Anregung meiner Gehirnzweige :wink: sehr freuen!

Danke

Also ist es wirklich so, dass wenn man ein Zeichen auf die gleiche Stelle schreibt nur die aktiven Pixel gesetzt werden? Und nicht alle Pixel (egal on oder aus) im Bereich des Zeichens neu geschrieben werden? Das hat jemand anders hier nämlich auch kürzlich berichtet. Damit gehen geht dann die übliche Vorgehensweise Zahlen auf eine konstante Breite zu formatieren und mit Nullen oder Leerzeichen aufzufüllen nicht.

Da würde ich mich mal an Adafruit wenden was das soll. Und wie man dass dann flacker-frei lösen soll.

Schau dir mal das an, das dürfte dein Problem beseitigen. ab Beitrag #46

Füllstand TFT

Gruß

Hallo Scherheinz, danke für den Link!

Also mit fillRect anstelle von Char.
War ich ja mit meiner Idee nicht weit entfernt :slight_smile:

Ich Berichte wenn ich getestet habe!

Gruß

Viel Spaß mit dem Flackern :slight_smile:

Das geht, aber sieht nicht gut aus :frowning:

Serenifly:
Viel Spaß mit dem Flackern :slight_smile:

Das geht, aber sieht nicht gut aus :frowning:

Also flackert auch das mit dem fillRect wie bei Char?
Andere Alternative ist ein anderes Display, oder kennst Du eine andere Möglichkeit ?

Wenn ein anderes Display Abhilfe schafft würde ich mich freuen zu erfahren welches :slight_smile:

Danke

Der Text wird schon richtig gelöscht. Aber TFTs sind recht langsam. Du siehst halt dass das Rechteck gezeichnet wird und dann der Text darüber. Wenn du damit leben kannst ok, aber schön ist es nicht.

Das Problem liegt nicht am Display, sondern an der Library!! Die sollte eigentlich alle Pixel im Bereich eines Zeichens neu schreiben. So dass man ein Zeichen direkt mit anderen Zeichen (wie einem Leerzeichen) überschreiben kann. Dann formatiert man seinen Text auf eine konstante Breite mit führenden Leerzeichen oder Nullen.

Aber wenn ich das mit Adafruit richtig verstehe werden da nur die "An"-Pixel neu geschrieben. Nicht die "Aus"-Pixel. Vielleicht habe ich es auch falsch verstanden, aber hier hat jemand das gleiche berichtet:

Ich würde da mal eine eMail an Adafruit schreiben wie das gedacht ist.

Hast du mal diese Methode probiert:

setTextColor(uint16_t c, uint16_t bg)

Da kann man die Text-Farbe und die Hintergrund-Farbe setzen. Was passiert wenn man Schwarz als Hintergrund nimmt?

Ich habe nur Erfahrung mit UTFT. Da ist das kein Problem.

Ohne einen Blick in die TFT Lib, gibt es eine Möglichkeit den Mode auf XOR zu setzen ?
Dann schreibt man das was man Löschen will einfach nochmals im XOR Mode.

Das mit der parallel Nutzung von MISO / MOSI / SCK war mir neu, danke für die Info

Deswegen gibt es auch für jedes Devices einen Chip Select (CS) Pin.

Serenifly:
Hast du mal diese Methode probiert:

setTextColor(uint16_t c, uint16_t bg)

Da kann man die Text-Farbe und die Hintergrund-Farbe setzen. Was passiert wenn man Schwarz als Hintergrund nimmt?

Ich habe nur Erfahrung mit UTFT. Da ist das kein Problem.

was ist genau mit uint16_t c gemeint? uint16_t gb wird dann wohl die Backgroundfarbe sein ?

@ rudirabbit
leider nichts gefunden :frowning:

Der erste Parameter wird die Text-Farbe sein

Ist auch nur Spekulation. Ich habe noch nichts mit Adafruit TFTs gemacht. Mich wundert aber diese ganze Sache.

Serenifly:
Der erste Parameter wird die Text-Farbe sein

Ist auch nur Spekulation. Ich habe noch nichts mit Adafruit TFTs gemacht. Mich wundert aber diese ganze Sache.

Also müsste es dann so ausschauen?

 void geschwindigkeit()
{
  long vehicleSpeed = myCAN.getVehicleSpeed();
  tft.setCursor(30, 190);
  tft.setTextSize(2);
  tft.setTextColor(ILI9340_BLACK, ILI9340_BLACK);
  tft.setTextColor(ILI9340_GREEN);
  tft.println(vehicleSpeed);
}

Ich habe hier auch etwas zu dem Thema auf der englischen Seite gefunden, scheint also zu klappen!?
Nur bei mir imMoment noch nicht :slight_smile:

klick mich

uint16_t siehe Integer (Datentyp)

Mach mal nur das:

tft.setTextColor(ILI9340_GREEN, ILI9340_BLACK);

Wobei du eigentlich einen HX8340B Chip hast. Weiß nicht die Farben dann so bei dir auch definiert sind. Ich sehe da auf die Schnelle nichts.

Im Beispiel dazu wird es per Hand gemacht:

// Color definitions
#define	BLACK           0x0000
#define	BLUE            0x001F
#define	RED             0xF800
#define	GREEN           0x07E0
#define CYAN            0x07FF
#define MAGENTA         0xF81F
#define YELLOW          0xFFE0  
#define WHITE           0xFFFF

Ganz normales RGB565 (aka High Color) wenn du selbst noch Farben definieren willst

Müsste es nicht so aussehen ?

 tft.setTextColor(ILI9340_BLACK, ILI9340_BLACK);
 tft.println(old_vehicleSpeed);
  tft.setTextColor(ILI9340_GREEN);
  tft.println(vehicleSpeed);

old_vehicleSpeed das was zu überschreiben ist.

Da bringst du jetzt zwei Sachen durcheinander.

Einer da hat vorgeschlagen den alten Text zu überschreiben. Jemand anders hat gesagt dass das automatisch geschieht wenn man zwei Parameter angibt.

If you carefully read API notes you will notice that tft.setTextColor can take either one or two arguments. If single argument provided - it will print text color with clear background (junk pixels will accumulate). If two arguments provided - it will fill background of each character with color of second argument.

Und wie gesagt mit den Farb-Definitionen aufpassen. Es kann gut sein dass die hier nicht bekannt sind. Dann meckert der Compiler und man macht es halt selbst.

Serenifly:
Da bringst du jetzt zwei Sachen durcheinander.

Ja du hast recht, bin im "neudeutschem" aus der Übung.