Pic 16F877 Conv. Analog / Num
Répondre à la discussion
Affichage des résultats 1 à 27 sur 27

Pic 16F877 Conv. Analog / Num



  1. #1
    juju_du_26

    Pic 16F877 Conv. Analog / Num


    ------

    Bonjour a tous
    J'essaye pour la 1ere fois le convertisseur Analogique / Numérique sur un pic 16F877 .

    Pour ceci , j'ai en entrée de RA0 / AN0 un pont diviseur comme ceci
    5V > CTN 10K > Résistance 10K > masse 0V
    L'entrée étant connectée au milieu du pont .

    J'ai mis des leds sur le portC du pic pour voir le résultat de la convertion
    mais je n'ai aucun changement quel que soit la tension d'entrée ...

    L'init du pic

    Code:
    init
    
    	bsf	    STATUS,RP0	    ; aller en bank1
    
    ; PORTA en entree analogique ...
    
    	movlw	b'00000000'  ; entrees analogiques
    	movwf	ADCON1        ; resultat 8 bits sur ADRESH 
    	movlw	b'00000000'  ; 
    	movwf	TRISA           ; portA en entree
    	movlw	b'01000000'  ; 
    	movwf	ADCON0
    
    
    	movlw	b'00000000'	; portB en
    	movwf	TRISB		; sortie 
    
    	movlw	b'00000000'	; portC en
    	movwf	TRISC		; sortie 
    
    	movlw	b'00000000'	; portD en
    	movwf	TRISD		; sortie 
    
    	movlw	b'000'	        ; portE en
    	movwf	TRISE               ; sortie
    
    	bcf	    STATUS,RP0	        ; aller en bank0	
    		
    	clrf	PORTB
    	clrf	PORTC
    	clrf	PORTD
    	clrf	PORTE
    
    	return
    Et le prog. principal faisant la convertion et l'affichage

    Code:
    
    start			; prog principal 
    
    	call	tempo500ms		; tempo
    
    ; convertion analogyque numerique
    
    	bsf     ADCON0,ADON	   ; mise en route du CAN
    
    	bcf 	ADCON0,CHS2     ; CHS2 = 0
    	bcf 	ADCON0,CHS1     ; CHS1 = 0     choix du canal
    	bcf 	ADCON0,CHS0     ; CHS0 = 0        ici AN0
    
    	call	tempo_20us
    
    	bsf 	ADCON0,GO       ; lancement de la conversion
    
    fin_can
    	btfsc 	ADCON0,GO       ; test fin de convertion	
    	goto	fin_can
    
    	movlw	ADRESH	
    	movwf	temperature     ; copie resultat dans temperature
    	movwf	PORTC           ; et affiche sur le PORTC
    
    	bcf	ADCON0,ADON     ; arret du CAN
    
    
    	goto  start
    Merci de vos remarques
    Bonne journée

    -----

  2. #2
    invitef86a6203

    Re : Pic 16F877 Conv. Analog / Num

    Code:
    	movlw	b'00000000'  ; 
    	movwf	TRISA           ; portA en entree
    En Entrée on met des 1, pas des 0 sur le port A

    Ces lignes sont d'ailleurs inutiles puisqu'au reset les port sont en entrées.
    ça empêche juste de fonctionner LOL

  3. #3
    antek

    Re : Pic 16F877 Conv. Analog / Num

    La conversion n'est pas sur 8 bit, sur 10 bit
    ADCON0 est en banque 0.

    Tu utilises quel IDE ?

  4. #4
    juju_du_26

    Re : Pic 16F877 Conv. Analog / Num

    Merci a vous 2 pour vos réponses rapides
    J'ai modifié mon init comme ceci

    Code:
    init
    
    	bsf	    STATUS,RP0	     ; aller en bank1
    
    ; PORTA en entree analogique ...
    
    	movlw	b'00000000'  ; entrees analogiques
    	movwf	ADCON1        ; resultat 8 bits sur ADRESH 
    	movlw	b'11111111'  ; 
    	movwf	TRISA	    ; portA en entree
    
    
    	movlw	b'00000000'	;
    	movwf	TRISB		; 
    
    	movlw	b'00000000'	;
    	movwf	TRISC		; 
    
    	movlw	b'00000000'	;
    	movwf	TRISD		;
    
    	movlw	b'000'
    	movwf	TRISE 
    
    
    	bcf	    STATUS,RP0	; aller en bank0	
    
    
    	movlw	b'01000000'  ; 
    	movwf	ADCON0
    
    		
    	clrf	PORTB
    	clrf	PORTC
    	clrf	PORTD
    	clrf	PORTE
    
    	return
    Je ne veux utiliser que les 8 bits de poids fort qui se trouvent dans ADRESH
    Et j'utilise MPLAB V8.85

    Merci
    Dernière modification par juju_du_26 ; 05/11/2015 à 10h32.

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

    Re : Pic 16F877 Conv. Analog / Num

    Et ça marche ?
    Utilise le simulateur de MPLAB pour débeuguer au début.

  7. #6
    juju_du_26

    Re : Pic 16F877 Conv. Analog / Num

    Non , ca ne marche toujours pas .
    Quelle que soit la tension a l'entrée j'ai toujours '00011110' sur le portC .
    Merci

  8. #7
    invitef86a6203

    Re : Pic 16F877 Conv. Analog / Num

    Met un potentiomètre plutôt qu'une CTN pour les tests
    fait clignoter une led pour voir si ça vie.
    inutile d'arrêter le ADOn à chaque passage.

  9. #8
    antek

    Re : Pic 16F877 Conv. Analog / Num

    Citation Envoyé par juju_du_26 Voir le message
    Non , ca ne marche toujours pas .
    Quelle que soit la tension a l'entrée j'ai toujours '00011110' sur le portC .
    Merci
    Et qu'est-ce que tu as dans ADRESH ?

  10. #9
    antek

    Re : Pic 16F877 Conv. Analog / Num

    Citation Envoyé par freepicbasic Voir le message
    Met un potentiomètre plutôt qu'une CTN pour les tests
    +1

    Tu es bien en bank0 dans start ?

  11. #10
    invitef86a6203

    Re : Pic 16F877 Conv. Analog / Num

    il met sur le portc , apparemment la ctn ne bouge pas.
    Il faut y aller au fer à souder pour que ça réagisse.

  12. #11
    antek

    Re : Pic 16F877 Conv. Analog / Num

    Tu es en Fosc/8 pour l'horloge convertisseur.
    Fosc est bien inférieure à 5 MHz ?

  13. #12
    juju_du_26

    Re : Pic 16F877 Conv. Analog / Num

    Pour essayer de répondre a toutes vos questions

    Le pic tourne avec un quartz de 4Mhz
    J'arrive a faire clignoter une led ( du portC)
    J'ai mis un potentiomètre a la place de la ctn

    Et ... aucun changement

  14. #13
    invitef86a6203

    Re : Pic 16F877 Conv. Analog / Num

    la tension change sur la pin ?
    c'est bien la bonne pin ?

    repost tout ton code complet

  15. #14
    antek

    Re : Pic 16F877 Conv. Analog / Num

    Citation Envoyé par juju_du_26 Voir le message
    Et ... aucun changement
    Et qu'est-ce que tu as dans ADRESH ?

  16. #15
    Gérard

    Re : Pic 16F877 Conv. Analog / Num

    Citation Envoyé par juju_du_26 Voir le message
    Pour essayer de répondre a toutes vos questions

    Le pic tourne avec un quartz de 4Mhz
    J'arrive a faire clignoter une led ( du portC)
    J'ai mis un potentiomètre a la place de la ctn

    Et ... aucun changement
    Quelle est la valeur du potentiomètre?
    L'impédance max ne doit pas dépasser 10K.

  17. #16
    juju_du_26

    Re : Pic 16F877 Conv. Analog / Num

    Je remets le code complet

    Code:
    
    	LIST      p=16F877            ; Définition de processeur
    	#include <p16F877.inc>        ; Définitions des constantes
    
    	__CONFIG   _CP_OFF & _WDTE_OFF & _PWRTE_ON & _XT_OSC
    
    
    ; '__CONFIG' précise les paramètres encodés dans le processeur au moment de
    ; la programmation du processeur. Les définitions sont dans le fichier include.
    ; Voici les valeurs et leurs définitions :
    ;	_CP_ON		Code protection ON : impossible de relire
    ;	_CP_OFF		Code protection OFF
    ;	_PWRTE_ON	Timer reset sur power on en service
    ;	_PWRTE_OFF	Timer reset hors-service
    ;	_WDT_ON		Watch-dog en service
    ;	_WDT_OFF	Watch-dog hors service
    ;	_LP_OSC		Oscillateur quartz basse vitesse
    ;	_XT_OSC		Oscillateur quartz moyenne vitesse
    ;	_HS_OSC		Oscillateur quartz grande vitesse
    ;	_RC_OSC		Oscillateur à réseau RC
    
    
    ;*********************************************************************
    ;                             DEFINE                                 *
    ;*********************************************************************
    
    
    
    
    
    ;*********************************************************************
    ;                   DECLARATIONS DE VARIABLES                        *
    ;*********************************************************************
    
    	CBLOCK 0x20   		; début de la zone variables
    
    temperature : 1
    
    	ENDC
    
    ;**********************************************************************
    ;                      DEMARRAGE SUR RESET                            *
    ;**********************************************************************
    
    
    	org 	0x000 		; Adresse de départ après reset
      	call    init		; Adresse 0: initialiser
    	goto	start		; Debut du prog principal
    
    
    ;**********************************************************************
    ;                       INITIALISATIONS                               *
    ;**********************************************************************
    
    init
    
    	bsf	STATUS,RP0	; aller en bank1
    
    ; PORTA en entree analogique ...
    
    	movlw	b'00000000'    ; entrees analogiques
    	movwf	ADCON1         ; resultat 8 bits sur ADRESH 
    	movlw	b'11111111'    ; 
    	movwf	TRISA	       ; portA en entree
    
    
    	movlw	b'00000000'	;
    	movwf	TRISB		; 
    
    	movlw	b'00000000'	;
    	movwf	TRISC		; 
    
    	movlw	b'00000000'	;
    	movwf	TRISD		;
    
    	movlw	b'000'
    	movwf	TRISE           ; 
    
    	bcf	    STATUS,RP0	; aller en bank0	
    
    
    	movlw	b'01000000'  ; 
    	movwf	ADCON0
    
    		
    	clrf	PORTB
    	clrf	PORTC
    	clrf	PORTD
    	clrf	PORTE
    
    	return
    
    
    ;*********************************************************************
    ;                      PROGRAMME PRINCIPAL                           *
    ;*********************************************************************
    
    
    start			; prog principal 
    
    	call	tempo500ms		; tempo
    
    ; convertion analogyque numerique
    
    	bsf	ADCON0,ADON	; mise en route du CAN
    
    	bcf 	ADCON0,CHS2 ; CHS2 = 0
    	bcf 	ADCON0,CHS1 ; CHS1 = 0     choix du canal
    	bcf 	ADCON0,CHS0 ; CHS0 = 0
    
    	call	tempo_20us
    
    	bsf 	ADCON0,GO       ; lancement de la conversion
    
    fin_can
    	btfsc 	ADCON0,GO		; test fin de convertion	
    	goto	fin_can
    
    	movlw	ADRESH	
    	movwf	temperature      ; copie resultat dans temperature
    	movwf	PORTC
    
    	bcf		ADCON0,ADON		; arret du CAN
    
    	goto  start
    
    
    ;************     SOUS PROGRAMMES  I2C    *****************************
    
    tempo_20us
    	nop
    	nop
    	nop
    	nop
    	nop
    	nop
    	nop
    	nop
    	nop
    	nop
    	nop
    	nop
    	nop
    	nop
    	nop
    	nop
    	nop
    	nop
    	nop
    	nop
    	return
    
    
    tempo500ms		; temporisation de 500 ms
     	call 	 wait0
    	call 	 wait0	  
    	call 	 wait0
     	call 	 wait0
     	return
    
    wait0                    ; Boucles réalisant une tempo élémentaire
     	movlw     .200      ; Charge count1 avec valeur décimale 200
    	movwf     count1
    d1 	movlw    .200      ; Charge count2 avec valeur décimale 200
       	movwf    count2 	
    d2 	decfsz     count2,1  ; décremente et saute ligne suiv. si zero
       	goto        d2        ; si différent de zero           
      	decfsz     count1,1  ; décremente count1 si count2 == zero
    	goto       d1        ; boucle interne si count2 <> zero
    	return
    
    
    	END 			;  fin de programme

    Comment savoir ce qu'il y a dans ADRESH ?
    On ne le copie pas sur le portC en faisant

    Code:
    	movlw	ADRESH	
    	movwf	temperature      ; copie resultat dans temperature
    	movwf	PORTC
    Le potentiomètre utilisé est de 10K
    Merci
    Dernière modification par juju_du_26 ; 05/11/2015 à 17h41.

  18. #17
    invitef86a6203

    Re : Pic 16F877 Conv. Analog / Num

    je ne vois pas d'erreur dans ce code, s'il y a une erreur , elle est ailleurs , comme le code n'est pas complet ...

  19. #18
    juju_du_26

    Re : Pic 16F877 Conv. Analog / Num

    Bonjour
    Pourquoi dis tu que le code n'est pas complet ?
    Pour l'instant j'essaye juste d ' utiliser le CAN que je passe en boucle ...

    Pour 0V en entrée je devrais avoir b' 00000000 '
    Pour 5V en entrée je devrais avoir b' 11111111 '
    Pour toutes valeurs intermédiaires , une valeur qui varie , Non ?

    Merci

  20. #19
    antek

    Re : Pic 16F877 Conv. Analog / Num

    Pour 4 MHz je mettrais HS_OSC

  21. #20
    antek

    Re : Pic 16F877 Conv. Analog / Num

    Citation Envoyé par juju_du_26 Voir le message
    Pourquoi dis tu que le code n'est pas complet ?
    On ne voit pas la déclaration de toutes les variables.

  22. #21
    antek

    Re : Pic 16F877 Conv. Analog / Num

    Citation Envoyé par juju_du_26 Voir le message
    Comment savoir ce qu'il y a dans ADRESH ?
    On ne le copie pas sur le portC en faisant
    En utilisant le simulateur de MPLAB tu saurais si la conversion s'est déroulée correctement.
    Que fait l'instruction movlw ADRESH ?

  23. #22
    antek

    Re : Pic 16F877 Conv. Analog / Num

    Et enfin,
    quels messages sort l'assemblage ?

  24. #23
    juju_du_26

    Re : Pic 16F877 Conv. Analog / Num

    Re
    Pour faire des essais du convertisseur je n'ai pas besoin d'autres variables .
    Y en a qu'une " temperature "

    Comment utilise - t -on le simulateur de MPLAB ?

    Il n'y a aucune erreur a l'assemblage

    Code:
    Release build of project `C:\Prog_pic\TestCAN\TestCAN.mcp' started.
    Language tool versions: MPASMWIN.exe v5.45, mplink.exe v4.43, mplib.exe v4.43
    Fri Nov 06 09:20:18 2015
    ----------------------------------------------------------------------
    Make: The target "C:\Prog_pic\TestCAN\TestCAN.o" is up to date.
    Make: The target "C:\Prog_pic\TestCAN\TestCAN.cof" is up to date.
    Loaded C:\Prog_pic\TestCAN\TestCAN.cof.
    ----------------------------------------------------------------------
    Release build of project `C:\Prog_pic\TestCAN\TestCAN.mcp' succeeded.
    Language tool versions: MPASMWIN.exe v5.45, mplink.exe v4.43, mplib.exe v4.43
    Fri Nov 06 09:20:18 2015
    ----------------------------------------------------------------------
    BUILD SUCCEEDED
    Que fait l'instruction movlw ADRESH ?

    Elle copie ce qu'il y a dans ADRESH dans W ... non ?
    Ou je fais une erreur a ce niveau la ?


    Merci

  25. #24
    antek

    Re : Pic 16F877 Conv. Analog / Num

    La variable count n'est pas déclarée. Quand on utilise une variable, il FAUT la déclarer.
    Pour le simulateur vois dans le cours de BIGONOFF, c'est clairement expliqué.

    movlw place une valeur littérale dans w. ADRESH n'est pas une valeur littérale.
    Toi, tu veux placer le CONTENU de ADRESH dans w.

    -> movf ADRESH,w

  26. #25
    invitef86a6203

    Re : Pic 16F877 Conv. Analog / Num

    ENORME ERREUR!!!!
    J'avais pas réalisé !


    un movlw à la place d'un movf ADRESH,W

    Code:
    movlw	ADRESH	
    	movwf	temperature      ; copie resultat dans temperature
    	movwf	PORTC

  27. #26
    juju_du_26

    Re : Pic 16F877 Conv. Analog / Num

    Un GRAND merci a toi ANTEK
    Ca marche !!! je vois bien les leds défiler en fonction de l'entrée
    L'erreur venait effectivement du movlw a la place du movf

    Pour les variables . petit problème de copier / coller en plusieurs fois
    Evidemment que les variables count1 et count2 sont déclarées

    Encore MERCI a toi !!

    Edit : Merci a toi aussi freepicbasic , pour tes conseils
    Dernière modification par juju_du_26 ; 06/11/2015 à 10h03.

  28. #27
    antek

    Re : Pic 16F877 Conv. Analog / Num

    Citation Envoyé par antek Voir le message
    ADRESH n'est pas une valeur littérale.
    Enfin si un peu !
    L'assembleur comprend que tu veux écrire l'adresse de ADRESH dans w.
    Et comme on ne sait pas quelle base est utilisée par défaut . . .
    Toujours indiquer la base par défaut dans l'en-tête -> radix machinchose

Discussions similaires

  1. Theo.Conv.Dominée
    Par invite47c02d3b dans le forum Mathématiques du supérieur
    Réponses: 14
    Dernier message: 22/10/2014, 19h59
  2. Théo.Conv.Dominée
    Par invite47c02d3b dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 13/10/2014, 18h29
  3. Conv A/D pic18f4550
    Par invite55f558c3 dans le forum Électronique
    Réponses: 0
    Dernier message: 10/05/2011, 15h37
  4. Analog switch, analog MUX.petite question d'alim
    Par invitee71724f2 dans le forum Électronique
    Réponses: 9
    Dernier message: 03/04/2007, 09h36
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...