Aller au contenu


Photo
- - - - -

Problème de configuration PIC 12F510


  • Veuillez vous connecter pour répondre
7 réponses à ce sujet

#1 mik

mik

    Nouveau membre

  • Membres
  • 6 messages

Posté 01 décembre 2013 - 05:13

Bonjour,

Débutant dans la programmation des pics, j'ai commencé par faire quelques essais avec un 18F45k22 sur la platine EasyPic de mikroe. Je programme en c avec mikroC.
Là ça marche pour les trucs simples, et je comprends ce que je fais.

Mais dans le cas précis, je dois programmer un pic 12F510. Il n'est pas supporté par mikroC donc je me suis rabattu vers MPLAB X et le compilateur XC8.

Pour l'instant, rien de sorcier (a priori), juste mettre les sorties GP0, 1, 4, 5 à 1. Voici le code :

#include <xc.h>

#pragma config IOSCFS = ON

#define _XTAL_FREQ 8000000

void main() {
    
    TRISGPIO = 0b00001100;
    CM1CON0 = 0;
    

    while(1) {
        GP0 = 1;
        GP1 = 1;
        GP4 = 1;
        GP5 = 1;
    }
}

Rien ne marche ! Et ne comprends pas pourquoi.

Si quelqu'un pouvait me venir en aide et m'expliquer ce qui cloche je lui en serais très reconnaissant.

Comme on est sur un forum de robotique, je précise que ce bout de code n'est pas le but (qui est de générer une PWM) mais simplement un essai pour me familiariser avec ce PIC.

Merci

Mikael

#2 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 969 messages
  • Gender:Male
  • Location:Anglet

Posté 01 décembre 2013 - 11:05

essais :


#include <xc.h>
#include "servo.h"

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.

// CONFIG1
#pragma config FOSC = INTOSC    // Oscillator Selection (INTOSC oscillator: I/O function on CLKIN pin)
#pragma config WDTE = OFF       // Watchdog Timer Enable (WDT disabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable (PWRT disabled)
#pragma config MCLRE = ON       // MCLR Pin Function Select (MCLR/VPP pin function is MCLR)
#pragma config CP = OFF         // Flash Program Memory Code Protection (Program memory code protection is disabled)
#pragma config CPD = OFF        // Data Memory Code Protection (Data memory code protection is disabled)
#pragma config BOREN = ON       // Brown-out Reset Enable (Brown-out Reset enabled)
#pragma config CLKOUTEN = OFF   // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
#pragma config IESO = ON        // Internal/External Switchover (Internal/External Switchover mode is enabled)
#pragma config FCMEN = ON       // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is enabled)

// CONFIG2
#pragma config WRT = OFF        // Flash Memory Self-Write Protection (Write protection off)
#pragma config PLLEN = OFF       // PLL Enable (4x PLL enabled)
#pragma config STVREN = ON      // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will cause a Reset)
#pragma config BORV = LO        // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config LVP = ON         // Low-Voltage Programming Enable (Low-voltage programming enabled)

#ifndef _XTAL_FREQ
#define _XTAL_FREQ  32000000 // permet d'utiliser la fonction __delay_ms();
#endif

/*
 * 
 */

 

void main(void) {

   PORTA = 0x00;
   LATA = 0x00;
   ANSELA = 0b00000000;
   TRISA = 0b00000000;
   PORTA = 0b00000000;

   // configuration de l'oscilateur
   OSCCONbits.IRCF = 0b1110; // osc interne à 8 MHz
   OSCCONbits.SPLLEN = 1; // active 4x PLL -> f = 32Mhz
   
   
   while(1)
   {
       RA5 = 1;
RA4 = 1;
RA3 = 1;
RA2 = 1;
RA1 = 1;
RA0 = 1;
   }

}

C'est une code que j'utilise avec des 12F1840,
en fait j'ai jamais utilisé de pic où les pins étaient nomé GPX ... mais si mplabx te dis quelque chose remplace "RA" par "GP"
bon courage en tout cas !

Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#3 mik

mik

    Nouveau membre

  • Membres
  • 6 messages

Posté 02 décembre 2013 - 08:23

Bonjour,

Merci pour ta proposition, je regarde ça et te tiens au courant. Le problème ne vient pas de GP, mplab ne dit rien à la compilation, le .hex est bien généré mais le test sur plaque d'essai ne donne rien.

A+

Mikael

#4 mik

mik

    Nouveau membre

  • Membres
  • 6 messages

Posté 02 décembre 2013 - 11:45

Re-bonjour,

toujours rien avec ce nouveau code (modofié en fonction des registres disponibles sur le PIC.

Le voici :

#include <xc.h>

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.

// CONFIG1
//#pragma config FOSC = INTOSC    // Oscillator Selection (INTOSC oscillator: I/O function on CLKIN pin)
//#pragma config WDTE = 0       // Watchdog Timer Enable (WDT disabled)
//#pragma config PWRTE = OFF      // Power-up Timer Enable (PWRT disabled)
#pragma config MCLRE = ON       // MCLR Pin Function Select (MCLR/VPP pin function is MCLR)
#pragma config CP = OFF         // Flash Program Memory Code Protection (Program memory code protection is disabled)
//#pragma config CPD = OFF        // Data Memory Code Protection (Data memory code protection is disabled)
//#pragma config BOREN = ON       // Brown-out Reset Enable (Brown-out Reset enabled)
//#pragma config CLKOUTEN = OFF   // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
//#pragma config IESO = ON        // Internal/External Switchover (Internal/External Switchover mode is enabled)
//#pragma config FCMEN = ON       // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is enabled)

// CONFIG2
//#pragma config WRT = OFF        // Flash Memory Self-Write Protection (Write protection off)
//#pragma config PLLEN = OFF       // PLL Enable (4x PLL enabled)
//#pragma config STVREN = ON      // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will cause a Reset)
//#pragma config BORV = LO        // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
//#pragma config LVP = ON         // Low-Voltage Programming Enable (Low-voltage programming enabled)

#ifndef _XTAL_FREQ
#define _XTAL_FREQ  8000000 // permet d'utiliser la fonction __delay_ms();
#endif

/*
 *
 */



void main(void) {

   //PORTA = 0x00;
   //LATA = 0x00;
   //ANSELA = 0b00000000;
   TRISGPIO = 0b00001100;
   GPIO = 0;

   // configuration de l'oscilateur
   OSCCAL = 0b01111110; // osc interne à 8 MHz
   CM1CON0 = 0; // Pas d'utilisation du comparateur
   //OSCCONbits.SPLLEN = 1; // active 4x PLL -> f = 32Mhz


   while(1)
   {
       GP5 = 1;
GP4 = 1;
//RA3 = 1;
//RA2 = 1;
GP1 = 1;
GP0 = 1;
   }

}

Ne serait-ce pas un problème avec le WORD config ?

Merci

Mikael

#5 Mic*

Mic*

    Habitué

  • Membres
  • PipPip
  • 232 messages
  • Gender:Male
  • Location:Sarthe

Posté 02 décembre 2013 - 09:16

Bonjour,
il y a ces bons tutos mais c'est en Anglais
Mon lien

la lesson 3 est en assembleur pour le 12F509 mais tu peux faire un test avec
lesson3

A+

Bonjour,

Débutant dans la programmation des pics, j'ai commencé par faire quelques essais avec un 18F45k22 sur la platine EasyPic de mikroe. Je programme en c avec mikroC.
Là ça marche pour les trucs simples, et je comprends ce que je fais.

Mais dans le cas précis, je dois programmer un pic 12F510. Il n'est pas supporté par mikroC donc je me suis rabattu vers MPLAB X et le compilateur XC8.

Pour l'instant, rien de sorcier (a priori), juste mettre les sorties GP0, 1, 4, 5 à 1. Voici le code :

#include <xc.h>

#pragma config IOSCFS = ON

#define _XTAL_FREQ 8000000

void main() {
    
    TRISGPIO = 0b00001100;
    CM1CON0 = 0;
    

    while(1) {
        GP0 = 1;
        GP1 = 1;
        GP4 = 1;
        GP5 = 1;
    }
}

Rien ne marche ! Et ne comprends pas pourquoi.

Si quelqu'un pouvait me venir en aide et m'expliquer ce qui cloche je lui en serais très reconnaissant.

Comme on est sur un forum de robotique, je précise que ce bout de code n'est pas le but (qui est de générer une PWM) mais simplement un essai pour me familiariser avec ce PIC.

Merci

Mikael



#6 mik

mik

    Nouveau membre

  • Membres
  • 6 messages

Posté 02 décembre 2013 - 09:23

Bonsoir,

Je pense que c'était en effet bien une histoire du config au départ. Voilà un code qui marche en simulation.

#include <xc.h>

__CONFIG(MCLREN & UNPROTECT & WDTDIS  & INTOSC);


void main(void) {

   TRISGPIO = 0b00001100; // Output sauf sur GP2 et GP3
   ADCON0 = 0; //Pas d'utilisation du convertisseur
   CM1CON0 = 0; // Pas d'utilisation du comparateur

   while(1)
   {
       GP5 = 1;
       GP4 = 1;
       GP1 = 1;
       GP0 = 1;
   }
}

J'ai trouvé la ligne de config sur le site suivant : http://www.microchip.com/forums/m556602-print.aspx

Le WORD est configuré à 0x2A dans le soft de config (ISIS).

Merci pour le coup de main.

Mikael

#7 mik

mik

    Nouveau membre

  • Membres
  • 6 messages

Posté 02 décembre 2013 - 09:27

Ouais, bon, mais même en commentant la ligne de config ça marche <_<

Etait-ce simplement qu'on devait mettre le convertisseur A/D en veille ?

Mikael

#8 mik

mik

    Nouveau membre

  • Membres
  • 6 messages

Posté 02 décembre 2013 - 10:25

Merci Mic* pour tes liens et ta réponse.

Mikael




0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users