Bonjour,
Pour ceux qui auraient lu le sujet que j'ai créé il y a une semaine, j'ai réussi à jouer du son stocker sur ma carte SD grâce à un Arduino. Le premier problème se pose maintenant pour porter le programme sur un pic 18F4550.
Il est monté sur une carte "PicDem 2 Plus" de Microchip avec un quartz à 4MHz.
Je compile avec MikroC car il possède une librairie pour lire une carte SD formattée en FAT16.
La documentation de cette librairie se trouve ici : http://www.mikroe.com/pdf/mikroc/mikroc_manual.pdf page 288.
La fonction 'Mmc_Fat_Init()' me renvoie 255, ce qui signifie "carte non détectée".
Voici le schéma que j'ai utilisé :
.
Le buffer est un circuit CMOS 4050 alimenté en 5V, pour remonter à 5V le niveau 3,3V sortant de la carte. J'ai remarqué que je devais mettre une résistance de pull-down sur la broche MISO de la carte SD avant d'attaquer le buffer sinon il était en état indéterminé. (Je me suis trompé, le schéma représente une pull-up mais j'ai bien mis une pull-down).
Des leds sont connectées sur RB0, RB1, RB2 et RB3, je peux les désactiver grâce à un jumper.
Voilà mon code :
Seule led2 s'allume.Code:#define LECTURE PORTA.F4 #define SLAVE_SELECT PORTA.F5 #define MISO PORTB.F0 #define SCK PORTB.F1 #define LED2 PORTB.F2 #define LED3 PORTB.F3 #define MOSI PORTC.F7 /* Connexion SD Card : SDO = MOSI ---> RC7 pin 26 (violet) SDI = MISO ---> RB0 pin 33 (violet) SCK = Clock --> RB1 pin 34 (gris) SS -----------> RA5 pin 7 (blanc) Connexion commande externe : Lecture ------> RA0 pin 2 */ // Configuration de la librairie pour la carte SD sfr sbit Mmc_Chip_Select at RA5_bit; sfr sbit Mmc_Chip_Select_Direction at TRISA5_bit; void main() { int retour; // Pas de comparateurs CMCON = 0x07; // Pas d'entrées analogiques ADCON1 = 0x0; // Configuration des ports TRISA.F4 = 1; // Lecture TRISB.F2 = 0; // Led 2 TRISB.F3 = 0; // Led 3 TRISB.F0 = 1; // MISO TRISB.F1 = 0; // SCK TRISA.F5 = 0; // SS TRISC.F7 = 0; // MOSI LED2 = 0; LED3 = 0; while(1) { if(!LECTURE) { delay_ms(50); // Anti-rebond if(!LECTURE) { SPI1_Init_Advanced(_SPI_MASTER_OSC_DIV16, _SPI_DATA_SAMPLE_MIDDLE, _SPI_CLK_IDLE_LOW, _SPI_LOW_2_HIGH); retour = Mmc_Fat_Init(); if(retour == 255) LED2 = 1; else if(retour == 1) LED3 = 1; else { LED2 = 1; LED3 = 1; } } } } }
J'ai vérifié les connexions plusieurs fois, tout semble bon.
La led connectée à la sortie CLK du µC clignote bien quelques instants après avoir appuyé sur le BP 'lecture', de même que la led connectée sur l'entrée MISO.
Je précise que cela donne le même résultat lorsque les leds témoin ne sont pas activées lorsque le µC communique avec la carte. (je le remet seulement plus tard pour vérifier l'état de led2 et led3).
Une idée ?
Merci d'avance
-----