Go Down

Topic: Generare segnale encoder (Read 558 times) previous topic - next topic

chetto983

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.

uwefed

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

chetto983

Ho provato con i delayicrosecond.

Come faccio usare i timer del processore?

chetto983

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)
}
}
}

Go Up