EEPROM

Anubis1985

Senior Member
Bonjour,
j'ai connecter une eeprom 24lc256 a un microcontroleur 20x2 et
je ne connet pas les lignes de code pour écrire ou lire dans cette eeprome.

une personne peut t'elle m'aider ?

Merci d'avence.
 

westaust55

Moderator
Les étapes de base sont comme suit :

1. Reliez le 24LC256 EEPROM suivant les indications de la page 79 du manuel 2 de PICAXE. Référez-vous à la page 11 du manuel 1 d'OICAXE pour confirmer les goupilles d'i2c sur le 20X2
Assurez-vous que les deux résistances cabreuses sont reliées de +5V aux deux lignes
2. Employez la commande de HI2CSETUP d'établir des communications d'i2c - la page 76 du manuel 2 de PICAXE.

3. Employez la commande de HI2COUT d'écrire à l'EEPROM - la page 74 du manuel 2 de PICAXE.

4. Employez la commande de HI2CIN de lire des données de l'EEPROM - la page 72 du manuel 2 de PICAXE.
 

Anubis1985

Senior Member
j'ai utiliser la commande pour établir la connection i2C:
Code:
hi2csetup i2cmaster, %11010000, i2cslow, i2cbyte
la commande pour lire les variables:
Code:
hi2cin 0,(b8,b9,b10,b11,b12,b13,b14,b15)
la commande pour sauvegarder les variables:
Code:
hi2cout  0,(b8,b9,b10,b11,b12,b13,b14,b15)
mais la sauvegarde ne fonctionne pas.

l'ore du chargement on obtien:

Code:
b8=209 b9=255
b10=255 b11=255 b12=255 b13=255 b14=255 b15=255
alore que les vrais valeur a sauvegarder son:
Code:
b8=1 b9=0 b10=0 b11=0 b12=0 b13=0 b14=0 b15=0
Je ne comprand pas pourquoi ?
 
Last edited:

PieM

Senior Member
Bonjour,

la commande pour sauvegarder les variables:
Code:

hi2cin 0,(b8,b9,b10,b11,b12,b13,b14,b15)

mais la sauvegarde ne fonctionne pas.
Normal, la commande est hi2cout :)
 

PieM

Senior Member
Il faut éviter de modifier son message d'origine en fonction de la réponse qui vient après ; sinon, il est difficile de s'y retrouver!

Vérifiez l'adresse du slave: elle ne me semble pas correcte.
 

westaust55

Moderator
From memory but try:

Code:
hi2csetup i2cmaster, %10100000, i2cslow, i2cword
Notice the different slave address
And word parameter for address size
 
Last edited:

westaust55

Moderator
en outre, après la commande de hi2cout, vous devriez enure que vous incluez une
PAUSE 5​
pour donner les EEPROM ébrèchent l'heure d'écrire intérieurement les données à la mémoire au cas où vous suivriez le hi2cout peu ensuite avec une autre commande de perturber le processus d'écriture.
 

Anubis1985

Senior Member
je vien d'essailer et on trouve :
Code:
b8 =162 b9=255 b10=255 b11=255 b12=255 b13=255 b14=255
b15=255
alore que les valeurs souvegarder son:
Code:
b8 =1 b9=0 b10=0 b11=0 b12=0 b13=0 b14=0 b15=0
voici donc mon code source:
Code:
  init: hi2csetup i2cmaster, %10100000, i2cslow, i2cword   
    main: 
   
     
     
   'high 1 'Verroillage EEPROM (wp)
  ' low 1 'deverroillage EEPROM (wp)
   
readtemp 9,b1
readadc 8,b6
 if b6 = 0 then flash2
if pinC.0=1 then flash1
if pinC.0=0 then flash0



 pause 100
 goto main
 
flash0:
 sound 3,(100,b1)' freq 50, length 25
high 0 'led verte
high 6
high 2 'micro
'high 4 'commutation numérique
'low 4
pause 250
low 0 'led verte
debug
pause 100 
goto main 

flash1:
'STOCKAGE EEPROM
b8 = 1
 
hi2cout 0,(b8,b9,b10,b11,b12,b13,b14,b15)
PAUSE 1000
debug
pause 100

goto main

flash2:
hi2cin 0,(b8,b9,b10,b11,b12,b13,b14,b15)
pause 1000
debug
goto main
 
Last edited:

westaust55

Moderator
alore que les valeurs souvegarder son:
Code:
b8 =162 b9=255 b10=255 b11=255 b12=255 b13=255 b14=255
b15=255
Le code de programme semble être correct.

Si sont les valeurs citées ci-dessus ce qui vous m'avez reçu alors croyez qu'il y a un problème avec les raccordements à l'EEPROM.


Si sont les valeurs citées ci-dessus ce qui vous m'avez reçu alors croyez qu'il y a un problème avec les raccordements à l'EEPROM.

162 = %10100000 qui est l'adresse slave.
Il se peut que l'adresse slave demeure dans l'amortisseur si l'EEPROM n'envoie aucun " ack" le signal après le PICAXE envoie un byte.

255 = $FF = %11111111 qui indiquent que les communications d'i2c est tirées haut par les résistances cabreuses et aucunes données est reçus de l'EEPROM.

Veuillez vérifier votre circuit. Pouvez vous signaler le schéma de circuit et si possible même une photo claire du circuit.
 

Anubis1985

Senior Member
oui effectivement, je vien de m'apersevoire que les résistance cabreuses
son relier au - au leu du +.
et ce qu'au niveau programation on peut contourner ce probléme.
 

fuse

Senior Member
Bonjour Anubis,
La gestion d'écriture/lecture sur un mémoire i2c est un sujet intéressante et assez vaste... J'envisage d'effectuer un tuto mais il me faut effectuer de nombreuses manip. pour valider les commandes nécessaires et les programmes de test...
En tout cas ce que je sais pour les mémoires (et les périphériques) i2c c'est qu'il est indispensable d'avoir des résistances de tirage (valeur habituelle de 4,7K) relié au +5V.
A ce propos le traducteur donne l'information cabreuse, cependant le bon terme est tirage ou pull-up en anglais.
Les liaisons SDA et SCL sont à collecteur ouvert, cela évite les courts-circuits si il y a un conflit entre la sortie SDA du Pic et la ligne SDA de la mémoire.
Pour conclure, il faut une seule résistance de tirage (reliée au +5V) sur la ligne SDA et une seule résistance de tirage (reliée au +5V) sur la ligne SCL.
Cordialement
Fuse
 

Anubis1985

Senior Member
si les résitances de tirage on été relier accidentelement a 0 volts ou lieu du 5 volte. Peut on inverser le pore i2c pour qu'il anvoi du 5 volte au lieu qu'il établise la connetion au 0 volte au momant de la communication.
 
Last edited:

fuse

Senior Member
En tout cas avec les résistances de tirage sur 0 V aucun risque de détruire la liaison i2c.
On ne peut pas échapper à l'utilisation de ces résistances de tirage reliées au +5V, si ce n'est pas le cas il faut refaire le câblage...
De par le principe de collecteur ouvert pour la liaison i2c il n'y a de possibilité de travailler "en inverse" pour la liaison i2c.
Bon développement.
Fuse
 

Anubis1985

Senior Member
bon,
j'ai réussi a me connecter les résistance sur un fessau 5 volte qui passais
prés des résistances sur le circuit imprimer et mintenant cela fonctionne.

Merci l'ami.

Fuse pour ton proget de tuto sur l'EEPROM se serais simpas. cela peut bien aider.
 
Last edited:

westaust55

Moderator
Pour augmenter sur quel fusible a mentionné en ce qui concerne les résistances. Pour tirer vers le haut le ( "pull-up" ) signifie habituellement pour utiliser une résistance pour tenir la ligne près de l'approvisionnement positif (IE 5 volts). Pour attacher ( "tied") à +5V signifie habituellement un raccordement direct et plein sans résistance.

Avec les communications d'i2c, chaque dispositif est spécifié pour avoir un transistor open-collector pour le rendement sur l'autobus d'i2c. Avec ce type de rendement chaque dispositif peut conduire la ligne (SDA et câble coaxial) le bas à 0 volts ou a laissé la ligne flotter. Pour réaliser l'état élevé, les résistances sont utilisées pour apporter la ligne pour s'approcher de 5 volts quand tous les dispositifs ont un résultat de flottement.

Si la résistance utilisée à trop haut en valeur d'ohm l'élévation du signal d'un bas état à un état élevé est trop lente. Pour beaucoup d'applications, les ohms 4k7 est typiquement employés. Parfois et à des vitesses plus élevées cette vallée de résistance peut être encore inférieure.

J'espère que cette explication traduit raisonnablement le puits et est utile.
 

fuse

Senior Member
Bonjour à tous,
J'ai essayé plusieurs programmes pour lire et écrire dans la mémoire 24c256.
Conclusion :
Il faut évidemment connecté la mémoire sur le Picaxe avec les lignes SDA et SCL en utilisant 2 résistances de Pull-up de 4,7K relié au +5V.
Sur la mémoire je connecte A0, A1 et A2 sur la masse (pour obtenir l'adresse i2c %10100000). La borne WP doit être connectée à la masse pour être autorisé à écrire (cette borne peut-être relié sur une sortie Out mais dans ce cas là il faut positionner cette sortie à Low (exemple avec Out5).
Pour écrire :
low5
i2cslave % 10100000, i2cfast, i2cword
writei2c 2, (6, ''hello'')
stop
Après ce programme, la mémoire charge l'adresse 2 avec 6, l'adresse 3 avec le code ASCII de h, l'adresse 4 avec le code ASCII de e etc...

Pour lire :
i2cslave % 10100000, i2cfast, i2cword
readi2c 2, (b0,b1,b2,b4,b5)
stop
Après ce programme, la mémoire positionne bo avec le contenu de l'adresse 2, b1 avec le contenue de l'adresse 3, b2 avec le contenue de l'adresse 4, etc... jusqu'à b5.
On doit retrouver les informations enregistrées.

L'utilisation d'une mémoire EEPROM externe en liaison avec une horloge temps réel (DS1307) permet d'effectuer de nombreuses mesures de façon régulière...

Je n'ai pas essayé les commandes hi2cin et hi2cout mais le fonctionnement doit être identique.... (A tester quand même)

Cordialement
Bon travail.
 
Last edited:

westaust55

Moderator
Le puits a énoncé fuse.

Avant emploi les commandes HI2CIN et HI2COUT vous devez d'abord employer la commande HI2CSETUP au lieu la commande I2CSLAVE.
 

fuse

Senior Member
Bonjour Anubis,
LA commande
hi2cout 0,(b8,b9,b10,b11,b12,b13,b14,b15)
permet d'écrire dans la mémoire à partir de l'adresse 0 (c'est l"équivalent de la commande writei2c)
Donc b8 se met en adresse 0
b9 se met en adresse 1
b10 se met en adresse 2
etc....

(Anubis, regarder votre boite à lettre...)

Cordialement
 

Anubis1985

Senior Member
Oui effectivement je n'avais pas vus que j'avais un message.Je te remerci
pour la doc. c'est trés bien expliquer.
 

Anubis1985

Senior Member
mon microcontroleur commance a saturé en mémoire.
est t'il possible de stoker une parti du programme du microcontroleur sur
l'eeprom.
 

westaust55

Moderator
Using External EEPROM for programs

Puisque vous avez une pièce de 20X2 PICAXE vous pouvez stocker des modules de programme sur le PICAXE pendant que normale et également dans une fente sur un external 24LC128 ou plus grand EEPROM.
Alors vous pouvez déplacer la forme l'à bord aux fentes externes de programme utilisant la commande de RUN.

Notez que tout en s'exécutante/lançant un programme de l'external EEPROM que vous ne pouvez pas n'utiliser l'autobus d'i2c pour aucun autre but - il est verrouillé pour l'usage unique d'accéder au programme.
 

Anubis1985

Senior Member
ok. alore je peut stocker la valeur de mes varriable sur le microcontroleur avec
cette commande (readtemp 1, b1,b2) ('WRITE 1, b1,b2) pour sauvegarder ou charger les valeur de mes variables. au lieu de les stoker sur l'eeprom LC256.
et je garde l''eeprom pour stoker une partis du programe du microcontroleur.

Mais commant utiliser la commande RUN ?
 
Last edited:

westaust55

Moderator
Pour placer un deuxième programme sur l'external EEPROM que vous devez dans le PE inclure:

#SLOT 4
;mettez votre programme ici

Alors le programme dans la mémoire de programme d'E de PICAXE peut goto le programme externe avec la commande:

RUN 4

Des variables sont maintenues et partagé entre les programmes le fonctionnement dans le programme différent « raine » mais des sous-routines et les étiquettes dans une fente ne peuvent pas être employées par le code de programme dans une autre fente.
 

PieM

Senior Member
Bonjour,

ok. alore je peut stocker la valeur de mes varriable sur le microcontroleur
et je garde l''eeprom pour stoker une partis du programe du microcontroleur
Je ne trouve pas cette approche très logique ni très optimum au niveau temps de scrutation du programme! D'autant plus que le bus I2C est de ce fait condamné et ne peut servir à accéder à d'autres composants...

mon microcontroleur commance a saturé en mémoire
est-ce bien la mémoire programme qui est saturée ?
 

Anubis1985

Senior Member
je doit donc écrire mon programme comme ceci ?

Code:
#code00 4: '00degré C
pause 125
sound 3,(100,25)
pause 50
sound 3,(100,25)
pause 50
sound 3,(100,25)
pause 50
sound 3,(100,25)
pause 50
sound 3,(100,25)
goto DegreC
RUN 4
goto DegreC est une autre boucle qui est commune au autre morceau de code comme celui ci qui permet par l'intermédiére du morce
d'afficher la température sur mon ordinateur du systeme qui contien le microcontroleur.
 
Last edited:
Top