programmation C du 12f629 - Page 12
Répondre à la discussion
Page 12 sur 14 PremièrePremière 12 DernièreDernière
Affichage des résultats 331 à 360 sur 412

programmation C du 12f629



  1. #331
    mictour

    Re : programmation C du 12f629


    ------

    ... Allons-y pour le jeu questions / réponses (Lol).

    1) Hhollard nous à fait une belle présentation sur ce sujet :
    :
    http://hhollard.club.fr/doc/PIC%20en...xpressions.pdf
    à partir de la page 7. Clair, net et précis.

    2) Oui, çà devrait le faire .. mais n'oublies pas que je n'utilise
    et ne connais pas les 12F !

    3) Le pont diviseur pour tester l'état de la batterie ? Oui, bien sur,
    mais attention à la cohérance entre les registres (CF. note 2).

    Plus ...
    OPTION : (re)lis mon commentaire.
    ADRESH et ADRESL : ou en est-tu ?

    Mais c'est comme ça pour configurer les registres, je ne vais pas m'amuser
    à configurer chaque bit des registres

    -- Comme tu veux...

    Bonne prog, mictour.

    -----

  2. #332
    marc2009

    Re : programmation C du 12f629

    1) je vais lire

    2) ok

    3) donc GP0 doit être mis en analog inputs, et les 2 autres en digital port, bien sûr, TRISIO est configurée pour mettre GP0 en entrée ...

    Sinon, si dès le début je mets GO=1; comme je l'ai mis dans le code, il va faire l'acquisition dès le démarrage du pic, et donc ADRESH et ADRESL contiendront une valeur non ?

    Pour OPTION, oui j'ai lu mais je parlais du bit 6 donc celui qui fait référence aux interruptions ... que je mette 1 ou 0 ne change rien n'est ce pas ? ( puisque je n'utilise pas le timer0 ou ça n'a rien a voir !? )

    ++

  3. #333
    marc2009

    Re : programmation C du 12f629

    1) je viens de lire, mais je ne vois pas ce qu'il entend par "affectation" !?
    ( dans "||" OU Logique )

  4. #334
    mictour

    Re : programmation C du 12f629

    Option : aurais-tu un petit problème avec l'anglais ?
    bit 6 = sens du déclanchement de l'interruption sur GP2,
    donc si tu ne l'utilise pas aucune importance.

    1) je viens de lire, mais je ne vois pas ce qu'il entend par "affectation" !?
    ( dans "||" OU Logique )

    que tu ne peux pas écrire a = (b&&c); et tu m'en vois très .. affecté ! (booof)

    mictour.

  5. #335
    marc2009

    Re : programmation C du 12f629

    Option : aurais-tu un petit problème avec l'anglais ?
    bit 6 = sens du déclanchement de l'interruption sur GP2,
    donc si tu ne l'utilise pas aucune importance.
    C'est ce que je dis depuis avant, et tu me dis pas oui !

    1) je viens de lire, mais je ne vois pas ce qu'il entend par "affectation" !?
    ( dans "||" OU Logique )
    que tu ne peux pas écrire a = (b&&c); et tu m'en vois très .. affecté ! (booof)
    Je connais pas cette notation, enfin je vois pas une application de a= (b&&c);

    Est ce que ça me concerne ? ( j'aimerais faire
    Code:
    ...{
       led=!led;
       if (sec>1200||sec==1200) {sec=1199;moteur=0;}
     }
    ...
    )

  6. #336
    mictour

    Re : programmation C du 12f629

    ... Avec HHolard ça donne :
    if (sec >= 1200) { ..} // supérieur ou égal.
    D'accord ?

    Affectations : regarde l'exemple en bas de la page 10.

    C'est ce que je dis depuis avant, et tu me dis pas oui !
    Ben non !! mictour.

  7. #337
    marc2009

    Re : programmation C du 12f629

    Citation Envoyé par mictour Voir le message
    ... Avec HHolard ça donne :
    if (sec >= 1200) { ..} // supérieur ou égal.
    D'accord ?

    Affectations : regarde l'exemple en bas de la page 10.

    C'est ce que je dis depuis avant, et tu me dis pas oui !
    Ben non !! mictour.
    Ah ok, tout simplement oui ^^

    et si, (re)lis bien ce que j'avais écrit

  8. #338
    marc2009

    Re : programmation C du 12f629

    bon, sinon, tu penses que ça marchera si je mets GO=1; juste en dessous de ADCON0 ? Car en fait, il lui faut environ 2us pour faire la conversion, donc je ne sais pas combien de temps il mettra pour arriver à if (CAN<531) ?! Tu vois ce que je veux dire ?

  9. #339
    mictour

    Re : programmation C du 12f629

    Car en fait, il lui faut environ 2us pour faire la conversion, donc je ne sais pas combien de temps il mettra pour arriver à if (CAN<531) ?! Tu vois ce que je veux dire ? Facile, il mettra le temps nécessaire !

    Revenons encore au datasheet :
    (Oui, je sais, c'est une de mes idées fixes,
    et quand on suit une idée fixe ...)

    7.1.5 STARTING A CONVERSION
    The A/D conversion is initiated by setting the
    GO/DONE bit (ADCON0<1>). When the conversion is
    complete, the A/D module:
    Clears the GO/DONE bit
    • Sets the ADIF flag (PIR1<6>)
    • Generates an interrupt (if enabled)
    Donc,
    GO = 1; lance la conversion et le module remet à zéro ce bit
    quand la conversion est terminée. un simple test nous suffit.
    En CC5X : while (GO);
    Il ne te reste plus alors qu'a récuperer le résultat ... et le traiter.
    Tu as déja tout ça mais pas forcement dans l'ordre ! D'ou le #323.

    Question : disposes-tu d'un simulateur ?
    Bonne soirée, mictour

  10. #340
    marc2009

    Re : programmation C du 12f629

    que va faire
    Code:
    while (GO);
    exactement ? ( j'avais déjà vu ce code sur un site/doc mais je ne me souviens plus ... )

    Il ne te reste plus alors qu'a récuperer le résultat ... et le traiter.
    C'est ce qu'on a fait en déclarant la variable CAN et en mettant ce que contient ADRESH dans les 8 premiers bits de CAN, et ce que contient ADRESL dans les 8 derniers bits de CAN ... non ?

    Tu as déja tout ça mais pas forcement dans l'ordre ! D'ou le #323.
    Ou veux tu en venir ? J'ai fait une erreur ?

    Question : disposes-tu d'un simulateur ?
    Ben il y a le simulateur de MPLAB mais je ne sais pas m'en servir :s

  11. #341
    Gérard

    Re : programmation C du 12f629

    Juste une question pour Marc, as-tu une carte d'application où il serait possible de tester le programme ?

  12. #342
    marc2009

    Re : programmation C du 12f629

    Citation Envoyé par Gérard Voir le message
    Juste une question pour Marc, as-tu une carte d'application où il serait possible de tester le programme ?
    Malheureusement non et je vais expliquer pourquoi. En fait, nous devons faire la liste des composants nécessaires à notre PPE, puis nous donnons cette liste à notre prof d'SI pour qu'il commande les pièces ... mais bon, par précaution, je lui ai envoyé le fichier il y a quelques heures ( il l'a depuis 1 mois ! ) .. j'espère avoir les pièces pour faire le circuit imprimé et alors tester mon programme avec la batterie

    Donc, en gros, c'est à notre prof d'acheter les pièces.

  13. #343
    Gérard

    Re : programmation C du 12f629

    Je t'explique pourquoi la question précédente :
    je trouve le C assez compliqué par rapport au Basic et je me disais que je pourrais écrire un prog, que tu aurais pu essayer.
    Après compilation, un .asm est généré et tu aurais avec les 2 fichiers (.bas et .asm) faire ton prog en C.

  14. #344
    marc2009

    Re : programmation C du 12f629

    Citation Envoyé par Gérard Voir le message
    Je t'explique pourquoi la question précédente :
    je trouve le C assez compliqué par rapport au Basic et je me disais que je pourrais écrire un prog, que tu aurais pu essayer.
    Après compilation, un .asm est généré et tu aurais avec les 2 fichiers (.bas et .asm) faire ton prog en C.
    Comme c'est gentil

    j'aurais ptet les 2 fichiers basic et assembleur mais je doute que ça m'aide à faire mon programme, puisque là ou je bloque n'est qu'au niveau du CAN, plus précisément aux conditions ... car je suis en train d'imaginer toutes les situations, et donc je modifies le programme, enfin j'essaie ... bon mictour m'aide ( enfin j'espère ) mais bon ..

  15. #345
    Gérard

    Re : programmation C du 12f629

    Citation Envoyé par marc2009 Voir le message
    Comme c'est gentil
    Je sais, ma bonté me perdra !

    Citation Envoyé par marc2009 Voir le message
    j'aurais ptet les 2 fichiers basic et assembleur mais je doute que ça m'aide à faire mon programme, puisque là ou je bloque n'est qu'au niveau du CAN, plus précisément aux conditions ... car je suis en train d'imaginer toutes les situations, et donc je modifies le programme, enfin j'essaie ... bon mictour m'aide ( enfin j'espère ) mais bon ..
    Pas sur que les 2 fichiers ne t'aide pas .

  16. #346
    marc2009

    Re : programmation C du 12f629

    Je sais, ma bonté me perdra !
    Mais non

    Pas sur que les 2 fichiers ne t'aide pas .
    Mouai, pas faux, j'ai rien à perdre. Comme ça j'aurai ton aide, et celle de mictour

  17. #347
    Gérard

    Re : programmation C du 12f629

    Peux-tu me donner les affectations des broches du PIC ?

  18. #348
    marc2009

    Re : programmation C du 12f629

    Citation Envoyé par Gérard Voir le message
    Peux-tu me donner les affectations des broches du PIC ?
    Il n'y a que GP1 et GP2 en sortie ( GP1 pour le voyant et gp2 pour le moteur ) et gp0 qui est connectée au pont diviseur, donc la patte est configurée en analogique ...

    Sinon, GP4 et GP5 sont connectées au quartz et GP3 n'est pas utilisée.

  19. #349
    Gérard

    Re : programmation C du 12f629

    Une petite idée de ce que ça donne en Basic.
    Code:
    '****************************************************************
    '*  Name    : Marc2009.BAS                                      *
    '*  Author  : Gérard                                            *
    '*  Date    : 30/04/2009                                        *
    '*  Version : 1.0                                               *
    '*  Notes   :                                                   *
    '*          :                                                   *
    '****************************************************************
    
    ;Le système démarre, attente 20 minutes, démarrage moteur pendant 1 seconde, arret du moteur
    ;attente de nouveau 20 minutes et ainsi de suite ...
    ;Ca c'est le fonctionnement de base.
    ;Si la tension de la batterie passe en dessous d'une certaine tension
    ;--> clignotement du voyant (y en a qu'un seul, il reste allumé dans le fonctionnement de base) 
    ;et "pause" du système 
    ;(donc pas de démarrage moteur tant que la tension n'est pas supérieure à 531 points )
    
    ;Il n'y a que GP1 et GP2 en sortie 
    ;GP1 pour le voyant et GP2 pour le moteur
    ;GP0 qui est connectée au pont diviseur, donc la patte est configurée en analogique ...
    ;GP4 et GP5 sont connectées au quartz et GP3 n'est pas utilisée. 
    
    ;Qz = 3,2768MHz comme horloge principale et entrée TMR1
    ;entrée TMR1 F / 4 = 819 000 Hz
    ;prescaler = 1
    ;TMR1H rechargé avec 128 à chaque IRQ
    ;25 IRQ / s
    
    ;	Definition des broches du 12F675
    ;		1 :	VDD	+
    ;		2 :	GP5	Qz
    ;		3 :	GP4	Qz
    ;		4 :	GP3 In  MCLR
    ;		5 :	GP2	Out moteur
    ;		6 :	GP1	Out voyant
    ;		7 :	GP0	In  ana
    ;		8 :	VSS	-
    		
    ;*************************************************************
    ;		DEFINITION DU PROCESSEUR
    ;*************************************************************
    		
     		Device = 12F675
    
    ;*************************************************************
    ;		MOT DE CONFIGURATION
    ;*************************************************************
    
    		Config   CPD_OFF, CP_OFF, BODEN_OFF, MCLRE_ON, PWRTE_ON, WDT_OFF, XT_OSC
    
    ;*************************************************************
    ;		DECLARATIONS + SYMBOLES + CONSTANTES
    ;*************************************************************
    	
    		Declare ADIN_RES = 10
    		Declare ADIN_TAD = frc
    		Declare ADIN_STIME = 50
    		
    		;entrees
    		;*******
    		
    		Symbol 	V_BAT	=	GPIO.0
    		
    		;sorties
    		;*******
    		
    		Symbol 	OUT_LED	=	GPIO.1
    		Symbol 	OUT_MOT	=	GPIO.2
    		
    ;*************************************************************
    ;		MACROS ASSEMBLEUR
    ;*************************************************************
    		
    		#include "macros.asm"
    		
    ;*************************************************************
    ;		SAUT VERS INTERRUPTION TIMER1
    ;*************************************************************
    		
    on_interrupt	IRQ_TMR1
    		
    ;*************************************************************
    ;		VARIABLES
    ;*************************************************************
    		 
    		 Dim	CPT 			As Word
    		 Dim	i				As Byte
    		 Dim	CPT_IRQ			As Byte
    		 Dim	TabVBat	[4]		As Word 
    		 Dim	SommeVBat		As Word
    		 Dim 	V_Bat_Low		As Bit
    		 
    ;*************************************************************
    ;		DEBUT DU PROGRAMME PRINCIPAL
    ;*************************************************************
    		
    		GoTo	INIT
    
    ;*************************************************************
    ;		ROUTINE D'INTERRUPTION DU TIMER1
    ;*************************************************************
    
    IRQ_TMR1:       
    		ASM
    		
    		bcf			INTCON,GIE						;disable irq
    		bcf			PIR1,TMR1IF						;flag irq TMR1 = 0
    		
    		incf		CPT_IRQ,f
    		cljne		25,CPT_IRQ,RESTORER_CONTEXTE	
    		clrf		CPT_IRQ							;1s est passée
    		
    		incf		CPT,f
    		cljne		1200,CPT,RESTORER_CONTEXTE
    		clrf		CPT
    		ENDASM
    		
    RESTORER_CONTEXTE:
    		
    		Context Restore
    		
    ;*************************************************************
    ;		INITIALISATIONS
    ;*************************************************************
    		 
    INIT:		
    		ASM
    		
    		bank0
    		clrf	GPIO				;05h
    		
    		bank1
    		movlw	000001001b			;5,4 : Qz, 3: MCLR, 2, 1 : OUT, 0 : IN ana
    		movwf	TRISIO				;085h
    		movlf	255,OPTION_REG		;081h pas pullup, WDT,presc 1/128
    		movlf	1,PIE1				;08Ch IRQ TMR1 enable
    		clrf	WPU					;095h pullup off
    		movlf	00000000b,IOCB		;096h IRQ on change disable
    		clrf	VRCON				;099h volt ref ctrl reg
    		clrf	EECON1				;09Ch eeprom disable
    		movlf	00110001,ANSEL		;09Fh AN0
    				
    		bank0
    		movlf	11000000b,INTCON	;GIE et PEIE =1, GPIE=0 pas irq on change
    		clrf	PIR1				;0C0h flag IRQ periferiques
    		clrf	T1CON	 			;010h timer1 à l'arret, prescaler = 1
    		movlf	07h,CMCON			;019h comparateur ana : disable
    		movlf	10000000,ADCON0		;01Fh AN0
    		
    		ENDASM
    			
    		T1CON.0		= 1				;mise en service TMR1
    		
    		CPT			= 0
    		CPT_IRQ		= 0
    		V_Bat_Low	= 0				;par défaut avant 1re mesure VBat
    		OUT_LED		= 1
    		
    ;*************************************************************
    ;		BOUCLE PRINCIPALE
    ;*************************************************************
    		
    Debut:
    		
    		Select CPT
    		  Case 0 To 1199
    		    OUT_MOT = 0
    		  	GoTo Mes_V_Bat
    			
    		  Case 1200
    		    If V_Bat_Low = 1 Then OUT_MOT = 0
    			OUT_MOT = 1
    		
    		EndSelect
    		
    		If V_Bat_Low = 1 Then Cli_LED
    		
    		GoTo Debut
    		
    ;*************************************************************
    ;		S/P ACQUISITION TENSION BATTERIE
    ;*************************************************************
    		
    Mes_V_Bat:
    		
    		For i = 0 To 3							;acquisition de 4 valeurs
    			TabVBat [i]	= ADIn 0				;mesure V_Bat
    			DelayMS		50
    		Next
    	 	
    		SommeVBat	= 0							;init variable
    		For i = 0 To 3
    			SommeVBat = SommeVBat + TabVBat [i]
    		Next
    		
    		GoTo Comparaison
    		
    		Return
    		
    ;*************************************************************
    ;		S/P COMPARAISON
    ;*************************************************************
    		
    Comparaison:
    		
    		If SommeVBat < 2124 Then				;531 * 4
    			OUT_MOT		= 0
    			V_Bat_Low	= 1
    			
    	  		Else V_Bat_Low 	= 0	
    		EndIf
    		
    		Return
    		
    ;*************************************************************
    ;		S/P CLIGNOTEMENT LED
    ;*************************************************************
    		
    Cli_LED:
    		
    		If CPT.0 = 0 Then
    			OUT_LED = 0
    		  Else OUT_LED = 1
    	  	EndIf
    	  	
    	  	Return
    		
    ;*************************************************************
    				
    		End

  20. #350
    marc2009

    Re : programmation C du 12f629

    Merci Gérard

    J'ai compris ton programme, c'est justement ce que je veux faire en C, et ce que j'ai fait jusqu'à maintenant, enfin pas exactement ( mictour n'a pas l'air d'accord ^^ ) mais c'est dans l'idée.

    Sinon, j'ai pris un quartz de 2.0480 MHz donc avec 8 irq / s.

  21. #351
    Gérard

    Re : programmation C du 12f629

    Pas grave pour le Qz, quelques modifs mineures.

  22. #352
    marc2009

    Re : programmation C du 12f629

    OK, je vais continuer avec mon programme en C, et si jamais ça marche pas, je verrai avec ton programme en basic ( une roue de secours )

    reste à attendre mictour

  23. #353
    mictour

    Re : programmation C du 12f629

    Bonjour marc2009,
    Voici une présentation de ton programme à ma sauce,
    avec quelques commentaires.
    Code:
     
    #pragma chip PIC12F675 // déclaration du pic
      // pragma config |= 0x31E1
      // Je ne l'ai toujours pas vérifiée ... mais indispensable !
    #define sortie GPIO
    #define led GPIO2
    #define moteur GPIO1
    uns8 irq;
    uns16 sec;
    uns16 CAN;
    
    #include "int16CXX.h" // fichier interruptions
    //------------------interruption-----------------------
    #pragma origin 4
    
    interrupt timer1( void)
    {
    	int_save_registers
    
    	if (TMR1IF)  // pas vérifié non plus, je fais totalament
    	             // confiance à Gérard.
             {
             ++irq;
             TMR1H=6;
             TMR1IF=0;
             }
           int_restore_registers
    
    void main(void)
    {
      TRISIO = 0b00111100;
      OPTION = 0b11000000;
      sortie = 0b00000010;
      T1CON =  0b00000001;
      CMCON =  0b00000111;
      INTCON = 0b11000000;
      PIE1 =   0b00000001;
      ANSEL =  0b01000001;
      ADCON0 = 0b10000001;
                   // GO=1;   Pourquoi ici ??
      TMR1H=6;
      TMR1L=0;
                   // CAN.high8 = ADRESH;  Idem ??
                   //CAN.low8 =  ADRESL;   idem ??
                   
    for (;;)       //  Boucle infinie ...
     {
      if (irq==8)
      {
       ++sec;
       irq=0;
                   // Lecture de l'entrée A/N ...
       ADON = 1;   // Déja configuré, mais plus lisible ici ...
       GO=1;       // lance la conversion.
       while(GO);  // boucle jusqu'à la fin de la conversion, quand GO repasse à zéro.
                   //  ... et maintenant ?
       }
    
      if (CAN<531)
     {             // Je n'ai pas intégré les dernières modif...
       led=!led;
       if (sec>1200) {moteur=0;}
       if (sec==1200) {sec=1199;}
     }
     else
     {
      if (sec==1200)
       {
        moteur=1;
       }
      if(sec>1200)   // pour être sur de stopper.
       {
        moteur=0;
        sec=0;
       }
      }   // fin de if(CAN<531) ...else.
     }    // fin de for
    }
    Qu'en pense-tu ? mictour.

  24. #354
    marc2009

    Re : programmation C du 12f629

    déjà, je poste mon programme et je commente le tien

    Code:
    #pragma chip PIC12F675 // déclaration du pic
    
    //#pragma config |= 0x31E1
    
    #define sortie GPIO
    #define led GPIO2
    #define moteur GPIO1
    
    uns8 irq;
    
    uns16 sec;
    
    uns16 CAN;
    
    
    
    #include "int16CXX.h" // fichier interruptions
    
    //------------------interruption-----------------------
    
    
    
    #pragma origin 4
    
    
    
    interrupt timer1( void)
    
    {
    
    	int_save_registers    // W, STATUS (and PCLATH if required)
    
    
    
           //char sv_FSR = FSR;  // save FSR if required
    
    
    
           // handle the interrupt (insert application code here)
    
    		if (TMR1IF) {++irq;TMR1H=6;TMR1IF=0;}
    
    
    
           //FSR = sv_FSR;       // restore FSR if saved
    
    
    
           int_restore_registers // W, STATUS (and PCLATH if required)
    
    
    
           /* IMPORTANT : GIE should normally NOT be set or cleared in
    
              the interrupt routine. GIE is AUTOMATICALLY cleared on
    
              interrupt entry by the CPU and set to 1 on exit (by
    
              RETFIE). Setting GIE to 1 inside the interrupt service
    
              routine will cause nested interrupts if an interrupt is
    
              pending. Too deep nesting may crash the program ! */
    
       }
    
    void main(void)
    
    
    
    {
    
    	TRISIO = 0b00111001;
    
    	OPTION = 0b11000000;
    
    	sortie = 0b00000010;
    
    	T1CON =  0b00000001;
    
    	CMCON =  0b00000111;
    
    	INTCON = 0b11000000;
    
    	PIE1 =   0b00000001;
    
    	ANSEL =  0b01000001;
    
    	ADCON0 = 0b10000001;
    	TMR1H=6;
    
    	TMR1L=0;	
    
    	CAN.high8 = ADRESH;
    	CAN.low8 =  ADRESL;
    	CAN=600;
    
    for (;;) {
    	if (irq==8) 
    			{
    
    			++sec;
    			irq=0;
    			GO=1;	// lance la conversion
    			while(GO); // attente que GO passe à 0
    
    			}
    
    
    
    	if (CAN<531)
    
     			{   
    				
    			led!=led;
       			if (sec==1200) {sec=1199;}
       			if (sec>1200) {moteur=0;sec=0;}
    
    
     			}
    
     		else
    
     			{
    
    
      			if (sec==1200) {led=1;moteur=1;}
    
      			if(sec>1200)   // pour être sur de stopper.
    
       				{
        			led=1;
    
        			moteur=0;
    
        			sec=0;
    
       			}
     }	// fin else
    
    
    
    } // fin if ... 
    
    }   // fin for

  25. #355
    marc2009

    Re : programmation C du 12f629

    Alors :

    1) pour le config, la valeur est celle que j'ai mise dans le header, puisque cette directive est déjà présente dans le header ... Tu peux vérifier si les paramètres sont bons mais normalement oui ^^

    2) Pour le GO, je l'ai viré ... mais
    Code:
    // CAN.high8 = ADRESH;  Idem ??
                   //CAN.low8 =  ADRESL;   idem ??
    c'est normal, faut bien que je déclare et paramètre cette variable CAN et c'est ce que tu m'as dit Là je vois pas le problème ?!

    3)
    Code:
    ADON = 1;   // Déja configuré, mais plus lisible ici ...
       GO=1;       // lance la conversion.
       while(GO);  // boucle jusqu'à la fin de la conversion, quand GO repasse à zéro.
                   //  ... et maintenant ?
    Pour ADON, dois je le remettre ? ( ça fait du code en plus :S et puis il est déjà à 1 ... Pour while(GO), c'est bien une "attente" ou il refait la boucle if (irq==8) {...} ?

    4) J'ai ajouté CAN=600; au début enfin on peut mettre n'importe quelle valeur supérieure à 531. Je l'ai mis car au début, CAN vaut une valeur inconnue ( la conversion n'a pas encore eu lieu ) donc on précharge une valeur dans CAN supérieur à 531 pour pas que la partie if (CAN<531) soit traitée .... t'es daccord ?

    Merci

  26. #356
    mictour

    Re : programmation C du 12f629

    Bonjour marc2009,

    2) Ben ...

    // GO=1; Pourquoi ici ??
    TMR1H=6;
    TMR1L=0;

    // CAN.high8 = ADRESH; Idem ??
    //CAN.low8 = ADRESL; idem ??

    c'est normal, faut bien que je déclare et paramètre cette variable CAN et c'est ce que tu m'as dit Là je vois pas le problème ?!
    Bon, si tu trouves que ces instructions sont bien placées...
    3)
    Pour ADON, dois je le remettre ? ( ça fait du code en plus :S et puis il est déjà à 1 ... Pour while(GO), c'est bien une "attente" ou il refait la boucle if (irq==8) {...} ?

    ADON = 1; // Déja configuré, mais plus lisible ici ...
    GO=1; // lance la conversion.
    while(GO); // boucle jusqu'à la fin de la conversion, quand GO repasse à zéro. Donc attend ici la fin de la conversion.
    // ... et maintenant ?

    Je te pose à nouveau la question...

    Si demain je suis en forme, je te proposerai peut-être un petit exercice...
    Bonne soire, mictour.

  27. #357
    marc2009

    Re : programmation C du 12f629

    Bon, si tu trouves que ces instructions sont bien placées...
    ben .. tu penses quoi ? C'est mal placé ? o_O

    Je te pose à nouveau la question...
    ben quand GO passe à 0, c'est qu'il a finit la conversion, et là, il passe a if (CAN<531) ... et si c'est supérieur, bah il passe a la suite .. nan ?

    Si demain je suis en forme, je te proposerai peut-être un petit exercice...
    Youpiii ^^

    ++

  28. #358
    mictour

    Re : programmation C du 12f629

    Bonjour marc2009,

    J'ai toujours des doutes sur la cohérence de ces instructions :
    TRISIO = 0b.0011.1100;
    OPTION = 0b.1100.0000;
    sortie = 0b.0000.0010;
    T1CON = 0b.0000.0001;
    CMCON = 0b.0000.0111;
    INTCON = 0b.1100.0000;
    PIE1 = 0b.0000.0001;
    ANSEL = 0b.0100.0001;
    ADCON0 = 0b.1000.0001;

    A vérifier avec la DOC du 12F..
    j'ai juste ajouté un peu de lisibilité.
    --> sortie = 0b.0000.0010; ne peut-on écrire : led = 1; ?

    Bon, si tu trouves que ces instructions sont bien placées...
    ben .. tu penses quoi ? C'est mal placé ?

    OUI !!

    ben quand GO passe à 0, c'est qu'il a finit la conversion, et là, il passe a if (CAN<531) ...
    et si c'est supérieur, bah il passe a la suite .. nan ?


    Exact ! ( marrant, c'est l'esprit de mon éventuel 'tit test...)
    Mais supposont que le résultat de la conversion soit : 580,
    comment à ton avis : if(CAN<531)... pourrait bien le savoir ?

    (Oui je sais, c'est moins drole quand c'est moi qui pose les questions ...)
    mictour.

  29. #359
    marc2009

    Re : programmation C du 12f629

    Bonsoir mictour ^^

    A vérifier avec la DOC du 12F..
    ça devrait être bon

    --> sortie = 0b.0000.0010; ne peut-on écrire : led = 1; ?
    à l'allumage du pic, les sorties sont à 0 ou à 1 ? ( après je sais pas si forcer le paramétrage des sorties n'est pas une mauvaise chose ?! )

    Bon, si tu trouves que ces instructions sont bien placées...
    ben .. tu penses quoi ? C'est mal placé ?
    OUI !!

    ben quand GO passe à 0, c'est qu'il a finit la conversion, et là, il passe a if (CAN<531) ...
    et si c'est supérieur, bah il passe a la suite .. nan ?

    Exact ! ( marrant, c'est l'esprit de mon éventuel 'tit test...)
    Mais supposont que le résultat de la conversion soit : 580,
    comment à ton avis : if(CAN<531)... pourrait bien le savoir ?
    ok, j'ai compris pourquoi il faut mettre
    Code:
    CAN.high8 = ADRESH;
    CAN.low8 =  ADRESL;
    après le while(GO)

    (Oui je sais, c'est moins drole quand c'est moi qui pose les questions ...)
    Le tout, est que tu comprennes, et que je comprenne donc pas grave ^^

    @++

  30. #360
    Gérard

    Re : programmation C du 12f629

    A l'init, tu écris
    PORTA = 0
    PORTB = 0
    ....
    avant d'écrire dans les registres TRISx

    Bigo le dit et il n'est pas le seul.

Page 12 sur 14 PremièrePremière 12 DernièreDernière

Discussions similaires

  1. Probleme de programmation (PIC 12F629 )la seconde fois
    Par invite3a1051d7 dans le forum Électronique
    Réponses: 7
    Dernier message: 26/03/2009, 17h06
  2. lire un pic 12f629
    Par invite6ce15d51 dans le forum Électronique
    Réponses: 1
    Dernier message: 06/06/2008, 11h48
  3. Micro- programmes PIC 12f629
    Par invite12ff0607 dans le forum Électronique
    Réponses: 7
    Dernier message: 11/02/2008, 01h46
  4. Quel programateur pour le pic 12f629
    Par jojo86 dans le forum Électronique
    Réponses: 4
    Dernier message: 21/08/2006, 23h04
  5. Programmation 3D
    Par invite769675d7 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 01/11/2005, 07h07
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...