Page 2 sur 3

Re: Débuguage et optimisation code.

Posté : mer. 4 mars 2015 22:33
par Tomdu38
Je pense que dans ce code tu peux choisir l'ordre des voix, il faut juste les "taper" dans le bon ordre

Pour les gaz en voie 3 :

Code : Tout sélectionner

enum chan_order{
  AILERON,
  ELEVATOR,
  THROTTLE,
  RUDDER,
  AUX1,
  AUX2
};
Pour gaz en voie 1 ça devrait être :

Code : Tout sélectionner

enum chan_order{
  THROTTLE,
  ELEVATOR,
  AILERON,
  RUDDER,
  AUX1,
  AUX2
};
ATTENTION : Je ne suis pas sur de l'ordre des autres voies, j'ai juste inverser Throttle et Aileron

Pour le montage, je pense qu'il faut juste "splitter" le signal ppm. 3 fils vers la CC3D et 3 fils vers un microcontrolleur style Attyni85 avec une alimentation en parallèle pour Le rx + l'attyni + la CC3D + les neopixels en +5V (Ne pas alimenter les leds par un output de l'attyni) : Attention à l'ampérage max

Pour le signal ppm, un vers input attyni et l'autre vers la CC3D.

Il me semble que ça devrait marcher comme ça !

A+

Re: Débuguage et optimisation code.

Posté : mer. 4 mars 2015 23:33
par vilajea1
oui pour l'ordre des voies c'est simple, mais je voyait plutôt un bouton poussoir qui permet de faire le changement de mode de vol, par contre pour les autres modes de transmission autre que ppm, c'est faisable ?

Re: Débuguage et optimisation code.

Posté : mer. 4 mars 2015 23:50
par Tomdu38
Un bouton poussoir ??? je ne comprends pas ! c'est pour une application en multirotor ? ou tu veux simplement indiquer tes modes de vols par des indicateurs de couleurs ?

Pour le reste, oui tout est faisable... faut juste voir l'utilité... développer ou modifier un code pour 2 personnes ???

Pour le Sbus, sauf erreur de ma part, ce n'est pas encore le standard des contrôleurs de vol ! en général Pwm, PPM. Dans le cas de rx sbus, on peut utiliser un Sbus to PPM converter.

Pour le PWM, on doit pouvoir utiliser un code similaire à celui du PPM. Dans ce cas, on est pas obligé de préciser quelle pulsation lire, puisque dans le PWM on aurait : une voie = un input. Or dans le PPM on a 8 voies sur un input.

A+

Tom

Re: Débuguage et optimisation code.

Posté : jeu. 5 mars 2015 08:23
par CoyotteDundee
Hello Dehas,

Post intéressant...
Par contre, il y a des "trous" dans le code fourni. Ce n'est pas catastrophique mais ce n'est pas propre ;-) :

Code : Tout sélectionner

 //detection de l'absence d'un creneau radio valide (<900ms), flash LED specifique
 if (ch1<900)
 {
     //séquence de flash failsafe, jouez a modifiez les valeurs de delay du ON et du OFF                   
 }
    //séquence de flash entre 1000 et 1250ms (de 0 a 25% des gaz)
 if ((ch1>1000) && (ch1<1250))
 {
 }                     
 //séquence de flash entre 1250 et 1500ms (de 25 a 50% des gaz)
 if ((ch1>1250) && (ch1<1500))
 {
 }
 //séquence de flash entre 1500 et 1750ms (de 50 a 75% des gaz)
 if ((ch1>1500) && (ch1<1750))
 {
 ...
Pour la clarté, j'ai viré le code utile pour ne garde que les tests. Que se passe-t-il si ch1 vaut exactement 1000, ou 1250 ou 1500 ?
RIen ! :-)
Le bon test devrait inclure un > et un <= comme dans

Code : Tout sélectionner

  if ((ch1>1000) && (ch1<=1250))
  {
  }                     
  //séquence de flash entre 1250 et 1500ms (de 25 a 50% des gaz)
  if ((ch1>1250) && (ch1<=1500))
  {
  }
D'autre part, a lire le code, il semble que une fois que l'on est dans une des fourchettes, on n'est pas dans l'autre. Or ici, toutes les fourchettes sont testées même si l'on a déjà traité l'info.
La première approche qui avait été faite, en "else if", est plus optimisée mais il faut la prendre à l'envers :

Code : Tout sélectionner

 if (ch1>1500)  // On part du haut et on redescend
  {
  }                     
  else if (ch1>1250) // > 1250 (mais <= 1500 à cause du test précédent)
  {
  }
else if (ch1>1000)  // > 100 (mais <= 1250 à cause des tests précédents)
  { 
  }
  ...
Voilà... Ce ne sont que quelques idées, bien évidement. ;-)

Coyotte

Re: Débuguage et optimisation code.

Posté : jeu. 5 mars 2015 10:27
par vilajea1
Tomdu38 a écrit :Un bouton poussoir ??? je ne comprends pas ! c'est pour une application en multirotor ? ou tu veux simplement indiquer tes modes de vols par des indicateurs de couleurs ?

Pour le reste, oui tout est faisable... faut juste voir l'utilité... développer ou modifier un code pour 2 personnes ???

Pour le Sbus, sauf erreur de ma part, ce n'est pas encore le standard des contrôleurs de vol ! en général Pwm, PPM. Dans le cas de rx sbus, on peut utiliser un Sbus to PPM converter.

Pour le PWM, on doit pouvoir utiliser un code similaire à celui du PPM. Dans ce cas, on est pas obligé de préciser quelle pulsation lire, puisque dans le PWM on aurait : une voie = un input. Or dans le PPM on a 8 voies sur un input.

A+

Tom
Le but est d'avoir un module prêt a l'emploi pour ceux qui ne programme pas.

Genre : tu fourni les modules dans un club et pas besoin de retoucher le code en fonction des utilisateurs et leurs modes de vol.

Ils programment directement sur les modules fourni, par le biais d'un bouton poussoir et une led indiquant le mode (1 flash = mode 1, 2 flash = mode 2,...).
En fonction du type de modulation (PPM, S-bus,...) un cavalier a mettre sur le module et hop modulation selon l'utilisateur.

Je sais pas si c'est vraiment utile mais au WWS Team plusieurs pilote sont en modulation différente.

A voir si intérêt pour d'autre, mais merci pour tes conseils :-)

Une autre question : quel type de matériel faut t'il prévoir pour faire des CI en mode anglaise comme Will... (un lien sur le matériel peut être ?).

A+

Re: Débuguage et optimisation code.

Posté : jeu. 5 mars 2015 10:37
par Tomdu38
Pour la réalisation de CI, à ma connaissance, 3 techniques :

- La gravure à l'anglaise : il faut une petite CNC ou une imprimante 3D avec un petite fraiseuse (un moteur brushless ça marche !!!) avec une fraise à graver.

- La gravure chimique : il faut une insoleuse UV ( Un scanner bricolé avec des led Uv ou des néons ça marche, j'en avais fait une ;)) et ensuite c'est plusieurs bains chimiques (2 bains différents, avec des rinçages à l'eau).
On utilise des produits spécifiques comme le perchlorure de fer ...etc. Tu peux aussi le faire avec des produits ménagers (cf tuto sur instructable).

- La réalisation de circuit avec des encres conductrices. En gros, un stylo avec une encre spécifique et tu dessines ton circuit... il faut voir la durée de vie, et l'épaisseur de cuivre avec le max d'ampère que tu peux faire passer.

Voilà en gros !

A+

PS : Il me semble que willmodelisme utilise la méthode 2.

Re: Débuguage et optimisation code.

Posté : jeu. 5 mars 2015 12:16
par vilajea1
Super merci pour les infos. Ça me plaît bien la gravure à l anglaise reste à trouver le matos pas trop cher et plug and play si c est possible :-)

Re: Débuguage et optimisation code.

Posté : jeu. 5 mars 2015 12:24
par willmodelisme
La gravure a l'anglaise est faite avec une fraiseuse. Numérique ou à la main.
On élève le cuivre pour délimiter des pistes.

J' utilise la méthode chimique, typon imprimé sur transparent, insolation de plaque pré-sensibilisée avec une insoleuse LED, révélation avec de la soude caustique diluée puis gravure chimique avec eau oxygénée + acide chlorhydrique.
Avantage de cette méthode, tous les produits se trouvent au brico du coin ou au super-marché (sauf la plaque présensi. et les LED UV ;) ebay ou amazon )
Les transparents pour imprimante jet d'encre ne sont pas facile à trouver non plus....(y en a sur amazon).

Re: Débuguage et optimisation code.

Posté : jeu. 5 mars 2015 13:15
par Tomdu38
@vilajea1 : la gravure chimique sera la plus accessible. L'investissement est aussi moins lourd à moins d'avoir déjà une CNC ou une imprimante 3D. Pour les typons, je complète le propos de willmodelisme,tu peux le faire avec une imprimante jet d'encre ça marche aussi, mais faut des transparents spéciaux pour jet d'encre, et imprimer avec la meilleur résolution possible.
(j'avais fait mon premier circuit comme ça pour ma première carte de vol sur base arduino et imu 10 dof, ... )

Voici la V2 : http://multi-rotor-fans-club.com/viewto ... =36&t=2371" onclick="window.open(this.href);return false;

En finition , tu peux faire un étamage à froid.

A+

Re: Débuguage et optimisation code.

Posté : jeu. 5 mars 2015 13:31
par willmodelisme
Sinon j'avais pensé à une laser monochrome pour les typons, une d'occasion, là c'est top.
Je les fais parfois au boulot.

Sinon, laser ou jet d'encre, je double les typons en les superposant pour avoir un noir parfait.

Re: Débuguage et optimisation code.

Posté : sam. 7 mars 2015 08:36
par Dehas
Ou achetez vous les barrette de leds adressable type adafruit, car quand je vois le prix ça fait reculer, ça vas du simple au triple même sur Ebay !!

Re: Débuguage et optimisation code.

Posté : sam. 7 mars 2015 08:46
par willmodelisme
Un seul site pour moi:
http://www.adafruit.com/neopixel" onclick="window.open(this.href);return false;

Re: Débuguage et optimisation code.

Posté : sam. 7 mars 2015 08:48
par Dehas
Oui, je l'ai vue celui la, mais je ne trouve pas les FDP, car d'habitude les FDP des US sont exorbitants.

Re: Débuguage et optimisation code.

Posté : sam. 7 mars 2015 09:08
par Dehas
C'est bien ce que je disais, 5,95$ la barrette et 9,15$ de FDP !!! ça fais 15,10$ soit environ 13,92€ pour une barrette !!

Re: Débuguage et optimisation code.

Posté : sam. 7 mars 2015 09:18
par willmodelisme
http://www.banggood.com/5Pcs-CJMCU-8-Bi ... 61344.html" onclick="window.open(this.href);return false;

http://www.banggood.com/50CM-36-SMD-505 ... 36919.html" onclick="window.open(this.href);return false;

Re: Débuguage et optimisation code.

Posté : sam. 7 mars 2015 09:30
par vilajea1
Moi je prend chez semageek.com ou mchobby et les originaux car les copies pas les même dimension et qualité pas très top !.

Les ports sont gratuit sur bg http://www.banggood.com/5Pcs-CJMCU-8-Bi ... 61344.html" onclick="window.open(this.href);return false; pour 5 pieces.

Re: Débuguage et optimisation code.

Posté : sam. 7 mars 2015 09:36
par willmodelisme
Voici le lien de vilajea1 avec juste les neopixel:

https://boutique.semageek.com/fr/recher ... y=neopixel" onclick="window.open(this.href);return false;

Re: Débuguage et optimisation code.

Posté : sam. 7 mars 2015 09:56
par Tomdu38
Les noms de référence des Leds sont :
- ws2812 : Led avec 6 pattes de connections
- ws2812B : Led avec 4 pattes de connections

J'ai acheté les miennes sur Ebay, à un revendeur Allemand pour une dizaine d'€ fdp in ! c'est un peu cher, mais rapide !

A+

Tom

Re: Débuguage et optimisation code.

Posté : sam. 7 mars 2015 10:02
par Papi78
Dehas a écrit :Ou achetez vous les barrette de leds adressable type adafruit, car quand je vois le prix ça fait reculer, ça vas du simple au triple même sur Ebay !!
J'ai pris les miennes ici :
http://www.ebay.com/itm/2PCS-8x-WS2812- ... OU:FR:3160" onclick="window.open(this.href);return false;

Jeff j'attends ton crobard ;-)

Re: Débuguage et optimisation code.

Posté : sam. 7 mars 2015 10:13
par Dehas
Merci pour les liens :super:
Jeff j'attends ton crobard ;-)
Quel croquis !!, vous avez tout sur le post, même le CI de Will.
D’ailleurs je fini le montage et je poste.

Re: Débuguage et optimisation code.

Posté : sam. 7 mars 2015 10:30
par Papi78
Dehas a écrit : Quel croquis !!, vous avez tout sur le post, même le CI de Will.
Non non, rien à voir, c'est pour un support de LED à imprimer... ;-)

Re: Débuguage et optimisation code.

Posté : sam. 7 mars 2015 17:35
par Dehas
En suivant le lien de papi78, je me suis pris ça [yahoo.gif]
Image

Re: Débuguage et optimisation code.

Posté : dim. 8 mars 2015 10:11
par vilajea1
Papi78 a écrit :
Dehas a écrit :Ou achetez vous les barrette de leds adressable type adafruit, car quand je vois le prix ça fait reculer, ça vas du simple au triple même sur Ebay !!
J'ai pris les miennes ici :
http://www.ebay.com/itm/2PCS-8x-WS2812- ... OU:FR:3160" onclick="window.open(this.href);return false;

Jeff j'attends ton crobard ;-)
Salut, pas encore eu le temps Image je bosse au salon de l auto à Genève et rentre tard. Je te fait ça rapidement

Merci Image

Re: Débuguage et optimisation code.

Posté : jeu. 12 mars 2015 19:07
par Dehas
Alors, petit retour sur Le circuit imprimé de Will
Image

Image
Il est pas gros!!

Image
Image
Pose et soudure des transistors

Image
Le câblage.

Petite vidéo du du test de fonctionnement sur mon microbe !!


Me reste a faire la sécurisation a la colle chaude des fils, un bout de gaine et le montage définitif sur le microbe.
Pour moi, le test du CI de Will est concluant pour qu sait souder de petites pièces [yahoo.gif]
Merci Will pour ton développement et ton travail :super:

Re: Débuguage et optimisation code.

Posté : jeu. 26 mars 2015 11:54
par Dehas
vilajea1 a écrit :Hello,

Voila un bout de code fonctionnel pour la gestion des Leds Neopixel Adafruit ou autre selon la position des gaz.

Ne fonctionne que pour le ppm et sortie gaz voie 3. Code développer par un membre d'Argonay que l'on a pris et adapter pour notre utilisation.

Si quelqu'un veut faire la même chose mais pour du PWM, S-Bus, EX-Bus,... avec possibilité de choix pour la sortie des gaz voie 1 ou 3.

libraire : FastLED

Code : Tout sélectionner

/* CPPM2LED
  goebish 2014
  for m328 @ 16 MHz
  Date 01/03/2015 --> attafr
  Date 03/03/2015 --> Jeff
*/

#include <FastLED.h> // (lib available at https://github.com/FastLED/FastLED/archive/master.zip )
// see https://github.com/FastLED/FastLED/wiki/Pixel-reference for reference

// reglages
#define NUM_LEDS 8 // nombre de leds

#define WS2812_pin 4 // Pin de connection pour le Din Adafruit

#define PPM_pin 3    // PPM input

#define PPM_MIN 1000
#define PPM_MAX 2000

#define CHANNELS 5

enum chan_order{
  AILERON,
  ELEVATOR,
  THROTTLE,
  RUDDER,
  AUX1,
  AUX2
};
// end settings

CRGB leds[NUM_LEDS];
volatile uint16_t ppm[CHANNELS];

void setup() {
  // init leds
  FastLED.addLeds<NEOPIXEL, WS2812_pin>(leds, NUM_LEDS);
  FastLED.showColor(CRGB::Black);
  // init ppm values
  for(int i=0; i<CHANNELS; i++) {
    ppm[i] = 1520;
  }
  // init ppm counter
  TCCR1A = 0;  //reset timer1
  TCCR1B = 0;
  TCCR1B |= (1 << CS11);  //set timer1 to increment every 0.5µs (@16Mhz)
  // init ppm interrupt
  attachInterrupt(PPM_pin - 2, read_ppm, CHANGE);
  delay(100);
}

void loop()
{
  // set leds hue according to throttle value
  // FastLed hue chart: http://i.imgur.com/0utnZcB.jpg
  uint8_t hue = map( ppm[THROTTLE], PPM_MIN, PPM_MAX, 144 /*light blue*/, 0 /*red*/);
  uint8_t hug = 255; // map( ppm[ELEVATOR], PPM_MIN, PPM_MAX, 144 /*light blue*/, 0 /*red*/);
  FastLED.showColor( CHSV( hue, hug, 255));
  delay(25);
}

void read_ppm()
{
  #define PPM_SCALE 1L
  static unsigned int pulse;
  static unsigned long counterPPM;
  static byte chan;
  counterPPM = TCNT1; // x 0.5µs
  TCNT1 = 0;
  if(counterPPM < 1020 ) {  // pulse (< 510µs)
    pulse = counterPPM;
  }
  else if(counterPPM > 3820 ) {  // sync pulse (> 1910µs)
    chan = 0;
  }
  else{  // values between 510µs and 2420µs will end up here
    if(chan < CHANNELS) {
      ppm[chan]= (counterPPM + pulse) >> PPM_SCALE;
    }
    chan++;
  }
}

Je mettrai le schéma dès que j'ai un peu de temps.

A+
J'ai essayé de le passer sur une ATTiny85, j'ai des erreurs, la première

Code : Tout sélectionner

error: 'TCCR1B' was not declared in this scope
Apparemment le code ai fait pour un 328 !!