Conversion A/N avec 12F675
Répondre à la discussion
Affichage des résultats 1 à 19 sur 19

Conversion A/N avec 12F675



  1. #1
    Gérard

    Conversion A/N avec 12F675


    ------

    Bonjour,
    Je me bats depuis quelques jours avec ce maudit 12F675 et son CAN.
    Où pourrais-je trouver des exemples de mise en oeuvre.

    C'est vrai que je n'ai pas été voir chez le constructeur.
    Si quelqu'un a un lien, merci d'avance.

    -----

  2. #2
    invite3a1051d7

    Re : Conversion A/N avec 12F675

    bonjour,
    peux tu preciser ce que tu cherches comme exemple
    si tu veux mesurer une tension et l'afficher sur un LCD je peux surement t'aider avec un exemple .

    cordialement
    Alain

  3. #3
    Gérard

    Re : Conversion A/N avec 12F675

    Bonjour Alain,
    Mon souhait :
    convertir une valeur analogique et suivant le cas, 3 possibilités :
    1 allumage LED verte
    2 allumage LED verte + LED rouge (orange en fait, il s'agit d'une LED bicolore)
    3 allumage LED rouge

    valeur ana en pin5 (AN2)
    les LED en 2 et 3
    4 : 10K vers + alim (MCLR classique)

    Merci d'avance.

  4. #4
    invite5637435c

    Re : Conversion A/N avec 12F675

    Salut Gérard,

    je sais que tu programmes avec ProtonBasic, mais voici en C un bout de code qui pourra te servir selon l'endroit où tu buttes, j'ai commenté je pense suffisamment.

    Code:
    unsigned int result_AD;
    
    void main() 
    {
    
      GPIO = 0;         // GPIO mis à 0
      CMCON = 7;        // fonction comparateur désactivé <CM2:CM0> à 1
      TRISIO = 0;       // GPIO en sortie
      TRISIO.ANS2 = 1;  // pin ANS2 en entrée mesure
      ADCON0.VCFG = 0;  // Vdd est Vref
      do {              // boucle répétitive, le programme tourne sans cesse dans cette boucle
    
          result_AD = Adc_Read(ANS2);   // conversion A/D temp reçoit le contenu du A/D
          if (result_AD > 900)
            {
              GPIO = 0xFF;  //  toutes les leds sont allumées
            }
          else if  (result_AD > 400) GPIO = 0b11111110;  // la led sur GPIO.F0 est éteintes les autres allumées
                        
          else  if (result_AD > 200)  GPIO = 0b11111101;;  // la led sur GPIO.F1 est éteinte les autres sont allumées            
                
          } while (1);  
    
    }
    j'espère que ça va t'aider.
    @+

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

    Re : Conversion A/N avec 12F675

    bonjour,
    je regarde pour te faire un bout de programme (commenté )en basic
    laisse moi 2 ou 3 jour je suis absent ce week end
    cordialement
    Alain

  7. #6
    invite3a1051d7

    Re : Conversion A/N avec 12F675

    bonjour,
    j'ai rédigé rapidement ce bout de code
    j'espère que cela va t'aider

    cordialement
    Alain

    '12F675 lecture d'une tension analogique
    'configuration
    Define CONF_WORD = 0x31e4 ' GP3 en reset
    CMCON = %00000111 ' 111 comparateur hors service
    ADCON0 = %00000010 ' (GP2 est en entrée analogique)
    ' autres possibilitées
    ' 00 A/D en AN0
    ' 01 A/D en AN1
    ' 10 A/D en AN2
    ' 11 A/D en AN3

    TRISIO = %00001100 ' 1= en entrée
    GPIO = %00000000 'tout est mis à 0

    ANSEL = %00000100 ' bit 0-3 ,1 analog 0 Digital
    ' bit 4-7 type oscillation

    WPU = %00000000 ' 1= pull up ( si OPTION_REG b7 =0 )
    OPTION_REG = %00000000 'bit 7 0=pul up autorise
    Symbol vert = GPIO.4
    Symbol orange = GPIO.5
    Dim valeur As Word '(valeur entre 0 et 1024)
    Dim t1 As Word
    Dim t2 As Word
    'bornes du test
    t1 = 410 ' equivalent à 5*1024/410= 2Volts
    t2 = 820 ' equivalent à 5*1024/820= 4Volts
    ' initialisation
    'extinction des 2 LED
    vert = 0
    orange = 0
    'debut du programme
    debut:
    Gosub tension 'mesure de la tension
    WaitUs 10 'c'est juste une securité pour que la lecture se fasse bien

    'premier test
    If valeur < 410 Then 'si la tension est inferieur à 2 volts
    vert = 1 'allumer la led verte
    orange = 0 'eteinde la LED orange
    Endif

    'deuxieme test
    If valeur > 410 Then 'si la tension estcomprise entre 2 et 4v
    If valeur < 820 Then
    vert = 0
    orange = 1
    Endif
    Endif

    'troisieme test
    If valeur > 820 Then 'si la tension superieur à 4v
    vert = 1
    orange = 1
    Endif

    Goto debut ' retour pour un autre test

    End

    'le sous programme se mettent après le END
    'sous programme de lecture de tension sur GP2
    tension:
    ADCON0.ADON = 1
    Adcin 2, valeur
    Return

  8. #7
    Gérard

    Re : Conversion A/N avec 12F675

    Bonjour,
    Tout d'abord, merci pour votre implication.
    Je vous donne l'initialisation :

    Code:
    INIT:		
    		ASM
    		
    		bank0
    		clrf	GPIO			;05h
    		
    		bank1
    		Call	3FFh			;recup valeur calibration
    		movwf	OSCCAL			;090h calibration oscillateur
    		bsf	TRISIO,2		;entrée ana
    		bcf	TRISIO,5		;sortie LED verte
    		bcf	TRISIO,4		;sortie LED rouge
    		movlf	11011111b,OPTION_REG	;081h pas pullup, WDT,presc 1/128
    		movlf	1,PIE1			;08Ch IRQ TMR1 enable
    		clrf	WPU			;095h pullup off
    		clrf	IOCB			;096h IRQ on change disable
    		clrf	VRCON			;099h volt ref ctrl reg
    		clrf	EECON1			;09Ch eeprom disable
    		movlf	00110100b,ANSEL		;09Fh AN2 en entrée ana  00110100b
    
    		bank0
    		bsf	ADCON0,7		;justif à droite
    		movlf	11000000b,INTCON	;00Bh GIE, PEIE, GPIE=0 pas irq on change
    		clrf	PIR1			;0C0h flag IRQ périfériques
    		clrf	T1CON			;010h timer1 a l'arret, prescaler = 1
    		movlf	07h,CMCON		;019h comparateur ana : disable
    		
    		ENDASM

    Le code pour la conversion et le traitement :

    Code:
    ;*************************************************************
    ;		SOUS PROGRAMME Acq_VBat
    ;*************************************************************
    		
    Acq_VBat:	
    		Moy_VBat = ADIn 2
    		
    		DelayMS		10
    	
    		Return
    		
    ;*************************************************************
    ;		SOUS PROGRAMME Eval_VBat
    ;*************************************************************
    		
    Eval_VBat:	
                    LED_V = 0
                    LED_R = 0
                    
            	Select Moy_VBat
    	
            	Case < 650
                            LED_R = 1
                    Case 650 To 750
                            LED_R = 1
                            LED_V = 1
                    Case > 750
                            LED_V =1
                    EndSelect
                    
    		Return

    Moy_VBat est défini comme word (16 bit)
    LED_R = GPIO.4
    LED_V = GPIO.4

    J'ai volontairement allégé le prog pour les essais. En fait, je fais 8 acquisitions puis je calcule la moyenne qui elle est comparée aux valeurs 650 et 750.

    J'ai transcrit ce bout de code pour un 877 et ça fonctionne !
    En simu avec MPLAB, le calcul de la moyenne et les comparaisons fonctionnenent aussi.
    J'ai essayé le prog sur 2 PIC 12F675 différents sans résultat.

    Je fonde tous mes espoirs sur votre collaboration avant ou voire

    Merci d'avance.

  9. #8
    Gérard

    Re : Conversion A/N avec 12F675

    Evidemment il fallait lire :
    LED_V = GPIO.5

  10. #9
    invite5637435c

    Re : Conversion A/N avec 12F675

    Il me semble que ANSEL n'est pas bien configuré.

    Tu peux essayer avec ANSEL=00100100b pour voir?

    @+

  11. #10
    invite3a1051d7

    Re : Conversion A/N avec 12F675

    bonjour,
    j'ai fais un petit programme (sous excel) sur mon site pour aider à la configuration du 12F675
    si cela peux aider
    cordialement
    Alain

  12. #11
    invitee86643f9

    Re : Conversion A/N avec 12F675

    Bonjour,
    Une remarque à voir ici:
    http://forums.futura-sciences.com/post1491179-5.html

  13. #12
    Gérard

    Re : Conversion A/N avec 12F675

    Tout d'abord, merci à vous tous.

    Hulk : ANSEL est configuré

    Alain : j'ai essayé ton fichier et suis arrivé aux mêmes valeurs que dans mon init

    maxitec : je vais faire un essai (mais plus ce soir) avec tout le registre GPIO en une seule fois.
    Je n'ais pas encore entendu parlé de ce bug.

    Suite aux prochains essais cette semaine.

  14. #13
    Gérard

    Re : Conversion A/N avec 12F675

    Bonjour,
    Alainav1 m'a envoyé un fichier en MP et au 1er essai, çà marche.
    Je tenais à le remercier en public

    Concernant mon problème, je pense que c'est parce que je n'ai pas mis le bit0 à 1 (ADON).
    Sur le 16F877, je ne le fais pas non plus et pourtant je n'ai pas de souci de ce côté là.

    Je confirmerai encore mes dires.

    Encore merci à vous tous.

  15. #14
    RISC

    Re : Conversion A/N avec 12F675

    Gérard,

    Le bit ADON est indispensable. C'est la mise sous tension de la cellule du convertisseur A/N. Si ce bit n'est pas activé je pense qu'il est impossible pour un PIC de faire de la conversion A/N....quelque soit le modèle.
    Il faut surtout le mettre à 0 avant d'aller en standby sans quoi il faut ajouter un courant permanent non négligeable...

    a+

  16. #15
    Gérard

    Re : Conversion A/N avec 12F675

    Citation Envoyé par RISC Voir le message
    Gérard,

    Le bit ADON est indispensable. C'est la mise sous tension de la cellule du convertisseur A/N. Si ce bit n'est pas activé je pense qu'il est impossible pour un PIC de faire de la conversion A/N....quelque soit le modèle.
    Il faut surtout le mettre à 0 avant d'aller en standby sans quoi il faut ajouter un courant permanent non négligeable...

    a+
    Bonjour RISC,
    Je pense que tu dois avoir raison, mais j'ai fait un essai la semaine dernière (avec un 877A) et je suis sûr de ne pas avoir mis ce bit à 1. Ceci n'est totalement incompréhensible.

    Le même prog (avec aménagements pour l'autre µC) sur le 12F675 n'a jamais fonctionné.

    Les voies de l'informatique sont comme les voies du Seigneur .... impénétrables.

  17. #16
    invite5637435c

    Re : Conversion A/N avec 12F675

    Je ne suis pas convaincu à 100% même si cela reste logique.

    Ce qui pose toujours un soucis dans la résolution de ce type de problème, c'est qu'on ne sait jamais ce que la couche haut niveau fait ou ne fait pas.
    Par exemple la fonction privé permettant de faire la mesure dans ProtonBasic déclenchent-elle ADON=1 où pas?
    Oui probablement mais dans ce cas pourquoi ne positionne-t-elle pas ANSEL automatiquement ainsi que le bit de justification (qui te dit qu'il sera forcément à droite?).
    Donc mettre de l'assembleur dans un compilo comme Proton ou MikroC est dangereux, on ne sait pas vraiment où on met les pieds.
    Par exemple avec MikroC, on ne gère rien du tout, c'est la fonction qui se débrouille toute seule, donc prudence avant d'aller y mettre une quelconque ligne d'assembleur.
    Pourquoi d'ailleurs n'as-tu pas tout fait en assembleur sur ce petit µC?

    @+ et bon montage.

  18. #17
    Gérard

    Re : Conversion A/N avec 12F675

    Citation Envoyé par HULK28 Voir le message
    Je ne suis pas convaincu à 100% même si cela reste logique.

    Ce qui pose toujours un soucis dans la résolution de ce type de problème, c'est qu'on ne sait jamais ce que la couche haut niveau fait ou ne fait pas.
    Par exemple la fonction privé permettant de faire la mesure dans ProtonBasic déclenchent-elle ADON=1 où pas?
    Oui probablement mais dans ce cas pourquoi ne positionne-t-elle pas ANSEL automatiquement ainsi que le bit de justification (qui te dit qu'il sera forcément à droite?).
    Donc mettre de l'assembleur dans un compilo comme Proton ou MikroC est dangereux, on ne sait pas vraiment où on met les pieds.
    Par exemple avec MikroC, on ne gère rien du tout, c'est la fonction qui se débrouille toute seule, donc prudence avant d'aller y mettre une quelconque ligne d'assembleur.
    Pourquoi d'ailleurs n'as-tu pas tout fait en assembleur sur ce petit µC?

    @+ et bon montage.
    Bonjour JY,
    Justement, j'ai regardé le fichier .LST et ne voit pas où ADON est positionné, ni dans le fichier 16F877 (qui fonctionne), ni dans le fichier 12F675 (qui ne fonctionne pas).

    Concernant ANSEL :
    ADCS 011 --> FRC, ne devrait pas être gênant
    ANS 0100 --> AN2 en analogique
    donc chez moi ANCEL = 00110100b
    et ADCON0 = 10001000b

    et là parce que dans son fichier Alain écrit :
    ADCON0 = %00000010 ' (GP2 est en entrée analogique)
    or les bit 2 et 3 à 0 mettent AN0 en entrée ana ????

    Merci à tous pour votre implication.

  19. #18
    Gérard

    Re : Conversion A/N avec 12F675

    Bonjour,
    Ceci est un appel au secours.
    Ce matin je me suis encore débattu avec ce fichu 12F675 sans résultat.

    Alain, si tu pouvais m'envoyer le source et me dire avec quel compilateur il a été compilé que je puisse continuer mes essais ........... avant .

    Merci d'avance.

  20. #19
    invite3a1051d7

    Re : Conversion A/N avec 12F675

    bonjour,
    le source se trouve dans un des posts précédents
    j'utilise
    http://www.oshonsoft.com/pic.html
    http://www.oshonsoft.com/picexamples.html

    cordialement
    alain

Discussions similaires

  1. problème de port avec PIC 12F675
    Par invite5413a15b dans le forum Électronique
    Réponses: 4
    Dernier message: 16/01/2008, 12h11
  2. Débutant en Mikroibasic et pbs avec un 12F675
    Par invite1550effc dans le forum Électronique
    Réponses: 6
    Dernier message: 09/01/2008, 21h57
  3. Conversion A/D avec un PIC
    Par schneiderj dans le forum Électronique
    Réponses: 3
    Dernier message: 01/12/2007, 22h25
  4. conversion avec un pic16F877
    Par invite817b2e6f dans le forum Électronique
    Réponses: 4
    Dernier message: 06/12/2006, 22h55
  5. conversion A/D avec un pic
    Par invite3c59dc04 dans le forum Électronique
    Réponses: 7
    Dernier message: 08/05/2006, 16h46
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...