Initialisation microcontrôleur PIC18f24k22
Répondre à la discussion
Affichage des résultats 1 à 16 sur 16

Initialisation microcontrôleur PIC18f24k22



  1. #1
    invitea5967f49

    Initialisation microcontrôleur PIC18f24k22


    ------

    Bonjour tous le monde.
    J'ai comme projet de faire une alarme de maison. pour cela j'utilise des capteurs un un pic 18f24k22.

    Je suis entrain de faire des tests depuis 3 jours sur mon pic mais rien ne marche, hormis le reset ou l'alimentation.

    Cependant j'essaye d'ordonner à une sortie du pic de faire un signal carré lorsqu'à une entrée nous lui envoyons 5V. Ceci à l'aide d'un boucle if.
    Mais je n'y arrive pas. Je ne sais pas si l'erreur provient des initialisations, des déclarations des registres...

    Voici mon début de code :

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    
    #include <p18F24k22.h>
    #include "delay.h"
    #include "delays.h"
    
    #define Capteur_Porte PORTAbits.RA5
    
    //#pragma config = 0x
    #pragma config FOSC = XT			// XT oscillator
    #pragma config PLLCFG = OFF			// Oscillator used directly
    #pragma config FCMEN = OFF			// Fail-Safe Clock Monitor disabled
    #pragma config IESO = OFF			// Oscillator Switchover mode disabled
    #pragma config PWRTEN = ON			// Power up timer disabled
    #pragma config BOREN = OFF			// Brown-out reset disabled in hardware and software
    #pragma config WDTEN = OFF			// Watch dog timer is sleep, otherwise enabled. SWDTEN has no effect
    #pragma config MCLRE = EXTMCLR		// MCLR pin enabled, RE3 input pin disabled
    #pragma config STVREN = OFF			// Stack full/underflow will not cause Reset
    #pragma config LVP = OFF			// Single-Supply ICSP disabled
    #pragma config XINST = OFF			// Instruction set extension and Indexed Addressing 
    #pragma config DEBUG = ON			// Enabled
    
    
    
    /****************************************************************************/
    /*  Wait for X Milliseconds                                                 */
    /*  Function : DelayMs                                                      */
    /*      Parameters                                                          */
    /*          Input   :   Delay in Ms between 0 and 65535                     */
    /*          Output  :   Nothing                                             */
    /****************************************************************************/
    void DelayMs(unsigned int cnt)
    {
    	//1000 cycles for one millisecond @4MHz
    	while(cnt--)			
    	{
    		Delay1KTCYx(1);	//1000 cycles
    	}
    }
    
    /****************************************************************************/
    /*  Wait for X Seconds                                                      */
    /*  Function : DelayS                                                       */
    /*      Parameters                                                          */
    /*          Input   :   Delay in S between 0 and 255                        */
    /*          Output  :   Nothing                                             */
    /****************************************************************************/
    void DelayS(unsigned char cnt)		
    {
    	//1.000.000 cycles pour une seconde @4MHz
    	while(cnt--)			
    	{
    		Delay10KTCYx(100);	//1,000,000 cycles
    	}
    }
    
    
    void main(void)
    {
    	
    	
    	TRISA = 0b11111111;		//Initiallisation du TRISA comme etant que des sorties
    	PORTA = 0;				//Initialisation de PORTA à 0;
    	TRISB = 0b11000000;		//Initiallisation du TRISA comme etant que des entrées avec RB6 et RB7 en entrées
    	PORTB = 0;				//Initialisation de PORTA à 0;
    	RCON = 0b11001111;
    	T0CON = 0b11010000;
    	
    //	OSCCON = 0b01011111;
    	
    	
    	ADCON1 = 0x0F;
    	ANSELA = 0b00101111;
    	ANSELB = 0b00111111;
    	if(PORTAbits.RA5 == 1)
    	{
    		while(1)
    		{
    			PORTBbits.RB2 = 0;
    			DelayS(1);
    			PORTBbits.RB2 = 1;
    			DelayS(1);
    		
    		}	
    	}
    
    }

    sans la boucle if j'ai bien un signal carré a ma sortie RB2.
    A mon entrée RA5 j'arrive à lui mettre soit 0V soit 5V.

    Où est l'erreur?

    Merci beaucoup d'avance à tous ceux qui prendront le temps de lire ce message.

    -----

  2. #2
    invitee05a3fcc

    Re : Initialisation microcontrôleur PIC18f24k22

    Citation Envoyé par tobi66 Voir le message
    A mon entrée RA5 j'arrive à lui mettre soit 0V soit 5V.
    On peut avoir le schéma de ton branchement de l'interrupteur(?) sur RA5 ?

  3. #3
    invitea5967f49

    Re : Initialisation microcontrôleur PIC18f24k22

    Je ne peux que te donner mon schéma de l'ensemble de mon montage, j'ai pris RA5 pour test c'est tout. C'est juste un bouton poussoir et une résistance de pull-down reliée à la masse.
    Images attachées Images attachées

  4. #4
    invitee05a3fcc

    Re : Initialisation microcontrôleur PIC18f24k22

    Donne le schéma en JIF PNG ou JPG ..... le PDF va être refusé .

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

    Re : Initialisation microcontrôleur PIC18f24k22

    Pièce jointe 214843

    Voici mon schéma de câblage dans son intégralité

  7. #6
    invitee05a3fcc

    Re : Initialisation microcontrôleur PIC18f24k22

    Pas en PDF !
    Citation Envoyé par DAUDET78 Voir le message
    Donne le schéma en JIF PNG ou JPG ..... le PDF va être refusé .

  8. #7
    jojo150393

    Re : Initialisation microcontrôleur PIC18f24k22

    Bonjour,
    tu te trompe. Il faut faire une boucle principale infini et à l’intérieur tu fais ton if.
    Code:
    while(1){
     //mon code
    }
    Ici, le programme se lance, ne détecte pas l'appuis sur le bouton au démarrage et quitte.

  9. #8
    invitea5967f49

    Re : Initialisation microcontrôleur PIC18f24k22

    D'accord, mais le problème c'est qu'il ne rentre jamais dans le if.
    Il saute cette instruction comme si il ne vérifiait pas ce que valait ma pin d'entrée, ou que la liaison entre ma pin d'entrée et de sortie ne se faisait pas

  10. #9
    invitea5967f49

    Re : Initialisation microcontrôleur PIC18f24k22

    Extensions de fichiers valides: bmp doc gif jpe jpeg jpg kml log pdf png psd txt zip

    Donc le PDF marche?

  11. #10
    invitee05a3fcc

    Re : Initialisation microcontrôleur PIC18f24k22

    Citation Envoyé par tobi66 Voir le message
    Donc le PDF marche?
    Non, c'est verboten ! maintenant, si tu ne veux pas qu'on voit ton schéma ..... tu laisses tomber .

  12. #11
    invitea5967f49

    Re : Initialisation microcontrôleur PIC18f24k22

    Ce n'est pas ça, c'est juste que je ne sais pas comment convertir un pdf en jpeg ou autre

  13. #12
    invitea5967f49

    Re : Initialisation microcontrôleur PIC18f24k22

    Nom : Schéma de câblage_000001.jpg
Affichages : 165
Taille : 256,4 Ko

    Voici l'intégralité de mon schéma de câblage. Mais je pense plus que mon erreur viens du code. Mes ANSELx sont-ils corrects?

  14. #13
    invitee05a3fcc

    Re : Initialisation microcontrôleur PIC18f24k22

    Pas de circuit de recharge de la batterie ?
    Des 10nF sur le quartz .... tu fais fort !
    Pas de condensateur de découplage sur le Vdd du µC ?
    Pas de PullUp sur le MCLR ?

  15. #14
    invitea5967f49

    Re : Initialisation microcontrôleur PIC18f24k22

    Je me suis trompé dans la légende, c'est des 10 pF sur le quartz.
    Je vais mettre un condensateur de découplage de 10nF en parallèle du Vdd et du Vss du microcontroleur

    Par contre sur le MCLR je ne vois pas comment mettre une résistance de pullUp?
    Mais mon schéma de MCLR est faux je me suis trompé également, j'ai inversé les liaison avec le Vdd et le Vss.

  16. #15
    jojo150393

    Re : Initialisation microcontrôleur PIC18f24k22

    D'accord, mais le problème c'est qu'il ne rentre jamais dans le if.
    Mais bien entendu qu'il ne se fera jamais a peine tu programme ton pic qu'il est déja sortie du programme!
    Et je te conseille dans un premier temps de désactiver le masterclear. Ca pause beaucoup de problème pour au final un détail.

  17. #16
    invitea5967f49

    Re : Initialisation microcontrôleur PIC18f24k22

    D'accord, du coup j'ai réécris mon main comme suivant :
    Code:
    void main(void)
    {
    	
    	
    	TRISA = 0b11111111;		//Initiallisation du TRISA comme etant que des sorties
    	PORTA = 0;				//Initialisation de PORTA à 0;
    	TRISB = 0b11000000;		//Initiallisation du TRISA comme etant que des entrées avec RB6 et RB7 en entrées
    	PORTB = 0;				//Initialisation de PORTA à 0;
    	RCON = 0b11001111;
    	T0CON = 0b11010000;
    	
    //	OSCCON = 0b01011111;
    	
    	
    	ADCON1 = 0x0F;
    	ANSELA = 0b00000000;
    	ANSELB = 0b00000000;
    
    	while(1)
    	{
    		if(PORTAbits.RA5 == 1)
    		{
    			while(1)
    			{
    				PORTBbits.RB2 = 0;
    				DelayS(1);
    				PORTBbits.RB2 = 1;
    				DelayS(1);
    			
    			}	
    		}
    	}
    	
    }
    J'ai changé les ANSELx parceque j'avais confondu digital et analogue.

    Est-ce bon?

Discussions similaires

  1. initialisation HEF4528B
    Par invite3a1051d7 dans le forum Électronique
    Réponses: 4
    Dernier message: 15/01/2013, 19h16
  2. initialisation graphique en c
    Par invite3b3aab05 dans le forum Programmation et langages, Algorithmique
    Réponses: 3
    Dernier message: 02/08/2012, 18h33
  3. portage code assembleur pic16f883 vers pic18f24k22
    Par invite0241a2b5 dans le forum Électronique
    Réponses: 4
    Dernier message: 27/06/2012, 22h03
  4. Initialisation à l'allumage
    Par invite6de5f0ac dans le forum Électronique
    Réponses: 3
    Dernier message: 30/04/2009, 13h40
  5. initialisation du PCF8583
    Par invite28559ad9 dans le forum Électronique
    Réponses: 3
    Dernier message: 23/12/2008, 21h44
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...