Capacitive touch screen

  • I have a capacitive touch screen, EMT70001ADH6 which I have tested with two PicoComA5, one with Windows CE 6 and one with Windows EC 2013. On both, the screen works but, also on both, the touch interface does not work.


    I have the touch part of the screen connected according to documentation, assuming that I2C is used.
    But what else do I need to do to get the touch working? Are the things in the registry that need to be set? Is I2C on by default?


    Any help/info very welcome.

  • Hello,
    registry has several keys for enabel several touchs.
    I assume by default the resistive touch is enabled. Disable the resistive touch (registry -> resistive touch key -> set value flags=4) and enabelt the capacitve touch (registy -> edt touch key -> delete flags=4).

  • Thanks for the reply, useful (and gives hope) but a bit cryptic for me ...


    In the registry, at key Drivers\Builtin, I see three Touch entries:


    Touch_EDT
    Touch_MXT224
    Touch_SX865X


    By default, EDT and MXT224 are disabled (Flags=4) and SX8655 (which is a resistive controller) is enabled (flags=8)
    I don't know what the other two are but since it's an EDT screen I enabled the Touch_EDT entry by changing Flags to 8
    But still no touch so I tried the last one, the MXT224 but still no luck, no touch.


    Looking at the documentation for the ETM070001ADH6 screen, the touch controller is a FT5406, none of the three found in the registry.


    So, more questions:


    * Does it matter whether I use Window CE 6 or EC 2013?


    * Am I changing the correct registry keys (in Drivers\Builtin)? Which one should be enabled and what should Flags be set to?


    * The registry entries for the Touch modules mention I2C3 (for key I2CDevice) but what is that? On the port map for the A5 I only see two I2C entries, 32&33 and 30&31


    * Display uses default settings so none of the defined modes under Display\LCD in the registry. Do I need to define one and set things like I2CDevice and I2CDeviceAddress?



    What I also noticed is that EC 2013, which is almost impossible to use due to the minimal user interface, does not support my EDT resistive touch screen either, something Windows 6 CE does by default.

  • Hello,


    please enable touch_edt and disable other touch drivers. For example, the EDT touch can by ndcucfg are be activated:


    reg open \drivers\builtin\touch_sx865x
    reg set val Flags dword 4
    reg save
    reg open \drivers\builtin\touch_edt
    reg set val Flags dword 8
    reg set val I2CDevice string "I2C1:" ; // i2c from IO connector J10 SKIT
    reg set val ChangeIO dword ... ; // J10 SKIT IO connector, free pin number from IO table
    reg set val ResetIO dword ... ; // J10 SKIT IO connector, free pin number from IO table
    reg save


    Additional you have to configure one free I2C device for communication with your touch controller. I2C3 is reserved by SX8655 touch and cann't be used.
    Probably you can use I2C1. (SKIT J10 IO connector) Then you have to define ChangeIO (IRQ pin) and ResetIO (Reset pin) as well from IO connector.

    F&S Elektronik Systeme GmbH
    As this is an international forum, please try to post in English.
    Da dies ein internationales Forum ist, bitten wir darum, Beiträge möglichst in Englisch zu verfassen.

  • We are not using the SKIT but are building our own custom board. For touch, we use I2C1, pins 32 and 33 on J1.


    Is this how it should work; we specify I2C as device in the registry and we specify the irq and RST lines, with that fs_touch_edt.dll knows enough to talk to the FT%406 touch controller - correct?


    if so, a number of questions: should the ChangeIO and ResetIO be specified in hex or decimal?


    the i2C data goes low at reboot and stays ow, why is that?


    Even without reset, shouldn't we see CLK and DATA activity? Because we don't

  • You need e.g. the following touch connections:


    1) Is this how it should work; we specify I2C as device in the registry and we specify the irq and RST lines, with that fs_touch_edt.dll knows enough to talk to the FT%406 touch controller - correct?
    yes.


    2) if so, a number of questions: should the ChangeIO and ResetIO be specified in hex or decimal?
    both is possible, e.g. reg set val Flags dword 8 or reg set val Flags dword 0x8


    3) the i2C data goes low at reboot and stays ow, why is that?
    Do you have PicoCOMA5 Board Rev 1.10?

    F&S Elektronik Systeme GmbH
    As this is an international forum, please try to post in English.
    Da dies ein internationales Forum ist, bitten wir darum, Beiträge möglichst in Englisch zu verfassen.

  • We are using 35 for Reset and 40 for IRQ now. If I want to specify 40 in the registry, I can enter that as just decimal 40 or hex 0x28, is that correct?


    Reason I ask this is because in the device map for fs_touch_edt.dll (fs_touch_edt.txt), it says 0x56 and 0x57 which is strange because those pins don't even exist And decimal 56 and 57 are LCD pins. Confusing ....


    In your example, you use 41 and 40 but there's no reason why 40 and 35 shouldn't work? (SD/MMC has been disabled)
    Also, pin 41 is PWM, can that be used for other purposes?


    Do I need to set the UseAsIO, DataDir etc registry entries etc for the RST and IRQ pins? Or does fs_touch_edt.dll do that for me?


    The PicoComA5 board is rev 1.22 (2013).


    From the documentation for the touch controller, it looks like, at startup, the RST line should be pulled briefly low so it should be set to initially be high - correct? Then the controller will react with an IRQ - does the PicoCom check for that IRQ before it does anything else on the touch interface?


    Next, CLK must be set high to select I2C and after that everything should work. But our CLK is high (pin 33) so I2C should be selected but we see no activity on the pins 32 and 33 when the screen is touched.

  • We are using 35 for Reset and 40 for IRQ now. If I want to specify 40 in the registry, I can enter that as just decimal 40 or hex 0x28, is that correct?
    Yes. That is correct.


    Reason I ask this is because in the device map for fs_touch_edt.dll (fs_touch_edt.txt), it says 0x56 and 0x57 which is strange because those pins don't even exist And decimal 56 and 57 are LCD pins. Confusing ....
    This script is a example and you can use it as template. The value define pins from other board.


    Do I need to set the UseAsIO, DataDir etc registry entries etc for the RST and IRQ pins? Or does fs_touch_edt.dll do that for me?
    The driver does that do for you.


    From the documentation for the touch controller, it looks like, at startup, the RST line should be pulled briefly low so it should be set to initially be high - correct?
    Yes. You have to be sure, that RST don't be used by other drivers.


    Then the controller will react with an IRQ - does the PicoCom check for that IRQ before it does anything else on the touch interface?
    No, we dont check explicitly for this IRQ. The driver handles all IRQs on the same way.


    Next, CLK must be set high to select I2C and after that everything should work. But our CLK is high (pin 33) so I2C should be selected but we see no activity on the pins 32 and 33 when the screen is touched.
    Do you have external pullups? If no, you have to enable internal. (registry key HKLM\Drivers\BuiltIn\PicoCOMA5\I2C1_V120, IntPullUp to 1)

    F&S Elektronik Systeme GmbH
    As this is an international forum, please try to post in English.
    Da dies ein internationales Forum ist, bitten wir darum, Beiträge möglichst in Englisch zu verfassen.

  • Still no touch!!


    Registry looks like this



    Please note: ChangeIO=28 and ResetIO=23 is in hex, WinCE Remote Registry Editor says 40 and 35.
    So the pins used are 32, 33, 35 and 40.


    Any idea why it doesn't works? And why don't we see some activity on pins 32 and 33?

  • Did you get further inforamtion on the serial debug line by specify:

    Code
    1. HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Touch_EDT
    2. REG_DWORD Debug ff

    and

    Code
    1. HKEY_LOCAL_MACHINE\Drivers\BuiltIn\PicoCOMA5\I2C1_V120
    2. REG_DWORD Debug ff

    F&S Elektronik Systeme GmbH
    As this is an international forum, please try to post in English.
    Da dies ein internationales Forum ist, bitten wir darum, Beiträge möglichst in Englisch zu verfassen.

  • OK, I have added Debug and set it to 255, result:



    This doesn't look good


    Code
    1. TCH: EnableTouchScreen(): get firmware version failed
    2. Cannot initialize the touch screen controller.
    3. TCH: Driver Failed to Init.
    4. TCH: Could not enable touch panel


    What firmware version are we talking about?


    This also may be a problem: LCD: Display-Mode 6, Name ET070080 because that's not really the screen, only almost.
    Do I need an exact mode definition for the ETM070001ADH6 in the registry perhaps? Can I find that on your site?

  • In an attempt to get further with the touch problem I deleted all the entries in registry key Drivers\Display\LCD (except the defined modes. e.g mode19). The values deleted were



    Because I don't recognise ASTADPEDT1 at all I thought this was unused stuff (the debug log told me that loading ASTADPEDT1 failed anyway), hence the delete.
    I expected the PicoComA5 to start up with the default screen, ET0700 something but it didn't.


    Instead it has gone in to some kind of self-test mode, showing the basic colours and some patterns and it reacts to nothing. I can only enter NBoot mode and that doesn't help any. There seems to be no way to reach the registry, I can't event download a new kernel - how do I get back control of the PicoCom??

  • Please ignore the previous post for now (although I still at some point would want to know what all the ASTADPEDT1 stuff is), I managed after several reboots to get into EBoot and did Restore registry after which the PicoCom again worked (and again had the weird ASTADPEDT1 setting and the strange Mode6 and Mode19 entries under Display\LCD)


    The most important thing right, and what I would really like an answer to, is this


    Code
    1. TCH: EnableTouchScreen(): get firmware version failed
    2. Cannot initialize the touch screen controller.
    3. TCH: Driver Failed to Init.
    4. TCH: Could not enable touch panel


    i.e. why isn't the touch screen controller working?

  • Hello,


    can you check i2c lines. The message "I2CLIB: I2C_ReadRegister(): Message failed (flags=4)" means that the driver cann't receive i2c device acknowledge. That can be possible for example in followed cases:
    1) pullups not available
    2) one of the lines used by other driver
    3) configured i2c device is wrong


    Quote from "fs-support_AD"

    Next, CLK must be set high to select I2C and after that everything should work. But our CLK is high (pin 33) so I2C should be selected but we see no activity on the pins 32 and 33 when the screen is touched.
    Do you have external pullups? If no, you have to enable internal. (registry key HKLM\Drivers\BuiltIn\PicoCOMA5\I2C1_V120, IntPullUp to 1)

    F&S Elektronik Systeme GmbH
    As this is an international forum, please try to post in English.
    Da dies ein internationales Forum ist, bitten wir darum, Beiträge möglichst in Englisch zu verfassen.

  • "pullups not available" - I have set


    HKLM\Drivers\BuiltIn\PicoCOMA5\I2C1_V120, IntPullUp to 1 (NI2C: IntPullUp = 0x00000001 = 1)


    "configured I2C device is wrong"


    * Device is I2C1 (TCH: I2CDevice =I2C1:)


    "one of the lines used by other driver"


    are we talking the DATA and the CLK lines here or also the IRQ and RST lines? The latter two looks ok


    TCH: Change-IRQ configured on IO-Pin 40
    TCH: Reset-line configured on IO-Pin 35


    For DATA and CLK we use 32 and 33 (SDA and SCL) but from the I/O pin map I see that those pins are also used by CANRX1/TX1. Do I need to disable CAN and if so, how?

  • I have asked our hardware man and we do have external pullups. I have changed the setting of IntPullUp back to 0 but I still get the error message although now it says


    I2C_Readregister: message failed (flags=8)


    i.e. flags=8 instead of flags=4


    I have disabled CAN1 and CAN2 but that didn't change anything.


    Anything else to try??

  • Hello,


    can you check device address of your touch controller? (reg key HKLM\Drivers\builtin\touch_edt - reg value I2CDevAddr)


    I tested ETM070080ADH6 Display with froltech FT5406 touch controller and that worked fine.


    Here are my hardware configuration and registry settings:


    HW:
    - PCA5 Rev. 122 and SKIT Rev. 100
    - Display ETM070080ADH6 with FT5406 touch controller


    Used IO Pins:
    - I2C1
    SDA : SKIT-Pin9 , PCA5-Pin32
    SCL : SKIT-Pin10 , PCA5-Pin33
    - Touch
    IRQ: SKIT-Pin11 , PCA5-Pin40 , IO-Pin20 - ChangeIo value.
    RST: SKIT-Pin12 , PCA5-Pin41 , IO-Pin21 - ResetIO value
    GROUND: SKIT-Pin19
    additional extern VCC 3.3V


    Registry settings:
    - disable default touch controller - by setting Flags to 4
    in "HKLM\drivers\builtin\touch_sx865x"
    - enable EDT touch controller - by setting Flags to 8
    in "HKLM\drivers\builtin\touch_edt"
    - configure EDT touch controller.
    chageio = 20 (dec)
    resetio = 21 (dec)
    i2cdevice = "i2c1:"
    i2cdevaddr = "address of you touch controller"


    My serial out:

    F&S Elektronik Systeme GmbH
    As this is an international forum, please try to post in English.
    Da dies ein internationales Forum ist, bitten wir darum, Beiträge möglichst in Englisch zu verfassen.

  • The settings for ETM070080DH6 display with the PCA5.
    [attachment=0]<!-- ia0 -->ETM070080DH6_Vybrid_PCA5.txt<!-- ia0 -->[/attachment]

    Files

    F&S Elektronik Systeme GmbH
    As this is an international forum, please try to post in English.
    Da dies ein internationales Forum ist, bitten wir darum, Beiträge möglichst in Englisch zu verfassen.