Show Posts
Pages: 1 2 [3] 4 5 ... 19
31  International / Réalisations et Projets Finis / Re: Commande automatique de groupe électrogène - machine à états et autres questions on: July 03, 2013, 01:30:53 pm
ARGHHH en fait quand j'ai les relais qui s'activent, l'alim baisse avec la conso des bobines, et les créneaux en sortie du pont diviseur R37/R32 sont trop bas (3,08V crète) et l'atmega ne les détecte plus !! en remontant l'alim, ça fonctionne... Pourtant d'après la donc de l'atméga, il me semblait qu'un niveau haut était pris en compte à partir d'une tension bien plus faible que ça ??

le schéma est là : http://sourceforge.net/p/groupe/code/ci/capteur_rota/tree/kicad/groupe2/groupe2.pdf?format=raw


Je vais modifier mon entrée, le pont diviseur foire, manifestement. Si d'ailleurs vous avez une idée à me suggérer ? par exemple ne pas faire un pont diviseur mais limiter la tension d'entrée avec une zéner ?

Le capteur que j'utilise fonctionne en 12V, avec une sortie collecteur ouvert PNP, d'où ce pont diviseur pour ne pas cramer l'entrée de l'atmega avec des pulse en 12V
32  International / Réalisations et Projets Finis / Re: Commande automatique de groupe électrogène - machine à états et autres questions on: July 03, 2013, 01:25:35 pm
Est-ce que tu es sûr que c'est software ? Est-ce que le code que tu post ici est juste un résumé du code qui est réellement exécuté ou bien ce code ci te pose réellement problème ?

je croyais être sûr que c'était un soucis soft (en tout cas il y en a un : les pics à 740tr/min) mais à vrai dire je ne suis plus sûr de rien, là :/

le code est bien un résumé du code actuellement executé par l'atmega
33  International / Réalisations et Projets Finis / Re: Commande automatique de groupe électrogène - machine à états et autres questions on: July 03, 2013, 01:24:27 pm
ben justement, j'ai essayé d'en faire le moins possible en interruption, regarde la fonction void comptetour() elle est réduite à sa plus simple expression..

bon en fait, le calcul marche, c'est mon entrée qui merdait (tension de sortie du gbf intégré au DSO Quad trop basse ! j'ai bricolé un ampli et ça marche, j'ai bien mes 666 trs/min (avec de temps en temps un pic à 740, donc il reste un bug que je n'ai absolument aucune espèce d'idée de la manière de la trouver ! )

par contre je retrouve mon comportement du début : dès que l'état de la machine change, je mesure 0 !! donc c'est que ça ne passe plus en interruption...
34  International / Français / Re: un petit quizz recup on: July 03, 2013, 12:47:14 pm
les transfos, ça doit pouvoir servir à faire un électrificateur de cloture ?
35  International / Réalisations et Projets Finis / Re: Commande automatique de groupe électrogène - machine à états et autres questions on: July 03, 2013, 12:43:16 pm
alors en fait, c'est plus merdique que ça ! là j'attaque l'entrée avec un signal carré à 100Hz, ce qui devrait me donner une valeur de rpm à environ 667 trs/min, et en fait j'ai une valeur qui oscille entre zéro et 416 avec de temps en temps des pics à 7000, enfin bref c'est totalement n'importe-quoi.

donc en fait la fonction de calcul ou ma fonction de mesure ne marchent pas.

trop rapide, non, certainement pas, grand maximum mon entrée sera à 500Hz ça ne devrait pas poser trop de soucis...
36  International / Français / Re: MÉMORISER UN BIT MÊME SANS ALIMENTATION on: July 03, 2013, 12:10:11 pm
tout à fait ! reste que pour écrire dedans, il faudra fabriquer/modifier une lib maison, je ne crois pas que celles disponible le permettent
37  International / Français / interruption qui marche, puis ne marche plus !! on: July 03, 2013, 12:08:49 pm
si des pros de l'interruption à la sauce arduino ont des idées, tout est expliqué ici :
http://forum.arduino.cc/index.php?topic=125887.msg1302133#msg1302133

si c'est possible de répondre dans l'autre topic, ça sera plus simple, comme ça se rapporte à ce projet objet de l'autre topic...

merci

38  International / Réalisations et Projets Finis / Soucis avec les interruptions on: July 03, 2013, 12:04:37 pm
Bon alors voila, pour détecter la rotation du moteur, j'ai rajouté un capteur de proximité qui compte les dents du ventilateur du moteur.

le nouveau scema de la carte V3.0 est le suivant :
http://sourceforge.net/p/groupe/code/ci/capteur_rota/tree/kicad/groupe2/groupe2.pdf?format=raw

J'ai connecté ce capteur sur l'entrée INT1 (pin D03), ma fonction associée à l'interruption mesure la période entre plusieurs tops et compte ces tops. Ensuite j'ai une fonction qui est appelée dans la boucle principale, qui calcule la vitesse de rotation du moteur à partir de cette période et du nombre de tops comptés.

Code:
unsigned int rpm_moteur; //vitesse de rotation moteur.

//variables utilisees en interruption (volatile = stockees en RAM)
volatile unsigned int rpm_cpt;                     //compteur de passage en interruption. Pour savoir cb de périodes sont utilisées pour le calcul de F
volatile unsigned long rpm_periode;                //periode des implulsion du capteur de rotation
volatile unsigned long rpm_tprecedent,rpm_tcourant;//temps utilisés pour calculer la période

void setup()
{
(...)
attachInterrupt(1, comptetour, RISING); //entree rotation moteur sur INT1
(...)
}

void calcule_rpm() {
  //calcul de la vitesse de rotation du moteur.
 
  //on calcule la fréquence avec 1*60*1000/période car la période est en ms (*1000), et que l'on veut la fréquence en tr/min et non en Hz ou tr/s (*60)
  //on divise ensuite le total par le nombre de dents comptées par le capteur sur 1 tour moteur
  //la periode est une moyenne des rpm_cpt periodes mesurees en interruption avant passage par ici
 
  //Serial.print(rpm_cpt);
  //Serial.println(" "); 
  if (rpm_cpt) {
    rpm_moteur = (unsigned int)(60000/(rpm_periode/rpm_cpt))/nbr_dents_capteur_rota;
    rpm_cpt = 0; //remise à zero du compteur pour les prochaines mesures
    rpm_periode = 0; //idem pour la periode
  }
  else if (rpm_tcourant<(temps_courant-300))
rpm_moteur = 0; //si pas de nouvelle mesure pdt plus de 300ms, alors le moteur est à l'arret ou le capteur est HS
//300ms de période correspond à 22trs minutes si nbr_dents_capteur_rota=9
  //Serial.print(rpm_moteur);
  //Serial.print(" ");
 
}

void comptetour(void) {
  //passage ici en interruption à chaque top capteur de vitesse.
  //On stocke juste la somme des période des impulsions, et un compteur du nombre de périodes additionnées 
  rpm_tprecedent = rpm_tcourant;
  rpm_tcourant = millis();
  rpm_cpt++;
  rpm_periode += (rpm_tcourant-rpm_tprecedent); 
}

le code complet est ici : http://sourceforge.net/p/groupe/code/ci/31e71b1ae87b4828ae862ed18880018b4c217bed/tree/groupe.ino

Tout ça fonctionne très bien, du moins tant que le système est en veille (machine à état en état et_attente).

En revanche, dès que je demande un démarrage du moteur, on dirais que le passage en interruption ne se fait plus. Je passe bien dans la fonction de calcul de vitesse à chaque boucle, comme en attestent les serial.print que j'ai collé dedans, mais le nombre de tops comptés est toujours 0, quelle que soit la fréquence des impulsions en entrée, ce qui semble vouloir dire que je ne passe pas dans l'interruption.

Le pire, c'est que une fois la séquence de démarrage (ratée !) finie, quand la machine à état repasse en attente, ben ça remarche.... arghhhh !

Qu'est-ce qui peut me bloquer l'interruption ? J'avoue que je m'arrache les cheveux, je sent bien que ça doit être une connerie énorme, mais j'y suis depuis 3h et je trouve pas...
39  International / Français / Re: un petit quizz recup on: July 03, 2013, 11:13:04 am
des alims de tubes fluo pour backlight de grands panneaux LCD ?
40  International / Français / Re: forcer l'affichage des zéros non significatifs avec serial.Print(valeur,BIN) ? on: June 27, 2013, 01:31:22 pm
ouais, mais je me retrouve avec une utilisation RAM d'un int, non ?  quoique dans l'exemple de haifger ça doit pas stocker grand chose en ram, du moins pas longtemps, je vais tester

merci smiley
41  International / Français / Re: forcer l'affichage des zéros non significatifs avec serial.Print(valeur,BIN) ? on: June 27, 2013, 07:02:44 am
forcer un 1, j'y ai pensé, mais comme mes variables sont des bytes et que les 8 bits sont utilisés, je peux pas !
42  International / Français / Re: forcer l'affichage des zéros non significatifs avec serial.Print(valeur,BIN) ? on: June 26, 2013, 02:18:34 pm
oui en effet, je n'y avais pas pensé.  Mais du coup je dois utiliser une String, et stdio.h, tout ça ça va me rajouter encore du poids dans un sketch qui est déjà bien assez lourd...
43  International / Français / forcer l'affichage des zéros non significatifs avec serial.Print(valeur,BIN) ? on: June 26, 2013, 12:24:05 pm
bon ben voila, tout est dans le titre ... c'est possible, ou pas ?

car je dois afficher mes variables d'état, pour lesquelles chaque bit correspond à une sortie ou une entrée, et là comme par exemple
00000110 s'affiche seulement 110, c'est assez merdique pour comprendre au premier coup d'oeil la sortie...
44  International / Français / Re: Erreur : avrdude: stk500_getsync(): not in sync: resp=0x00 on: June 26, 2013, 05:31:13 am
si ce sont des cartes avec l'atmega en DIL sur support, tu peux aussi inverser les deux puces sur les cartes et voir si ça change... si c'est toujours la même carte qui fonctionne, alors c'est l'une des deux cartes qui merde (FTDI ?) si l'erreur change de carte, alors c'est un des atmega qui a un soucis par exemple le bootloader manquant.
45  International / Français / Re: projet inutile donc absolument necessaire on: June 25, 2013, 11:51:55 am
ou la tête du patron si c'est lui qui ne sait pas que la roue est pipée smiley-razz
Pages: 1 2 [3] 4 5 ... 19