Répondre à la discussion
Affichage des résultats 1 à 16 sur 16

Initialisation microcontrôleur PIC18f24k22



  1. #1
    tobi66

    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. Publicité
  3. #2
    DAUDET78

    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 ?
    J'aime pas le Grec

  4. #3
    tobi66

    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.
    Fichiers attachés Fichiers attachés

  5. #4
    DAUDET78

    Re : Initialisation microcontrôleur PIC18f24k22

    Donne le schéma en JIF PNG ou JPG ..... le PDF va être refusé .
    J'aime pas le Grec

  6. #5
    tobi66

    Re : Initialisation microcontrôleur PIC18f24k22

    Pièce jointe 214843

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

  7. A voir en vidéo sur Futura
  8. #6
    DAUDET78

    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é .
    J'aime pas le Grec

  9. Publicité
  10. #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.

  11. #8
    tobi66

    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

  12. #9
    tobi66

    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?

  13. #10
    DAUDET78

    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 .
    J'aime pas le Grec

  14. #11
    tobi66

    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

  15. #12
    tobi66

    Re : Initialisation microcontrôleur PIC18f24k22

    Schéma de câblage_000001.jpg

    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?

  16. Publicité
  17. #13
    DAUDET78

    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 ?
    J'aime pas le Grec

  18. #14
    tobi66

    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.

  19. #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.

  20. #16
    tobi66

    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?

Sur le même thème :

Discussions similaires

  1. initialisation HEF4528B
    Par alainav1 dans le forum Électronique
    Réponses: 4
    Dernier message: 15/01/2013, 19h16
  2. initialisation graphique en c
    Par hitashi dans le forum Programmation et langages, Algorithmique
    Réponses: 3
    Dernier message: 02/08/2012, 18h33
  3. portage code assembleur pic16f883 vers pic18f24k22
    Par vincent-pimousse dans le forum Électronique
    Réponses: 4
    Dernier message: 27/06/2012, 22h03
  4. Initialisation à l'allumage
    Par fderwelt dans le forum Électronique
    Réponses: 3
    Dernier message: 30/04/2009, 13h40
  5. initialisation du PCF8583
    Par ARM128 dans le forum Électronique
    Réponses: 3
    Dernier message: 23/12/2008, 21h44
Découvrez nos comparatifs produits sur l'informatique et les technologies.