Go Down

Topic: Ethernet Shield sans Arduino (Read 2218 times) previous topic - next topic

AlexDK

Bonjour à tous,

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 ?

Bonne journée,
Alexandre.

skywodd

Bonjour,


Je souhaiterais programmer contrôler l'Ethernet Shield avec un atxmega128A3U en SPI sous Atmel Studio 6.

Faut pas tout mélanger :smiley-mr-green:


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 :).

Quitte à utiliser la shield seule pourquoi ne pas prendre un module "breakout" :
(officiel de Wiznet) https://www.sparkfun.com/products/9473
(chinois) http://imall.iteadstudio.com/m120525007.html
Ce serait plus compact (et moins cher pour la version chinoise).


Une idée de comment faire fonctionner les librairies du W5100 sous Atmel Studio ?

Ça risque d'être compliqué à moins d'importer tout le core Arduino avec (voir dans la partie tutoriel du forum).
Sinon : http://www.wiznet.co.kr/Sub_Modules/en/product/product_detail.asp?Refid=85&page=1&cate1=5&cate2=7&cate3=26&pid=1074&cType=2
Ou http://www.seanet.com/~karllunt/w5100_library.html
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

AlexDK

#2
Aug 16, 2013, 04:02 pm Last Edit: Aug 16, 2013, 04:07 pm by AlexDK Reason: 1
Merci pour la réponse déjà ^^.

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).

Je me suis donc tourner vers des liens comme ceux que tu as posté pour avoir un W5100.h et W5100.c :
http://www.seanet.com/~karllunt/w5100_library.html

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).

XavierMiller

Hello,

Pour importer du code C en C++, il faut encadrer les définitions des fonctions avec
Code: [Select]
extern "C"

skywodd


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.


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)


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).

J'ai rien compris ...
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

AlexDK

#5
Aug 17, 2013, 01:37 pm Last Edit: Aug 18, 2013, 07:44 pm by AlexDK Reason: 1
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 ;).


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 :/.


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 ?


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 ?

Go Up