Je souhaiterais programmer l'Ethernet Shield avec un atxmega128A3U en SPI sous Atmel Studio 6.
L'idée serait d'enlever la carte Arduino et de commander l'Ethernet Shield à partir du microcontrôleur présent sur une autre carte :).
Une idée de comment faire fonctionner les librairies du W5100 sous Atmel Studio ?
Faire le programme pour contrôler l'Ethernet Shield (enfin configurer le W5100 par SPI à partir du Atxmega128A3U :D)
Je fais un projet pour "apprendre" donc du coup pas de possibilité de changer de module :/.
J'ai essayé d'importer le Core Arduino (tuto qui dit de mettre le "core.a" sous une librairie dans Atmel Studio en le renommant en "libcore.a") mais mon projet est en C et dans le tuto c'est un exécutable C++...
Ça risque d'être compliqué à moins d'importer tout le core Arduino avec (voir dans la partie tutoriel du forum).
Mais dans l'application (W5100_webserver.c), je n'arrive pas à paramétrer ceci : #define SPI_PORT PORTB /* target-specific port containing the SPI lines / #define SPI_DDR DDRB / target-specific DDR for the SPI port lines */
#define CS_DDR DDRD /* target-specific DDR for chip-select / #define CS_PORT PORTD / target-specific port used as chip-select / #define CS_BIT 2 / target-specific port line used as chip-select */
#define RESET_DDR DDRD /* target-specific DDR for reset / #define RESET_PORT PORTD / target-specific port used for reset / #define RESET_BIT 3 / target-specific port line used as reset */
DDR = Data Direction Register, non ?
De plus, sous Atmel Studio dans le fichier i/o du ATxmega128A3u, le SPI est fait avec une structure et je ne sais pas comment trouver directement le DDR. En plus les PORT ici sont des int et dans les i/o du ATxmega128A3U c'est un type prédéfini...des idées pour paramétrer ces petits define ? x).
AlexDK:
Mais dans l'application (W5100_webserver.c), je n'arrive pas à paramétrer ceci : #define SPI_PORT PORTB /* target-specific port containing the SPI lines / #define SPI_DDR DDRB / target-specific DDR for the SPI port lines */
#define CS_DDR DDRD /* target-specific DDR for chip-select / #define CS_PORT PORTD / target-specific port used as chip-select / #define CS_BIT 2 / target-specific port line used as chip-select */
#define RESET_DDR DDRD /* target-specific DDR for reset / #define RESET_PORT PORTD / target-specific port used for reset / #define RESET_BIT 3 / target-specific port line used as reset */
C'est les déclarations de brochage du module.
"SPI" pour les broches du port SPI (elles sont toujours sur le même port normalement)
"CS" pour la broche "chip select"
"RESET" pas besoin d'expliquer.
AlexDK:
DDR = Data Direction Register, non ?
PORTn = port d'écriture
PINn = port de lecture
DDRn = port de configuration du mode (INPUT / OUTPUT)
(1 bit = 1 broche, 8 bits = 1 port complet)
AlexDK:
De plus, sous Atmel Studio dans le fichier i/o du ATxmega128A3u, le SPI est fait avec une structure et je ne sais pas comment trouver directement le DDR. En plus les PORT ici sont des int et dans les i/o du ATxmega128A3U c'est un type prédéfini...des idées pour paramétrer ces petits define ? x).
Tout d'abord, merci pour vos réponses rapides et tentatives de compréhension de mon incompétence ^^.
@XavierMiller : merci, j'ai abandonné cette solution mais ça peut toujours servir ;).
skywodd:
C'est les déclarations de brochage du module.
"SPI" pour les broches du port SPI (elles sont toujours sur le même port normalement)
"CS" pour la broche "chip select"
"RESET" pas besoin d'expliquer.
J'ai bien compris à quoi ça correspondait ;).
Le souci est que si pour SPI_PORT je mets PORTD... PORTD est défini en "PORT_t" dans iox128a3u.h alors que les fonctions qui l'utilisent dans la librairie w5100 utilisent des int :/.
skywodd:
PORTn = port d'écriture
PINn = port de lecture
DDRn = port de configuration du mode (INPUT / OUTPUT)
(1 bit = 1 broche, 8 bits = 1 port complet)
Oui, donc pour DDRD si je le définis avec "SPID.port->DIR", c'est bon normalement ? :).
Si j'écris PORTD->DIR, c'est la même chose, non ?
skywodd:
J'ai rien compris ...
Je vais essayer d'être plus concret ^^.
Par exemple, si j'ai besoin d'accéder au SPIF, SPSR, SPDR... je dois accéder aux registres (CTRL = SPCR, DATA= SPDR...) dans une autre structure : SPI_t. Donc même méthode que pour le DDR : #define SPDR SPID->DATA, non ?
Sinon si ça peut aider, le SPI utilisé est celui du Port D :
CS = bit 4
MOSI = bit 5
MISO = bit 6
SCK = bit 7
Un reset Hardware est-il vraiment nécessaire ou mettre CS en HIGH puis le mettre en sortie et le remettre LOW suffit à réinitialiser ?