Partage
  • Partager sur Facebook
  • Partager sur Twitter

Programmation PIC 18F46K22 avec CCS C Compiler

Problème micro-controleur PIC 18f46k22

    29 mai 2020 à 2:27:05

    Bonjour, j'ai acheté récemment un micro-controleur PIC 18f46k22 que je n'arrive pas à faire fonctionner. Mon but et de faire clignoter une led.

    Voici mon programme fais sous CCS C Compiler:

    #include <18F46K22.h> 
    #device ADC=10 
    #fuses WDT, WDT512, NOPROTECT, BROWNOUT, PUT, NOLVP, PLLEN 
    #use delay(clock = 4000000) 
    
    void main(void) {
       
       while(1){
          output_high(PIN_B0);
          delay_ms(500);
          output_low(PIN_B0);
          delay_ms(500);
       }
    
    }



     

     Mais la led ne s'allume pas du tout. J'ai de plus remarqué que si je ne relie pas le VSS du micro-controleur au - de ma pile la led cette fois-ci reste allumée:

    Montage électronique avec le VSS relié au - de la pile(la led ne s'allume pas du tout)

    Montage électronique avec le VSS non connecté au - de la pile(la led s'allume tout le temps)

    Je ne sais pas si j'ai fait une erreur dans le montage électronique ou dans le code mais ça fait des heures que je suis dessus(je ne trouve pas de tuto avec le PIC 18f46k22). D'ailleurs j'avoue ne pas vraiment comprendre à quoi servent les #fuses et le #device ADC=10 mais je recopie bêtement un code que j'ai vu à plusieurs endroits sur internet.

    Merci d'avance pour votre aide.

    -
    Edité par RafaelLetrillard 29 mai 2020 à 2:29:20

    • Partager sur Facebook
    • Partager sur Twitter
      29 mai 2020 à 18:00:44

      Bonsoir,

      Je ne connait pas le compilateur pour PIC, mais je suit surpris de ne pas voir de déclaration comme quoi la pin utilisée est sélectionnée en sortie. 

      • Partager sur Facebook
      • Partager sur Twitter
        29 mai 2020 à 18:37:43

        Je me suis fait la même remarque ici. Il faudrait fusionner.
        • Partager sur Facebook
        • Partager sur Twitter
          Staff 30 mai 2020 à 20:15:49

          Les fuses servent à définir la configuration du processeur et c'est effectivement là qu'il y a très certainement un problème.

          Le watchdog (WDT) est un périphérique servant à détecter un potentiel plantage du code et ordonnant le reset du processeur si c'est le cas.

          En temps normal, le programme doit faire des accès au watchdog pour montrer qu'il est en vie.

          Si le programme est planté, il ne fera plus d'accès au watchdog et celui-ci ordonnera alors le reset pour redémarrer le programme.

          Dans ton cas, tu ne fais aucun accès au watchdog donc c'est une très mauvaise idée de l'activer (ton processeur va redémarrer en boucle).

          Donc une bonne chose serait de commencer par virer WDT et WDT512 pour ajouter NOWDT.

          -----

          NOPROTECT: Pas de protection de la mémoire flash, c'est Ok

          BROWNOUT: Activiation du détecteur de chute de tension (pour faire en reset en cas de tension trop faible), c'est Ok

          PUT: Activation du timer d'allumage (Power Up Timer) pour ne pas démarrer tout de suite le programme de façon à ce que l’alimentation ai le temps de se stabiliser avant de commencer, c'est Ok

          NOLVP: Pas de programmation basse tension, Oui, pourquoi pas

          PLLEN: Activation de la PLL pour augmenter la fréquence, Oui, là encore, pourquoi pas, si tu veux aller plus vite mais dans un premier temps, je ne l'activerais pas.

          -----

          Là où il y a quelque chose qui me chagrine, c'est qu'à aucun moment tu ne précise quelle source d'horloge le processeur doit utiliser... oscillateur quartz externe ? oscillateur RC externe ? oscillateur interne ? autre ?

          Vu que tu ne mets rien sur les broches OSC1, OSC2, j'en déduis que tu veux utiliser l'oscillateur interne.

          Dans ce cas, il faudrait mettre le fuse INTRC_IO.

          Je ne suis pas un expert de la config CCS mais tu devrais essayer de mettre : #use delay(internal=16000000)

          Si tu souhaites activer la PLL (x4), tu devrais peut-être essayer #use delay(internal=16000000, clock=64000000) mais je te recommande d'abord de tester sans la PLL.

          -
          Edité par lorrio 30 mai 2020 à 20:58:19

          • Partager sur Facebook
          • Partager sur Twitter
            31 mai 2020 à 1:51:25

            Merci pour ta réponse lorrio, c'est très clair et ça m'en apprend beaucoup sur les #fuses. Malheureusement, j'ai suivi tes conseils et j'en suis au même point, voici mon nouveau code:

            #include <18F46K22.h> 
            #device ADC=10 
            #fuses NOWDT, NOPROTECT, NOBROWNOUT, PUT, NOLVP, INTRC_IO 
            #use delay(internal = 16000000) 
            
            void main(void) {
               
               set_tris_b(0b00000000);
               
               while(1){
                  output_high(PIN_B0);
                  delay_ms(500);
                  output_low(PIN_B0);
                  delay_ms(500);
               }
            
            }

            C'est toujours pareil la led ne s'allume ou reste allumée si je déconnecte le port VSS. Je précise que ma source de génération est de 4.5V et non 5V, est-ce un problème ? J'ai essayé en remplaçant le BROWNOUT par le NOBROWNOUT dans le doute mais ça ne fonctionne toujours pas.

            • Partager sur Facebook
            • Partager sur Twitter
              Staff 31 mai 2020 à 14:20:29

              Le BROWNOUT est configurable entre 1.9 et 2.85V donc il n'y a aucune raison qu'il s'enclenche à 4.5V.

              Le fait que ta LED s'allume quand le processeur est déconnecté du GND est tout à fait normal.

              Sans cette liaison GND, tout le processeur est au potentiel du VCC et rien ne s'exécute donc pratiquement toutes les pins vont se retrouver au potentiel VCC, ce qui a pour effet d'allumer la LED.

              N'aurais tu pas une erreur lors du téléversement du code ?

              • Partager sur Facebook
              • Partager sur Twitter
                31 mai 2020 à 20:13:10

                Pour la programmation du PIC j'utilise PICKIT 2 et le logiciel PICKIT 2 Programmer, le téléversement du code semble se faire correctement car si je redémarre le logiciel et que je clic sur "read" pour lire le programme du micro-contrôleur un programme en hexadécimal s'affiche. Après peut-être que la compilation du programme ne se fait pas correctement mais je ne vois pas trop comment vérifier ça, appart avec un décompilateur.



                -
                Edité par RafaelLetrillard 31 mai 2020 à 20:15:06

                • Partager sur Facebook
                • Partager sur Twitter
                  1 juin 2020 à 1:48:08

                  Le PICKIT2 permet également de deboguer, non? Tu peux essayer d'exécuter ton programme en pas à pas et inspecter tes registres pour voir si tout est correct.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    1 juin 2020 à 17:57:20

                    Je ne crois pas que le PICKIT2 permette de débugger car je n'ai pas trouvé comment faire, tous les tuto sont avec MPLAB IDE
                    • Partager sur Facebook
                    • Partager sur Twitter
                      1 juin 2020 à 18:41:23

                      Tu ne peux pas utiliser le compilateur CCS dans MPLAB et du coup utiliser le debugger de MPLAB?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        9 juin 2020 à 14:44:52

                        Je pense que le compilateur CCS dans MPLAB ne fonctionnera pas ici
                        https://ilogiciel.com/logiciel-espion-iphone/
                        Peut-être que le contrôleur est défectueux ?

                        -
                        Edité par AlfredDanton 30 juin 2020 à 10:06:43

                        • Partager sur Facebook
                        • Partager sur Twitter
                          9 juin 2020 à 20:54:30

                          AlfredDanton a écrit:

                          Je pense que le compilateur CCS dans MPLAB ne fonctionnera pas ici
                          Qu'est-ce qui te fait dire çà?

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Programmation PIC 18F46K22 avec CCS C Compiler

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          • Editeur
                          • Markdown