Besoin d'aide pour un programme simple svp
Répondre à la discussion
Affichage des résultats 1 à 24 sur 24

Besoin d'aide pour un programme simple svp



  1. #1
    invite4436e2b5

    Besoin d'aide pour un programme simple svp


    ------

    bonjour je suis débutant en microcontroleur et je voulais juste avoir un programme simple pour faire bouger un servo avec un pic18f452, j'ai deja réalisé la carte a partir de ce site : http://www.digitalspirit.org/wiki/pr...tionde24servos
    j'ai lu les cours de bigonoff mais il n'y a pas moyen je suis perdu....

    désolé de vous déranger mais je cherchais jusqu'a ce que je me rende compte qu'il ne me reste plus beaucoup de temps....
    mon but pour le moment est de faire tourner un servo moteur de 45° toutes les 5 secondes à partir de cette carte ....

    un exemple de code (simple) suffirait pour que je comprenne

    MERCIIII

    -----

  2. #2
    invitee17aeca5

    Re : un programme simpleeeeeeeeeeee svp

    salut

    bah, déjà, le débattement d'un servo est limité. donc, mis à part sans modifications, impossible. Ensuite, pour faire tourner un servo modifié, une simple PWM bien calculée est suffisante, tu peu bien faire ca quand meme !
    c'ets pour quelle application ?

    ++ Tix.

  3. #3
    invitee17aeca5

    Re : un programme simpleeeeeeeeeeee svp

    P.S, ta carte permet de commander les servos depuis le PC :]

  4. #4
    invite4436e2b5

    Re : un programme simpleeeeeeeeeeee svp

    et bien tix figure toi que j'ai appris ce que PWM voulait dire il y a environ 2 semaines lol c'est pour cela que je demande humblement de l'aide .... oui j'ai vu pour ma carte mais logiquement je peux bien programmer quand meme mon pic pour qu'il fonctionne de facon autonome ?? non???
    pourrais tu m'aider s'il te plait ?

  5. A voir en vidéo sur Futura
  6. #5
    invite4436e2b5

    Re : un programme simpleeeeeeeeeeee svp

    meme en essayant ce programme :
    Code:
    #include <p18f452.h>
    #include <stdio.h>
    #include <timers.h>
    #include <pwm.h>
    #include <delays.h>
    
    #pragma config OSC = HS
    #pragma config CP1 = OFF
    
    void Delay10mS(int x) //tempo x*10ms
    {
    int i;
    for (i=0; i<x; i++) Delay10KTCYx(12);
    }
    
    void main (void)
    {
    int a;
    TRISC=0;
    
    OpenTimer1(T2_PS_1_16 & TIMER_INT_OFF);//definition du prescale
    OpenPWM1(124);//periode du pwm = (PR2+1)*4*TOSC*prescale
    SetDCPWM1(250);//rapport cyclique --> 0% = 0; 100%= 799; 50% = 400
    
    while(1);

    RIen ne bougeeeeeeeeeee sur le port C
    Dernière modification par gienas ; 18/08/2008 à 14h14. Motif: Ajouté balises code

  7. #6
    invite4436e2b5

    Re : un programme simpleeeeeeeeeeee svp

    où ai je faux ???? le programme se charge bien mais aucune reaction...

  8. #7
    sdec25

    Re : Besoin d'aide pour un programme simple svp

    re salut

    Avec un multimètre est-ce que tu as une tension sur le port de la PWM ? (le multimètre te donne la tension moyenne).

    Est-ce que tu as déjà réussi à faire éclairer une LED ? Si oui, mets-en une sur la sortie PWM et regarde comment elle éclaire.

    Si la PWM ne fonctionne pas, essaie sans pwm.h, en écrivant dans les registres directement. Pour t'aider, dans la datasheet il y a une section PWM et en particulier "Registers associated with PWM".

  9. #8
    invite4436e2b5

    Re : Besoin d'aide pour un programme simple svp

    je viens de regarder j'ai bien une tension sur ccp1 par contre je ne suis pas passé par l'étape led car je ne pensais pas devoir faire face a autant de probleme... dsl...

  10. #9
    invite4436e2b5

    Re : Besoin d'aide pour un programme simple svp

    Au fait je viens de tester la led sur la broche ccp1 et elle s'allume bien par contre aucune variation quand j'envoie sur le port serie....

  11. #10
    sdec25

    Re : Besoin d'aide pour un programme simple svp

    Tu as quelle tension sur le port de la PWM ? Si tu as 5V et que la PWM est pas à 100% c'est pas bon.

    J'essaierais de faire clignoter une LED :
    Code:
    while(1) {
    led = 1;
    delai(...);
    led = 0;
    delai(...);
    }
    Je ne sais pas comment fonctionnent tes servo alors peux-tu m'expliquer comment on les commande ?

    Tu peux aussi essayer comme ceci pour avoir une PWM de rapport cyclique T_haut/T et de période T :
    Code:
    while(1) {
    sortie = 1;
    delai( T_haut );
    sortie = 0;
    delai( T - T_haut);
    }
    Ensuite mesure la tension obtenue.

  12. #11
    invite4436e2b5

    Re : Besoin d'aide pour un programme simple svp

    D'accord je vais plancher dessus ... par contre pourquoi cette question sur les servo ??? il y a une difference ??? a part leur frequence et leur capacité de charge ??? ce sont des servo s3003 FUTABA....
    pour la tension j'ai presque 5v, environ 4.8V donc j'ai bien peur que le problème vienne de là.....
    merci encore je te tiendrais au courant dès que je l'aurais fait.

  13. #12
    sdec25

    Re : Besoin d'aide pour un programme simple svp

    Citation Envoyé par McCorwin Voir le message
    par contre pourquoi cette question sur les servo ??? il y a une difference ??? a part leur frequence et leur capacité de charge ??? ce sont des servo s3003 FUTABA....
    c'est juste parce que je ne sais pas comment ça fonctionne. Concrètement, qu'est ce qui se passe quand on leur envoie une tension ? 5V, 2V, ...

  14. #13
    invite4436e2b5

    Re : Besoin d'aide pour un programme simple svp

    en fait le servo reagit a une impulsion , et il est constamment alimenté en 5V...

    sinon j'ai rajouté ma petite led avec une resistance de 220 ohms sur un des emplacement de mes servo dans le port B et j'ai utilisé le programme suivant (trouvé sur le net mais ca m'a fait gagné du temps):



    // ---- NOM PROGRAMME : feux_circ.c

    // (c) Genere avec le generateur de code WWW.C-ELECTRONIQUE-NUMERIQUE.COM
    // (c) Ecrit par X. HINAULT dans l'editeur freeware ConTEXT - Juillet 2007
    // compile avec le compilateur C libre SDCC ...
    // assemble avec GPASM (libre) : ...
    // linke avec GPLINK (libre) : ...

    // ======================


    // ---- DESCRIPTION PROGRAMME ----
    // programme pour le PIC 18F452
    // 2 groupes de 3 LEDS sont connectees sur les broches de port B
    // le programme simule l'affichage des feux de circulation

    // ============= DECLARATION DU PIC UTILISE - SECTION OBLIGATOIRE ==========
    #define __P18F452 // cette constante sert a indiquer au preprocesseur quel est le PIC utilise
    #include <p18f452.h>
    #include <pic18f452_perso.h> // inclut le fichier descriptif du PIC utilise
    // ============= +/- FICHIERS D'INCLUSION (LCD, USART, etc...) ================

    // ============= DECLARATION DES CONSTANTES ================
    // 1er groupe de leuds tricolores
    #define ROUGE_1 RB0 // renomme LED rouge 1 sur la broche PB0
    #define ORANGE_1 RB1 // renomme LED orange 1 sur la broche PB1
    #define VERT_1 RB2 // renomme LED verte 1 sur la broche PB2
    // second groupe de Leds tricolores
    #define ROUGE_2 RB3 // renomme LED rouge 1 sur la broche PB3
    #define ORANGE_2 RB4 // renomme LED orange 2 1 sur la broche PB4
    #define VERT_2 RB5 // renomme LED verte 2 sur la broche PB5

    // constantes utilisees pour configurer le port B
    #define SENS_PORTB TRISB // renomme le registre TRISB de sens de du port B1
    #define SORTIE 0 // cree la constante SORTIE valant 0

    // ============= DECLARATION DES VARIABLES GLOBALES =============
    // char (8bits) : -128 a + 127 - int (16 bits) : -32768 a 32767 - long (32 bits) : -2147483648 a 2147483647 - cf limits.h
    // unsigned char : 0 a 255 - unsigned int : 0 a 65535 - long : 0 a 4 294 967 295 (!)
    unsigned long i; // declaration d'une variable de boucle for
    // ============= DECLARATION DES FONCTIONS =============


    // ============= CORPS DU PROGRAMME = FONCTION MAIN ============

    void main(void) { // debut de l'execution du programme ici = routine MAIN
    // ---- Initialisation des fonctionnalites utilisees ----
    // ---- Configuration des ports E/S ----
    //(configuration analogique port A et E)
    PCFG3=0,PCFG2=1,PCFG1=1,PCFG0= 0 ; //Tout digital (par defaut)


    //(PORT B)

    SENS_PORTB = SORTIE ;// met le port B entier en sortie = met registre TRISB a zero


    // ---- Initialisation des variables utilisees ----

    PORTB=0; // on met le port B entier a zero

    // ----- Programme principal ---
    monprog: ; // label mon prog... pour boucler a l'interieur de main...


    // instructions ici

    testled: ; // label testled:

    PORTB=0xFF; // met toutes les broches du port B a 1 (car OxFF vaut 1111 1111 en binaire)

    for (i=1;i<50000;i++); // boucle d'attente env 1 sec

    PORTB=0; // remet le port B a O

    for (i=1;i<5000;i++); // boucle d'attente env 1 sec

    goto monprog ; // boucle vers monprog = boucle sans fin dans la routine MAIN

    }
    //-------------------- FIN DE LA ROUTINE PRINCIPALE -------------------
    // ----- SOUS PROGRAMMES = FONCTIONS ---
    // <<< ecrire ici les routines ou fonctions si besoin >>>
    //--------- FIN DES SOUS PROGRAMMES, ROUTINES ET FONCTIONS
    // ============= +/- gestion des interruptions =========
    // ========== fin de la gestion des interruptions
    //================ FIN DE LA COMPILATION ===============



    Alors biensur rien ne marche mais comme je suis un pauvre débutant je me suis peut etre trompé avant je détaille ma démarche avec mes mots désolé.
    Apres fabrication de la carte et alimentation avec transfo secteur 5V.
    j'ai installé matlab et pic kit programmer.
    je lance mon projet matlab je compile je prend le fichier .Hex et je le charge sur le pic par IC2.
    Il n'y a aucun parametrage a faire dans matlab ou pickit2 ( a part selectionner son pic) ? parce que je viens de découvrir la "configuration bits" dans matlab, est ce vitale ? je n'y ai pas touché pensant que les variables de configurations dans le code suffisaient...)

    et maintenant un grand bravo a celui qui a reussi à me lire jusqu'à la fin sans se dire "mais quelle bu....."
    voyez quand je disais que je débutais

    merci à vous et surtout à toi sdec25

  15. #14
    sdec25

    Re : Besoin d'aide pour un programme simple svp

    Alors les bits de configurations sont soit dans le programme (avec des #pragma) soit configurés dans le menu de MPLAB, mais si ils sont dans le programme il faut cocher la case dans le menu.

    Est-ce que tu as réussi à faire clignoter une LED ? Est-ce que le PIC démarre au moins ?

    Le programme le plus simple qu'on peut faire est :
    Code:
    bits de configuration : timer interne, watchdog désactivé
    void main() {
    ADCON1 = ... // choix des broches analogique/numérique
    OSCCON = ... // facultatif, config de l'oscillateur
    
    TRISAbits.TRISA0 = 0; // sortie
    PORTAbits.RA0 = 1; //RA0 à 1
    
    while(1);
    }

  16. #15
    Gérard

    Re : Besoin d'aide pour un programme simple svp

    Bonjour,
    Je ne veux pas de décourager, mais quand on est débutant, on commence par .... le début.
    Le début, c'est lire et comprendre Bigonoff puis faire clignoter une LED et progresser en comprenant.

    Ta démarche : programmation en C, essais de "trucs" trouvés sur le web ... appel à l'aide.

    Je ne pense pas que ce soit la bonne démarche.

    Ce n'est que mon avis et je le partage.

  17. #16
    invite4436e2b5

    Re : Besoin d'aide pour un programme simple svp

    alors la led ne clignote pas .... et .... mais comment tu sais si le pic demarre ??? sinon j'ai essayé un autre programme sans succes le voici :
    #include <p18f452.h>
    #include <pic18f452_perso.h> // inclut le fichier descriptif du PIC utilise
    #include <adc.h>
    #pragma config WDT = OFF

    void delay (void)
    {
    unsigned int i;
    for (i = 0; i < 30000 ; i++)
    ;
    }

    void main(void) // Boucle principale et imperative
    {

    TRISA=0xFF; // Configuration du portA en entree
    TRISB=0;
    ADCON1=0x0F; // Passe tous les ports en mode digital
    PORTB=0;

    while (1)
    {

    /* LEDs */
    PORTB = 0x81;
    delay ();

    PORTB = 0x42;
    delay ();

    PORTB = 0x24;
    delay ();

    PORTB = 0x18;
    delay ();

    PORTB = 0x24;
    delay ();

    PORTB = 0x42;
    delay ();

    PORTB = 0x81;
    delay ();

    PORTB = 0xFF;
    delay ();


    /* eteint LEDs */
    PORTB = 0;

    delay ();
    delay ();


    }


    --------------------------------------------------
    serait ce ma carte ?? pourtant j'ai revérifié les connexions....

  18. #17
    invite4436e2b5

    Re : Besoin d'aide pour un programme simple svp

    Je comprend ton point de vue Gerard mais en d'autre temps et d'autre lieu je n'aurais pas fait de cette façon... je suis à la base analyste programmeur en C,C++,C# et je sais qu'i faut du temps mais là je n'en ai pas...
    Sinon la carte a été faite sans aucun probleme et programmation je devrais me débrouiller mais c'est toute l'architecture microcontroleur qu'il me manque j'ai bien vu les cours Bigonoff que je trouve interessant mais là je sasi qu'il me manque pas grand chose pour faire marcher mon projet alors ... je tente ...

    Et au passage je remercie sdec25 de son aide

  19. #18
    sdec25

    Re : Besoin d'aide pour un programme simple svp

    La LED reste allumée ou elle ne s'allume pas du tout ?
    Si elle ne s'allume pas c'est que le PIC ne démarre pas.

    Tu utilises quel oscillateur ?

  20. #19
    invite4436e2b5

    Re : Besoin d'aide pour un programme simple svp

    elle ne s'allume pas; j'utilise un quartz 10mhz

  21. #20
    invite4436e2b5

    Re : Besoin d'aide pour un programme simple svp

    CA Y EST ma led s'allume, je me suis un peu plus penché sur la configuration du pic et je me suis apercu qu'avec un quartz externe la configuration n'était pas la meme. Donc avec le programme qui suit cela fonctionne : (il ne me reste plus qu'a comprendre comment utiliser un servo à la place )
    #define __P18F452 // cette constante sert a indiquer au preprocesseur quel est le PIC utilise

    #include <p18f452.h>
    #include <pic18f452_perso.h>
    #include <adc.h>
    #pragma config WDT = OFF // pas de chien de garde
    #pragma config OSC = HS, OSCS = OFF // oscilateur ・quartz 20 Mhz
    #pragma config PWRT = OFF
    #pragma config BOR = OFF
    #pragma config CCP2MUX = OFF
    #pragma config LVP = OFF
    void delay (void)
    {
    unsigned int i;
    for (i = 0; i < 30000 ; i++);

    }
    void main(void) // Boucle principale et imperative
    {

    TRISA=0xFF; // Configuration du portA en entree
    TRISB=0;
    ADCON1=0x0F; // Tous les ports en digital
    PORTB=0;

    //RA1=1; // Mise a 1 (5v) de la sortie RA1 du port A
    while (1)
    {
    /* Light the LEDs */
    PORTB = 0x81;
    delay ();

    PORTB = 0x42;
    delay ();

    PORTB = 0x24;
    delay ();

    PORTB = 0x18;
    delay ();

    PORTB = 0x24;
    delay ();

    PORTB = 0x42;
    delay ();

    PORTB = 0x81;
    delay ();

    PORTB = 0xFF;
    delay ();
    /* turn off the LEDs */
    PORTB = 0;
    /* Delay so human eye can see change */
    delay ();
    delay ();


    }
    }

  22. #21
    invite45724da5

    Re : Besoin d'aide pour un programme simple svp

    Hello
    Ben voila maintenant tu génère une pwm de 50Hz avec un rapport cyclique allant de 1 à 2ms, suivant tes besoins (1.5ms = neutre du servo)...
    @+ Benj

  23. #22
    invite4436e2b5

    Re : Besoin d'aide pour un programme simple svp

    Voila j'ai finalement réussi, alors je voulais fortement remercier sdec25 pour sa patience, vraiment merci l'ami
    Et merci à tout le monde
    A bientot

  24. #23
    sdec25

    Re : Besoin d'aide pour un programme simple svp

    de rien
    Alors ça marche, ton robot avance ?

  25. #24
    Gérard

    Re : Besoin d'aide pour un programme simple svp

    Citation Envoyé par McCorwin Voir le message
    Voila j'ai finalement réussi, alors je voulais fortement remercier sdec25 pour sa patience, vraiment merci l'ami
    Et merci à tout le monde
    A bientot
    Juste pour te dire que je suis content pour toi.
    Même si la démarche ne me semble pas la meilleure.

Discussions similaires

  1. besoin d'aide pour un exercice d'optique hyper simple
    Par invite07d11d6c dans le forum Physique
    Réponses: 1
    Dernier message: 03/10/2007, 15h23
  2. SVP besoin d'aide pour 7-Zip ?
    Par invite23950fd4 dans le forum Logiciel - Software - Open Source
    Réponses: 6
    Dernier message: 28/05/2007, 19h31
  3. Besoin d'aide SVP pour un Spyware
    Par invite23950fd4 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 4
    Dernier message: 19/05/2007, 12h19
  4. besoin d'aide pour circuit simple
    Par invite6d77155f dans le forum Électronique
    Réponses: 6
    Dernier message: 26/03/2007, 14h46
  5. besoin d'aide pour programme d'un pic svp
    Par invite51ae8ee2 dans le forum Électronique
    Réponses: 34
    Dernier message: 06/02/2006, 20h37
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...