CYR Frédéric
DERAMAIX Guillaume
VARIN Olivier
EL 211 Convertisseur Sigma Delta
Rapport de TP
Le but de ces séances de TP est de programmer un PIC16F84 pour l’acquisition de la
sortie d’un modulateur sigma delta. Nous avons donc chercher à compter, pendant un temps
donné par une horloge, le nombre de fois où SL ( Serial Line , sortie du modulateur sigma
delta) est à l’état haut de façon à pouvoir par la suite déduire le rapport cyclique de SL. Le
signal d’horloge du modulateur sigma delta est généré par un Timer intégré au PIC16F84. A
chaque front montant de notre horloge, nous devons regarder l’état de SL. L’acquisition,
déclenchée par une pression sur le bouton A0, lance le timer pour 1000 coups d’horloge.
Chaque coup d’horloge lance un programme d’interruption, qui va changer l’état du signal
d’horloge sortant, incrémenter un registre de comptage du nombre d’interruptions, et
incrémenter un des registres de comptage du nombre d’états hauts de SL. On désarme les
interruptions au bout de 1000 coups d’horloge, et on affiche le résultat de l’acquisition, c'est-à-
dire le nombre de SL.
Problèmes rencontrés :
Nous avons eu de gros problème pour comprendre le fonctionnement du PIC. Le langage
bien que proche de celui de l’assembleur a des particularité qui furent un obstacle a la
programmation. C’est pour cela que nous n’avons pu réaliser que l’affichage sur l’écran
LCD
Programme
__CONFIG H'3FF9' ; XT mode
#DEFINE PAGE0 BCF STATUS,5
#DEFINE PAGE1 BSF STATUS,5
OPTION_REG EQU H'81'
PCL EQU H'02'
STATUS EQU H'03'
PORTA EQU H'05'
TRISA EQU H'85'
PORTB EQU H'06'
TRISB EQU H'86'
INTCON EQU H'0B'
compteur1 EQU H'20' ;compteur 1
compteur2 EQU H'21' ;compteur 2 (pour le LCD)
CLKCNT EQU H'22' ;compteur 125 secs
stockage EQU H'27' ;stockage de la valeur à envoyer dans lCD
RSLINE EQU H'2F' ;bit 4 du RS line , permet de choisir
;d'envoyer des données ou des instructions (data 1, instruction 0)
W EQU 0
F EQU 1
ORG 0 ;Vecteur reset
GOTO 5 ;Va au début du programme
GOTO 5 ;Va au début du programme
ORG 5 ;Adresse début programme
;*********************************************************************************
;
;initialisation du LCD
;
CLRF PORTB
PAGE1
CLRF TRISB ;Initialisation du port b
MOVLW B'00000110' ;set timer ratio 1:128
MOVWF OPTION_REG
PAGE0
GOTO debutprog
INITLCD ADDWF PCL,F ;initialisation du LCD
RETLW B'00110011'
RETLW B'00110011'
RETLW B'00110010'
RETLW B'00101100'
RETLW B'00000110'
RETLW B'00001100'
RETLW B'00000001'
RETLW B'00000010'
;fin initialisation
STARTPROG CLRF compteur1 ;initialise la boucle du LCD
CLRF RSLINE ;clear RS line, pour envoi d'instructions (bit 4)
;boucle de configuration
LOOP1 MOVF compteur1,W ;met valeur de la boucle registre de travail
CALL INITLCD ;saisie d'une ligne de configuration
CALL sendLCD ;envoi au LCD
INCF compteur1,F ;incrémentation
BTFSS compteur1,3 ;test si 8ème boucle
GOTO LOOP1 ;non reboucle
CALL PAUSIT ;oui, délai de 1/5 secondes (tps de travail LCD) puis suite
CLRF compteur1 ;initialise compteur
BSF RSLINE,4 ;set RS line, pour envoi d'instructions (bit 4)
;boucle d'affichage de la première ligne
LOOP2 MOVF compteur1,W ;get table address
CALL DISPLAYWEL ;met une lettre de la 1ère chaîne de caractères dans W
CALL sendLCD ;affichage de cette lettre
INCF compteur1,F ;incrementation de la lettre
BTFSS compteur1,4 ;test si 8ème lettre
GOTO LOOP2 ;non => reboucle
CALL PAUSIT ;oui => pause
CLRF RSLINE ;initialisation RSline pour envoi d'instructions
MOVLW B'11000000' ;met valeur dans W pour passage à la deuxième ligne
CALL sendLCD ;execution
CALL PAUSIT ;attente 1/5s
CLRF compteur1 ;initialise compteur1
BSF RSLINE,4 ;set bit 4 de RSline pour envoyer des adresses
;boucle d'affichage de la deuxième ligne
LOOP3 MOVF compteur1,W ;envoi de boucle dans W
CALL DISPLAYPRESS ;met une lettre de la 2ème chaîne de caractères dans W
CALL sendLCD ;affichage
INCF compteur1,F ;incrémentation de compteur1
BTFSS compteur1,4 ;teste si dernier caractère de la chaîne
GOTO LOOP3 ;non, reboucle
;boucle infinie lorsque la fin du prog est atteinte
LOOP_INF BTFSC PORTA,0
GOTO lasuite ;passe à la suite du programme qui lance un compteur
GOTO LOOP_INF ;boucle infinie
;**************************************************************************************
;sous programme d'envoi des données au LCD
sendLCD MOVWF stockage ;stockage de la valeur a afficher
MOVLW D'50' ;temps minimum d'attente
MOVWF compteur2
attente DECFSZ compteur2,F ;décremente compteur2 de 50 à 0
GOTO attente
CALL SEND ;envoi du MSB
CALL SEND ;envoi du LSB
RETURN
SEND SWAPF stockage,F ;permutation des bits de poids fort et ceux de poids faible
MOVF stockage,W
ANDLW H'0F' ;récupération du bit de poids fort (ou faible)
IORWF RSLINE,W ;OR RSline pour envoyer les paramètres au LCD
MOVWF PORTB ;envoi du bit
BSF PORTB,5
BCF PORTB,5 ;fait passer l'info du W (MSB ou LSB) vers le port b
RETURN
;*********************************************************************************
;sous programme d'attente
PAUSIT MOVLW 5 ;met le compteur à 5
MOVWF CLKCNT ;(pour 1/5ème secondes)
CLRF INTCON ;initialise le drapeau d'interruption
PAUSE ;initial 1/5th sec wait before setting up LCD
BTFSS INTCON,2 ;test si le décomptage est terminé
GOTO PAUSE
RETURN
;************************************************************************************
;chaînes de caractères à afficher
DISPLAYWEL ADDWF PCL,F
RETLW 'B'
RETLW 'i'
RETLW 'e'
RETLW 'n'
RETLW 'v'
RETLW 'e'
RETLW 'n'
RETLW 'u'
RETLW 'e'
RETLW '!'
RETLW ' '
RETLW ' '
RETLW ' '
RETLW ' '
RETLW ' '
RETLW ' '
DISPLAYPRESS ADDWF PCL,F
RETLW 'A'
RETLW 'p'
RETLW 'p'
RETLW 'u'
RETLW 'y'
RETLW 'e'
RETLW 'z'
RETLW ' '
RETLW 's'
RETLW 'u'
RETLW 'r'
RETLW ' '
RETLW ' '
RETLW 'A'
RETLW '0'
RETLW ' '
DISPLAYWAIT ADDWF PCL,F
RETLW 'a'
RETLW 'c'
RETLW 'q'
RETLW 'u'
RETLW 'i'
RETLW 's'
RETLW 't'
RETLW 'i'
RETLW 'o'
RETLW 'n'
RETLW '.'
RETLW '.'
RETLW '.'
RETLW ' '
RETLW ' '
RETLW ' '
;****************************************************************************
;suite du programme qui affiche "en attente d'acquisition..."
CLRF compteur1 ;initialise la boucle du LCD
CLRF RSLINE ;initialisation RSline pour envoi d'instructions
MOVLW B'00000001' ;met valeur dans W pour passage à la deuxième ligne
CALL sendLCD ;execution
CALL PAUSIT ;attente 1/5s
LOOP4 MOVF compteur1,W ;get table address
CALL DISPLAYWAIT ;met une lettre de la 1ère chaîne de caractères dans W
CALL sendLCD ;affichage de cette lettre
INCF compteur1,F ;incrementation de la lettre
BTFSS compteur1,4 ;test si dernière lettre
GOTO LOOP4 ;non, reboucle
CALL PAUSIT ;oui, pause pour laisser du temps au LCD
attente2 goto attente ;boucle sans fin
END
Conclusion
Nous n’avons malheureusement pas pu atteindre les objectifs prévus. En effet, nous
avons eu des difficultés à programmer le PIC, à comprendre comment ça marchait, la syntaxe à
utiliser etc…ce qui est notamment dû aux différences entre le langage de programmation du
PIC et celui du langage assembleur (par exemple pour le registre W). A cela se sont rajoutées
des erreurs de programmation que nous avons eu énormément de mal à débugger et qui nous
ont retardé considérablement.
1 / 5 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !