Bascom Frage zu XV-TFT2428T und SPI

Hallo Roto!

Momentan weiß ich nicht, wo dein Problem liegt? :hmmmm:

Du hast fix und fertige Ansteuerroutinen für das Display als separate LIB von StevieL !
Zusätzlich hast du eine passende "Declare-Datei" von StevieL, die dir das Deklarieren aller Subroutinen abnimmt!
Obendrein hast du sogar noch ein komplettes Demoprogramm mit diversen Funktionen von StevieL !
Dann hat Dirk dir schon den genauen Ablauf für den Touch ausführlich erklärt.

Ich weiß jetzt gar nicht mehr, was ich da noch schreiben soll? :hmmmm:


Aus dem Grunde versuche ich es jetzt mit dem kleinen Testprogramm vom letzen Mal, dass ich um eine kleine Touch-Funktion erweitert habe.
Ich hoffe, der Programmcode funktioniert auch!
Schließlich habe ich ihn jetzt nur mal ebenso zusammen geschrieben, ohne zu testen.

Wenn alles funktioniert, dann sollte zum Test des Touch-Panles das Display oben rot und unten gelb gefüllt sein und das Programm wartet auf eine Berührung.
Jenachdem welches der beiden farbigen Felder du dann mit dem Finger berührst, erscheint eine schriftliche Rückmeldung für "oben" oder "unten".


Ich hoffe, es klappt alles soweit und du hast damit das Prinzip verstanden.
Sollten dir die ganzen Call-Aufrufe mit der LIB zu "aufwendig" sein, dann kannst du auch gerne mal meine Variante ausprobieren.
Letztlich arbeiten aber beide Versionen vom Prinzip her identisch. :wink:


Grüße,
Cassio



Hier nun das erweiterte Testprogramm:
Code:
$regfile = "m128def.dat"
$crystal = 16000000

$hwstack = 500                                              'für Test
$swstack = 500
$framesize = 250


$lib "XV-TFT.lib"


Ddra = &B0010_0000
Porta = &B1101_1111

Ddrc = &B0000_00000
Portc = &B1111_1111
Ddrd = &B0000_0001
Portd = &B1111_1110
Ddre = &B0000_0001
Porte = &B1111_1110
Ddrf = &B0000_0000
Portf = &B1111_1111




'SPI steuert das Display
'PG0=CS\   (Output, Low)
'PB1=SCK   (Output, Low)
'PB3=MISO  (Input, High)
'PB2=MOSI  (Output, Low)
'PG1=BUSY\ (Input, High)
'PG7=TINT\ (Input, High)

Ddrb = &B0000_0110
Portb = &B1111_1001

Ddrg = &B0000_00001
Portg = &B1111_1110

'############################################################################################

'------------------------------------------------------------------------------
' SPI Definition für das Display
'------------------------------------------------------------------------------
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 16 , Noss = 1
Spiinit

$include "init_xv_tft.bas"                                  'Die Routinen der Library einbinden


'##################################################################################################
' Alias Definitionen
' Pins an eigene Beschaltung anpassen aber bitte nicht umbenennen, da
' die Library diese Aliase (Display_cs, Display_busy und Display_tint) verwendet.
'##################################################################################################
Display_cs Alias Portg.0                                    'CS_Pin
Display_busy Alias Ping.1                                   'Busy_Pin
Display_tint Alias Ping.7                                   'Touchpanel_Interrupt
Set Display_busy
Set Display_cs




'------------------------------------------------------------------------------
' Variablen Definitionen
'------------------------------------------------------------------------------
Dim I As Byte




'Programmbeginn
Wait 1
Bitwait Display_busy , Set                                  'Auf Initialisierung Display warten

Call Touchpanel_setconfig(&H0000001)
Call Setdisplaymode(displaymode_portrait)
Call Setbacklightintensity(255)                             'Max. Backlight Brightness
Call Set_font(1)

Do

Call Setpencolor(0 , 0 , 0)
Call Setbrushcolor(255 , 255 , 255)
Call Fillscreen_brushcolor()                                'Clear Screen


Call Displaytext(70 , 120 , "xv-display.de")
Call Displaytext(65 , 140 , "Display Module")
Call Set_font(0)
Call Displaytext(15 , 160 , "   Beispielprogramm für Roto    ")
Call Set_font(1)


Wait 3


Call Fillscreen_brushcolor()
Call Setpencolor(255 , 255 , 255)
Call Setbrushcolor(80 , 80 , 200)
Call Drawrect_brushcolorfill(2 , 2 , 237 , 16)
Call Displaytext(5 , 5 , "Andere Schriftfarbe")

Wait 3


Call Setbrushcolor(0 , 0 , 0)
Call Fillscreen_brushcolor()                                'Clear Screen

Call Setbrushcolor(255 , 0 , 0)
Call Drawrect_brushcolorfill(1 , 1 , 238 , 154)

Call Setbrushcolor(255 , 255 , 0)
Call Drawrect_brushcolorfill(1 , 164 , 238 , 318)


Call Setpencolor(255 , 255 , 255)
Call Displaytext(10 , 10 , "Touch it!")

Call Setbrushcolor(0 , 0 , 0)


While Display_tint = 1
NOP
Wend

Call Touchpanel_readevent()
  If T_event.0 = 1 Then
      Call Touchpanel_readdown()
         If Ywert < 159 Then
            Call Setpencolor(255 , 0 , 0)
            Call Displaytext(80 , 73 , "Oben")
         Else
            Call Setpencolor(255 , 255 , 0)
            Call Displaytext(70 , 237 , "Unten")
         End If
   Else
   End If


Wait 2


Loop


End
 
Hallo,

ich habe es so weit im Griff, muss aber beichten, das ich TINT Ausgang vom TFT am verkehrten MC pin. hatte, habe erst heute gemerkt.
Cassio mein Problem wahr das ich mich nicht so richtig konzentrieren konnte wegen Kopfschmerzen so fiel da zu.

Weist du ich bin kein Profi so wie du, deshalb Sorry das ich nicht so schnell vom Begriff bin.

Ich möchte dir noch ein mol danke sagen für deine Unterstützung. :adore:

Was noch nicht funktioniert hat, bmp Datei von microSD zu laden, Format ist 320x240 Pixeln 24 Bit Tiefe.

Routineaufruf ist doch oder?

Call Displaysdcard_image(0 , 0 , "1.bmp")


Code:
$regfile = "m128def.dat"
$crystal = 16000000

$hwstack = 500                                              'für Test
$swstack = 500
$framesize = 250


$lib "XV-TFT.lib"


'SPI steuert das Display   ------------ Display Anschlusse

'PG0=CS\   (Output, Low)    ------------>  Pin.2
'PB1=SCK   (Output, Low)   ------------>  Pin.5
'PB3=MISO  (Input, High)    <------------  Pin.4
'PB2=MOSI  (Output, Low)  ------------>  Pin.3
'PG1=BUSY\ (Input, High)    <------------  Pin.1
'PE7=TINT\ (Input, High)     <------------  Pin.8


Ddrb = &B0000_0110
Portb = &B1111_1001

Ddrg = &B0000_00001
Portg = &B1111_1110

Ddre = &B0000_00000
Porte = &B1111_1111


'############################################################################################

'------------------------------------------------------------------------------
' SPI Definition für das Display
'------------------------------------------------------------------------------
'Config Int7 = Falling
'On Int7 Event
'Enable Int7
'Enable Interrupts
'Porte.7 = 0

Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 16 , Noss = 1
Spiinit

$include "init_xv_tft.bas"                                  'Die Routinen der Library einbinden


'##################################################################################################
' Alias Definitionen
' Pins an eigene Beschaltung anpassen aber bitte nicht umbenennen, da
' die Library diese Aliase (Display_cs, Display_busy und Display_tint) verwendet.
'##################################################################################################
Display_cs Alias Portg.0                                    'CS_Pin
Display_busy Alias Ping.1                                   'Busy_Pin
Display_tint Alias Pine.7                                   'Touchpanel_Interrupt
Set Display_busy
Set Display_cs




'------------------------------------------------------------------------------
' Variablen Definitionen
'------------------------------------------------------------------------------
Dim X As String * 7 , Y As String * 7
Dim I As String * 2
Dim Bmp As String * 12


Wait 1
Bitwait Display_busy , Set                                  'Auf Initialisierung Display warten

Call Touchpanel_setconfig(&H000001)
Call Setdisplaymode(1)
Call Setbacklightintensity(255)                             'Max. Backlight Brightness


Do

Gosub Event

 Loop
End


Event:

Call Setpencolor(0 , 0 , 0)
Call Setbrushcolor(0 , 0 , 255)
Call Fillscreen_brushcolor()
Call Set_font(1)
Call Displaytext(100 , 10 , "xv-display.de")
Call Displaytext(100 , 20 , "Display Module")
Call Setpencolor(255 , 150 , 0)
Call Set_font(3)
Call Settextfont(20)
Call Displaytext(80 , 100 , "ICH DANKE")
Call Displaytext(70 , 130 , "EUCH ALLEN!")
Call Displaytext(130 , 160 , "RoTo")
'Call Drawrect_rgbcolor(50 , 50 , 150 , 150 , 200 , 100 , 200)




While Display_tint = 1
NOP
Wend

Call Touchpanel_readevent()
  If T_event.0 = 1 Then
      Call Touchpanel_readdown()
              Y = Str(ywert)
              X = Str(xwert)
            Call Setpencolor(0 , 255 , 0)
            Call Displaytext(10 , 10 , X)
            Call Setpencolor(255 , 0 , 0)
            Call Displaytext(10 , 30 , Y)
   Waitms 600
             X = Str(0)
             Y = Str(0)
            Call Drawrect_rgbcolorfill(10 , 10 , 60 , 45 , 0 , 0 , 255)

           Wait 2
         Call Fillscreen_brushcolor()
   Call Displaysdcard_image(0 , 0 , "1.bmp")     '<-------lade bmp vom SDcard
         Wait 2

   End If

Return


Gruß,
Roto
 
Hallo Roto!

Weist du ich bin kein Profi so wie du...

Ich bin auch kein Profi..... sondern nur Laie! :wink:


Der Aufruf für das BMP-Bild müsste stimmen....
habe ich jetzt aber nicht nachgesehen.

Vielleicht ist dein Bild ja auch "verkehrt herum"?
Wenn das Bild von den Maßen her nicht auf das Display passt, dann wird auch nichts angezeigt!

Bedenke bitte:
320 x 240 ist NICHT dasselbe wie 240 x 320 ! :wink:

Es kommt darauf an, in welchem Modus du dein Display betreibst (Landscape oder Portrait).
Dementsprechend muss auch das Bild ausgerichtet sein.


Grüße,
Cassio
 
Hallo Roto,

Cassio hatte ja schon erwähnt, dass ein Bild auf die Displayfläche passen muss.

Was man noch beachten muss

  • die MicroSD Karte muss schon bei PowerOn eingelegt sein
  • Filesystem ist FAT32 (du hattest ja hier schon ein Firmwareupdate gemacht, das Filesystem sollte dann also stimmen und die Karte wird erkannt)
  • Dateiname 8.3 (name.ext) wird unterstützt, Rootverzeichnis
  • Format ist Windows bitmap 24bit (*.bmp)


Dirk :ciao:
 
Hallo Roto!

Hm, seltsam, dass nicht mal ein 16x16Pixel Bild funktioniert. :hmmmm:


Wird die SDCard denn richtig erkannt?
Hast du sie FAT32 formatiert?
Befinden sich noch andere Daten auf der SDCard?
Nennt sich das Bild wirklich 1.bmp oder vielleicht 1.BMP oder auch 1.Bmp?

Spontan fällt mir jetzt nichts weiter zu dem Problem ein....


Grüße,
Cassio
 
Hallo Cassio, hallo Dirk,

es klappt, das wahr der Stichwort SD erst rein wenn TFT Spannungslos ist, JU-HU :)

Ich Liebe euch, 1000 mal Dank, und Dirk ich möchte jetzt eine Größeren TFT :p

Ich wünsche Schönen Abend euch allen.

LG
Roto
 
Hallo Roto!

Na, dann kann es ja nun losgehen! :D


Viel Spaß erst mal mit dem Display.....
und ggf. bald mit einem Großen! :cool:


Grüße,
Cassio
 
Hallo Roto!

Es freut micht, dass es nun funktioniert! :D

Viel Spaß noch mit dem Display.

Dirk :ciao:
 
Hallo zusammen,

bin aus dem Urlaub zurück und kann jetzt auch wieder Fragen zur Lib beantworten, wenn noch welche vorhanden sein sollten.
 
Hallo,

ich habe mir auch das XV-TFT2428T gekauft.
Das Demoprog aus Beitrag #22 lauft auch bei mir.

Nun wollte ich das Display nur mit Pins aus dem Port B ansteuern.
Ich habe CS auf PB4, busy auf PB5 und TINT auf PB6 gelegt und die ALIAS entsprechend geändert - aber es läuft nun nicht mehr :confused:
Was kann da nicht stimmen - Was habe ich übersehen ?

Gruß Frank
 
Hallo Frank,
Was kann da nicht stimmen - Was habe ich übersehen ?

ich kenne mich leider mit Bascom nicht so gut aus, aber vielleicht liegts an folgendem:

Es wird nicht ausreichen, die Einträge für Alias zu ändern, du musst auch die Funktion der Portpins entsprechend definieren.

Busy\ und TINT\: Input und Pullup aktivieren
CS\: Output

Dies machst du mit DataDirectionRegistern und PortRegistern

Dies must du entsprechend ändern
(ist von deiner alten Konfiguration)
Code:
Ddrb = &B0000_0110
Portb = &B1111_1001

Ddrg = &B0000_00001
Portg = &B1111_1110

Ddre = &B0000_00000
Porte = &B1111_1111

Dirk :ciao:
 
Hi Frank,

Nun wollte ich das Display nur mit Pins aus dem Port B ansteuern.
Ich habe CS auf PB4, busy auf PB5 und TINT auf PB6 gelegt und die ALIAS entsprechend geändert - aber es läuft nun nicht mehr :confused:
Was kann da nicht stimmen - Was habe ich übersehen ?

Dirk hat ja schon versucht dein Problem irgendwie zu interpretieren. Das ist aber so als wenn du nen Freund anrufst und ihn fragst warum dein Auto nicht mehr geht. Mit zusätzlichen Infos (zB deinem gesamten Programm das nicht geht) ist es einfacher einen Fehler zu finden.

Gruß
Dino
 
Hallo Dirk,

DANKE,
dass hatte ich glatt übersehen - nun funktioniert es.
Ich werde nun versuchen meine Funktionalität zu proggen. :cool:

Frank
 
Hallo,

sooo - die ersten Dinge habe ich erfolgreich getestet.:)

Eine Frage hätte ich da noch - wie kann ich Zahlenwerte formatiert ausgeben - oder muss ich mir nen String basteln und den ausgeben ?
Wie kann ich die Schriftgröße ändern ? Mit Set_font kann ich ja verschiedene wählen aber nicht die passende Größe für mich.

Gruß
Frank
 
Hallo Frank,

wenn du Zahlenwerte formatiert ausgeben möchtest, bastelst du dir mit Bascom am besten einen String und gibst diesen dann aus.

Es sind einige interne Fonts vorhanden, wenn du noch größere benötigst, kannst du dir mit der Windows-Software "Display Project Manager" eigene Font-Packages erstellen.


Das geht so:

Im Tabsheet "Font Package" suchst du dir einen Font aus, dann begrenzt du Höhe und Breite. Wenn dir die Breite wichtig ist, wählst du einen hohen Wert für die Höhe, so wird dann auf Breite begrenzt. (Das Bild zeigt ein Beispiel mit einem sehr großen Font)

Bei "Character Set" kannst du bestimmt Zeichen aufnehmen. Je mehr Zeichen vorhhanden sind, desto mehr Speicher wird benötigt. Bei Ausgabe mit konstanter Zeichenbreite gibt das Zeichen mit der größten Breite den Abstand vor. Konstante Zeichenbreite ist bei Zahlenausgabe vorteilhaft. Gut ist es, wenn du für große Ziffern einen eigenen Font erstellst (also hier nur Ziffern auswählen), du erreichst so eine möglichst kleine konstante Breite.

Mit "Create Font Package" den gewählten Font konvertieren und das Font-Package unter MeinFont.xvi speichern.


font_package_01.png


Nun im Tabsheet "Project" ein neues Projekt erstellen (oder ein bestehendes laden).

Eine Index-Zeile anklicken und das zuvor gespeicherte MeinFont.xvi laden ("Append Package"). Der Index ist später wichtig, diesen gibst du in deinem Programm an, um den Font zu verwenden.

Projekt speichern ("Save Project").

Danach das Package erstellen ("Save Package"). Es wird eine Datei "flash.xvc" erstellt. Diese kopierst du auf eine MicroSD-Karte (FAT32 formatiert),
steckst diese in den Kartenhalter des Displays und aktivierst die Betriebsspannung. Das Display kopiert das flash.xvi in das UserFlashMemory.
Danach ausschalten und Karte entnehmen.


font_package_02.png


Nun kannst du den neuen Font einstellen.

Die Fonts werde übrigens antialiased dargestellt.

Ich weiß nun nicht genau, welche Bascom-Lösung zu verwendest. Soweit ich weiß hat StevieL in seiner Bascom-Lib auch die UserMemoryFont Funktionen eingebaut. Wie schon geschrieben, kenne ich mit Bascom nicht so gut aus, deshalb hier noch einmal einige Erläuterungen in C. Ich hoffe du kommst damit klar.

Dirk :ciao:


Der Befehl SetFont(n) stellt den internen Zeichensatz ein.
uint8_t Display_SetFont(uint8_t index); // für Text und Zahlen
uint8_t Display_SetTextFont(uint8_t index); // für Text

uint8_t Display_SetNumberFont(uint8_t index); // für Zahlen


Den Font im UserFlashMemory stellt man so ein:
uint8_t Display_SetUserFlashMemoryFont(uint8_t PackageIndex, uint8_t CharacterAlignMode);
uint8_t Display_SetUserFlashMemoryFont_Text(uint8_t PackageIndex, uint8_t CharacterAlignMode);
uint8_t Display_SetUserFlashMemoryFont_Number(uint8_t PackageIndex, uint8_t CharacterAlignMode);


Der Parameter CharacterAlignMode gibt an, wie die einzelnen Zeichen angeordnet sind:

CharacterAlignMode: caProp, caLeft, caCenter, caRight

caProp : proportional character align
caLeft : left align, constant width
caCenter: center align, constant width (best fit for numbers)
caRight : right align, constant width



/* Character Align Mode
CharacterAlign = 0: proportional character align
CharacterAlign = 1: left align, constant width
CharacterAlign = 2: center align, constant width
CharacterAlign = 3: right align, constant width
*/
#define caProp 0
#define caLeft 1
#define caCenter 2
#define caRight 3



Beispiel um den Font "f7" zu verwenden:
Der Font "f7" befindet sich in Package Index 6.

Display_SetUserFlashMemoryFont(6, 0); // Font im Package 6, proportional



EDIT:
Die wichtigen Funktionen in der Bascom-Lib von StevieL sind folgende:

$external Setuserflashmemoryfont 'New in Firmware 1.3
Declare Sub Setuserflashmemoryfont(byval Packageindex As Byte , Byval Characteralign As Byte)

'$external Setuserflashmemoryfont_text 'New in Firmware 1.3
'Declare Sub Setuserflashmemoryfont_text(byval Packageindex As Byte , Byval Characteralign As Byte)

'$external Setuserflashmemoryfont_number 'New in Firmware 1.3
'Declare Sub Setuserflashmemoryfont_number(byval Packageindex As Byte , Byval Characteralign As Byte)

 
Hallo in die Runde,

sooo, die Software für mein Projekt ist soweit fertig. :cool:
Ein universeller Controller für meine Antennen zum Umschalten und Abstimmen,
gesteuert über RS485 - es funktioniert hervorragend - wirklich ein feines Teil dieses Display.

Da ich nun das Display in ein Gehäuse einbauen möchte suche ich die genauen Maße vom XV-TFT2428T.
Gibt es irgendwo dafür ein Datenblatt ?

Gruß Frank
 
...

sooo, die Software für mein Projekt ist soweit fertig. :cool:
Ein universeller Controller für meine Antennen zum Umschalten und Abstimmen,
gesteuert über RS485 - es funktioniert hervorragend - wirklich ein feines Teil dieses Display.

Da ich nun das Display in ein Gehäuse einbauen möchte suche ich die genauen Maße vom XV-TFT2428T.
Gibt es irgendwo dafür ein Datenblatt ?

Hallo Frank,

ein Datenblatt findest du auf der XV-Display Seite, hier der direkte Downloadlink des PDF.

Die Abmaße für das 2,4" un 2,8" TFT Modul findest du ab Seite 18.

Gruß,
Dirk
 

Ü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)