Carte SD pour pic 18F2620
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

Carte SD pour pic 18F2620



  1. #1
    Titial21

    Carte SD pour pic 18F2620


    ------

    Bonjour,

    Peut etre que quelqu'un se souvient, mais il y a environ 1mois, j'étais intérressé par un moyen d'acquisition pour un gyroscope électronique. Je me suis dis que la meilleure solution étais de dévelloper une petite board avec un pic et enregistrer tout ca sur une carte SD.

    Principe du programme : chaque interruption je convertit la valeur du gyro en numérique, que je met dans un tableau tempon ping[], et au bout de 20 interruptions j'envoie ping[] à pong[] (qui est dans le main) pour qu'il soit enregistrer sur la carte SD.

    Tout ca marchait très bien sur proteus, et la ca ne marche pas.

    J'ai donc repris le programme en avancant pas à pas pour voir ce qui marchait et ce qui ne marchait pas. ET en fait c'est l'enregistrement sur la carte SD qui déconne.

    Voici le programme de test actuel : les interruptions me permettent de faire clignoter une led :

    PS : je ne suis pas un expert en la matière, donc je me débrouille un peu comme je peux, il se peut qu'il y ait des codes qui servent à rien

    Code:
    #include "FSIO.h"
    #include <p18f2620.h>
    #include <string.h>
    #include <timers.h>
    #include <pwm.h>
    #include <adc.h>
    
    //Nombre de donnée accumulée avant sav
    #define nbr_donnee 25
    
     
    //* Pragma configs (en ordre):
     //* Utilize le quartz interne
     //* Pas de watch dog
     //* Pas de low voltage programming
     //* Power up active timer => preds du temps pour demarrer le programme
     //* PORTB on digital, not on analogical
     //* 
    #pragma config OSC = INTIO67
    #pragma config WDT = OFF
    #pragma config LVP = OFF
    #pragma config PWRT = ON
    #pragma config PBADEN = OFF
    
    int i=0;
    int compt_interupt=0,temoin_sav=0,compt_sav=0,n=0;
    
    
    //Déclaration des tableaux tempons
    int ping[nbr_donnee][1]={0};
    int pong[nbr_donnee][1]={0};
    
    
    void InterruptHandlerHigh (void);
    
    
    
    
    //----------------------------------------------------------------------------
    // High priority interrupt vector
    
    #pragma code InterruptVectorHigh = 0x08
    void
    InterruptVectorHigh (void)
    {
      _asm
        goto InterruptHandlerHigh //jump to interrupt routine
      _endasm
    }
    
    //----------------------------------------------------------------------------
    // High priority interrupt routine
    
    #pragma code
    #pragma interrupt InterruptHandlerHigh
    
    void
    InterruptHandlerHigh ()
    {
    
      if (INTCONbits.TMR0IF)
        {     
    	i++;
    
    //Initialize CAN
    OpenADC( ADC_FOSC_2    &
    
             ADC_RIGHT_JUST &
    
             ADC_14ANA,
    		
    		 ADC_REF_VREFPLUS_VSS ,
    
             ADC_CH0        &
    
             ADC_INT_OFF    );
    
      ConvertADC();         // Start conversion
    
      while( BusyADC() );   // Wait for completion
    
      ping[compt_interupt][0] = ReadADC();   // Read result
    
      CloseADC();           // Disable A/D converter
    
    
    //on enregistre la valeur dans les tableaux tempons
    	ping[compt_interupt][1]=compt_interupt;
    
    	if(compt_interupt>=nbr_donnee)
    	{
    		temoin_sav=1;
    		compt_sav++;
    		compt_interupt=0;
    	}
    
                                  //check for TMR0 overflow
          INTCONbits.TMR0IF = 0;            //clear interrupt flag
          
        }
    }
    
    
    
    
    
    
    
    void main (void)
    {
    
    	SearchRec rec;
    	unsigned char attributes;
    	FSFILE * pointer;
    
    TRISB=0;
    
    
    PORTBbits.RB0=1;
            // Set clock to 8MHz and activate PLL, thus we have 32MHz
           OSCCONbits.IRCF2=1;
            OSCCONbits.IRCF1=1;
            OSCCONbits.IRCF0=1;
            OSCTUNEbits.PLLEN=1;
            TRISB=0b00000000;
    
    //Interupt structure initialization
    //Avec un quartz de 10 : 6,4ms
    //Avec un quartz de 6 : 11ms
    
    OpenTimer0( TIMER_INT_ON &
    
                T0_8BIT       &
    
                T0_SOURCE_INT &
    
                T0_PS_1_64 );
    
    PORTBbits.RB1=1;
    
    	// Initialize the library
    
    
    while(!FSInit());    //CA BLOQUE LA
    PORTBbits.RB4=1;
    
    
    //PORTBbits.RB4=0;
    
    //Open a file
    pointer = FSfopenpgm ("fichier5.txt", "w");
    	if (pointer == NULL)
    	while(1);
    
    
    PORTBbits.RB2=1;
    	// Set the clock value
    	// This will determine the create time for the file we're about to make
    	// This will set the time and date to 3:05:26 PM on July 27, 2007.
    	if (SetClockVars (2007, 7, 27, 15, 5, 26))
    		while(1);
    
    
    //FSfprintf(pointer,"Essai");
    //FSfclose (pointer);
    
    PORTBbits.RB3=1;
    
    
    
    
     INTCONbits.GIEH = 1;          //enable interrupts
    
    
    
    
    while(1)
    {
    //PORTBbits.RB4=1;
    	if(i<200)
    	{
    		PORTBbits.RB5=1;
    	}
    	else
    	{
    		PORTBbits.RB5=0;		
    	}
    
    if(i==400)
    {
    i=0;
    }
    };
    	while(1);
    }
    Peut être que je suis passé à côté de quelque chose, si vous pouviez y jeter un oeil, si vous avez le temps, ou me donner des pistes.
    Merci d'avance.

    -----

  2. #2
    RISC

    Re : Carte SD pour pic 18F2620

    Salut,

    Je pense que tu es "passé" à côté de quelque chose de très important...la gestion d'un système de fichier sur la carte SD...

    Si tu veux pouvoir lire et écrire une carte SD il faut utiliser un système et les fonctions associées typiquement on parle de FAT16...si tu veux utiliser quelque chose de connu.

    Pour bien comprendre cela, je te recommande de lire cette note d'application :
    http://www.microchip.com/stellent/id...pnote=en532040

    a+

  3. #3
    Titial21

    Re : Carte SD pour pic 18F2620

    OK, merci pour le lien, je l'avais déjà, et il me semblait que j'avais bien parametré mon SD-SPI et FSconfig, mais je vais reprendre tout ca.

    Il y a une chose que je ne sais pas trop comment faire c'est :
    Code:
    Make sure that all pins used are configured as
    digital I/Os, including the PORTB pins set in the
    Configuration registers and any pins that could
    be analog channels for the A/D converter.
    car moi, les ports analogiques PORTA sont en Analogique puisque que je fait une CAN.
    Avec le pic 18F2620 il faut que je men branche sur RC3,RC4,RC5 et RC0 donc que dois-je faire exactement ??

    Merci pour votre aide.

  4. #4
    RISC

    Re : Carte SD pour pic 18F2620

    Salut,

    Lis la datasheet du PIC18F2620 au chapitre sur les I/O ports (plus particulièrement le PORTA) et le convertisseur A/N (ADC). Tu trouveras un exemple logiciel très clair dans un petit cadre grisé qui explique que pour utiliser des broches en digital, il faut programmer les broches ayant des fonctions analogiques en mode digital car elles sont en analogiques au RESET.

    Pour ce qui est de la gestion de la carte SD, il va falloir implémenter toute la note d'application et utiliser les API permettant la lecture et l'écriture.
    Les fonctions que tu utilises actuellement sont inutilisables...elles supposent un système de fichiers standard.

    Tu peux aussi aller sur GOOGLE, il y a pas mal d'implémentations de gestion de la carte SD avec les PIC18.

    Il existe aussi des solutions payantes dont tu peux charger les manuels pour comprendre comment arriver à ton but :http://www.brushelectronics.com/inde...ware#SD_LDR_24

    a+

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

    Re : Carte SD pour pic 18F2620

    Bonjour, juste pour information j'ai résolue mon problème tout simplement pour ceux que ca interresse...

    J'avais formatté ma carte sd sous windows XP, en fait il faut utiliser un programme spécial qui permet de bien formater la carte sd et ca a marché du premier coup.

    Comme quoi fsinit() et fsprintf(); marche très bien...

    Merci a tous.

  7. #6
    inviteb21bdeed

    Re : Carte SD pour pic 18F2620

    peut tu nous montrer la version finale ainsi le schéma de cablage de carte pour qu'on puisse le testé merci d'avance

Discussions similaires

  1. Carte "prêt à l'emploi" pour programmation PIC
    Par invite763cf723 dans le forum Électronique
    Réponses: 3
    Dernier message: 18/06/2008, 14h19
  2. carte a base de pic!??
    Par invite779ffd8e dans le forum Électronique
    Réponses: 1
    Dernier message: 08/02/2008, 07h35
  3. Carte programmateur de PIC
    Par invite7fef78c4 dans le forum Électronique
    Réponses: 20
    Dernier message: 05/06/2007, 19h10
  4. carte d'acquisition a base de pic
    Par inviteb35dd81c dans le forum Électronique
    Réponses: 0
    Dernier message: 05/04/2007, 21h06
  5. Concevoir carte pour PIC
    Par invite753da5c7 dans le forum Électronique
    Réponses: 3
    Dernier message: 13/06/2006, 13h48
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...