Generare segnale encoder

Ciao a tutti,

Vorrei creare un segnale encoder sintetico a 4 canali.

Ho già provato con il digital White e i delay ma il mio segnale si sporca sopra i 4 Khz.

Qualcuno potrebbe darmi delle ideee.

Dacci lo sketch.

Sparando a caso direi che delay() fa ritardi di millisecondi e non puoi andare a fare ritardi di microsecondi che ti serveirebbero per avere frequenze piú alte. Devi usare delayMicroseconds() o megli i timer del ATmega.

Ciao Uwe

Ho provato con i delayicrosecond.

Come faccio usare i timer del processore?

Ecco il codice:

// encoder virtuale 2.0

int a = 11;
int a- = 10;
int b = 9;
int b- = 8;
int MT_out = 7;
int acc = 6;
long timeBase;
int analogpin = 0;
volatile int state;
volatile int state1;
int mt;
int i;
long duration;

void setup(){
pinMode (a, OUTPUT);
pinMode (a-, OUTPUT);
pinMode (b, OUTPUT);
pinMode (b-, OUTPUT);
pinMode (MT_out, OUTPUT);
pinMode (acc, OUTPUT);
Serial.begin(9600);
}
void loop(){
Time();
state= !state;
digitalWrite(a,state); digitalWrite(a-,!state);
delayMicroseconds(timeBase);
digitalWrite(b,state);digitalWrite(b-,!state);
delayMicroseconds(timeBase);
mt++;
if (mt == 5){
meter();

}
}

void Time(){
timeBase= analogRead(analogpin);
timeBase= map (timeBase, 0, 1023, 0, 10000);
}
void meter(){
state1 = !state1;
digitalWrite(MT_out,state1);
//accelera();
mt = 0;
}

void accelera(){
if( i < 255){
for (int i ; i<255; i++){
analogWrite( acc, i);
delay(1);
}
}
else{
for (int i ; i>0; i–){
analogWrite( acc, i);
delay(1)
}
}
}