filmov
tv
MT8816 analog switch array Arduino

Показать описание
I will use MT8816 in my DIY PBX. It was used in many PBX systems like polish Platan DCT12 and Slican PMS-08.
MT8816, M3494, CD22M3494 are functionally equivalent, pinout is the same.
Crude Arduino code for testing:
// please read datasheet
// VDD to 5V DC
// VSS, VSS to GND
// RESET to LOW
// CS to HIGH
void setup() {
pinMode(2, OUTPUT); //AX0
pinMode(3, OUTPUT); //AX1
pinMode(4, OUTPUT); //AX2
pinMode(5, OUTPUT); //AX3
pinMode(6, OUTPUT); //AY0
pinMode(7, OUTPUT); //AY1
pinMode(8, OUTPUT); //AY2
pinMode(10, OUTPUT); //STROBE
pinMode(11, OUTPUT); //DATA
pinMode(13, INPUT); //BUTTON
}
void loop() {
// X0 - Y0
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
//delay(1000);
while (digitalRead(13) == HIGH);
while (digitalRead(13) == LOW);
digitalWrite(10, HIGH);
digitalWrite(10, LOW);
loop2();
}
void loop2() {
// X0 - Y1
digitalWrite(6, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
//delay(1000);
while (digitalRead(13) == HIGH);
while (digitalRead(13) == LOW);
digitalWrite(10, HIGH);
digitalWrite(10, LOW);
digitalWrite(6, LOW);
loop();
}
MT8816, M3494, CD22M3494 are functionally equivalent, pinout is the same.
Crude Arduino code for testing:
// please read datasheet
// VDD to 5V DC
// VSS, VSS to GND
// RESET to LOW
// CS to HIGH
void setup() {
pinMode(2, OUTPUT); //AX0
pinMode(3, OUTPUT); //AX1
pinMode(4, OUTPUT); //AX2
pinMode(5, OUTPUT); //AX3
pinMode(6, OUTPUT); //AY0
pinMode(7, OUTPUT); //AY1
pinMode(8, OUTPUT); //AY2
pinMode(10, OUTPUT); //STROBE
pinMode(11, OUTPUT); //DATA
pinMode(13, INPUT); //BUTTON
}
void loop() {
// X0 - Y0
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
//delay(1000);
while (digitalRead(13) == HIGH);
while (digitalRead(13) == LOW);
digitalWrite(10, HIGH);
digitalWrite(10, LOW);
loop2();
}
void loop2() {
// X0 - Y1
digitalWrite(6, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
//delay(1000);
while (digitalRead(13) == HIGH);
while (digitalRead(13) == LOW);
digitalWrite(10, HIGH);
digitalWrite(10, LOW);
digitalWrite(6, LOW);
loop();
}