Aller au contenu


Photo
- - - - -

difficulté programme en C


  • Veuillez vous connecter pour répondre
20 réponses à ce sujet

#1 Valent81320

Valent81320

    Membre

  • Membres
  • 60 messages
  • Gender:Male

Posté 06 janvier 2012 - 10:57

Bonjour à tous !

Je suis en plein dans un projet ou je dois coder un pic 16f84A, et je fais face à un problème :
dans mon programme, je dois faire un calcul et afficher un message, toutes les 0.2 secondes et je ne sais pas du tout comment faire.

Je rencontre aussi un problème à un autre endroit : pour sortir de ma boucle, je dois vérifier un information : une valeur qui dépend d'un capteur (plus précisément un codeur) : on regarde cette valeur sur un intervalle de 2 secondes. Si la valeur n'a pas changé durant les 2 secondes, alors, on sort de la boucle (on affiche un message etc ...)


Merci par avance, et si vous voulez des précisions sur le code, n'hésitez pas.

Les principes gouvernent les gens honnêtes, les lois gouvernent les gens méchants.


#2 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp

Posté 06 janvier 2012 - 11:13

Bonsoir Valent81320.

Déjà sur quelle carte travaille tu , une Arduino???

L'affichage de ton message serra visible sur quoi , sur le logiciel Arduino , son serial monitor , ou sur un afficheur LCD?????

Donne-nous plus d'info.

Ha oui , pourrai tu aller faire ta présentation , c'est ici merci.

#3 Microrupteurman

Microrupteurman

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 210 messages
  • Gender:Male
  • Location:Aquitaine,Gironde

Posté 07 janvier 2012 - 01:11

Un pic16fxx donc il est surement pas sur Arduino !!
Il code sous Flowcode
Et ici, tres peu de personne travail sur des pic.
Alors, bonne chance.
Va voir par LA.

 
Page Facebook : https://www.facebook...appartelier2.0/
Page Twitter :  https://twitter.com/2Appartelier (bateau seulement)
Boutique Robot-Maker : https://www.robot-ma...er-20/produits/

Besoin d'une impression 3D grand format ? Contactez moi !
 


#4 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp

Posté 07 janvier 2012 - 01:16

C'est bon a savoir microrupteurman2 , car je ne savais pas , il faut croix con en apprend tous les jour.

édité : Moi j'ai trouver ce si http://fabrice.sincere.pagesperso-orange.fr/cm_electronique/pic_accueil.htm

#5 Francky

Francky

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 967 messages
  • Gender:Male

Posté 07 janvier 2012 - 07:42

Bonjour Valent81320,
Pour pouvoir essayer de répondre à ta question, il faut au moins que l'on sache avec quel langage tu travailles ! ^^
Tu programme ton 16f84a en C, en asm, sous flowcode (comme le pense les autres) ?

EDIT : Je n'ai rien dit, je viens de voir le titre de ton sujet ! Tu travailles donc en C ^^
Personnellement je ne peux pas t'aider (je "programme" en asm et j'ai quelques notions en flowcode par le lycée mais pas plus :/).

Bon courage !

#6 Valent81320

Valent81320

    Membre

  • Membres
  • 60 messages
  • Gender:Male

Posté 07 janvier 2012 - 09:06

Je ne travaille pas sur une carte Arduino (mais j'ai la possibilité de travailler avec). Je travaille avec un pic, que je code en C. Comme je travaille sur un système de portail, alors, mon message va s'afficher grace à un afficheur LCD.

Les principes gouvernent les gens honnêtes, les lois gouvernent les gens méchants.


#7 Francky

Francky

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 967 messages
  • Gender:Male

Posté 07 janvier 2012 - 09:35

Tu travailles sur ton ppe ? ^^ (je sais ça n'a rien à voir mais bon x))

#8 Valent81320

Valent81320

    Membre

  • Membres
  • 60 messages
  • Gender:Male

Posté 07 janvier 2012 - 09:54

Hé oui, c'est le PPE. Mon projet plus en clair : nous avons un portail en salle de SI, et nous de devons créer un système pour connaitre la vitesse et la position de la barrière à n'importe quel moment, lors de son ouverture. Nous utilisons donc un codeur incrémental nous renvoyant des impulsions (tout ou rien). En fonction du nombre d'impulsions, et du nombre d'impulsions sur 1/4 de tour (ouverture maximale du portail), on peut chopper la position. Pour la vitesse, nous calculons la vitesse moyenne chaque 0.2 sec (vitesse moyenne sur un petit intervalle de temps = vitesse instantanée). Pour connaitre la vitesse en un point précis, il suffirait d'appuyer sur un bouton poussoir enregistrant la vitesse et la position au moment ou l'on appuie sur le bouton poussoir. Donc la ou je bloque, c'est à la fonction EXÉCUTER tel calcul toute les 0.2 secondes. Ensuite, il me faudra aussi me débrouiller pour savoir comment afficher une valeur avec un écran lcd.

Les principes gouvernent les gens honnêtes, les lois gouvernent les gens méchants.


#9 Francky

Francky

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 967 messages
  • Gender:Male

Posté 07 janvier 2012 - 04:14

Je suis pressé de commencer à bosser dessus ! :rolleyes:

Par contre, ton problème est au niveau du code en lui même ou du principe ?

#10 Valent81320

Valent81320

    Membre

  • Membres
  • 60 messages
  • Gender:Male

Posté 07 janvier 2012 - 05:15

Disons que je sais comment je veux le faire, mais g pas le bon langage, pas les bonnes fonctions ...
J'ai joint le pseudo-code, pour voir concrètement l'idée de mon programme

Et encore merci !



Pseudo-code :

variable 1 -> front_montant \\impulsion envoyé par le codeur
variable 2 -> nbre_impulsion \\nombre d'impulsion totale
variable 3 -> pos_rad \\position du portail en radian lorsqu'il s'ouvre
variable 4 -> pos_deg \\position du portail en degré lorsqu'il s'ouvre
variable 5 -> vitesse \\vitesse angulaire du portail
variable 6 -> BP1 \\Bouton poussoir vitesse et position moment désiré
variable 7 -> vitesse BP1 \\vitesse au moment ou l'on appuie sur le bouton poussoir BP1
variable 8 -> position BP1 \\position au moment ou l'on appuie sur le bouton poussoir BP1
variable 10 -> nbre_impulsion_vitesse \\nombre d'impulsions sur 0.2 sec
variable 11 -> pos_deg1 \\position du portail en radian lorsqu'il se ferme
variable 12 -> pos_rad1 \\position du portail en degré lorsqu'il se ferme
variable 13 -> BP3 \\Bouton poussoir réinitialiser
variable 14 -> BP4 \\Bouton poussoir si le portail part en position fermée
variable 15 -> BP5 \\Bouton poussoir si le portail part en position ouverte

nbre_impulsion -> 0
BP1 -> 0
BP3 -> 0
BP4 -> 0
BP5 -> 0


When front_montant = 1
Then nbre_impulsion -> nbre_impulsion++

If BP4 = 1

Then "Chaques 0.2 sec, FAIRE" :
When front_montant = 1
Then nbre_impulsion -> nbre_impulsion++ \\ ne pas réinitialiser nbre_impulsion chaques 0.2 secondes

Calc pos_rad = nbre_impulsion*(pi/2)/150
Calc pos_deg = nbre_impulsion*90/150
printf ("position degré : %i\nposition radian : %i", pos_deg, pos_rad)

STOPPER de calculer quand pos_deg = 90


Chaques 0.2 sec, FAIRE :
When front_montant = 1
Then nbre_impulsion_vitesse -> nbre_impulsion_vitesse++

vitesse = (nbre_impulsion_vitesse*(pi/2)/150)/0.2
Then printf ("vitesse instantanée : %i\n", vitesse)
Nbre_impulsion reviens à 0 à chaque début de 0.2 sec. \\on calcule chaque 0.2sec le nombre d'impulsion

STOPPER de calculer quand pos_deg = 90


If BP5 = 1

Then nbre_impulsion --> 0

Chaques 0.2 sec, FAIRE :
When front_montant = 1
Then nbre_impulsion -> nbre_impulsion++ \\incrémenter de 1

Calc pos_rad1 = (pi/2)-(nbre_impulsion*(pi/2)/150)
Calc pos_deg1 = 90-(nbre_impulsion*90/150)
printf ("position degré : %i\nposition radian : %i", pos_deg, pos_rad)

STOPPER de calculer quand pos_deg1 = 0

Chaques 0.2 sec, FAIRE :
When front_montant = 1
Then nbre_impulsion_vitesse -> nbre_impulsion_vitesse++ \\incrémenter de 1

vitesse = (nbre_impulsion_vitesse*(pi/2)/150)/0.2
Then printf ("vitesse instantanée : %i\n", vitesse)
Nbre_impulsion reviens à 0 à chaque début de 0.2 sec. \\on calcule chaque 0.2sec le nombre d'impulsion

STOPPER de calculer quand pos_deg1 = 0


When BP1 = 1
Then vitesse_BP1 = vitesse
And position_BP1 = pos_deg

When pos_deg = 90
Or When pos_deg1 = 0

Then "effacer ecran"
And printf ("vitesse au point voulu : %i\nposition au point voulu : %i", vitesse_BP1, position_BP1)

When BP3 = 1
Then "recommencer le programme"




\\Explication : Lorsque l'on démare le programme, on doit préciser si le portail est ouvert (et qu' il se ferme) ou s'il est fermé, et
donc, il s'ouvre. On doit donc appuyer sur BP4 si on part en position fermée, ou sur Bp5 si on part en position ouverte.

Pour avoir la vitesse au point voulu, il ne faut pas arreter le portail, juste appuyer sur le bouton poussoir BP1. A ce moment la, on
enregistre donc la position et la vitesse.

Il faut laisser le portail s'ouvrir ou se fermer completement.

Une fois le portail fermé, ou ouvert (c'est à dire la position angulaire = 90 degré, ou 0 degré) alors, on efface les positions et
vitesses à l'écran et on affiche la position et la vitesse enregistrée au moment ou l'on a appuyé sur BP1

BP3 est un bouton permettant de réinitialiser, recommencer le programme, ou cas ou l'utilisateur se trompe, ou qu'il veuille calculer
plusieur vitesses et positions.

IMPORTANT : - il faut réinitialiser le compteur de nombre d'impulsions pour la vitesse toutes les 0.2 sec, mais jamais celui pour
la position.
- il faut afficher toutes les 0.2 secondes la position en degré, celle en radian, et la vitesse en rad.s

Les principes gouvernent les gens honnêtes, les lois gouvernent les gens méchants.


#11 Francky

Francky

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 967 messages
  • Gender:Male

Posté 07 janvier 2012 - 05:50

C'est un problème de code alors je peux pas t'aider désolé :/

Par contre le C est imposé ? Si vous ne parvenez pas à arranger le code, essayer de le faire sur flowcode. Au pire des cas ça vous permettra de savoir si votre raisonnement est juste. (enfin c'est juste une idée, après c'est à vous de voir ^^)

En tous cas bonne chance ^_^

#12 Valent81320

Valent81320

    Membre

  • Membres
  • 60 messages
  • Gender:Male

Posté 07 janvier 2012 - 06:13

Non, y'a pas de code imposé. Je vais essayer sur FlowCode, mais je pense que sa sera pas trop facile en integrant le temps etc ...

Les principes gouvernent les gens honnêtes, les lois gouvernent les gens méchants.


#13 Francky

Francky

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 967 messages
  • Gender:Male

Posté 07 janvier 2012 - 06:36

J'avoue avoir lu ton programme en diagonale (vu que j'y connais pas grand chose en C "^^) mais flowcode devrait te simplifier quelques paramètres de ton projet. Je pense surtout aux macros composants (je ne suis plus sûr du nom), et plus particulièrement celle qui sert à l'affichage sur LCD.
Après si tu penses que c'est inutile car trop complexe, n'essaie pas. Ne perds pas ton temps bêtement ;) (le temps accordé aux ppe est très court :/)

#14 Valent81320

Valent81320

    Membre

  • Membres
  • 60 messages
  • Gender:Male

Posté 07 janvier 2012 - 06:49

C'est vrai que on a pas trop de temps, c'est pourquoi j'y bosse a fond chez moi aussi. Mais je vais essayer avec flowcode, comme sa je pourrai tester le programme

Les principes gouvernent les gens honnêtes, les lois gouvernent les gens méchants.


#15 Francky

Francky

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 967 messages
  • Gender:Male

Posté 07 janvier 2012 - 08:54

Ok bon courage et tiens nous informer ! ;)

#16 Roboteer

Roboteer

    Membre

  • Membres
  • Pip
  • 134 messages
  • Gender:Male

Posté 08 janvier 2012 - 10:15

Bonjour à tous,

Pour ceux qui ne connaissent pas Flow Code et que voudraient en savoir plus, une doc explicative: http://www.matrixmultimedia.com/datasheets/Notice_FLOWCODE_V4-2.pdf et un petit tuto plutôt bien fait: http://www.briquerie...de_3_144dpi.pdf


Enjoy!

#17 Valent81320

Valent81320

    Membre

  • Membres
  • 60 messages
  • Gender:Male

Posté 08 janvier 2012 - 08:37

Merci beaucoup, je pense (après avoir regardé partiellement) que ces documents vont bien m'aider. Juste une question qui me vient à l'esprit : lorsque l'on insère du temps sous flowcode, est ce que sa ne met pas simplement le programme en pause ? Parce que pour mon projet, il ne faut pas le programme en pause (il faut au contraire que l'on conte le nombre d'impulsion dans les 0.2 secondes ...)


Valentin

Les principes gouvernent les gens honnêtes, les lois gouvernent les gens méchants.


#18 Francky

Francky

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 967 messages
  • Gender:Male

Posté 08 janvier 2012 - 08:54

Bonsoir,
Quand tu parles d'insérer du temps, je suppose que tu veux parler de l'instruction "delay" ?
Dans ce cas c'est une instruction de temporisation qui n'a qu'un but : faire perdre des cycles au pic pour effectuer une temporisation.

Si tu veux mesurer toutes les 0.2s tu devras donc mettre un delay de 0.2s. (enfin vu ta question c'est justement ce que tu veux éviter '^^)

Après, pour ton problème tu peux essayer de faire un truc du style :
temporisation de 0.1s (avec un delay), puis on compte et enfin on refait une temporisation de 0.1s.

#19 Valent81320

Valent81320

    Membre

  • Membres
  • 60 messages
  • Gender:Male

Posté 10 janvier 2012 - 10:10

En fait, je pense que je vais faire le programme en flowcode, en intégrant la fonction ou l'on met du code c. Par contre, si on a défini les entrées et variable dans le programme en flowcode, faut il les redéfinir dans le programme en c ?

Les principes gouvernent les gens honnêtes, les lois gouvernent les gens méchants.


#20 Francky

Francky

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 967 messages
  • Gender:Male

Posté 11 janvier 2012 - 01:49

Désolé, je n'ai jamais testé cette fonction et nos profs ne nous en ont pas parlé.




0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users