Bascom Frage zu XV-TFT2428T und SPI

RoTo

Mitglied
18. Juli 2010
51
0
6
In der nahe von Kassel
Sprachen
  1. BascomAVR
Hallo liebe Gemeinde,

ich habe jetzt seit einige zeit einen TFT2428T liegen, den ich vom Dirk im Shop gekauft habe, leider auch wegen Beruflichen Stress noch nicht dazu kommen konnte
das Teil zu Aktivieren.

Jetzt zu erste Frage zu SPI-Ansteuerung wird da nur drei Drahtansteuerung (Pin.1-BUSY/Pin.2-CS/Pin.8-TINT) gebraucht oder Verstehe ich es FALSCH:confused:
Was zu Hartware AVR-Modul hier Dirk's Shop ATM128 & XV-TFT2428T Upgedatet auf Fm 1.3, angeschlossen ist es- Display_cs Portg.0 / Display_busy Ping.1 / Display_tint Ping.7 so habe ich es auch in der ..inc Datei geändert.

Cassio meinte ich soll die Version von StevieL nehmen, weil es viel eleganter ist, habe ich.
Aber es kommt zu einigen Fehlern und ich kriege TFT nicht helle.

Es gibt hier keine Beispiele, Bascom Quellcode wo ich was anschauen kann.

Da her auch meine Bitte mich schlauer zu machen.


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

Dim Tempstring As String * 6

Call Setdisplaymode(displaymode_landscape)
Call Touchpanel_setconfig(&B00000001)
Call Setbrushcolor(0 , 0 , 0)
 Call Setpencolor(255 , 255 , 255)
Tempstring = "Hallo"
Call Displaytext(10 , 165 , Tempstring)

Do

Loop
Ende


$include "init_xv_tft.inc"

F.jpg

Mit Gruß und dank im voraus,
Roto
 
Hallo Roto,

bei Bascom kann ich dir leider selber nicht helfen, da ich Bascom nicht einsetze und mich hier nicht so gut auskenne. Ich werde mich demnächst aber auch an einer Bascom-Lösung für die Displays versuchen.

Die Schnittstelle bildet sich durch folgende Signale:


Pin No.
Symbol
Direction
Description
1BUSY\OUTBUSY low active (OC Output)
2CS\INChip Select low active
3MOSIINSPI Slave In
4MISOOUTSPI Slave Out
5SCKINSPI Clock
6VCCPWRSupply
7VCCPWRSupply
8TINT\OUTOption –T:
Touchpanel Interrupt (OC Output) (Display w/o Touchpanel: high impedance state)
9GNDPWRSupply
10GNDPWRSupply

Es müssen alle Signale angeschlossen werden. TINT\ ist optional, wird dann verwendet, wenn Touchpanel vorhanden.

MISO, MOSI und SCK:
Wird HardwareSPI verwendet, müssen die Signale MOSI, MISO und SCK an die entsprechenden Pins des SPI-Moduls angeschlossen werden.
Wird SoftwareSPI verwendet, können für die Sigale MISO, MOSI und SCK beliebige freie IO-Pins genutzt werden.

CS\, BUSY\ und TINT\:
Die Control-Signale CS\, BUSY\ (und TINT\) können an beliebige freie IO-Pins angeschlossen werden.

Bei den Pins BUSY\ und TINT\ aktivierst du den internen Pullup-Widerstand, dies wird ja die Software bereits machen.



Zunächst musst du die Fehlermeldungen von Bascom wegbekommen. Vielleicht können hier ja mal die Bascom-Experten helfen :)

Dirk :ciao:

Hier die Signale am Adapter FPC-ADAP10:
00001.png
 
Hallo Dirk,

danke für deine Hilfe, die Adapter sind bereit's angebracht die ich natürlich auch mit bei dir Bestellt habe, aller Dings wird der USB-Stick nicht mehr bei der SW 2.0 unterstützt.

Gruß,
Roto
 
Hallo Roto,

also den Programmerstick benötigst du nur für das OLED-Displaymodul OLED302-SPI. Bei allen neueren Displaymodulen (TFT2428T, TFT60D) programmierst du das UserFlashMemory über die MicroSD Card, so ähnlich wie du das Firmware-Update gemacht hast. Bei dem Firmware-Update ist TFT2428T.fir auf der MicroSD Card, bei der Programmierung von UserFlashMemory ist flash.xvc auf der MicroSD Card. Die Version 2.0 der Windowssoftware erstellt das Package-File flash.xvc, was man auf die MicroSD Card kopiert und darüber programmiert.

Dirk :ciao:
 
Hi Roto,

zunächst musst du erst einmal das Bascom-Programm fehlerfrei compilieren und dann auch das Display richtig an den Mikrocontroller anschließen.

Wenn das soweit fertig ist, sendest du als erstes Kommando SetBacklightIntensity (mit Parameter 255: höchste Helligkeit).

Nach dem PowerOn:
  • 300ms warten oder BUSY\-Signal pollen (danach ist das Display bereit Kommandos zu empfangen)
  • SetBacklightIntensity(255)

Im Moment habe ich leider sehr wenig Zeit und schaffe es nicht, mich mit Bascom befassen. Ich werde mir aber die Woche noch die Lösung von StevieL anschauen und versuchen, dir einen "Start" zu geben, wenn nicht jemand anderes inzwischen hilft.

Dirk :ciao:
 
Hi Roto,

es sind bereits von Cassio, mir und einem anderen (müßte ich jetzt raussuchen wer das war) drei verschiedene Möglichkeiten der Ansteuerung hier im Forum vorhanden. Die werden dir weiterhelfen.

Gruß
Dino
 
Hallo Roto!

Also ich kenne mich mit der LIB von StevieL auch nicht so recht aus, weil ich sie noch nicht verwendet habe. :wink:
Ich hoffe also, dass er hier bald mal wieder reinschaut und dir direkt etwas dazu schreiben kann.

Momentan weiß ich auch nicht, ob du das Display nun vollständig (mit MISO, MOSI, SCK) und richtig angeschlossen hast.
Deine Beiträge sind da nicht ganz schlüssig.


Wenn ich nun davon ausgehe, dass dein Display ordnungsgemäß angeschlossen ist und es funktionieren müsste, dann gibt dein Testprogramm natürlich noch nicht viel her. :wink:
Es werden schließlich keine Ausgaben getätigt...... also kein Text dargestellt, oder ein Kästchen gezeichnet.

Ich muss mal schauen, ob ich dir nicht ein kleines Beispiel zusammenschreiben kann.
Im Zweifel mit meinen Routinen, weil ich die hier fertig im Rechner habe.

Momentan habe ich aber noch keine Zeit dafür.
Es wird also noch ein paar viertel Stunden dauern. :wink:


Grüße,
Cassio
 
Hallo Roto!

Ich habe es mir mal einfach gemacht und das beigefügte Beispiel von StevieL für dich angepasst und gekürzt. :wink:

Die Pin-Belegung habe ich deinem ersten Beitrag entnommen!

Abgesehen von einem ATMega128 mit 16MHz,
habe ich folgende Belegung vorgesehen:

MOSI = PortB.2
MISO = PinB.3
SCK = PortB.1

CS = PortG.0
BUSY = PinG.1
TINT = PinG.7


Du musst natürlich noch vor dem Kompilieren die:
XV-TFT.lib
in das LIB-Verzeichnis von BASCOM kopieren und die
init-xv_tft.bas
in dein Programmverzeichnis kopieren!



Hier nun ein kurzes Testprogramm, auf der Basis von StevieL`s Beispielcode:
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

Do

Call Setpencolor(0 , 0 , 0)
Call Setbrushcolor(255 , 255 , 255)
Call Set_font(1)
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


Loop


End



Ich hoffe, es funktioniert bei dir damit! :ciao:

Grüße,
Cassio
 
Hallo meine Lieben Helfer,

erst einmal danke für eure helfe.

Ich habe folgendes Problem Fehlermeldung 206, Bascom findet die Library Datei nicht, obwohl ich sie in das Lib Verzeichnis kopiert habe.

Es ist auch eine Vollversion 2.0.7.6
Was kann die Ursache sein?

Gruß
 
Hallo Roto!

Wie oben schon erwähnt:
Die "XV-TFT.lib" von StevieL musst du manuell in das LIB-Verzeichnis von BASCOM kopieren!


Wenn BASCOM meldet dass es die LIB nicht finden kann,
dann befindet sich die LIB auch nicht im richtigen Verzeichnis!
Das ist die Ursache. :wink:


Kannst du mal einen Screenshot von der Fehlermeldung machen?


Gruß,
Cassio
 
Hallo Cassio,

hier unten nochmal das Bild mit der Fehlermeldung:

Error 206.jpg

Und Glaube mir ich habe die XV-TFT.LIB in das Lib Verzeichnis rein kopiert :smile: auch da zu ein Bild:

Explorer.jpg

Hat es was mit Win 7 Zutun z.b. Adminrechte.

Gruß,
Roto
 
Guten Morgen Roto,

schau dir noch einmal die Fehlermeldung von Bascom an. Ich denke hier stimmt der Pfad zu den Libraries nicht?!

Dirk :ciao:

Anhang anzeigen 5172
 
Morgen Dirk,

habe sogar $lib "C:\Programme (x86)\MCS Electronics\lib\XV-TFT.lib" probiert ohne Erfolg.

Bin immer noch am schauen was das soll.

Gruß,
Roto
 
Im Moment sucht Bascom anscheinend hier:

"C:\PROGRAM FILES (x86)\MCS Electronics\BascomAVR\lib\C:\Programme (x86)\MCS Electronics\lib\XV-TFT.lib"

Ich denke, der Pfad zur Lib stimmt nicht.

Dirk :ciao:
 
Hallo Dirk,

danke habe gelöst, ich wahr BLIND und du hattest recht, habe im Explorer nach C:\Programme (x86)\MCS Electronics\lib suchen und es gibt
zwei mal das ganze:
Einmal C:\Programme (x86)\MCS Electronics\lib wo ich auch die lib kopiert habe
Zweite C:\Programme (x86)\MCS Electronics\BASCOM-AVR\LIB und da hätte es gemusst.

manno ist es mir :eek:

Gruß,
Roto
 
Hallo Dirk,

es Klappt so weit Text, Farbe dank euch insbesondere Cassio für sein Einsatz.

Jetzt habe ich Frage zu Touch abfrage
Code:
##################################################################################################
'   TOUCHPANEL INSTRUCTIONS
'##################################################################################################
$external Touchpanel_setconfig , Touchpanel_readevent , Touchpanel_calibrate , Touchpanel_readdown , Touchpanel_readup , Touchpanel_readcont
Declare Sub Touchpanel_setconfig(byval Event As Byte)
Declare Sub Touchpanel_readevent()
Declare Sub Touchpanel_calibrate()
Declare Sub Touchpanel_readdown()
Declare Sub Touchpanel_readup()
Declare Sub Touchpanel_readcont()

Wie frage ich die Koordinaten ab?

Gruß,
Roto
 
Hallo Roto,

wie man die Funktionen der Lib von StevieL anwendet, weiß ich noch nicht genau. Ich müsste mir das erst mal anschauen, wie man welche Parameter übergibt.

Vom Prinzip musst du aber so vorgehen:

(1) Du aktivierst zunächst die Events, die du abfragen möchtest. Es gibt drei Events:
- Touchpanel wird gedrückt,
- bei gedrücktem Touchpanel ändert sich die Position,
- Touchpanel wird losgelassen

Testweise aktiviere einfach mal nur TouchDown Event.
Die Funktion dafür ist Touchpanel_setconfig

(2) Danach rufst du Touchpanel_eadevent auf, den Rückgabewert brauchst du nicht auswerten. Dies löscht ggf. Events im Eventregister, die im Verlauf des Programms aufgetreten sind und nicht behandelt wurden (abgefragt wurden).

(3) In deinem Programm fragst du nun den Inputpin TINT\ ab (pollen). Ist das Signal low, ist ein Touchpanel-Event aufgetreten. Dann gehts weiter mit (4) und (5), ansonsten weiter pollen. TINT\ bleibt übrigens solange auf low, bis du das Event-Register (siehe 4) gelesen hast. Das ganze ist also nicht zeitkritisch.

(4) Nun liest du das Event-Register mit Touchpanel_readevent (dies löscht dir das Event-Register und TINT\ geht auch wieder auf high). Der Rückgabewert liefert dir die aufgetretenen Events. Hier ist dann nur TouchDown Event vorhanden, wenn du nur diesen Event freigegeben hast.

(5) Nun kannst du die Koordinaten lesen, die beim TouchDown Event aufgetreten sind, das machst du mit Touchpanel_readdown.

Du wertest nun die Koordinaten aus und reagierst darauf, danach pollst du wieder TINT\.

Übrigens, kalibrieren musst du das Touchpanel nicht.

Vielleicht hilft dir dies schon etwas weiter.

Dirk :ciao:

EDIT:
Ich weiß nicht, ob du ein bisschen C kannst, vielleicht erkennst du aber auch so die Vorgehensweise bei folgendem Beispiel:
(Es werden hier alle drei Events freigegeben und ausgewertet)

Code:
  // Enable touch panel events continuous, down and up
  display.TouchPanel_SetConfig(TOUCH_EVENT_CONT | TOUCH_EVENT_DOWN | TOUCH_EVENT_UP);
  status = display.TouchPanel_ReadEvent();  // flush event register
  
  uint8_t proceed = 1;
  
  while (proceed)
  {  
  
    if (TOUCHPANEL_EVENT)
    {  

      if ( dsSuccess == display.TouchPanel_ReadEvent() )
      {
      
        if (Display.Events & TOUCH_EVENT_DOWN)
        {
          if ( dsSuccess == display.TouchPanel_ReadDown() )  
          {
            if (280 > Display.TouchDownY)
            {              
              display.DrawCircle_RGBColor(Display.TouchDownX, Display.TouchDownY, 10, 255, 0, 0);    
              display.MoveTo(Display.TouchDownX, Display.TouchDownY);
            } else {
              // touch on buttons?
              if ((Display.TouchDownX > 40) && (Display.TouchDownX < (40+66)) && (Display.TouchDownY > 290) && (Display.TouchDownY < (290+21)))
              {
                // Button clear touched, clear drawing area         
                display.DrawRect_BrushColorFill(0, 0, 239, 279);                
              }              
              
              if ((Display.TouchDownX > 133) && (Display.TouchDownX < (133+66)) && (Display.TouchDownY > 290) && (Display.TouchDownY < (290+21)))
              {
                // Button cancel touched, exit this demo section    
                proceed = 0;
              }                            
            }                    
          }        
        }
      
        if (Display.Events & TOUCH_EVENT_UP)
        {
          if ( dsSuccess ==  display.TouchPanel_ReadUp() )
          {
            if (280 > Display.TouchUpY)
            {            
              display.DrawCircle_RGBColor(Display.TouchUpX, Display.TouchUpY, 10, 0, 0, 255);
            }          
          }    
        }      
      
        if (Display.Events & TOUCH_EVENT_CONT)
        {
          if ( dsSuccess ==  display.TouchPanel_ReadCont() )        
          {
            if (280 > Display.TouchY)
            {            
              //Display_DrawPixel_PenColor(Display.TouchX, Display.TouchY);
              display.LineTo_PenColor(Display.TouchX, Display.TouchY);
            }          
          }                   
        }                 
      } // ReadEvent
    } // TOUCHPANEL_EVENT
  } // while
 

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