Go Down

Topic: Generare segnale encoder (Read 624 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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy