Pages: [1]   Go Down
Author Topic: Generare segnale encoder  (Read 482 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 53
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21269
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 53
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho provato con i delayicrosecond.

Come faccio usare i timer del processore?
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 53
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Pages: [1]   Go Up
Jump to: