arduino PPM

ramboman;2305347 à dit:
Tu as plein de convertisseurs a/d en I²C...

Quand même, l'idée d'attribuer à un Arduino Uno tout le boulot de recueil de mesures A/D ... etc.. et gestion de clavier et affichage; puis confier à un autre Uno en liaison I2C pour le reste avec un dialogue asynchrone me plairait bien ....
Le seul Bémol, c'est la résolution 10 bits des convertisseurs A/D de l'Atmel.

Je mets de coté dans ma tête

Serge .D

Edit : @ Dan : De profondis, il n 'y a pas encore eu d'enterrement; bien dormi ???
Moi je dirais 0K pour le créneau de durée fixée, mais dont la durée est dans une variable dont la valeur peut être changée. Alors soit le prog de #1 simplifié soit celui de #24 mais avec écriture directe dans le port B.
 
Acetronics2;2304955 à dit:
Oups ! me suis fait avoir par le " trop facile " ...

Pour me faire pardonner :
http://www.rcgroups.com/forums/showthread.php?t=1571453

Alain
À voir aussi, le projet ArduTx, qui gère deux manches, deux potentiomètres, quatre boutons, un écran LCD et ses boutons de navigation avec une simple plaquette Arduino.

Il n'a semble-t-il rencontré aucun problème avec les digitalWrite() dans la séquence d'interruption.
 
jpparisy;2305411 à dit:
À voir aussi, le projet ArduTx, qui gère deux manches, deux potentiomètres, quatre boutons, un écran LCD et ses boutons de navigation avec une simple plaquette Arduino.

Il n'a semble-t-il rencontré aucun problème avec les digitalWrite() dans la séquence d'interruption.

Joli !....
 
Je viens de retailler le dernier code donné (on peut faire mieux) avec un seul créneau

Code:
[code]
// config PPM
#define servoCentro 1500       //servo center value (us)
#define ppmLong 22000          //ppm frame
#define ppmPulso 400           //ppm pulse width
#define onState 0              //Polarity: 0 neg / 1 pos
#define sigPin 9               //ppm output pin
#define ppmMin 1000
#define ppmMax 2000

// config TX
#define CANALES 1             //number of channels

int ppm[CANALES];              //ppm output array

// timer1 setup
void configTimer1() {
  cli();
  TCCR1A = 0;
  TCCR1B = 0;
  OCR1A = 100;
  TCCR1B |= (1 << WGM12);
  TCCR1B |= (1 << CS11);  // prescaler 8: 0.5us - 16mhz
  TIMSK1 |= (1 << OCIE1A);
  sei();  
}
// Interrupcion del timer
ISR(TIMER1_COMPA_vect){  
  static boolean state = true;
  TCNT1 = 0;
  if(state) {   
    digitalWrite(sigPin, onState);
    OCR1A = ppmPulso * 2;
    state = false;
  }
  else{   
    static byte cur_chan_numb;
    static unsigned int calc_rest;
    digitalWrite(sigPin, !onState);
    state = true;
    if(cur_chan_numb >= CANALES){
      cur_chan_numb = 0;
      calc_rest = calc_rest + ppmPulso; 
      OCR1A = (ppmLong - calc_rest) * 2;
      calc_rest = 0;
    }
    else{
      OCR1A = (ppm[cur_chan_numb] - ppmPulso) * 2;
      calc_rest = calc_rest + ppm[cur_chan_numb];
      cur_chan_numb++;
    }     
  }
}

void setup() {
  unsigned char i;

  // zero state values for ppm
  ppm[0]=servoCentro;
 /* ppm[1]=servoCentro;
  ppm[2]=servoCentro;
  ppm[3]=servoCentro;
  ppm[4]=servoCentro;
  ppm[5]=servoCentro;
  ppm[6]=servoCentro;
  ppm[7]=servoCentro;
*/
  // ppm timer config
  pinMode(sigPin, OUTPUT);
  digitalWrite(sigPin, !onState);
  configTimer1();
}

void loop() {
}
[/CODE]et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et et ..............



c'est stable nous rentrons dans le monde

NANO





Dan,
 
tarrinos;2305720 à dit:
Je viens de retailler le dernier code donné (on peut faire mieux) avec un seul créneau

et et et et et et et et et et ..............



c'est stable nous rentrons dans le monde

NANO



Dan,

Bravo !

Y a pu qu'a rajouter les morceaux un par un ....

Serge .D
 
Haut