Bascom SPI Ansteuerroutinen für das 4,3" TFT 480x272 von XV-Display (BASCOM)

Cassio

Aktives Mitglied
29. Okt. 2008
4.027
17
38
Region Hannover
Sprachen
  1. BascomAVR
Hallo zusammen!

Ich wollte hier ja schon lange meine Ansteuerroutinen für die TFT60D Displayfamilie von XV-Display.de hier einstellen......
und jetzt ist es endlich mal soweit!

Dino03 hatte ja HIER schon mal seine "Variante" vorgestellt und StevieL hat noch eine weitere Version via LIB, die er hier auch zum Besten geben hat.


Nun gehts aber mit meiner Methode los.....

Worum geht es genau?
Ich hatte mich für das 4,3 Zoll große TFT-Display entschieden, weil es für mein Vorhaben eine angenehme Größe besitzt und trotzdem noch handlich ist.
Um es mal vorweg zu nehmen.....
Hier ein Foto von der "fertigen" Einheit: HCU_fertig.jpg


Was soll es mal werden?
Im "Endstadium" (was wohl etwas dauern wird) wird die Einheit drahtlos viele Aktoren im Haus (indirekt) steuern und bestimmte Daten von externen Sensoren (indirekt) entgegennehmen.
In der Kurzversion nenne ich meine Steuerung daher HCU-1..... Home Control Unit ! :wink:

Die Displayeinheit ist allerdings nur die Bedien- und Informationseinheit und NICHT die zentrale Steuer- und Überwachungseinheit.
Für die drahtlose Kommunikation zwischen Bedien- und Steuereinheit verwende ich eine Bluetooth-Verbindung.
Zu den BTM222 Modulen habe ich in meinem Blog schon mal etwas geschrieben, weshalb ich da hier jetzt nicht weiter drauf eingehe.

Außerdem geht es in diesem Thread um die Ansteuerroutinen für das Display.....
und nicht um mein (Langzeit)Projekt der HCU. :wink:


Kommen wir zum Thema!
Wer sich schon mal mit den Display`s von XV-Display befasst hat wird festgestellt haben, dass alle Display`s einfach via SPI angesteuert werden können.
Das Besondere ist aber, das die Display`s eigenständig intelligent sind!
Ich muss also nicht wie bei anderen Typen/Herstellern zum Beispiel ein Rechteck pixelweise selber zeichnen, sondern ich muss nur noch die Anweisung und die Koordinaten via SPI zum Display schicken. Den Rest erledigt das Display von ganz allein!

Auf diese Weise kann man dem Display mitteilen, dass man zum Beispiel:
  • eine Linie zeichnen möchte
  • ein Rechteck (Rahmen oder ausgefüllt) zeichnen möchte
  • einen Kreis zeichnen möchte
  • welche Stiftfarbe verwendet werden soll
  • welche Hintergrundfarbe angewendet werden soll
  • ob das Display gelöscht werden soll
  • welche Schriftart bei Text genommen werden soll
  • wo und welcher Text ausgegeben werden soll
  • ob ein Bild aus dem internen Speicher angezeigt werden soll
  • ob ein Bild von der SD-Card angezeigt werden soll
  • den Touch auslesen (sofern man ein Display mit Touch hat)
  • und und und

Die Liste könnte wohl noch um einiges länger sein... aber es soll als Übersicht erst mal ausreichen. :cool:


Einigen von euch wird das wohl schon vom kleinen OLED-Display bekannt vorkommen.
Allerdings gibt es bei den TFT-Display`s einige Besonderheiten, die es zu "Zeiten" des OLED noch nicht gab. :wink:

So haben alle TFT-Display-Module jetzt einen SD-Card Slot, der einerseits zum Updaten des Moduls dient, aber auch als zusätzlicher Speicher für Icons und Bilder genutzt werden kann!
Dadurch erhält man natürlich ganz andere Möglichkeiten und kann viel mehr Grafiken und Bilder einsetzen, ohne den Speicher im AVR zu strapazieren, oder aufwendig mit separatem Leveltranslater und SD-Card jedesmal den Hardwareaufbau erweitern zu müssen. :)
Hier wieder mal ein paar Beispielbilder:
HCU_Testmenue.jpg

HCU_Qwertz48.jpg

HCU_Temperatur.jpg


Kommen wir aber nun zum Wesentlichen!
Wie schon einige Male erwähnt, müssen alle Daten via SPI entsprechend dem Datenblatt übermittelt werden.
Fertige Routinen von BASCOM benötigt man dafür eigentlich nicht!
Da es beim Programmieren aber praktischer ist, wenn man nur auf Subroutinen zurück greifen muss, habe ich die Ansteuerung folgendermaßen realisiert.

Ich habe mir zwei Dateien erstellt, die ich im Programm per $INCLUDE hinzulade.
Einmal ist das die Datei, in der alle Subroutinen (und zum Teil auch Variablen) deklariert werden.....
und in der zweiten Datei befinden sich alle benötigten Subroutinen.

Anschließend kann ich im Programm ganz einfach folgende Anweisung schreiben:
Code:
Tft_box 469 , 261 , 479 , 271 , 1 , Gelb
um einen kleines, gefülltes, gelbes Rechteck in der unteren rechten Ecke zu zeichnen

....oder auch:
Code:
Tft_ 0 , 60 , "AVR-Praxis.de"
um den Text auszugeben.


Wie das genau funktioniert, werde ich in den nächsten Beiträgen hier noch erklären.

Grüße,
Cassio
 
Hallo !

Kommen wir jetzt aber zu den beiden Dateien zur Ansteuerung....


Einmal wäre da die _xv_sub_declare.bas die zu Beginn einmal ins Programm mittels $INCLUDE eingebunden wird.
In dieser Datei werden (fast) alle benötigten Subroutinen deklariert.... und auch die wichtigsten Variablen gleich dimensioniert.

Einige Variablen sind mit Overlay`s versehen, so dass nur einmal der Speicher im AVR belastet werden muss.
Am Besten, ihr werft einfach mal einen Blick darauf.... dann seht ich was ich meine. :wink:

Hier seht ihr die Dimensionierung der wichtigen Variablen:
XV_Declare_Variablen.gif


Dann folgt jetzt auch gleich die Deklaration der Subroutinen für das Display:
XV_Declare_Subroutinen.gif


Fehlen jetzt nur noch die Subroutinen für den Touch.... wenn das Display ein Touch-TFT sein sollte:
XV_Declare_Touchroutinen.gif


Damit wäre der erste Teil nun erledigt!
Fehlen jetzt nur noch die zugehörigen Subroutinen, ohne die natürlich nichts funktionieren würde......
und die folgen dann auch gleich im nächsten Beitrag. :wink:

Grüße,
Cassio
 

Anhänge

  • _xv_sub_declare.bas
    4,3 KB · Aufrufe: 114
Hallo!

Weiter geht es mit den eigentlichen Subroutinen.....

Alle Subroutinen habe ich in der Datei _xv_subs.bas abgespeichert.
Die Datei wird natürlich am ENDE des Programms ebenfalls einmal mit $INCLUDE eingebunden.
Anschließend stehen die einzelnen Routinen im Programm zur Verfügung.


Hier mal ein paar Beispiele von diversen Ansteuerungen als Subroutine:
Subs.gif

Wie ihr schon sehen könnt, werden in den passenden Subs immer nur die Variablen zugewiesen.
Das Senden der Daten via SPI übernimmt dann eine gesonderte Routine, die mittels GOSUB aufgerufen wird.



Für den Touchscreen gilt natürlich das Selbe, nur das hier natürlich noch das Einlesen der Koordinaten hinzu kommt.
Hierfür habe ich ebenfalls verschiedene Subroutinen erstellt:
Subs-Touch.gif

Auch hier werden wieder nur Variablen zugewiesen und teilweise auch der Startwert zum Ablegen der eingehenden Daten in die Speicherbereiche (Overlays) vorgegeben.
Das Eigentliche Senden und Empfangen der Daten via SPI erfolgt durch entsprechende Routinen, die wieder mittels GOSUB aufgerufen werden.



Hier jetzt noch die Routinen zum Senden und Empfangen der Daten über den SPI-Bus:
Subs-send_recv.gif



Etwas WICHTIGES muss ich aber noch dringend erwähnen!
Das DISABLE INT7 (in den Subroutinen) ist natürlich NUR notwendig, wenn man den Touchscreen via externen Interrupt betreiben möchte (der bei MIR am Mega128 auf INT7 liegt)!
Das Ab- und Einschalten des Interrupts erfolgt aus dem Grund, damit es beim Senden und Empfangen der Daten über den SPI-Bus zu keinen Unterbrechungen kommt!


So, dass war es eigentlich auch schon, zur Ansteuerung des Displays!
Natürlich kann jeder die Routinen erweitern, oder verändern und nach seinen Bedürfnissen anpassen.
Wie ihr an den Beispielen von Dino und ggf. noch StevieL sehen könnt, gibt es schließlich mehrere Möglichkeiten. :wink:


Grüße,
Cassio
 

Anhänge

  • _xv_subs.bas
    8,7 KB · Aufrufe: 71
Hallo!

Wer übrigens mehr zu meiner HCU erfahren möchte, bei der es dann auch bestimmt einige Codebeispiele geben wird,
der kann sich ab jetzt HIER weiter informieren.


Allerdings......
Für Fragen und Anregungen zu meiner SPI-Ansteuerung des Displays, bitte diesen Thread verwenden!


Grüße,
Cassio
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)