Serielle Touchabfrage

XMega256A3 Serieller Empfang

  • 1
  • 2
  • Page 1 of 2
Wartbichler
Benutzer
Avatar
Gender: n/a
Age: 62
Posts: 19
Registered: 12 / 2018
Subject:

Serielle Touchabfrage

 · 
Posted: 06.01.2019 - 17:02  ·  #1
Grüß Gott an alle,
ich habe wieder mit dem XMega256A3 und dem Touch Display ein für mich unlösbares Problem.
Einerseits muss ich die Antwort vom Display mit einem Interrupt abfangen und auswerten,
und fallweise gleichzeitig im Pollingbetrieb die Koordinaten vom Touch von der gleiche Schnittstelle empfangen.

In Bascom wird das folgend gelöst:
Die Interrupt Routine für Acknowledge:

Rs232_data_int: Rs232_data = Inkey(#2)
If Touch = 0 Then
Select Case Rs232_data
Case &H06 :
Set Lcd_ack
Case &H15 :
End Select
Else
Set Lcd_ack
End If
Return

und die Routine für die Polling Abfrage:

Sub Ilcd_get_touch()
Touch = 1 'Touchdaten
Print #2 , Chr(&H6f) ; Chr(&H04) ; 'Touchstatus
Bitwait Lcd_ack , Set
Reset Lcd_ack
Bitwait Lcd_ack , Set
Reset Lcd_ack
Status_touch = Rs232_data
Bitwait Lcd_ack , Set
Reset Lcd_ack
Bitwait Lcd_ack , Set
Reset Lcd_ack

If Status_touch = 1 Or Status_touch = 3 Then
Print #2 , Chr(&H6f) ; Chr(&H05) ; 'Touch x,y
Bitwait Lcd_ack , Set
Reset Lcd_ack
X_touch = Rs232_data * 256
Bitwait Lcd_ack , Set
Reset Lcd_ack
X_touch = X_touch + Rs232_data
Bitwait Lcd_ack , Set
Reset Lcd_ack
Y_touch = Rs232_data * 256
Bitwait Lcd_ack , Set
Reset Lcd_ack
Y_touch = Y_touch + Rs232_data
Touch = 0
Reset Lcd_ack
Else
Y_touch = 65535 : X_touch = 65535
End If
End Sub
Ich hoffe Ihr könnt einen Hobbyprogrammierer und Neuling helfen. LG
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2078
Registered: 03 / 2003
Subject:

Re: Themen

 · 
Posted: 06.01.2019 - 17:34  ·  #2
Hallo,

kannst du mir/uns verraten, wie und in welcher Form die Touch-Daten rein kommen?

Harry
Wartbichler
Benutzer
Avatar
Gender: n/a
Age: 62
Posts: 19
Registered: 12 / 2018
Subject:

Re: Themen

 · 
Posted: 06.01.2019 - 18:04  ·  #3
Hallo, folgend der Handbuchauszug vom Display. Ich hoffe ihr könnt damit was anfangen.

GetTouch(mode)
cmd 6F(hex) or o(ascii) : Command header Byte
mode
00hex : Wait until any touch activity
01hex : Wait until Touch press
02hex : Wait until Touch release
03hex : Wait until Touch Moving
04hex : Get Touch status
05hex : Get Touch coordinates
Response x_coord(msb:lsb), y_coord(msb:lsb)
x_coord 2 byte value for x-coordinates of the touch screen.
y_coord 2 byte value for y-coordinates of the touch screen.
For mode = 04hex only, returns the following:
0 : No Touch Activity
1 : Touch Press
2 : Touch Release
3 : Touch Moving

Description
This command returns the x and y coordinate of a touch to the screen for 00hex to 03hex and 05hex.
Note that for “mode = 05hex” the coordinates relate to the last touch activity i.e. they will be
same as the coordinates returned to the touch command with mode 00hex - 03hex or coordinates
detected for the touch command with “mode = 04hex” when touch activity occurred.
Serial Example Command Data:
6Fhex, 04hex
PICASO-SGC Response:
02hex
Get Touch Status, Touch release reported.
4DSL Example Refer to the Touch.4DScript sample script file.©
Lg Hans
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2078
Registered: 03 / 2003
Subject:

Re: Themen

 · 
Posted: 06.01.2019 - 18:10  ·  #4
Aus diesem und dem ersten Post vermute ich, daß die Daten via serieller Schnittstelle rein kommen?
Was hältst du von einem Process?
Code

Process ReadTouch($100,$100:iData);
  Begin
    WaitPipe(RXBufferE0);                        // wait buffer
    Lock(self);
    Read(SerInpE0, Temp);   
    .
    .
    .
    UnLock(self);
  End ReadTouch;


Natürlich Processe importieren und im Define den notwendigen Eintrag machen.

Harry
Wartbichler
Benutzer
Avatar
Gender: n/a
Age: 62
Posts: 19
Registered: 12 / 2018
Subject:

Re: Themen

 · 
Posted: 06.01.2019 - 18:39  ·  #5
Hallo Harry,
zum Verständnis für einen Nichtschwimmer wie ich:
WaitPipe(RXBufferXX) - wartet bis keine Daten mehr von der Ser. Schnittstelle ankommen?
Lock(self) - verhindert das der Process solange nicht verlassen wird bis dieser abgearbeitet ist?
Aufgerufen wird der Process wie eine Procedure?
LG Hans
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2078
Registered: 03 / 2003
Subject:

Re: Themen

 · 
Posted: 06.01.2019 - 20:02  ·  #6
Hi Hans,

WaitPipe wartet bis Daten da sind.
Lock verhindert, daß der Scheduler den Process abbricht und an einen anderen oder das Hauptprogramm die Rechenzeit abgibt.
Ein Process wird nicht aufgerufen, er läuft im "Hintergrund" zyklisch immer durch. Quasi ein parallel arbeitendes Programm.

Harry
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1340
Registered: 02 / 2009
Subject:

Re: Themen

 · 
Posted: 06.01.2019 - 20:04  ·  #7
Quote by Wartbichler

Hallo Harry,
zum Verständnis für einen Nichtschwimmer wie ich:
WaitPipe(RXBufferXX) - wartet bis keine Daten mehr von der Ser. Schnittstelle ankommen?
Lock(self) - verhindert das der Process solange nicht verlassen wird bis dieser abgearbeitet ist?
Aufgerufen wird der Process wie eine Procedure?
LG Hans


Hallo Wartbichler,

nicht ganz. Waitpipe legt den Process schlafen bis Daten im Buffer ankommen.
Damit verschwendest Du keine Rechenzeit mit einen Polling-System.

Thorsten
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2078
Registered: 03 / 2003
Subject:

Re: Themen

 · 
Posted: 06.01.2019 - 20:05  ·  #8
Danke Thorsten, das ist natürlich besser erklärt :)

Harry
  • 1
  • 2
  • Page 1 of 2
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 14 · Cache Hits: 14   137   151 · Page-Gen-Time: 0.028179s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI