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

PIC 18f + LED + RESISTANCE, çà marche pas!



  1. #1
    ark89

    PIC 18f + LED + RESISTANCE, çà marche pas!


    ------

    Bonjour à tous, je viens vers vous, je débute et là j'en peu plus, des heures de recherche, d'essais et compagnie et çà ne fonctionne pas !!!

    Bon j'ai MPLAB X IDE 5.45
    IC8 2.32
    PICKIT 3

    PIC 18F14K22

    Je peux programmer mon PIC sans problème:

    Voici mon prog :

    Code:
    #include "xc.h"
    
    void main(void)
    {
        TRISC=1;
        PORTC=0;
        char(i)=1;
        
        while(i>0){
            PORTCbits.RC7=1;
            i++;
        }
            
    }
    Difficile de faire plus simple !

    Voici mon montage :

    Nom : 176.177.115.234-6068850961608.jpg
Affichages : 157
Taille : 232,5 Ko

    Voilà, dans l'idée, j'ai configuré mes port C en entrée, je comprend pas pourquoi la LED ne s'allume pas !
    Je l'ai testée en directe, elle fonctionne !
    J'ai une alim de 5 volt stabilisé avec un 7405

    Merci pour votre aide !

    -----

  2. Publicité
  3. #2
    ATdevice

    Re : PIC 18f + LED + RESISTANCE, çà marche pas !!!

    Bonjour,

    Il faut mettre le port en sortie, pas en entrée. De plus TRISC et PORTC sont des registres 8-bit, pour utiliser la LED avec la broche RC7 il faut :
    TRISC=0x7F (TRISC = 0b0111 1111 ce qui configure la broche RC7 en sortie et les autres en entrée
    PORTC=0x7F allume la LED, PORTC=0xFF éteint la LED.

    D'ailleurs dans la logique on écrit sur le registre LATx plutôt que PORTx (et on lit une valeur d'entrée sur PORTx)

    En espérant avoir été clair et que ça puisse aider

  4. #3
    ark89

    Re : PIC 18f + LED + RESISTANCE, çà marche pas !!!

    Tout d'abord merci pour ta réponse !
    C'est pas clair du tout pour moi, mais je vais continuer de chercher avec tes explications, merci !

    Mais si je met le port en sortie, c'est contre logique puisque le courant vient depuis la led, je pige pas, désolé !
    Dernière modification par ark89 ; 03/04/2021 à 17h32.

  5. #4
    penthode

    Re : PIC 18f + LED + RESISTANCE, çà marche pas !!!

    hello ,

    mettre un port en sortie signifie qu'il SORT l'information.

    ici une commutation. +5/0

    le sens du courant n'a pas d'importance : attention au vocabulaire

    les mots on des sens différents pour les physiciens et les informaticiens, ça crée parfois des quiproquos calamiteux
    Dernière modification par penthode ; 03/04/2021 à 17h41.
    [B]Un certain Clément Jean-Baptiste, qui habitait rue Saint Vincent,... [/B]

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

    Re : PIC 18f + LED + RESISTANCE, çà marche pas !!!

    Oui je vois !
    Je pense qu'il va me falloir du temps pour assimiler ce simple montage !

    Bon j'ai refais mon prog avec les renseignement de ATdevice comme suit, mais celà ne fonctionne toujours pas !

    Code:
    #include "xc.h"
    
    void main(void)
    {
        TRISC=0x7F;
        PORTC=0xFF;
        char(i)=1;
        char(z)=5000000;
        
        while(i<z){
            PORTC=0x7F;
            i++;
        }
            
    }

  8. #6
    Qristoff
    Animateur Électronique

    Re : PIC 18f + LED + RESISTANCE, çà marche pas !!!

    Déja, par rapport au schéma, j'aurais tendance à mettre la led dans l'autre sens...
    Tout existe, il suffit de le trouver...!

  9. Publicité
  10. #7
    penthode

    Re : PIC 18f + LED + RESISTANCE, çà marche pas !!!

    je ne peux t'aider plus , je ne connais pas le C

    pour les pics , j'en suis resté à l'ASM et surtout au BASIC
    [B]Un certain Clément Jean-Baptiste, qui habitait rue Saint Vincent,... [/B]

  11. #8
    penthode

    Re : PIC 18f + LED + RESISTANCE, çà marche pas !!!

    quid de la base de temps du PIC ?

    interne ou quarz ? je ne vois pas les déclarations
    [B]Un certain Clément Jean-Baptiste, qui habitait rue Saint Vincent,... [/B]

  12. #9
    ark89

    Re : PIC 18f + LED + RESISTANCE, çà marche pas !!!

    @ penthode, déjà merci d'avoir pris un peu de ton temps pour moi !
    Il y a quelques années, je m'étais penché sur le sujet, j'avais fait des programmes pour des afficheurs et tout mais c'est loin, faut que je m'y remette, de plus, le compilateur a évolué, certaines fonction ne fonctionnent plus, mais çà va y aller ! mdr

    @ Qristoff, si je débranche le fil qui va de la led + resist vers le pic et que je le branche à la masse, la led s'allume, c'est pour çà que je pensais mettre le port en entrée !

  13. #10
    ark89

    Re : PIC 18f + LED + RESISTANCE, çà marche pas !!!

    Bah pour le quartz ou l'interne, en ai-je vraiment besoin pour juste allumer une led en continue ?

  14. #11
    penthode

    Re : PIC 18f + LED + RESISTANCE, çà marche pas !!!

    Citation Envoyé par ark89 Voir le message

    @ Qristoff, si je débranche le fil qui va de la led + resist vers le pic et que je le branche à la masse, la led s'allume, c'est pour çà que je pensais mettre le port en entrée !
    tout dépend de ta décision d'allumer la diode au niveau HAUT ou BAS de la sortie

    et le port doit être en SORTIE
    bis repetita

    tu devrais reprendre quelques bases...
    [B]Un certain Clément Jean-Baptiste, qui habitait rue Saint Vincent,... [/B]

  15. #12
    Qristoff
    Animateur Électronique

    Re : PIC 18f + LED + RESISTANCE, çà marche pas !!!

    tu devrais reprendre quelques bases...
    tout est dit
    Tout existe, il suffit de le trouver...!

  16. Publicité
  17. #13
    ark89

    Re : PIC 18f + LED + RESISTANCE, çà marche pas !!!

    Hey les gars, calmos, je débute !
    On dirai que vous êtes nés en connaissant l'assembleur !

  18. #14
    ark89

    Re : PIC 18f + LED + RESISTANCE, çà marche pas !!!

    Comme je l'ai mentionné plus haut, post 5, j'ai modifié mon prog en SORTIE !!!

    Code:
    #include "xc.h"
    
    void main(void)
    {
        TRISC=0x7F;
        PORTC=0xFF;
        char(i)=1;
        char(z)=5000000;
        
        while(i<z){
            PORTC=0x7F;
            i++;
        }
            
    }

  19. #15
    penthode

    Re : PIC 18f + LED + RESISTANCE, çà marche pas !!!

    Citation Envoyé par ark89 Voir le message
    Hey les gars, calmos, je débute !
    On dirai que vous êtes nés en connaissant l'assembleur !
    ben non , on a transpiré dessus , sans internet à l'époque...
    mais avec des tonnes de bouquins payés un bras !

    alors ce genre de remarque désobligeante me rebute

    bonne continuation
    Dernière modification par penthode ; 03/04/2021 à 20h51.
    [B]Un certain Clément Jean-Baptiste, qui habitait rue Saint Vincent,... [/B]

  20. #16
    paulfjujo

    Re : PIC 18f + LED + RESISTANCE, çà marche pas!

    bonjour,

    c'est un montage reel ou de la simulation Proteus ?
    je suppose que ton Pic est quand meme alimenté via VDD et VSS
    c'est une mauvaise idee de connecter la pin MCLR directement au + VDD 5V
    mettre une 10K à 47K en serie..
    surtout si on programme le PIC in Situ avec la pin MCLR reliée au VPP ICSP programmateur

    Verifier la CONFIG BIT
    PIC avec FOSC interne ? .. sinon il faut un Quartz

    En principe, pour un premier test on fait clignoter une led
    de sorte à verifier VISUELLEMENT que le programme tourne

    char(i)=1;
    char(z)=5000000; !!!!
    il ne faut pas ecrire n'importe quoi ..

    ne pas confondre les variables, les fonctions et les tableaux ...
    uint8_t i=1; // peut varier de 0 à 255
    uint8_t z= 255; // maximum !
    sinon utiliser une variable de type entier 16bits ou entier long 32 bits ..
    il va falloir serieusement REVISER les bases !




    exemple (non testé)

    Code:
    #define LED LATCbits.B7;
    
    
    void main()
    {
    uint8_t  i;
    ANSELC=0;  //pas d'analogique sur le port C
    TRISCbits.B7=0;   // pin en sortie
    LATC=0;  // toutes les sorties à zero
    i=0;
     while(i<10)
     {
       LED=0;                 // led allumée si tirée au +5V
       __delay_ms(500);
        LED=1;      // led eteinte si tirée au +5V
       __delay_ms(500);
       i=i+1;
      }
    }

  21. #17
    ark89

    Re : PIC 18f + LED + RESISTANCE, çà marche pas!

    Bonjour, j'ai laissé le 18f pour un 16f84a, car effectivement, ce qui me pose problème , c'est la config !

    Bon pour la led c ok avec le 16f84 !
    J'ai donc avancé un peu et refait un circuit pour piloter un 7_segments avec mon 16f84, mais je dois avoir un souci d'interruption car le programme se lance et redémarre à la fonction six() avant d'être arrivé à la fonction zero !

    Mon prog :

    Code:
    
    #include "xc.h"
    
    #pragma config FOSC = XT
    
    int a = 0;
    int i = 0;
    
    void delay(void){
        int d = 0;
        while(d<30000){
            d++;
        }
    }
    void led(void){
        int d = 0;
        while(d<5000){
            d++;
        }
    }
    
    void zero(void){
         PORTBbits.RB1 = 1;
         PORTBbits.RB2 = 0;
         PORTBbits.RB3 = 1;
         PORTBbits.RB4 = 1;
         PORTBbits.RB5 = 0;
         PORTBbits.RB6 = 1;
         PORTBbits.RB7 = 1;
    }
    void un(void){
         PORTBbits.RB1 = 0;
         PORTBbits.RB2 = 1;
         PORTBbits.RB3 = 1;
         PORTBbits.RB4 = 0;
         PORTBbits.RB5 = 0;
         PORTBbits.RB6 = 0;
         PORTBbits.RB7 = 0;
    }
    void deux(void){
         PORTBbits.RB1 = 1;
         PORTBbits.RB2 = 1;
         PORTBbits.RB3 = 0;
         PORTBbits.RB4 = 1;
         PORTBbits.RB5 = 1;
         PORTBbits.RB6 = 0;
         PORTBbits.RB7 = 1;
    }
    void trois(void){
         PORTBbits.RB1 = 1;
         PORTBbits.RB2 = 1;
         PORTBbits.RB3 = 1;
         PORTBbits.RB4 = 1;
         PORTBbits.RB5 = 0;
         PORTBbits.RB6 = 0;
         PORTBbits.RB7 = 1;
    }
    void quatre(void){
         PORTBbits.RB1 = 0;
         PORTBbits.RB2 = 1;
         PORTBbits.RB3 = 1;
         PORTBbits.RB4 = 0;
         PORTBbits.RB5 = 0;
         PORTBbits.RB6 = 1;
         PORTBbits.RB7 = 1;
    }
    void cinq(void){
         PORTBbits.RB1 = 1;
         PORTBbits.RB2 = 0;
         PORTBbits.RB3 = 1;
         PORTBbits.RB4 = 1;
         PORTBbits.RB5 = 0;
         PORTBbits.RB6 = 1;
         PORTBbits.RB7 = 1;
    }
    void six(void){
         PORTBbits.RB1 = 1;
         PORTBbits.RB2 = 0;
         PORTBbits.RB3 = 1;
         PORTBbits.RB4 = 1;
         PORTBbits.RB5 = 1;
         PORTBbits.RB6 = 1;
         PORTBbits.RB7 = 1;
    }
    void sept(void){
         PORTBbits.RB1 = 1;
         PORTBbits.RB2 = 1;
         PORTBbits.RB3 = 1;
         PORTBbits.RB4 = 0;
         PORTBbits.RB5 = 0;
         PORTBbits.RB6 = 0;
         PORTBbits.RB7 = 0;
    }
    void huit(void){
         PORTBbits.RB1 = 1;
         PORTBbits.RB2 = 1;
         PORTBbits.RB3 = 1;
         PORTBbits.RB4 = 1;
         PORTBbits.RB5 = 1;
         PORTBbits.RB6 = 1;
         PORTBbits.RB7 = 1;
    }
    void neuf(void){
         PORTBbits.RB1 = 1;
         PORTBbits.RB2 = 1;
         PORTBbits.RB3 = 1;
         PORTBbits.RB4 = 1;
         PORTBbits.RB5 = 0;
         PORTBbits.RB6 = 1;
         PORTBbits.RB7 = 1;
    }
    
    void main(void){
        
           
        TRISA = 0b00000000;
        TRISB = 0b00000000;
     
        while(1){
            neuf();
            delay();
            huit();
            delay(); 
            sept();
            delay();
            six();          /*Le programme reprend à la fonction neuf() ici */
            delay();
            cinq();
            delay();
            quatre();
            delay();
            trois();
            delay();
            deux();
            delay();
            un();
            delay();
            zero();
            delay();
            
        }    
    }
    Mon circuit :

    https://www.hebergeur-image.com/uplo...c791a32cde.jpg

    P.S: Dans le prog, j'ai redéfini les bits pour chaque affichage, mais j'ai aussi fait mon prog avec un tableau et ses valeurs en hexa pour chaque chiffre, le résultat est le m^me, merci pour votre aide !

    Rappel : je suis qu'un vulgaire débutant pour qui le monde des PICS est très très vaste, donc désolé si j'ai blessé certaines personnes, j'ai moi aussi travaillé des nuits entières à coté de mon travail pour apprendre des choses, ici, ce n'est qu'un loisir pour moi, mais c'est vraiment interressant, et plonger dans le datasheet sans avoir bricolé un peu, c'est compliqué, mais çà commence à rentrer !!!
    Dernière modification par ark89 ; 06/04/2021 à 16h15.

  22. #18
    paulfjujo

    Re : PIC 18f + LED + RESISTANCE, çà marche pas!

    bonsoir,

    à verifier :
    config bit incomplete ?
    watchdog ?

    une autre façon :
    Code:
    void zero(void){
         PORTB = 0b11011010;
    }
    void un(void){
            PORTB= 0b00001100;
    }
    ..
    suggestion:

    voir une 3em façon
    usage d'une table ....contenant les 10 codages 7 seg
    char Table[10]={ 0b11011010,0b00001100; ..., ...etc..};
    une boucle for avec indice de 9 à 0 pour balayer les 10 elements de la table
    avec une tempo entre chaque évolution d'indice

  23. Publicité
  24. #19
    ark89

    Re : PIC 18f + LED + RESISTANCE, çà marche pas!

    Salut Paulfjujo, j'ai essayé les deux façons de coder, j'ai également essayé en désactivant le watchdog :

    Code:
    #pragma WDT = 0
    De plus, j'ai le même résultat sous proteus qu'in situ !

    Que puis-je rajouter en mot de config ?

  25. #20
    ark89

    Re : PIC 18f + LED + RESISTANCE, çà marche pas!

    Je dois vraiment avoir un problème dans ma config car je vois pas pourquoi la boucle ne s'effectue pas jusqu'au bout !

    Code:
    while(1){
            neuf();
            delay();
            huit();
            delay(); 
            sept();
            delay();
            six();          /*Le programme reprend à la fonction neuf() ici */
            delay();
            cinq();
            delay();
            quatre();
            delay();
            trois();
            delay();
            deux();
            delay();
            un();
            delay();
            zero();
            delay();
            
        }
    J'ai en affichage :

    9 -> delay -> 8 -> delay ->7 -> delay ->6 ->9 ->etc ....

  26. #21
    paulfjujo

    Re : PIC 18f + LED + RESISTANCE, çà marche pas!

    bonjour,

    REGISTER 6-1: PIC16F84A CONFIGURATION WORD
    bit 13-4 CP: Code Protection bit
    1 = Code protection disabled
    0 = All program memory is code protected
    bit 3 PWRTE: Power-up Timer Enable bit
    1 = Power-up Timer is disabled
    0 = Power-up Timer is enabled
    bit 2 WDTE: Watchdog Timer Enable bit
    1 = WDT enabled
    0 = WDT disabled
    bit 1-0 FOSC1:FOSC0: Oscillator Selection bits
    11 = RC oscillator
    10 = HS oscillator
    01 = XT oscillator
    00 = LP oscillator


    config:
    0b11111111111001 (code protect disabled Watchdog =0 oscilateur= XT)
    Code:
    void main(void){
        
           
        TRISA = 0b00000000;
        TRISB = 0b00000000;
    	PORTA=0;
    	PORTB=0;  // fixe aussi la sortie RB0
    	INTCON=0;  // inhibe les interruptions
    	
    	
    	remplacer les appels de fonction neuf ,huit ...
    	par une simple affectation directe
    	while(1)
    	{
    	PORTB=table[9];
    	delay();
    	PORTB=table[8];
    	delay();
    	.. etc ..
    	
    	ou dans une boucle explorant une table
    	while (1)
    	{for (i=9;i>0;i--)
    	{
    	   PORTB=Table[i]; // table avec les 10 configuration 7 segments
    	   delay();
    	}   
    	}
    * vérifier si le mot de config est bien inclus dans le chargement du *.hex dans le PIC
    Quel programmateur ?
    quel programme (programmateur) ( inclus dans MPLABX IDE ? ou programme externe genre Pikit3 standalone .exe?)

    post ton projet complet ...
    test ton programme en mode Debug ... pas à pas ..
    Dernière modification par paulfjujo ; 07/04/2021 à 10h27.

Discussions similaires

  1. [Autre] Mise en marche par variation de résistance
    Par Manudax dans le forum Électronique
    Réponses: 5
    Dernier message: 12/09/2018, 15h20
  2. [Programmation] Le programme complet ne marche pas, par contre chaque partie marche
    Par Slaivers dans le forum Électronique
    Réponses: 4
    Dernier message: 26/12/2015, 11h45
  3. Mécaflu Résistance à la marche et Froude
    Par bigairbee dans le forum Physique
    Réponses: 2
    Dernier message: 05/07/2013, 13h37
  4. Réponses: 2
    Dernier message: 20/12/2006, 22h04
  5. Réponses: 5
    Dernier message: 11/08/2006, 20h29
Découvrez nos comparatifs produits sur l'informatique et les technologies.