Приветствую!
Ребята помогите пожалуйста!
Ремонтирую устройство (меняю проц) ,
но там сенсорные кнопки реализованы c помощью микросхемы WTC6508BSI.
вот даташит.
Там есть пример для 8051.
Но моих знаний откровеннно не достаточно...
Вот что я сделал,
но не работают кнопки..
Ребята помогите пожалуйста!
Ремонтирую устройство (меняю проц) ,
но там сенсорные кнопки реализованы c помощью микросхемы WTC6508BSI.
вот даташит.
Там есть пример для 8051.
Но моих знаний откровеннно не достаточно...
Вот что я сделал,
но не работают кнопки..
C++:
// ======================== ВЫБОР ПИНОВ ============
//======= OUTPUT RELAY =======
#define FAN_1 4 //pd4 почему то не работает...
#define FAN_2 19 //pd3
#define FAN_3 2 //pd2
#define LIGHT 3 //pc5
//======= OUTPUT LED_KEY =======
#define LED_POWER 6 //pd6, led6
#define LED_1 5 //pd5, led5
#define LED_2 11 //pd4, led4
#define LED_3 9 //pd3, led3
#define LED_MAX 8 //pd2, led2
#define LED_LIGHT 7 //pd1, led1
#define BUZZER 10 //pb2, buzzer
//======= INPUT =======
#define BUZZER_INPUT 13 //pb5, input_buzzer
#define SDA 16 //pc2, sda input
#define SCLK 15 //pc1, sclk input
#include "pitches.h"
//#include <avr/power.h>
#define prescal 1
bool power = false;
bool light = false;
bool maxFan = false;
byte speedFan = 0;
byte KeyState, oldKeyState;
void setup() {
Serial.begin(9600);
pinMode(FAN_1, OUTPUT);
pinMode(FAN_2, OUTPUT);
pinMode(FAN_3, OUTPUT);
pinMode(LIGHT, OUTPUT);
pinMode(LED_POWER, OUTPUT);
pinMode(LED_1, OUTPUT);
pinMode(LED_2, OUTPUT);
pinMode(LED_3, OUTPUT);
pinMode(LED_MAX, OUTPUT);
pinMode(LED_LIGHT, OUTPUT);
pinMode(BUZZER, OUTPUT);
pinMode(BUZZER_INPUT, INPUT);
pinMode(SDA, INPUT);
pinMode(SCLK, INPUT);
ledState(false);
startup();
ledState(false);
}
void loop() {
KeyState = read_key_data(); //Read the key information of the touch key
Serial.println(read_key_data());
delay(100);
}
byte read_key_data(void) {
byte KeyValue, i = 0;
// TR1 = 0;
//------ Start bit setting ------
digitalWrite(SDA, HIGH);
digitalWrite(SCLK, LOW);
// SDA = 1; //The SDA is set to the input state, and the upper pulling resistor sets the SDA up to 1, which
// //indicates that the key information of the touch key is read from the touch chip
// SCLK = 0; //Generate downward delay signal of the serial clock
delayMicroseconds(24);
if (digitalRead(SDA) == 0) {
//After transmitting the start bit, detect whether the touch chip has transmitted the confirmation signal
//The touch chip does not set SDA to "0", which indicates that the touch chip is not ready to transmit
digitalWrite(SCLK, HIGH);// SCLK = 1; //SCLK resets to high level
return (0); //The function returns 0 directly, which indicate that no valid key value is read
}
digitalWrite(SCLK, HIGH); //SCLK = 1; //Generate the upward delay signal of the serial clock
delayMicroseconds(24);
//------ Read the switch information of touch key (8 bit) ------
do
{
KeyValue >>= 1;
digitalWrite(SCLK, LOW); //SCLK = 0; //Generate the downward signal of the serial clock
delayMicroseconds(24);
if (digitalRead(SDA) == 1) //Read the data on the SDA
{
KeyValue |= 0x80;
}
else
{
KeyValue &= 0x7F;
}
digitalWrite(SCLK, HIGH); //SCLK = 1; //Generate the upward delay signal of the serial clock
delayMicroseconds(24);
i++;
}
while (i < 8); //Read the 8 bit data
//------ Transmit the end bit (bus recovery) ------
digitalWrite(SCLK, LOW); //SCLK = 0; //Generate the downward delay signal of the serial clock
delayMicroseconds(24);
digitalWrite(SCLK, HIGH); // SCLK = 1; //Generate the upward delay signal of the serial clock
delayMicroseconds(24);
// TR1 = 1;
return (KeyValue); // Return to read the touch key information
}
void startup() {
digitalWrite(LED_POWER, 0);
delay(100);
digitalWrite(LED_1, 0);
delay(100);
digitalWrite(LED_2, 0);
delay(100);
digitalWrite(LED_3, 0);
delay(100);
digitalWrite(LED_MAX, 0);
delay(100);
digitalWrite(LED_LIGHT, 0);
delay(100);
digitalWrite(LED_POWER, 1);
delay(100);
digitalWrite(LED_1, 1);
delay(100);
digitalWrite(LED_2, 1);
delay(100);
digitalWrite(LED_3, 1);
delay(100);
digitalWrite(LED_MAX, 1);
delay(100);
digitalWrite(LED_LIGHT, 1);
delay(100);
ledState(false);
}
void ledState(bool state) {
if (!state) {
digitalWrite(LED_POWER, 1);
digitalWrite(LED_1, 1);
digitalWrite(LED_2, 1);
digitalWrite(LED_3, 1);
digitalWrite(LED_MAX, 1);
digitalWrite(LED_LIGHT, 1);
} else {
digitalWrite(LED_POWER, 0);
digitalWrite(LED_1, 0);
digitalWrite(LED_2, 0);
digitalWrite(LED_3, 0);
digitalWrite(LED_MAX, 0);
digitalWrite(LED_LIGHT, 0);
}
}