Show Posts
Pages: 1 ... 22 23 [24] 25
346  International / Réalisations et Projets Finis / Re: [Lib] SoftTimer - Une lib pour faciliter les taches périodique ou liées au temps on: June 15, 2012, 04:02:37 am
Salut Barbudor,

Je cherche un moyen de déclencher un code d'interruption 5ms précisément après la surevenue d'une PINinterruption, tout ceci hors du main loop, lancé directement pas ma PINinterruption.

Voici le résultat souhaité en image, la précision devra être de 4µs :


Penses-tu que je puisse utiliser ta librairie ? as-tu une autre idée plus "légère" ?

Sev

EDIT : Plus de précision sur mon projet ici, mais en anglais :
http://www.rcgroups.com/forums/showthread.php?t=1648040&page=2
347  International / Français / Re: Associer .ino avec Arduino.exe 1.0 on: June 15, 2012, 03:52:19 am
Ce qui est drôle c'est que Windows ne considère même pas Arduino.exe (même s'il se trouve sur le disque C:) comme un programme puisqu'on peut asscoier les INO avec n'importe quel autre soft.

Voici le mouvement d'esquive de ouine-ouine en image :

ETAPE 1 - Je vais chercher le PGM à associer :



ETAPE 2 - Après avoir cliqué sur Ok à l'ETAPE 1, je devrai le retrouver dans la liste en présélectionné :



Mais que nenni !!

Pour la base de registre je vais approfondir, car l'emplacement que vous donnez ne contient pas les liens vers les programmes associés, mais il permet au moins de supprimer le type de fichier connu pour repartir du début.

Sev

HS : Barbudor, tu tombe bien, j'ai des question à propos de ton soft timer, je file dans ton sujet de ce pas !
348  International / Français / Re: Associer .ino avec Arduino.exe 1.0 on: June 14, 2012, 10:04:39 am
J'ai exactement le même problème avec la version 1.0.1 sous Seven 64 bits.

On ne peut pas associer le PGM arduinio aux fichiers .ino et ce, même s'il est sur le C:, j'ai été administrateur Microsoft et c'est bien la première fois que je vois ça !

Sev
349  Using Arduino / Programming Questions / Re: "PinChangeInt.h" / NO_PORTB_PINCHANGES working with PIN8 interrupt on: June 14, 2012, 01:37:52 am
Tested Ok, just by inverting the two first lines, thanks a lot  smiley

If the problem occur again (hard to detect), I'll put the first define in the H file  smiley-wink
350  Using Arduino / Programming Questions / Re: "PinChangeInt.h" / NO_PORTB_PINCHANGES working with PIN8 interrupt on: June 13, 2012, 10:39:51 am
Thank you, I'll try this as soon as possible !
351  International / Français / Re: Ordonancer une fonction dans le temps on: June 13, 2012, 10:39:13 am
skywodd, oui le compte est bon, maintenant on passe aux lettres...

Mais après tout, pourquoi changer le Timer2, pourquoi ne pas utiliser le timer0 de la commande micros() ?

Et pourquoi ne pas modifier la commande micros() directement, pour lui faire lancer des fonctions, si le compteur dépasse un nombre précis ?

Sev
352  International / Français / Re: Ordonancer une fonction dans le temps on: June 13, 2012, 09:23:33 am
Oups, j'm'a cru dans la partie international du forum, désolé.
353  International / Français / Re: Ordonancer une fonction dans le temps on: June 13, 2012, 08:54:14 am
Donc, si j'ai bien compris, le code suivant :

Code:
...
delayFromNow = 5000;
FlexiTimer2::set(delayFromNow/4, 4.0/1000000, CHANGESTATE);
...

Devrait lancer la fonction CHANGESTATE 5ms après avoir été lancée ?

J'ai volontairement utilisé une échelle à 4µs pour compliquer un peu smiley, et surtout parce que c'est surement l'échelle que je vais utiliser, car c'est la même que celle de la commande micros().

Sev

EDIT : Ce message a été traduit à posteriori  smiley-roll-blue
354  Using Arduino / Programming Questions / "PinChangeInt.h" / NO_PORTB_PINCHANGES working with PIN8 interrupt on: June 13, 2012, 08:15:48 am
Hello,

I'm very surprised by this code :

Quote
#include "PinChangeInt.h"
#define NO_PORTB_PINCHANGES //to go faster

void setup()
{
 
    PCintPort::attachInterrupt(8, TS_EDGE,CHANGE);
...

Because it's running well and TS_EDGE is well triggered by a PIN 8 state change... PIN 8 is no more on the PORTB ?

Sev
355  International / Français / Re: Ordonancer une fonction dans le temps on: June 13, 2012, 05:44:40 am
Merci Osaka,

J'utilise des bouts de code à la "BlinkWithoutDelay", mais c'est de l'ordonnancement "relatif" qui nécéssite que le code sois lu très régulièrement, et de plus on est bien loin de l'échelle micro-seconde (µs), puisqu'on est à l'échelle de la boucle.

Ce que je souhaite c'est :

Préparer un interruption qui se lancerait lorsque le compteur de microsecondes attendrait TEL valeur.

Mais je dois à mon avis expliqer l'objectif :
Construire un signal servo (pseudo PWM) "à la mano" dont les fronts montants et déscendants s'orchestrent avec le reste du code (dont d'autres interruptions), de façon très précise.

Je regarde le SoftTimer poilu du menton.

Séverin
356  International / Français / Ordonancer une fonction dans le temps on: June 13, 2012, 05:12:00 am
Bonjour,

Je cherche à ordonancer une fonction, c'est à dire qu'elle se délcenche à un moment précis basé sur une échelle de temps au niveau de la microseconde ou pas loin (le compteur micros() par exemple pourrait suffir).

Cela vous semble-t-il envisageable ?

Séverin
357  Using Arduino / Programming Questions / Synchronize on: June 12, 2012, 12:34:10 pm
Duane,

All about my project is explained in this topic, especially the 2 last posts (17 & 18) :

http://www.rcgroups.com/forums/showthread.php?t=1648040&page=2

I don't want to update 2 topic about that, so my arduino questions are in the Arduino forum, but my project is on RCgroup, where other modelists (as you) can see it.

About the servo driving, I'd like to synchronize it to the Rx music.

Sev
358  Using Arduino / Programming Questions / Re: Which timer is used by the "Servo.h" library on: June 12, 2012, 12:11:15 pm
I don't know the values since my debug output has been disabled (6 ch & 6 servo are using the PIN from 0 to 12, even the PIN 1 that is also the serial output)

So in my opinion, I must drive the servo output manually, my first idea is to "schedule" the digitalwrite() command to be triggered at a specific micros() value, but again, I just don't know how to do this...
359  Using Arduino / Programming Questions / Re: Which timer is used by the "Servo.h" library on: June 12, 2012, 06:08:40 am
Thank you dxw00d,

Why don't we just use hardware PWM to generate servo signal ?
360  Using Arduino / Programming Questions / Re: Which timer is used by the "Servo.h" library on: June 12, 2012, 05:14:24 am
Hello world !

Could you please explain me the ~ (PWM ?) symbol accorded to the 3,5,6,9,10,11 PIN ?



I was thinking, this was "prefered" output for PWM...

I've tested my new sketch with 6ch and 6 servo :

Code:
#include "PinChangeInt.h"
#define NO_PORTB_PINCHANGES //to go faster
#define NO_PORTC_PINCHANGES //to go faster

#include <Servo.h>

// LED pins
#define ledO 13
#define ledR 12

// Rx parameters
#define nbOfCh 6 // Put here the total channel number and plug the FIRST channel on the PIN 3
#define nbOfServo 6 // Put here the total channel number and plug the FIRST channel on the PIN 3
#define failsafeCh 1 // Wich channel will be looked for failsafe


// ServoParam
Servo outServ[nbOfServo];
int servPos[nbOfServo];

// ReadReciever variables
boolean failsafe;
volatile boolean endTrame;
volatile unsigned long vChUp[nbOfCh];
volatile unsigned long vchPos[nbOfCh];



// Blink LED variables
int ledState = LOW;     
unsigned long previousTS = 0;

// Blink LED function
void BLINK_LED(const int bLed,int bDelay)
{
  unsigned long currentTS = millis();
  if(currentTS - previousTS > bDelay) {
    previousTS = currentTS;   
    if (ledState == LOW) ledState = HIGH;
    else       ledState = LOW;
    digitalWrite(bLed, ledState);
  }
}

void setup()
{
  pinMode(ledO, OUTPUT);
  pinMode(ledR, OUTPUT);

  // Enable Interruption on channel's PIN
  for (int i=0; i < nbOfCh; i++){
    PCintPort::attachInterrupt(i, TS_EDGE,CHANGE);
  }

  // Servo attachement
  for (int i=0; i < nbOfServo; i++){
    outServ[i].attach(i+nbOfCh);
  }


}

void loop()
{
  // Declaration : Local version of the channel values
  static unsigned long chPos[nbOfCh];

  if ((millis()*1000)>(vChUp[failsafeCh-1]+50000)){  //Detect failsafe on the (failsafeCh) Channel
    digitalWrite(ledR, HIGH);
    failsafe=1;
    // Set servos on MID-position
    for (int i=0; i < nbOfServo; i++){
      outServ[i].writeMicroseconds(1500);
    }
  }
  else{
    if (failsafe==1) {     //failsafe Exit 
      failsafe=0;
      digitalWrite(ledR, LOW);
    }
    else{
      if  (endTrame == 1) { //End of trame detection
        noInterrupts(); //Stop IRQ & copie channels values

          for (int i=0; i < nbOfCh; i++){
          chPos[i]=vchPos[i];
        }
        interrupts();  //Restart IRQ & Reset endTrameflag
        endTrame=0;
        // Set servos as Channel
        for (int i=0; i < nbOfServo; i++){
          outServ[i].writeMicroseconds(chPos[i]);
        }
      }
    }
  }


  //Blink "normaly" the Orange LED
  BLINK_LED(ledO,500);
}


void TS_EDGE()  // Same Interrupt code on all channels
{
  // If this is a rising edge, record it as (vChUp)
  if(PCintPort::pinState == HIGH)
  {
    vChUp[PCintPort::arduinoPin] = micros();
  }
  else
  {
    //If this is a falling edge, calculate the channel value
    vchPos[PCintPort::arduinoPin] = micros()- vChUp[PCintPort::arduinoPin];
  }
  if (PCintPort::pinState == LOW && PCintPort::arduinoPin == nbOfCh-1) endTrame=1; // End of trame is set when the last falling edge of the last channel has gone !
}

And there is lot's of glitches, at 2 level :
  • Servo level, because I still have them, even in failsafe mode (all servos forced at 1,5ms position)
  • In input measurement, because I have more glitches in "normal" mode


I think we can say there is interruption conflicts.

Sev
Pages: 1 ... 22 23 [24] 25