Ajout d'une mémoire externe EEPROM 24LC256 (bus i2c) à un PIC 18F452 - C - Programmation
Marsh Posté le 29-04-2009 à 13:06:10
djkiri a écrit : [b]Bonjour à tous, Actuellement, je suis un projet en BTS Systeme Electronique ( ANALYSEUR DE VERRE DE LUNETTE DE SOLEIL SGA).Fonction mémorisation. |
C'est pas très clair... De quel genre de mémoire parle-tu ? Une E2PROM, c'est pour faire du stockage (surtout si elle est reliée par I2C). Quel est le type de mémoire que tu voudrais ajouter à ton matériel ?
- Mémoire programme (ou 'code') ?
- Mémoire de données rapide (RAM, DRAM, SRAM ?)
- Mémoire de stockage permanent ? (FLASH, E2PROM etc.)
Je ne suis pas sûr que ton besoin soit correctement exprimé.
Citation : Mais j'ai un souci en programmation langage microcontroleur C , j'arrive pas à savoir "comment peut-on stocker des informations sur un BUS I2C?" |
C'est sûr. Un bus I2C, c'est fait pour transporter des données, pas pour les stocker...
Marsh Posté le 03-05-2009 à 17:21:57
ReplyMarsh Posté le 04-05-2009 à 01:06:37
djkiri a écrit : le genre de mémoire est un EEPROM , c'est pour stocker des informations. |
Donc la mémoire sert à stocker les informations. Le bus I2C sert à véhiculer les infos vers la mémoire. (Je suppose que la lecture est de type // classique par bus d'adresse et de données...)
Alors quelle était la question, déjà ?
Marsh Posté le 27-04-2009 à 16:41:59
Bonjour à tous, Actuellement, je suis un projet en BTS Systeme Electronique ( ANALYSEUR DE VERRE DE LUNETTE DE SOLEIL SGA).Fonction mémorisation.
Mon projet nécessite l'utilisation d'un PIC18F452, mais comme il n'a pas une grande mémoire( seulement 32ko de mémoire), on a du faire appel à un bus I2C ,EEPROM 24LC256 qui contient 256ko de mémoire.
Mais j'ai un souci en programmation langage microcontroleur C , j'arrive pas à savoir "comment peut-on stocker des informations sur un BUS I2C?"
Si quelqu'un pourrai m'aidez a savoir comment par exemple stocker des information d'un afficheur ou autre .J'ai commencé déjà à taper le programme , j'utilise un quartz 16Mhz.
#include <p18f452.h>
#include "initxlcd.c"
#define Fosc 16E6
#define FI2C 4E3
void ack(coid) //attend ackonledge
{
while(SSAPSTATbits.R_W);
while (SSPCON2bits.ACKSTAT); // attend fin ACK esclave
}
//retourne le contenu du registre cmd dans TC74
signed char lit_i2c(unsigned char adresse, unsigned char registre)
{ signed char t;
SSPCON2bits.SEN=1; //START
while (SSPCON2bits.SEN);
SSPBUF=adresse<<1; //adresse ecriture
ack();
SSPBUF=registre; //adresse registre
ack();
SSPCON2bits.RSEN=1; //RESTART
while (SSPCON2bits.RSEN);
SSPBUF=(adresse<<1) |0b00000001; //adresse lecture
ack();
SSPCON2bits.RCEN=1; //passe ne nmode lecture d'un octet
while (SSPCON2bits.RCEN); //attend recption terminée
SSPCON2bits.ACKDT=1; //NON-ACK
SSPCON2bits.ACKEN=1;
while (SSPCON2bits.ACKEN);
SSPCON2bits.PEN=1; //STOP
while (SSPCON2bits.PEN);
return (t);
}
}
void init_i2c(void)
{ DDRCbits.RC3 = 1;
DDRCbits.RC4 =1;
SSPCON1=0b00101000;
//efface WCOL ET SSPOV, active I2C, I2C mode maitre horloge=FOSC/(4*(SSPADD+1))
SSPSTATbits.SMP=1;
SSPADD=9; // Horloge=16Mhz/4*(SPADD+1)=400Khz ; SPADD=(16Mhz/1600khz)-1;SPADD=9