PS/2 Interfacing with Elan 33200V-3600 Trackpad

Dear Arduino forum,

I am trying to interface my arduino uno with a Trackpad that I scrapped from a broken Medion Erazer laptop. The Chip on it is a Elan 33200V-3600. I just want to read the PS/2 data with the arduino and display it. A large metal plate is glued to the back of the Trackpad and only two cutouts are accessible. I use the contacts to get my data as in the following image (I also labelled all connections to the official connector, but I soldered to the copper pads directly):

I do this because I found the following image online, where they use the same chip (it is on a different trackpad; but even the pads look very similar)

I now use the following code to read the PS/2 Mouse Data

#include <PS2Mouse.h>

#define MDATA 5 // touchpad ps/2 data pin
#define MCLK 6 // touchpad ps/2 clock pin
PS2Mouse mouse_one(MCLK, MDATA);

void setup()
{
  Serial.begin(9600);
  mouse_one.initialize();
}
void loop()
{
  int16_t data[3];
  mouse_one.report(data);
  Serial.print(data[0]); // Status Byte
  Serial.print(":");
  Serial.print(data[1]); // X Movement Data
  Serial.print(",");
  Serial.print(data[2]); // Y Movement Data
  Serial.println();
}

This kind of works, I get the outputs:
8:0,0 which means
data[0] = 8 // Status Byte
data[1] = 0 // X movement
data[2] = 0 // Y movement

When I compare this to the PS/2 protocol I see that the Status Byte has a fixed 1 bit at the position such that you get a value of 8 if all other bits are 0. This means it is working somehow, as when I try different pins for CLK or DATA, there will be no readings at all. However the values do not change if I touch the trackpad and move my finger - everything stays zero.

Do you have an idea what I could be doing wrong? Thanks for your help!

Best wishes,
Simon

Dear Kleinpoe,

I have run into the same problem as you.
Turns out before requesting movement data from a PS/2 mouse you have to send an enable command.
After initialization send 0xF4 byte and read 1 ack byte.

Please let me know if you were able to make it work.

Regards,
Eve_Ning

I’ve been looking for an answer to this question for a day. Found this post. eve_ning poorly explained. Add the line mouse_one.enable_data_reporting (); to setup and everything will work correctly.
Я искал ответ на данный вопрос целый день. Нашел этот пост. eve_ning криво объяснил. Надо добавить mouse_one.enable_data_reporting (); в setup и тогда все нормально заработает. Ниже маркировка по которой искал инфу в интернете и готовый код чтобы тачпад работал.
I use Elan 33200V-3600 1354 BG13B53 (mark on chip)
20111B-0411oD (mark on touchpad)

#include "PS2Mouse.h"

#define MDATA 5 // touchpad ps/2 data pin
#define MCLK 6 // touchpad ps/2 clock pin

PS2Mouse mouse_one(MCLK, MDATA, REMOTE);

void setup()
{
  Serial.begin(115200);
  mouse_one.initialize();
  mouse_one.enable_data_reporting();
}

void loop()
{
  int16_t data[3];
  mouse_one.report(data);
  Serial.print(data[0]); // Status Byte
  Serial.print(":");
  Serial.print(data[1]); // X Movement Data
  Serial.print(",");
  Serial.print(data[2]); // Y Movement Data
  Serial.println();
  
  delay(100);
}

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.