programme de robot suiveur de ligne (PIC asm)
Répondre à la discussion
Affichage des résultats 1 à 13 sur 13

programme de robot suiveur de ligne (PIC asm)



  1. #1
    inviteb298d239

    programme de robot suiveur de ligne (PIC asm)


    ------

    salut tout le monde bon voila au sein de notre club on bosse sur notre premier robot qui est un rebot suiveur de ligne ( noir sur un fond clair ) , le concepte est simple on travaille avec deux octocoupleurs le temps que celui de droite detecte une réflexion du fond clair il arrete la roue gauche pour resdresser et du temps que le detecteur de gauche detecte le fond clair il arrete la roue de droite et kand les deux detecteurs ne recoivent rien ( sur la ligne noir ) les deux roues sont en marche on a etablit un programme pour et on a besoin d'une verification par des gens qui ont l habitude de programmer avec au cas ou d un beug ou autre et merci davance XD

    le programme :



    LIST p=16F84A ; Définition de processeur
    #include <p16F84A.inc> ; Définitions des constantes

    __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC


    ;***************************** ****************************** **********
    ; ASSIGNATIONS *
    ;***************************** ****************************** **********

    OPTIONVAL EQU H'0008' ; Valeur registre option
    ; Résistance pull-up ON
    ; Interrupt flanc montant RB0
    ; Préscaler timer à 2 (exemple)

    ;***************************** ****************************** **********
    ; DEFINE *
    ;***************************** ****************************** **********

    ; exemples
    ; ---------
    #DEFINE MOTD PORTA,0
    #DEFINE MOTG PORTA,1
    #DEFINE CAPD PORTB,2
    #DEFINE CAPG PORTB,3

    ;***************************** ****************************** **********
    ; MACRO *
    ;***************************** ****************************** **********


    MOTDON macro
    BSF MOTD
    endm
    MOTDOFF macro
    bcf MOTD
    endm
    MOTGON macro
    BSF MOTG
    endm
    MOTGOFF macro
    bcf MOTG
    endm

    ;***************************** ****************************** ***********
    ; DEMARRAGE SUR RESET *
    ;***************************** ****************************** ***********

    org 0x000 ; Adresse de départ après reset
    goto init ; Adresse 0: initialiser
    ;***************************** ****************************** **********
    ; INITIALISATIONS *
    ;***************************** ****************************** **********
    init
    clrf PORTA ; Sorties portA à 0
    clrf PORTB ; sorties portB à 0
    bsf STATUS,RP0 ; sélectionner banque 1
    movlw OPTIONVAL ; charger masque
    movwf OPTION_REG ; initialiser registre option

    ; Effacer RAM
    ; ------------
    movlw 0x0c ; initialisation pointeur
    movwf FSR ; pointeur d'adressage indirec
    init1
    clrf INDF ; effacer ram
    incf FSR,f ; pointer sur suivant
    btfss FSR,6 ; tester si fin zone atteinte (>=40)
    goto init1 ; non, boucler
    btfss FSR,4 ; tester si fin zone atteinte (>=50)
    goto init1 ; non, boucler
    ; initialisations spécifiques
    ; ---------------------------
    bcf MOTD
    bcf MOTG
    bSf CAPD
    bSf CAPG
    bcf STATUS , RP0 ; accée à la banque 0
    goto start ; accée au start

    ;***************************** ****************************** **********
    ; PROGRAMME PRINCIPAL *
    ;***************************** ****************************** **********
    start

    boucle3
    bsf MOTG
    bsf MOTD
    btfsc CAPG
    goto boucle2
    btfsc CAPD
    goto boucle1
    goto boucle3

    boucle1
    bsf MOTD
    btfsc CAPD
    goto boucle1
    goto boucle3


    boucle2
    bsf MOTG
    btfsc CAPG
    goto boucle2
    goto boucle3



    goto start ; boucler

    END ; directive fin de programm

    -----
    Dernière modification par Jack ; 28/05/2010 à 00h18.

  2. #2
    thundertom

    Re : sniteiru

    salut,

    j'ai remarqué que nul pars tu initialisait les registres tristate pour la selection entrée/sortie des ports.

    De plus si tu travail avec MPLAB, la navigation dans les banques se fait plus simplement et sans erreus avec l'opérateur banksel. Pour l'utilisé il suffit de lui donner un registre dans la banque désirée. Par exemple: banksel PORTA.

    A pars ça effacer toute la mémoire avant de commencer, je n'ai jamais fais ça. Je vois pas bien l'utilité.

    Sinon j'ai pas vu d'erreur mais bon j'ai lu en vitesse
    Fabricando fit faber

  3. #3
    DAUDET78

    Re : sniteiru

    Citation Envoyé par thundertom Voir le message
    A pars ça effacer toute la mémoire avant de commencer, je n'ai jamais fais ça. Je vois pas bien l'utilité.
    Moi, je faisais toujours ça pour un programme en assembleur. Ceci évite, en cas de variable non (mal) initialisée, de ne pas avoir un fonctionnement aléatoire après un "reset" en fonction du programme exécuté avant . Bref, de partir d'une RAM dans un état toujours identique et connu
    J'aime pas le Grec

  4. #4
    thundertom

    Re : sniteiru

    En effet Daudet, maintenant que tu le dit je trouve que c'est fichtrement une bonne idée. Je le ferai si je me remet à l'asm un jour

    Pour sniteiru...j'ai pas compris pourquoi tu fais un bsf sur ton capteur qui normalement doit être une entrée.

    Ce serait bien si tu pouvais mettre un schéma électrique, qu'on puisse comprendre comment sont câblé tes capteurs
    Fabricando fit faber

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

    Re : sniteiru

    Citation Envoyé par thundertom Voir le message
    je trouve que c'est fichtrement une bonne idée.
    J'ai du pisser une bonne centaine de millier de ligne en assembleur dans ma carrière ... j'ai encore quelques bonnes astuces sous le coude !
    J'aime pas le Grec

  7. #6
    Jack
    Modérateur

    Re : sniteiru

    Merci de respecter les points suivants de la charte par la suite:

    11. Les titres des messages doivent être explicites. Merci d'éviter autant que possible de dériver hors du fil du sujet.
    j'ai modifié le titre pour cette fois.

  8. #7
    inviteb298d239

    Re : programme de robot suiveur de ligne (PIC asm)

    ah merci deja thundertom et daudet78 pour vos reponses et dsl pour le retard puisque suis dans une periode d'exams et ca galere un peu rrrr XD
    bon en ce qui concerne les tris on a pas utilisé puisque on est deja sur la banque 1 donc on a travaillé directement avec les ports A et B ( indirectement ) .
    pour l'operateur banksel trop interessant XD j'y jetterai un coup d'oeil sur apres
    et pour le BSF du capteur c est une sorte d initialisation specifique qu'on va utiliser tout au long du programme.
    sinon pour le shema electronique je ne l ai pas actuellement sur ce pc dsl ^^' parce qu'on fait un travail de cellules et que je suis dans l info un peu XD mais je le mettrai sur le forum demain

  9. #8
    schmo

    Re : programme de robot suiveur de ligne (PIC asm)

    salut,

    Une question en passant:

    Dans ta boucle start, il n'y a pas d'instruction BCF MOTEUR, est-ce normal ?
    Ces 2 sorties de commande de moteurs sont toujours à 1. Comment dans ce cas, fais tu pour arrêter un moteur..

    A première vue l'initialisation des registres d'entree/sortie TRIS sont fait avec les 4 instructions :
    bcf MOTD
    bcf MOTG
    bSf CAPD
    bSf CAPG
    car elle accéde au registres portA,B en banque 1 (donc registres TRIS)
    Est-ce un coup de chance ????......

    A+

  10. #9
    inviteb298d239

    Re : programme de robot suiveur de ligne (PIC asm)

    salut XD

    @ schmo ah we t as de ce coté faute de manque d attention pfff :/ merci le programme est censé etre de la façon

    ;***************************** ****************************** **********
    ; PROGRAMME PRINCIPAL *
    ;***************************** ****************************** **********
    start

    boucle3
    MOTGON
    MOTDON
    btfsc CAPG
    goto boucle2
    btfsc CAPD
    goto boucle1
    goto boucle3

    boucle1
    MOTGOFF
    MOTDON
    btfsc CAPD
    goto boucle1
    goto boucle3


    boucle2
    MOTDOFF
    MOTGON
    btfsc CAPG
    goto boucle2
    goto boucle3



    goto start ; boucler

    END ; directive fin de programme

    et concernant l initialisation deja on comptait sur le debut avec la banque 1 mais a ton avis travailler avec tris dans tout les cas c'est mieux non ???

    @thundertom et voila le shema electronique
    Images attachées Images attachées  

  11. #10
    schmo

    Re : programme de robot suiveur de ligne (PIC asm)

    salut,

    Pour ce qui est de la manière d'initialiser les registres, il est préférable d'écrire
    Code:
    banksel TRISA
    MOVLW B'11111100'  ; positione RA0,RA1 en sortie, le reste en
    MOVWF TRISA           ;entrée
    MOVLW  B'11111111' ; RB2,RB3 sont positionnées en entrée
    MOVWF TRISB
    Et quand tu accéde au port, tu écris
    Code:
    banksel PORTA
    BCF   PORTA,0    ; mise a 0 de la sortie RA0
    BTFSS PORTB,2  ; lecture de l'entrée RB3
    ...
    Comme ça, ton programme est plus lisible, donc plus facilement debuggable.

    sinon, ton programme à l'air de faire ce que tu à décris.

    A+

  12. #11
    inviteb298d239

    Re : programme de robot suiveur de ligne (PIC asm)

    ah merci mais pour le teste c est BTFSS ou BTFSC ??? hmm

  13. #12
    schmo

    Re : programme de robot suiveur de ligne (PIC asm)

    salut,

    C'est suivant ce que tu veux tester!!
    Ce que j'ai écrit c'est juste en exemple...
    BTFSS: skip if set
    BTFSC: skip if clear

    A+

  14. #13
    invite428d4315

    Re : programme de robot suiveur de ligne (PIC asm)

    merciiii svp quelqu qui peur dzsigner ce schema parsque j'ai pouvais pas lire les valeur des résistance

Découvrez nos comparatifs produits sur l'informatique et les technologies.