J'ai indiquer dans le premier poste que je travaillais en 8 bit,
Sinon dans ton code ne donne pas plus de résultat, et tu a inverser l'état des broche cs vu que ses du wire 3,
J'ai découvert qu'il y avais une autre appelle a faire lors de wire
Write Operation:
Enable device via chip select high
Send write enable op code ******************************
Disable device via chip select low
Enable device via chip select high
Send write op code with address
Send data byte/word
Write cycle begins
Disable device via chip select low
La ligne que j'ai indiquer fait référence a
EWEN |1|00|11XXXXX|11XXXX| Write enable must precede all |
programming modes
dans le datasheet
Sinon grand merci a B@tto car tu ma fais découvrir l'utilisation de Bitwise Operators,
Je vais continuer de m'acharner pour faire fonctionner cette eeprom.
imagine du envoi la donnée 2 : ça va faire 10 au lieu de 00000010
Il faut faire comme je l'avais fait, décaler command et ajouter données et envoyer le tout
Une lecture attentive de la doc de l'EEPROM et de la doc de la librairie SPI montre que les deux ne peuvent pas coucher ensemble.
L'EEPROM attend des paramètres sur 10bits en entrée alors que la méthode transfer() de la librairie SPI manipule des octets
Il va falloir que tu écrives ta propre librairie pour supporter ta mémoire. C'est pas super compliqué mais par contre tu ne pourras pas utiliser le SPI matériel. Du coup cela te permets de connecter la mémoire sur n'importe quelle IO.
En fait, il faut bien voir, que le SPI n'est pas du tout standardisé comme l'I²C ou le RS232 par exemple. Et du coup chaque fabricant l'implémente comme il l'entend. Utiliser le SPI c'est un peu partir à l'aventure. Alors laisse s'exprimer l'explorateur qui dort en toi.....
Pour ce qui est d'une lecture attentive de la doc de l'eeprom, je n'arrête pas de la lire je la connais par cœur pratiquement,
Pour ce qui est du spi,
Je savais déjà que d'un matériel a l'autre sa variait, mais j'ai lu aussi que l'arduino n'étais pas limitée a 8 bit pour le protocole spi,
Donc avant de prendre ce dernier poste pour argent contant j'espère que j'aurais confirmation ou pas dans les prochain poste.
Donc avant de prendre ce dernier poste pour argent contant j'espère que j'aurais confirmation ou pas dans les prochain poste.
La bonne démarche c'est d'ouvrir la doc de l'atmega, pas d'attendre que quelqu'un le fasse pour toi.
Mais bon un extrait:
8-bit Microcontroller with 4/8/16/32K Bytes In-System Programmable Flash ATmega48PA, ATmega88PA, ATmega168PA, ATmega328P chapitre 18. SPI – Serial Peripheral Interface
When configured as a Master, the SPI interface has no automatic control of the SS line. This
must be handled by user software before communication can start. When this is done, [b]writing a
byte to the SPI Data Register starts the SPI clock generator, and the hardware shifts the eight
bits into the Slave[/b]. After shifting one byte, the SPI clock generator stops, setting the end of
Transmission Flag (SPIF). If the SPI Interrupt Enable bit (SPIE) in the SPCR Register is set, an
interrupt is requested. [b]The Master may continue to shift the next byte by writing it into SPDR, or
signal the end of packet by pulling high the Slave Select, SS line. The last incoming byte will be
kept in the Buffer Register for later use.[/b]
Jusqu'à preuve du contraire la doc Atmel ne parle que de byte. Libre à toi de croire ce que tu veux.
Si tu veux, tu peux aller voir les illustration de la doc. Les registres font 8 bits et il n'y a pas d'option pour changer ça.
Si je comprend bien alors on ne peu envoyer que des packet de 8 bit donc un octet,
La documentation ATMega ne mets pas venu a l'esprit car je pensais que c'était la libraire SPI faite pour le projet Arduino qui gérais le protocole,
Si je comprend bien la situation dans la quelle je suis si je veux utiliser c'est eeprom de marque Atmel je vais devoirs émuler mon propre signal SPI,
Sa métone quand même car le Microcontroleur et les eeproms sont tout deux produite par Atmel, et pourtant si peu de compatibilité .
Sa métone quand même car le Microcontroleur et les eeproms sont tout deux produite par Atmel, et pourtant si peu de compatibilité
Les 93C46 sont des composants anciens qui se vendent encore pour la maintenance.
Atmel produit son '93C46' en 'seconde source' de Microchip qui l'a introduit (avant 1995) comme EEPROM au bus Microwire, lequel bus est un SPI simplifé 'maison' de Microchip....
Demander aux micros actuels la rétro-compatibilité avec les puces (plus ou moins SPI) d'il y 20 ans est sans toute excessif !
Pas étonnant donc qu'il soit nécessaire de faire du 'sur mesure'
Je te suggères de partir de wiring_shift.c qui se trouve dans les fichiers sources de l'arduino, hardware/arduino/cores/arduino.
La librairie fonctionne avec des uint8_t (des byte) et peut facilement être adaptée. Il faut modifier shiftOut pour avoir en entrée un unsigned int en ne décalant que 10 bits évidemment. Pour la lecture il faut reprendre la fonctionne shiftIn et lui faire lire un bit supplémentaire que l'on rejette car il y a un 0 bidon en début de cycle de lecture de cette mémoire.
Edit : J'oubliais, il faut renommer les fonctions sinon il va y avoir un conflit avec la librairie originale.
Oui je vais partir de la modification de shiftin et out,
Le problème c'est que je ne sais pas ou ses deux fonctions sont appeler, donc je vais plutôt faire une copie de l'ide et le modifier directement.
Ce lien est très intéressent, par contre le code a été coder pour quoi ? car l'ide de l'Arduino indique des erreurs a la compilation.
#include <avr/io.h>
Pour quelle architecture de développement a été fais ce programme ?
Sinon pour répondre au dernier poste je ne sais pas ou sont faite les appelles de ses fonction je sais juste que elle est déclarée dans wiring.h et quelle sont utiliser pour la libraire spi mais a par sa j'ai rien trouver, j'ai juste suivi le conseille d'adapter le type de variable et la nombre de bit envoyer pour ses deux fonctions.
wiring.h
void shiftOut(unsigned int dataPin, unsigned int clockPin, unsigned int bitOrder, unsigned int val);
unsigned int shiftIn(unsigned int dataPin, unsigned int clockPin, unsigned int bitOrder);
Il faut créer ta propre librairie avec shiftIn et shiftOut en leur donnant un autre nom par exemple shiftOut10 et shiftIn9 (pour ne pas avoir de conflit avec la lib wiring_shift.c) à la place de la lib SPI. Ou alors les intégrer directement dans ton programme si tu ne veux pas faire une librairie.
Dans ton programme il faut ensuite remplacer SPI.transfert par shiftOut10 par exemple pour envoyer des valeurs dans ta mémoire.
Ce lien est très intéressent, par contre le code a été coder pour quoi ? car l'ide de l'Arduino indique des erreurs a la compilation.
Code: #include <avr/io.h>
Pour quelle architecture de développement a été fais ce programme ?
C'est bien pour Arduino mais une version assez ancienne ...
Les PB0, PB1... sont maintenant dépréciés dans le Winavr plus récent qu'utilise Arduino (depuis quelle version??)
Remplacer PB0 part PORTB0 ... le code signalé par SesechXP passe la compilation avec Arduino 1.02
par contre dans mes antiquités j'ai des 93C56 , pas des 93C46 pour tester.
#define SK PORTB1 //SCK - Digital 52
#define DO PORTB3 //MISO - Digital 50
#define DI PORTB2 //MOSI - Digital 51
#define CS PORTB0 //SS - Digital 53
J'ai changer les pb par portb et la compilation fonctionne mais une fois dans l'Arduino il m'affiche EEPROM writing/reading et puis plus rien,
Je pense que je vais mettre de coter ce projet, sa fait une semaine si pas plus, et je suis a bout de nerf.