Forum: Mikrocontroller und Digitale Elektronik STM32F4 Touch Display Interrupt


von Ruphy .. (ruphy)


Lesenswert?

Hey Forum Community,

ich habe ein STM32F4 Discovery Board mit expansion board. Dazu hab ich 
ein Touch Display angeschlossen.

Ich bin schon den halben Tag am suchen, ich verstehe einfach nicht, wie 
man ein Interrupt auf drücken des Displays auslösen kann.
Das STMPE811 hat ein INT_EN Register, in dem das Touch_Det Bit gesetzt 
wird, wenn ein touch detektiert wird. Dazu könnte man eine Polling 
variante basteln.
!!!Leider habe ich keinen InterruptHandler gefunden. Gibt es dazu einen? 
Das mit den Handlern schein mir auch noch nicht ganz klar zu sein (hat 
da jemand eine gute Erklärung, wie die Handler funktionieren, kann man 
sich die selber bauen)?

Habe in einem anderen Beitrag gelesen, dass ich das über einen EXTI 
lösen muss. Aber woher weiß ich, welchen GPIO mit dem Touchregister 
verbunden ist?!

Bitte um Hilfe.
Grüße

von Marc Rupprath (Gast)


Lesenswert?

Hallo;
beispiel code gibt es hier:
http://www.wvshare.com/column/LCD_Module.htm
zur Ansicht empfehle ich die Demo der Keil entwicklungsumgebung.
Die Sourcen löiegen aber auch als Text vor.


Ansonsten sind auf der STM Homepage auch Application Notes und 
Codebeispiele zu finden.

von Marc Rupprath (Gast)


Lesenswert?

Nochmal Hallo;

hier im Forum hatte ebenfalls jemand Beispie Projekte abgelegt ;-)

von Ruphy .. (ruphy)


Lesenswert?

Danke erstmal für die Tipps. Werd mir die Beispiele mal anschauen.
hab hier im Forum keine geeinetes Beispiel gefunden. Könntest du mir den 
Link schicken?
danke.

hatte vergessen zu erwähnen, dass ich mit Coocox arbeite.

von Uwe B. (derexponent)


Lesenswert?

Hi ruphy,

der STMPE811 kann bestimmt auch ein externes Interrupt Signal erzeugen
wenn der Touch betätigt wurde

dieser Pin muss dann nur noch mit einem Exti-Pin vom SMT32F4
verbunden werden

im STM32F4 brauchst du dann eine Interrupt-Funktion
die auf EXTI Triggert

für CooCox und den STM32F4 hab ich Librarys für EXTI0 bis EXTI15
hier online gestellt

http://mikrocontroller.bplaced.de

kannst dir ja da rauskopieren was du brauchst
(ist recht simpel gehalten)

Gruss Uwe

von Ruphy .. (ruphy)


Lesenswert?

HEy Uwe,

danke für deine Hilfe.
Ich bin soweit schon gewesen, einen Interrupt auszulesen. Aber im 
Datenblatt ist lediglich geschildert, welches Bit im Register gesetzt 
wird.

Wie kann ich denn einen externen Interrupt auf einen GPIO des STMPE811 
legen? Habe im STMPE811 Datenblatt nichts gefunden.

btw:
09-Touch_ADS7843-Library (STM32F4) -> Polling

von Uwe B. (derexponent)


Lesenswert?

ich kenne den STMPE811 nicht aber wenn ich auf das Deckblatt vom 
Datasheet sehe 
(http://www.st.com/web/catalog/sense_power/FM89/SC1717/SS990/PF185203)
dann gehe ich davon aus, das der einen GPIO-Pin als Ausgang hat (INT)
an dem man sich klemmen kann
bei den "Feuatures" steht zumindest : "Interrupt output pin"

ich kenne ja auch dein "expansion board" nicht vlt. ist da der Pin schon 
mit einen GPIO vom STM32F4-Discovery verbunden

und ich meinte nicht "09-Touch_ADS7843-Library"
das ist eine Library für einen ADS7843 Chip (den hast du ja nicht)

sondern diese hier :

28-Ext_Interrupt-Library (STM32F4)
http://mikrocontroller.bplaced.net/wordpress/?page_id=1187

Gruss

von Marc Rupprath (Gast)


Lesenswert?

Hallo;

schau hier mal unter dem Stichwort "SSD1289" , das ist der controller
der sich oft auf den TFT / Touchscreens befindet.

von Ruphy .. (ruphy)


Lesenswert?

@Uwe: Danke! Hab den Pin gefunden. steht in Table 2. Der Pin 2 des 
STMPE811 ist scheinbar der Interrupt Pin. Werd den mal mappen und das 
ganze Probieren.

von franziskus (Gast)


Lesenswert?

Marc Rupprath schrieb:
> Hallo;
>
> schau hier mal unter dem Stichwort "SSD1289" , das ist der controller
> der sich oft auf den TFT / Touchscreens befindet.

Das ist der Lcd-Controller UND NICHT DER Touch-Controller
Bringt doch bitte nichts durcheinander

von Ruphy .. (ruphy)


Lesenswert?

okay, du hast recht... ist aber auch verwirrend.

ich habe jetzt eine fertige Funktion gefunden (vom Hersteller). 
http://www.longlandclan.yi.org/~stuartl/stm32f10x_stdperiph_lib_um/group__STM3210C__EVAL__IOE__Exported__Functions.html#ga9bf9fd420d13830391880257bbee7fcf

die Funktion rufe ich wie folgt auf:

if( IOE_ITConfig(IOE_ITSRC_TSC)==IOE_OK) ...

Ich habe mich durch die Funktion geklickt und herrausgefunden, dass der 
Touch Interrupt auf EXTI2 gemappt wird:

static void IOE_EXTI_Config(void)
{

  GPIO_InitTypeDef GPIO_InitStructure;
  NVIC_InitTypeDef NVIC_InitStructure;
  EXTI_InitTypeDef EXTI_InitStructure;

  /* Enable GPIO clock */
  RCC_AHB1PeriphClockCmd(IOE_IT_GPIO_CLK, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

  /* Configure Button pin as input floating */
  GPIO_InitStructure.GPIO_Pin = IOE_IT_PIN;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_Init(IOE_IT_GPIO_PORT, &GPIO_InitStructure);

  /* Connect Button EXTI Line to Button GPIO Pin */
  SYSCFG_EXTILineConfig(IOE_IT_EXTI_PORT_SOURCE, 
IOE_IT_EXTI_PIN_SOURCE); //IOE_IT_EXTI_PIN_SOURCE=EXTI_PinSource2

  /* Configure Button EXTI line */
  EXTI_InitStructure.EXTI_Line = IOE_IT_EXTI_LINE;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);

  /* Enable and set Button EXTI Interrupt to the lowest priority */
  NVIC_InitStructure.NVIC_IRQChannel = IOE_IT_EXTI_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

}

In der Main wird der EXTI2_IRQHandler aufgerufen.

... es funktioniert leider nicht.

von Ruphy .. (ruphy)


Lesenswert?

... der letzte Beitrag ist für die Katz.
Ich habe meinen Fehler wahrscheinlich gefunden:

So ich habe nun eine Frage zu I2C:
1) Der Kontroller hat zwei I2C Adressen - Warum? für Master/Slave?

2) In meinem Projekt kann ich mit RS232 über I2C Text auf mein Display 
schreiben. Nun soll aber auch (in andere Richtung) ein Touch Interrupt 
über I2C folgen, muss ich jetzt die zweite Adresse von I2C ansprechen?

weitere Fragen folgen ...

von Ruphy .. (ruphy)


Angehängte Dateien:

Lesenswert?

>> UPDATE

Ich habe mittlerweile herausgefunden auf welchen Pin der Interrupt 
ausgelöst wird (nach Schematics stm32f4dis-bb ist der PC13 der Interrupt 
Kanal).
Sooo, der Interrupt funktioniert auch von Controller Seite (getestet mit 
einem stück draht auf Masse gezogen)
ABER:
Es kommt vom Touchcontroller kein Interrupt (mit Oszi gemessen - es 
kommt kein Signal am Pin an). Ich habe den Code gefühlt tausend mal 
debuggt und die gesetzen Bits kontrolliert, aber ich finde den Fehler 
nicht.
btw: ich habe auch mitn Oszi die anderen Pins abgecheckt, aber kommt 
nirgendwo was an => daraus schlussfolgere ich, dass es an der 
Konfiguration liegt.

Ich rufe die Funktion "IOE_ITConfig(IOE_ITSRC_TSC)" in der Main aus der 
STMPE811QRT.c auf.


Vielleicht kann mir jemand helfen?

von Ruphy .. (ruphy)


Lesenswert?

niemand nen plan, warum der Interrupt vom Controller nicht funkioniert?

von Ruphy .. (ruphy)


Lesenswert?

controller = LCD Controller.

von ivs (Gast)


Lesenswert?

Ich habe jetzt dasselbe Problem und wollte fragen ob du die Antwort 
gefunden hast und was war sie?

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.