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.
-----
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.
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
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.
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.
j'espère que ça va t'aider.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); }
@+
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
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
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.
Evidemment il fallait lire :
LED_V = GPIO.5
Il me semble que ANSEL n'est pas bien configuré.
Tu peux essayer avec ANSEL=00100100b pour voir?
@+
bonjour,
j'ai fais un petit programme (sous excel) sur mon site pour aider à la configuration du 12F675
si cela peux aider
cordialement
Alain
Bonjour,
Une remarque à voir ici:
http://forums.futura-sciences.com/post1491179-5.html
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.
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.
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,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+
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.
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,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.
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.
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.
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