eddiewwm 发表于 2019-4-18 16:14:41

8F328-U Signal Reverser

本帖最后由 eddiewwm 于 2019-4-18 16:15 编辑

8F328-U Signal Reverser
/*
   Signal Reverser (Use Interrupt pin2)
   Date: 20190418
   Rev: 01
   By: Eddie
*/

#define SCLK 2    // Signal input pin
#define REVOUT 13 // Reversed output waveform as pin2 SCLK input

volatile unsigned long pulseWidthStart, pulseWidthEnd, pulseWidth, cycleStart, cycleTime;

void setup() {
pinMode(SCLK, INPUT_PULLUP);
pinMode(REVOUT, OUTPUT);
digitalWrite(REVOUT, LOW);
attachInterrupt(digitalPinToInterrupt(SCLK), ISRrisingEdge, RISING);
//Serial.begin(115200);
}

void loop() {

}

void reverseSignal() {
unsigned long pulseTime = 1.31*(3000 - pulseWidth); //reverse signal
//1.31 is used to compensate the delayMicroseconds() error of LGT8F328P chip
//Serial.println(pulseTime);
digitalWrite(REVOUT, HIGH);
delayMicroseconds(pulseTime);
digitalWrite(REVOUT, LOW);
}

void ISRrisingEdge() {
pulseWidthStart = micros();
pulseWidth = 0;
cycleTime = pulseWidthStart - cycleStart;
//Serial.println(cycleTime);
cycleStart = pulseWidthStart;
attachInterrupt(digitalPinToInterrupt(SCLK), ISRfallingEdge, FALLING);
}

void ISRfallingEdge() {
pulseWidthEnd = micros();
pulseWidth = pulseWidthEnd - pulseWidthStart;
//Serial.println(pulseWidth);
reverseSignal();
attachInterrupt(digitalPinToInterrupt(SCLK), ISRrisingEdge, RISING);
}
页: [1]
查看完整版本: 8F328-U Signal Reverser