Show Posts
Pages: 1 ... 41 42 [43] 44 45 ... 94
631  International / Le bar / Re: Ca sent le chaud on: September 25, 2013, 02:59:10 pm
C'est quoi une opération majeure ?
Peut être bien que c'est l'opération qui consiste à introduire dans l’emballage final la carte qui a été fabriquée en Chine chez un sous traitant qu'on n'a pas les moyens de surveiller mais qui fait des prix défiants toute concurrence.
chuuuuuttttt!!! tout le monde le sait, mais faut pas le dire!

Mais tant qu'à acheter du chinois, autant acheter du clone, ça marche pareil et pas moins longtemps.

et que dire du vernis des cartes? j'ai deux méga qui ont 2 ans 1/2, le cuivre est déjà à nu. à 300 balles le bout d'époxy, c'est pas européen ça madame!
632  International / Français / Re: calcule deux mosfet on: September 25, 2013, 11:42:34 am
Vous allez lui faire peur... pourquoi pas une EL84 tant qu'un y est? avec une résistance de cathode bien calculée, on peut la commander directement en 5V. Mais bon, c'est la gestion du courant dans les leds qui ne va pas être facile...
633  International / Le bar / Re: Ca sent le chaud on: September 25, 2013, 10:36:49 am
C'est ça de vouloir faire de gros bénéfices en réduisant les coûts!

S'il y a preuve de malfaçon, j'imagine le bazar que a va faire s'il faut échanger tous les shields déjà vendus...
634  International / Français / Re: calcule deux mosfet on: September 25, 2013, 10:32:04 am
+1, passe en bipolaire, mon préféré : le 2N2222 qui allumera ton mètre de led avec le plus grand bonheur.

Mais il serait intéressant que tu nous dises combien consomme ton ruban, ça s'exprime en mA/m.
635  International / Français / Re: Comment incrémenter ceci 0x0100 on: September 25, 2013, 10:16:39 am
Comprendre un compilateur, c'est pas toujours facile.

x = 0x42; le "0x" devant le nombre indique que c'est de l'hexa. donc le compilateur va le transformer en binaire (des 1 et des 0) à partir de sa valeur hexa. Pour le µP qui exécutera le code, x=01000010.
y = 75; rien devant le nombre, c'est du décimal. le compilateur va le traduire par y=01001011.
z = 0117; le 0 en premier indique que c'est de l'octal (base 8 ). traduit par z=01001111.
t = b00001101; le b indique binaire, il rest donc en binaire.

x + y + z + t = ? Le processeur va faire le calcul en binaire, soit

processeur   // programmeur
  01000010  // 0x42
+01001011  // +  75
+01001111  // + 0117
+00001101  // + b00101101
------------
  11001001  // =DOKA (en bibi-binaire)

as-tu vu un problème quelque part? Le processeur, lui, n'a eu aucun souci pour calculer... mais je crois qu'on t'en avait déjà parlé dans les premières pages de ce topic, non?
636  International / Français / Re: Monster Moto Shield on: September 25, 2013, 07:28:19 am
ce sont des leds qui t'indiquent le fonctionnement...
637  International / Français / Re: [Automatisme] Portail et arduino on: September 25, 2013, 07:23:42 am
La solution d'artouste est très pertinente. En effet, tu vas déballer 600€, donc mieux vaut partir sur des bases qui marchent toutes seules, plutôt que de regretter d'avoir acheté des moteurs que tu n'arrives pas à commander, découragements, prises de tête... enfin on connaît.

les PC télécommandées sont à base d'un relais, donc top pour ce que tu veux faire. avec en plus selon les modèles, un chip qui propose plusieurs sorties mais dont une seule est utilisée, hack facile et prometteur...
638  International / Français / Re: Comment incrémenter ceci 0x0100 on: September 25, 2013, 05:11:52 am
Une façon d'optimiser ta mémoire, ça ne change en rien le reste du code...

Code:
#define SIZE_COU 15  // taille de cou[]
#define SIZE_LON 15  // taille de lon[]
#define SIZE_LAT 15  // taille de lat[]
#define SIZE_ALT 15  // taille de alt[]
#define SIZE_TIM 14  // taille de time[]
#define SIZE_VEL 6  // taille de vel[]
#define SIZE_STA 2  // taille de sta[]

char cou[SIZE_COU];
char lon[SIZE_LON];
char lat[SIZE_LAT];
char alt[SIZE_ALT];
char time[SIZE_TIM];
char vel[SIZE_VEL];
char sta[SIZE_STA];

// 24LC236
#define EPROM_COU 0x0000  // autant commencer au début de la mémoire...
#define EPROM_LON EPROM_COU+SIZE_COU // 15 octets plus loin (taille de cou[15] enregistré précédemment)
#define EPROM_LAT EPROM_LON+SIZE_LON // même raisonnement pour les adresses suivantes
#define EPROM_ALT  EPROM_LAT+SIZE_LAT // ...
#define EPROM_TIM EPROM_ALT+SIZE_ALT //
#define EPROM_VEL EPROM_TIM+SIZE_TIM //
#define EPROM_STA EPROM_VEL+SIZE_VEL  //

#define EPROM_INC EPROM_STA+SIZE_STA  // Incrementation de façon à ce que le prochain enregistrement se fasse directement à la suite
unsigned int mask=0x0000;
const byte rom = 0x50;    // Address of 24LC256 eeprom chip


Maintenant, un enregistrement n'occupera plus que 80 octets au lieu des 256 avant (soit 409 enregistrements possibles au lieu de 128, soit 6h50' environ). L'avantage de ce genre de déclaration, c'est que si à un moment tu changes la taille d'un enregistrement (par exemple cou[15] devient cou[6], il te suffit de ne changer que la première ligne par

Code:
#define SIZE_COU 6  // taille de cou[]
et tout ton code suivra (par contre, ce genre de modif rend tout ce qu'il y avait avant dans l'EPROM inutilisable, mais il te suffira de refaire un enregistrement pour réécraser le tout...). ça réorganisera totalement l'adressage en ROM de façon à toujours utiliser au mieux ta mémoire (dans cet exemple de passer cou à 6, tu passerais à 461 enregistrements...)

Autre idée, pour l'indexation dans get_gps(), tu devrais déclarer une variable genre word index_EPROM = 0; et réécrire ces codes :

Code:
       writeEEPROM(rom,(EPROM_INC*index_EPROM)+EPROM_STA,sta); // No worries about the value of sta, it's work, it not my worries

       index_EPROM++;  // incrément de l'index
Ton premier enregistrement se fera pour index_EPROM = 0, le suivant pour index_EPROM = 1 etc etc...

Niveau lecture, pareil, pour récupérer par exemple time sur le 9ième enregistrement, il suffira de faire

Code:
  // le premier enregistrement étant à 0, le 9ième se trouve à 8, logique...
  readEPROM(rom, (EPROM_INC*8)+EPROM_TIM, time);   // enfin selon comment tu gères ta lecture de l'EPROM...

si ça peut t'aider...

PS : encore un bonus :
Après la ligne #define EPROM_INC, mets ça :
Code:
#define EPROM_SIZE 32768  // taille de l'EPROM en octets
const word EPROM_MAX = (EPROM_SIZE/EPROM_INC)-1;  // limite du nombre d'enregistrements
EPROM_MAX contient précisément le dernier index possible pour les enregistrements (et toujours en phase avec la taille de tes variables, donc si index_EPROM > EPROM_MAX, c'est que la mémoire est pleine.
639  International / Français / Re: Upgrade Arduino à distance on: September 25, 2013, 04:06:55 am
Oui, c'est sûrement possible... il faudrait juste modifier le booltoader, qu'il puisse aller regarder sur la carte SD s'il y a un fichier de maj, et si oui, alors copier ce fichier dans la flash. Mais bon courage, car ça va pas être facile.

Via les prog_mem, on peut écrire dans la flash, donc si tu as accès à un fichier hex, alors tu peux facilement copier le code, mais en sachant exactement où tu es, car si tu écris directement sur ton code, peut-être que ça va planter...

débutant s'abstenir...
640  International / Français / Re: Bogue avec la bibliothèque Servo, comment corriger ce problème ??? on: September 25, 2013, 04:01:33 am
Par contre, il doit y avoir un câblage particulier du 298, car il faut jouer avec trois entrées pour contrôler un moteur. le schéma page 6 te conviendrait, mais ils se sont gourés dans leur petit tableau de fonctionnement...


et encore, je ne suis pas trop sûr, mais si tu as une doc pour ton circuit complet, ça devrait être indiqué dessus.
Et vu la complexité du truc, tes soucis de marche / arrêt viennent sûrement du câblage...

Concernant les autres questions...

Non, je n'ai pas fait de lib LCD, mais c'est en cours...

ATTENTION A TON BRANCHEMENT!!!! ARDUIBO_VIN             : LCD_1_J7_1, (+5V) vin = 9V dans ton cas! il vaut mieux alimenter ton LCD à partir de la pin +5V...


641  International / Français / Re: Bogue avec la bibliothèque Servo, comment corriger ce problème ??? on: September 25, 2013, 03:32:05 am
Que de réponses et questions...

Pour faire de la PWM avec la mega, dans ton cas, deux solutions :

1 : utiliser notre code servo.
 avec en bonus, une troisième PWM dispo puisque le timer est configuré...
Code:
// initialisation
  timersReset();  // important, car sans ça, il est possible que ça ne marche pas...
  servoInit(N1, 127, false);  // F = 7,8KHz
  servoInit(N2, 127, false);  // N1 et N2 sur le même timer bien sûr!

// (...)

  servoN1 = val1;  // 1 < val1 < 254
  servoN2 = val2;  // 1 < val2 < 254

2 : utiliser le timer 2 (qui n'a que 2 PWM possible en 8 bits)
  entièrement compatible avec le code servo : ça utilise un timer libre... mais attention, car beaucoup de libs utilisent le timer2, et là, c'est le drame!...
Code:
#define pwm9 OCR2B   // accès registre pwm timer2
#define pwm10 OCR2A  // accès registre pwm timer2

void pwmTimer2Init(byte prescaler){
// prescaler = 1 à 7 (Fpwm = [1 => 62,5KHz; 2 => 7,8KHz; 3 => 2KHz; 4 => 1KHz; 5 => 488Hz; 6 => 244Hz; 7 => 61Hz])
  cli();
  DDRH |= 0x40;  // pin9 en sortie
  PORTH &= 0xBF;  // pin9 = 0
  DDRB |= 0x10;  // pin10 en sortie
  PORTB &= 0xEF;  // pin10 = 0
  TIMSK2 = 0x00;
  ASSR &= 0xBF;  // désactiver timer ext_clk.
  TCCR2A = 0x03;
  TCCR2B = prescaler;  // mode WGM2 = 3 = fast PWM 8 bits, CS2 = prescaler.
  sei();
}

void pwm2Set(byte pin, byte value){  // pin = 9 ou 10, 0 < value < 255
  if (value < 2) {  // sortie = 0
    if (pin == 9) {
      TCCR2A &= 0xCF;
      PORTH &= 0xBF;  // pin9 = 0
    } else if (pin == 10) {
      TCCR2A &= 0x3F;
      PORTB &= 0xEF;  // pin10 = 0
    }
  } else {                   // sortie = PWM
    if (pin == 9) {
      TCCR2A |= 0x20;  // activer OC2B sur pin 9
      pwm9 = value;
    } else if (pin == 10) {
      TCCR2A |= 0x80;  // activer OC2A sur pin 10
      pwm10 = value;
    }
  }
}

void setup(){
  pwmTimer2Init(2);  // initialiser la PWM à 7,8KHz sur pins 9 et 10
}

void loop(){
  pwm2Set (9, 127); // pwm 50% sur pin 9
  pwm2Set (10, 64); // pwm 25% sur pin 10

// on peut aussi accéder directement aux valeurs pwm9 et pwm10 :
  pwm9 = 127; // pwm 50% sur pin 9
  pwm10 = 64; // pwm 25% sur pin 10
// mais dans le cas où la valeur est inférieure à 2, c'est plus compliqué, mieux vaut passer par pwm2Set
}

Tu vas me demander pourquoi j'ai pris le temps de faire ce code? simplement car j'en ai besoin moi aussi... je n'ai pas testé, mais pas de raison que ça ne marche pas!
642  International / Français / Re: Bogue avec la bibliothèque Servo, comment corriger ce problème ??? on: September 24, 2013, 03:09:59 pm
Alors oui!

J'imagine que tu y mets du coeur et un max d'énergie, c'est tout bon! Je ne rejette rien, c'est juste que je n'ai pas beaucoup de temps, et que je ne peux pas me mettre en mode debugg sur des codes qui ne correspondent pas à ma façon de faire (j'ai déjà du mal pour moi-même...).

Peut-être une idée : tu définis des long là où on attend des word. de plus, je ne comprends pas tes valeurs min et max. si le max est 254, un byte suffit. pour faire de la PWM, il faut envoyer une valeur entre 1 (min) et ICRn (max, n = numéro du timer). là, tu auras une vraie PWM à la fréquence 1/T.

je ne sais pas comment tu as câblé des moteurs, mais est-ce que la fréquence est compatible avec tes drivers? (si T = 17500, F = 57,14Hz). tu peux essayer avec T = 255 (F = 3,9KHz), ça te fera une belle PWM sur 8 bits.

tu n'as pas un oscillo sous la main? c'est très pratique pour vérifier que tes signaux sont conformes à ta prog et pouvoir incriminer l'électronique qui suit...

ATTENTION : liquidChristal n'est pas mieux que la lib servo...
643  International / Français / Re: [arduino] PWM, harmonique et afficheur LCD. une histoire de compatibilité on: September 24, 2013, 11:53:49 am
Pour utiliser un tableau 8 fois plus petit :

Code:
byte tableau[125];

boolean lit_tableau(word index){
  return (tableau[index >> 3] & (1 << (index % 8)));
}

void ecrit_tableau(word index, boolean valeur){
  if (valeur) {
    tableau[index>>3] |= (1 << (index % 8)) ;
  } else { 
    tableau[index>>3] &= ~(1 << (index % 8)) ;
  }
}

Il doit y avoir plus rapide, mais c'est une idée.
644  International / Français / Re: calcule deux mosfet on: September 24, 2013, 06:36:11 am
Non 1 metre de led par mosfet

tu as la doc de ton ruban? car ça ressemble à de la petite led, genre 25mA par groupe de 3 leds, et dans les 60 led/m, donc 500mA/m (6W/m). avec un mosfet de 20A, tu peux donc gérer 40m de ruban... mais bon, c'est le ruban qui va pas aimer, et c'est plutôt lui qui demande à être coupé par tranches d'1m, ses pistes doivent être limitées à 500mA. Mais rien ne t'interdit de mettre tes mètres de ruban en //...

EDIT : avec deux résistances de 150 pour 3 leds, en effet, on arriverait à 20mA par branche...
645  International / Français / Re: Bogue avec la bibliothèque Servo, comment corriger ce problème ??? on: September 24, 2013, 05:36:14 am
un #define n'est pas une instruction, mais une déclaration de compilation, donc il n'a rien à faire dans le case 9:

Ensuite, tout l'interrêt du .h est de déclarer les fonctions avant leurs defs. Du coup, avant de passer au .cpp, le compilateur sait qu'il existe une telle fonction, et ira la chercher dans le .cpp

J'ai bien peur qu'en voulant réécrire un code qui marchait tu n'aies mis des loups un peu partout...

Quote
Mais comment cela fonction dans la fonction loop (), si « servo9 = 2222; », alors la valeur « OCR1A » devrait être remplacée par « 2222 », mais au lieu de cela, c'est la valeur « 2222 » qui est écrite dans le registre « OCR1A » ?!?
Et c'est exactement ce que ça doit faire.

Attention à ne pas mélanger le PHP et le C!!!! s'ils se ressemblent, ils ne fonctionnent pas du tout pareil. le PHP est interprété, le C est compilé... dans le C, toutes tes variables sont remplacées par des adresses mémoire, leurs noms n'existent plus dans la flash...
Pages: 1 ... 41 42 [43] 44 45 ... 94