Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

Pic & servomoteur



  1. #1
    bouah

    Pic & servomoteur


    ------

    Bonjour
    j'aimerais commander un servomoteur à l'aide d'un pic mais je rencontre des pbs pour la génération de pwm.

    Voici un code que j'ai fait pour m'entrainer à faire clignoter une led.

    ****************************** ************
    LIST p=16F84
    #include <p16F84.inc>

    __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

    OPTIONVAL EQU H'0087'

    CBLOCK 0x00c
    compteur1 : 8
    compteur2 : 8
    ENDC


    ;Initialisations
    init
    clrf PORTA ; Sorties portA à 0
    clrf PORTB ; sorties portB à 0
    clrf EEADR ; permet de diminuer la consommation
    bsf STATUS,RP0 ; sélectionner banque 1 (permet de mettre les ports en E/S)
    movlw OPTIONVAL ; charger masque
    movwf OPTION_REG ; initialiser registre option

    ;Mise des PORTA en sortie (TRISA à 0)
    BCF PORTA,0
    BCF PORTA,1
    bcf STATUS,RP0 ; repasser banque 0 (Permet de modifier l'état des ports)
    bsf PORTA,0
    bsf PORTA,1
    goto start

    ;**********Droite******
    droite
    movlw 1000000
    movwf compteur1 ;charger compteur 1 à 10000000
    droite1
    nop ;perdre 1us
    decfsz compteur1,f ;boucler tant que compteur pas à 0
    goto droite1
    return

    ;*******Programme principal*******
    start

    bcf STATUS,RP0
    bsf PORTA,0
    bsf PORTA,1
    call droite
    bcf STATUS,RP0
    bcf PORTA,0
    bcf PORTA,1
    call droite
    goto start

    END
    ****************************** ************

    Je devrai obtenir un clignotement toutes les secondes mais je n'ai rien.

    j'ai aussi essayé avec le flag du timer

    ****************************** ***********
    LIST p=16F84
    #include <p16F84.inc>
    OPTIONVAL EQU H'0087'
    ;INTERMASK EQU H'0000'

    __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_OFF & _XT_OSC

    CBLOCK 0x00C
    compteur : 12
    ENDC


    ;Initialisations
    init
    clrf PORTA ; Sorties portA à 0
    clrf PORTB ; sorties portB à 0
    clrf EEADR ; permet de diminuer la consommation
    movlw OPTIONVAL ; charger masque
    movwf OPTION_REG ; initialiser registre option
    ; movlw INTERMASK
    movwf INTCON
    bsf STATUS,RP0 ; sélectionner banque 1 (permet de mettre les ports en E/S)


    ;Mise du PORTA0 en sortie (TRISA à 0)
    BCF PORTA,0
    BCF PORTA,1
    BCF PORTA,2

    bcf STATUS,RP0 ; repasser banque 0 (Permet de modifier l'état des ports)

    BSF PORTA,0
    BSF PORTA,1
    BSF PORTA,2
    goto start

    ;******Fonction de temporisation********
    tempo
    movlw 15
    movwf compteur
    inter
    clrf TMR0
    bcf INTCON,T0IF
    loop
    btfss INTCON,T0IF
    goto loop
    decfsz compteur,f
    goto inter
    return


    ;**********Fonction Principale*************
    start
    bsf PORTA,0
    bsf PORTA,1
    bsf PORTA,2
    bsf PORTA,3

    call tempo

    bcf PORTA,0
    bcf PORTA,1
    bcf PORTA,2
    bcf PORTA,3

    call tempo
    goto start

    END
    ****************************** **********
    Meme pb...... Sinon si vous avez une meilleure méthode pour faire des pwm précis je suis preneur! (certains pics n'ont pas cette fonction d'intégrée?)
    Merci à bientôt.

    -----
    "La politique s'occupe de demain, la science de l'éternité" A.Einstein

  2. Publicité
  3. #2
    RISC

    Re : Pic & servomoteur

    Bonjour,

    Il y a un excellent cours sur le PIC16F84 avec des exemples fait par Bigonoff, la référence dans le domaine ;=)

    http://www.abcelectronique.com/bigon...=loadpart1.php

    Bon courage

  4. #3
    freepicbasic

    Re : Pic & servomoteur

    le premier programme doit générer un PWM à 50%
    A environ 2000 hertz .
    Donc pas de clignotement mais des Leds à demi allumée.
    Pour un servo il faut du 50hertz donc 20ms et des pulses de 1 à 2ms soit 5 à 10%.

    Pour le second programme
    Vraiment confus !
    Si l'on veut utiliser le TMR0 il faut écrire une routine d'interruption et mettre en route le Timer

    Code:
    bcf INTCON,T0IF
    loop
    btfss INTCON,T0IF
    goto loop
    Ce code est incohérent et plante le pic.
    Comment le flag peut il bouger sans lancer L'int.
    Si on lance l'int ou est la routine d'int.
    Le test du flag hors routine d'int est incongru , puisque normalement effacer par la routine.

    Il semblerait qu'il y ai un manque de connaissance.
    Relire BigOnOff sur les interruptions.

    Dans un premier temps pour débuter,faire des prog sans int
    A+, pat

  5. #4
    bouah

    Re : Pic & servomoteur

    Bonjour,

    Merci beaucoup pour toutes ces informations très précises. Je tournais en rond depuis un moment et grâce à vous je vais enfin pouvoir avancer

    Au sujet du timer j'esperais qu'on pouvait l'utiliser sans interruption.
    Vu que je débute je vais commencer par faire mes pwm par "nop" comme vous me l'avez conseillé. J'ai le cours de Mr Bigonoff et c'est vrai qu'il est super bien fait.

    Par contre je ne comprend pas comment on trouve les 2000Hz. Pour moi j'ai 10^6 "nop" soit 10^6 us = 1sec
    donc 1/(2*1)=0.5Hz.
    Comme je devrais être très précis quand je voudrais commander le servomoteur je doit savoir calculer cela....

    Merci d'avance, à bientôt!
    "La politique s'occupe de demain, la science de l'éternité" A.Einstein

  6. A voir en vidéo sur Futura
  7. Comparatifs

    Gagnez du temps et de l'argent grâce à nos comparatifs de produits. Parmi nos sujets :
  8. #5
    freepicbasic

    Re : Pic & servomoteur

    movlw 1000000
    W = 64

    movwf compteur1 ;charger compteur 1 à 10000000
    Compteur1 contient 64 pas autre chose


    droite1
    nop ;
    perdre 1us

    decfsz compteur1,f ;boucler tant que compteur pas à 0
    perdre 1us

    goto droite1
    perdre 2us

    soit 4µs x 64 = 256 µs en 1/2 période

    soit 512µs en période

    1/ 0.000512 = 1953,125 Hertz
    A+, pat

  9. #6
    freepicbasic

    Re : Pic & servomoteur

    movlw 1000000

    Haaaa...
    j'avais pas vu c'est pas un chiffre binaire !!
    Tu veux mettre 1 000 000 dans un octet qui peut pas prendre plus de 256 !
    A+, pat

  10. Publicité
  11. #7
    freepicbasic

    Re : Pic & servomoteur

    MOVLW B'00011111'
    ecriture d'une valeur binaire.
    A+, pat

  12. #8
    bouah

    Re : Pic & servomoteur

    OK, Merci beaucoup tout fonctionne à présent!
    "La politique s'occupe de demain, la science de l'éternité" A.Einstein

Discussions similaires

  1. ZigBee & PIC Comment débuter ?
    Par Shaiton dans le forum Électronique
    Réponses: 24
    Dernier message: 10/10/2008, 23h44
  2. pic 18f452 & PLL
    Par electron65 dans le forum Électronique
    Réponses: 8
    Dernier message: 28/07/2007, 23h55
  3. Qui connais logi pic & et question à propos des pic
    Par Floris dans le forum Électronique
    Réponses: 10
    Dernier message: 29/05/2006, 22h40
  4. pb pratique: PIC & synthese vocale
    Par pascalibus dans le forum Électronique
    Réponses: 6
    Dernier message: 05/03/2005, 13h11
  5. PIC et servomoteur
    Par prof2techno dans le forum Électronique
    Réponses: 6
    Dernier message: 06/05/2003, 08h03
Découvrez nos comparatifs produits sur l'informatique et les technologies.