Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur le langage C !

Modérateur : Jérémy

Algorythmie : Assigner un port à un autre
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#11 Message par paulfjujo » jeu. 8 juin 2017 16:45

bonjour,


Est-tu certain que ton PIC oscille bien ?
:mur: C'est toujours la 1ere source de déboire .. que l'on verifie en faisant clignoter une led ! :sifflotte:

On ne voit pas la config des bits dans ton code ...
ATTENTION .. avec MPLAB IDE + C18 , j'ai été confronté au fait que le *.HEX genéré ne contenait pas les mots de configuration..
il fallait faire , au moins 1 fois, un EXPORT *.HEX
Cela peut se verifier en regardant en haut à droite , les valeurs indiquées de config du Pickit2 (ou 3) lors du chargement *.Hex à
transferer dans le PIC ..
Avec MPLABX , je ne sais pas si ce probleme persiste..



Test similaire avec un 18F45K22 avec config oscilateur interne ( sur 16Mhz)
No problemo sur RC0 RC1 ...
code MikroC
(nota: usage de LAT au lieu de PORT sur PIC18F !!)

Code : Tout sélectionner



/*
CONFIG1H : $300001 : 0x0028
CONFIG2L : $300002 : 0x001F
CONFIG2H : $300003 : 0x003C
CONFIG3H : $300005 : 0x00BF
CONFIG4L : $300006 : 0x0081
CONFIG5L : $300008 : 0x000F
CONFIG5H : $300009 : 0x00C0
CONFIG6L : $30000A : 0x000F
CONFIG6H : $30000B : 0x00E0
CONFIG7L : $30000C : 0x000F
CONFIG7H : $30000D : 0x0040
*/
#define OSCILLATEUR_INTERNE


void main()
 {
 //

#ifdef OSCILLATEUR_INTERNE
// 1MHz par defaut car OSCON RAZ au reset
 // OSCCON=0;
  // OSCCON=0b01110000;
 // OSCCONbits.IRCF2=1; //HFINTOSC - (16 MHz)
 // OSCCONbits.IRCF1=1;
 // OSCCONbits.IRCF0=1;
 OSCCON=0x70; // 16Mhz
 OSCTUNE=0;
 OSCTUNE.PLLEN=0;  // 1= avec PLL => 64Mhz ou 40Mhz   0 =sans PLL => 16Mhz  ou 10Mhz
#else
// FOSC=Q=10MHz
#endif

    //ANCON0=0;
    //ANCON1=0;
    ANSELC=0;        // pour le 18F26K22 !
    TRISC=0b00000000;
    //PORTC=0;
    LATC=0;  // pour 18Fxxxx
    while(1)
     {
    // PORTC=15;
    LATC=0x0F;
    Delay_ms(500);   // syntaxe MikroC
     //__delay_ms(500);
      LATC=0;
     //PORTC=0;
     // __delay_ms(500);
     Delay_ms(500) ;
     }




led connecté avec pull up de 750 ohms au +VCC

source,config et *HEX

_18F26K22_test_clignote_PORTC.zip
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Aide toi, le ciel ou FantasPic t'aidera

Algorythmie : Assigner un port à un autre
Florian41
Membre
Membre
Messages : 13
Enregistré en : mai 2017

#12 Message par Florian41 » lun. 12 juin 2017 08:57

Du coup voici mon code source pour le PIC18F45K80 : (Je force à 1 les 4 premiers bits du port C)

Code : Tout sélectionner



#define OSCILLATEUR_INTERNE

void main()
 {
#ifdef OSCILLATEUR_INTERNE

OSCCON=0x70// 16Mhz
OSCTUNE=0;
OSCTUNE.PLLEN=0;  // 1= avec PLL => 64Mhz ou 40Mhz   0 =sans PLL => 16Mhz  ou 10Mhz
#else
// FOSC=Q=10MHz
#endif

    //ANCON0=0;
    //ANCON1=0;
    //ANSELC=0;        // pour le 18F26K22 !
    
TRISC=0b00000000;
    while(
1)
    {
    
LATC=0x0F;
    }


... Je compile le programme et l'implante sur le PIC ... et ... Le port C reste à ZERO.

Utilisant un PIC 18f45k80 j'ai mis en commentaire l'instruction d'inhibition de sortie analogique car pas reconnue. Sinon tout le code initial est là.

Pour l'implantation du code .hex sur l'IPE toujours les même problèmes, à cause de l'alimentation, que j'ai résolu en paramétrant l'alimentation du PC, et en débranchant et rebranchant le Pick Kit ... Au final mon code source finit par atteindre la platine d'essai... Pourtant aucune LED au port C ne s'allume.

Bref, cette fois ci c'est tout mon port C qui est inactif...

Algorythmie : Assigner un port à un autre
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#13 Message par paulfjujo » lun. 12 juin 2017 12:11

bonjour,
..Bref, cette fois ci c'est tout mon port C qui est inactif...


Est-tu certain que ton PIC oscille bien ?
Quid des bits de configuration ?

à verifier
CONFIG1H: CONFIGURATION REGISTER 1 HIGH (BYTE ADDRESS 300001h)
bit 3-0 FOSC<3:0>: Oscillator Selection bits(2)
1000 = INTIO2, internal RC oscillator
ou
1001 = INTIO1, internal RC oscillator with with CKLOUT function on RA6 ( 4MHz ici)

j'ai deja eu des ennuis similaires sur des vieux PIC gerant un CAN (18F458 ou 258)
l'option CAN prenant le pas sur la config des bits.

CONFIG3H: CONFIGURATION REGISTER 3 HIGH (BYTE ADDRESS 300005h)
bit 0 CANMX: ECAN MUX bit
1 = CANTX and CANRX pins are located on RB2 and RB3, respectively
0 = CANTX and CANRX pins are located on RC6 and RC7, respectively (28-pin and 40/44-pin
Aide toi, le ciel ou FantasPic t'aidera

Algorythmie : Assigner un port à un autre
Florian41
Membre
Membre
Messages : 13
Enregistré en : mai 2017

#14 Message par Florian41 » lun. 12 juin 2017 15:22

Tout d'abord Merci paulfjujo pour ta patience face à ce problème qui m'a bloqué assez longtemps... Malheureusement il persiste toujours et je ne suis que débutant dans la programmation des PIC ... Je n'ai pas tout compris dans la configuration des bits de registres sur MikroC ... Je vois comment y accéder et paramétrer le timer dont j'ai besoin, mais sans aller dans des démarches plus complexes... J'ai donc au hasard choisit de me mettre sur le "internal RC Oscillator clock out" et en réimplantant mon programme j'arrive à faire clignoter RC2 et RC3 à la fréquence voulue ... Mais toujours pas RC0 et RC1

Du coup sur ma fenêtre edit project je vois s'afficher :

Code : Tout sélectionner

CONFIG1L : $300000 0x001D
CONFIG1H 
: $300001 0x0009
CONFIG2L 
: $300002 0x007F
CONFIG2H 
: $300003 0x007C
CONFIG3H 
: $300005 0x0089
CONFIG4L 
: $300006 0x0091
CONFIG5L 
: $300008 0x000F
CONFIG5H 
: $300009 0x00C0
CONFIG6L 
: $30000A 0x000F


Mais dès lors que je copie-colle ces lignes de code pour paramétrer manuellement les bits du registres, le compilateur ne l'accepte pas... Bref je suis un peu perdu avec ce mode de programmation, si quelqu'un peut éclairer ma lanterne sur ce sujet.

Algorythmie : Assigner un port à un autre
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#15 Message par paulfjujo » lun. 12 juin 2017 17:42

Florian41 a écrit :Mais dès lors que je copie-colle ces lignes de code pour paramétrer manuellement les bits du registres, le compilateur ne l'accepte pas... Bref je suis un peu perdu avec ce mode de programmation, si quelqu'un peut éclairer ma lanterne sur ce sujet.


C'est tres different de MPLAB microchip .. ou effectivement on definit les mots de config dans le code.. (sniff , j'aimais bien C18)

le seul moyen, avec mikroC , est bien d'utiliser la vue
Projet
Edit Project setting
regler les bits
et SAUVEGARDER
via SAVE Scheme
le tout dans un fichier de config *.cfgsh


Config_bits.jpg



c'est alors cette config qui sera utilisée dans l'application

que l'on ajoute au projet
dans
View
project manager
other files
add existing
18F45K80_Fosc_interne_16Mhz.cfgsh


tu peux aussi dansr la zone "Configuration register"
tout selectionner
copier
fermer
et coller ensuite dans ton source code C
/*
ma config bit : 18F45K80_Fosc_interne_16Mhz.cfgsh
CONFIG1L : $300000 : 0x001D
CONFIG1H : $300001 : 0x0009
CONFIG2L : $300002 : 0x007F
CONFIG2H : $300003 : 0x007C
CONFIG3H : $300005 : 0x0089
CONFIG4L : $300006 : 0x0091
CONFIG5L : $300008 : 0x000F
CONFIG5H : $300009 : 0x00C0
CONFIG6L : $30000A : 0x000F
CONFIG6H : $30000B : 0x00E0
CONFIG7L : $30000C : 0x000F
CONFIG7H : $30000D : 0x0040
*/


ce n'est qu'en commentaire !
Attention!! mais au moins tu donnes l'info à celui qui lit ton code !

Concernant RC0 et RC1, ces 2 bits sont assez particuliers dans ce PIC
voir DS p 187 et p188

RC1 Open drain ...

Au fait, comment sont connectées tes leds ?
Une sortie en collecteur ouvert ne marchera pas, si la led est tirée au 0V via une Resistance ( pull down)
il faut un tirage au +VCC (via une R) pour que cela fonctionne .. mais logique inversée..
un zero allume la led.
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Aide toi, le ciel ou FantasPic t'aidera

Algorythmie : Assigner un port à un autre
Florian41
Membre
Membre
Messages : 13
Enregistré en : mai 2017

#16 Message par Florian41 » mer. 21 juin 2017 11:03

Bonjour,

Toujours le même problème sur mon PIC18F45K80, et en ajoutant une résistance de tirage de 2,2k sur RC0 et RC1 les 2 LEDS associées restent allumées, sans clignoter, ce qui ne devrait pas se passer selon le code.

Du coup je suis passé sur un PIC18F26K22 et j'ai implanté le code .hex (Merci à paulfjujo au passage) sur le pic via l'IPE de MPLAB X ... Mais au tout dernier moment j'ai un message d'erreur : Failed to program device
2017-06-21 10:55:25 +0200 - Programming failed

Pourtant tout à été paramétré pour que l'ordi reconnaisse le Pick it 3 et l'alimente en externe. Si quelqu'un sait ce qui est à la source de cette errreur généralement...

Ah et voilà le code source sur mikro C :

Code : Tout sélectionner



#define OSCILLATEUR_INTERNE
#ifdef   OSCILLATEUR_INTERNE

void main()
 {
 
#ifdef OSCILLATEUR_INTERNE
 
OSCCON=0x70// 16Mhz
 
OSCTUNE=0;
 
OSCTUNE.PLLEN=0;  // 1= avec PLL => 64Mhz ou 40Mhz   0 =sans PLL => 16Mhz  ou 10Mhz
 #else
 #endif
 //ANCON0=0;
 //ANCON1=0;
 
ANSELC=0;
    
TRISC=0b00000000;
    
LATC=0;
    while(
1)
     {
      
LATC=0x0F;
      
Delay_ms(500);
      
LATC=0;
      
Delay_ms(500) ;
     }
}
 

Algorythmie : Assigner un port à un autre
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#17 Message par paulfjujo » mer. 21 juin 2017 16:35

Bonjour,

Enlève le #if define Oscillateur_Interne
Après le
#define Oscillateur_Interne
Aide toi, le ciel ou FantasPic t'aidera


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 36 invités