Pages: [1]   Go Down
Author Topic: Carte SD et Shield Internet  (Read 1157 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 75
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hello tous le monde,

Est ce qu'il y a des incompatibilités ou des choses spécifiques à faire pour faire fonctionner à la fois le shield internet et la carte SD?

J'utilise le même code d'exemple sans initialiser le serveur intenet placé :
    - dans le setup avec un loop à vide ca fonctionne  sans
    - dans le loop avec un delay ca fonctionne aussi
mais placé dans une fonction avec mon serveur ca ne fonctionne plus.

Ca plante soit sur le SD.begin() soit le card.init().

Si j’écris une fonction qui envoie du code html du type Serial.println("<doctype... ca fonctionne aussi.
je vous met mon bout de code mais c'est le classique des samples des fois que j'ai fais une ENORME coquille...
Code:
#include <SD.h>
#include <Ethernet.h>

#define MYDEBUG

void ReadHttp(EthernetClient client,char *fileName)
{
#ifdef MYDEBUG
Serial.println(fileName);
#endif  

pinMode(10, OUTPUT);
// see if the card is present and can be initialized:

if (!SD.begin(4))
{
Serial.println("Card failed, or not present");
// don't do anything more:
return;
}
#ifdef MYDEBUG
Serial.println("Apres SD.BEGIN");
#endif
// open the file. note that only one file can be open at a time,
// so you have to close this one before opening another.
File dataFile = SD.open(fileName);
 
#ifdef MYDEBUG
Serial.println("Apres SD.open");
#endif

// if the file is available, write to it:
if (dataFile)
{
while (dataFile.available())
{
client.write(dataFile.read());
}
dataFile.close();

// if the file isn't open, pop up an error:
else
{
Serial.println("error opening file");
}
} // fin de ReadHttp
Logged

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

N'oublie pas la page de recherche :
http://arduino.cc/forum/index.php/topic,100561.0.html

Sujet traité au moins 2 ou 3 fois depuis le début de l'année
http://arduino.cc/forum/index.php/topic,105128.msg788576.html#msg788576
http://arduino.cc/forum/index.php/topic,93435.msg702145.html#msg702145

Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Offline Offline
Jr. Member
**
Karma: 0
Posts: 75
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour Barbudor,

J'avais commencé par ca. mais la compréhension que j'ai de ce post (celui de skizoh) c'est que l'on utilise soit la carte SD soit l'internet et qu'une écriture du type client.write(dataFile.read()); n'est pas possible.

j'ai rajouté le pinMode(4, OUTPUT) qu'il me manquait et ce ne fonctionne pas mieux
Je suis en arduino1.0.1

je me trompe?
S
Logged

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Le SD.begin() et le Ethernet.begin() doivent être fait dans le setup() une seule fois pour toute.
Après ca devrait marcher.

card.init() ? c'est quoi ?

Sheild Officiel ?
Carte Uno officielle ?

La SD et l'Ethernet marchent-ils séparément ?
Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Offline Offline
Jr. Member
**
Karma: 0
Posts: 75
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Oui ca marche separement:
J'ai fait un module pure internet avec des print pour envoyer du http et ca fonctionne (mais on sature vite en memoire ...)
J'ai repris les samples de la SD et ca fonctionne aussi. C'est quand je relie les 2 que ca merdoit...

Comme je me suis dit que je devais etre un gros blaireau, j'ai recuperer le SDWebBrowse qui etait decrit dans un des posts (https://github.com/adafruit/SDWebBrowse/blob/master/SDWebBrowse.ino) et j'ai le meme pb avec le card.init() qui tombe en erreur.
C'est dans une librairie c++ et c'est dans l'exemple qui se trouve sur http://arduino.cc/en/Tutorial/CardInfo

Dans mon module j'utile SD.begin et il tombe aussi en erreur.
Ma carte SD est formatter sur WIN7 en 32b


Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 75
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Je confirme je suis un blaireau; L'exemple que j'ai telecharger fonctionne correctement, j'avais oublié de changer l'adresse mac....  smiley-confuse

Je vais reanalyser mes sources, j'ai dut faire un gros sac de noeuds
Logged

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

J'ai l'impression que tu mélanges trop de truc dans ta casserole.

SD est une lib au dessus de Sd2Card+SdVolume+SdFile.

Donc SD.begin() inclue déjà card.init() et il ne faut pas le refaire.

- Soit tu travailles exclusivement avec SD comme dans les exemples fournis avec l'IDE (excepté CradInfo qui utilise les libs bas niveau)
- Soit tu travailles avec les libs de bas niveau (Sd2Card/SdVolume/SdFile) comme dans SDWebbrowse
Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Offline Offline
Jr. Member
**
Karma: 0
Posts: 75
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Oui, il y a un peu de ca...

En faite c'est la déclaration #include "SD.h"

J'avais  3fichiers cpp
   - le main avec setup et loop
   - un autre avec la reprise de cardinfo
   - et un 3eme avec le readHttp (lit un fichier http sur la carte et envoi au client.

L'include de la SD.h dans les 3 fichiers provoque des violations de mémoire
je m'en suis rendu compte lorsque j'ai intégré le SD.begin() dans le setup. La carte était du coup correctement détectée mais, dès que j’accédais au serveur arduino par firefox ca me remettait les traces du setup... bizarre bizarre 
J'ai effectivement viré la partie bas niveau(cardinfo) pour quand je serais grand et puis ce n’était pas nécessaire dans mon projet et j'ai réintégré mon readhttp dans le fichier principal... du coup ca roule

Je ne connais pas bien c++ mais c'est normal cette déclaration de SD ou c'est mal pensé?




Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

- Soit tu travailles exclusivement avec SD comme dans les exemples fournis avec l'IDE (excepté CradInfo qui utilise les libs bas niveau)
- Soit tu travailles avec les libs de bas niveau (Sd2Card/SdVolume/SdFile) comme dans SDWebbrowse
+1
Ne surtout pas mélanger les deux librairies bas niveau (SDfatlib) et haut niveau (SD) tu manqueras obligatoirement de mémoire et tu auras des erreurs de RESET, ou autre.

L'include de la SD.h dans les 3 fichiers provoque des violations de mémoire
je m'en suis rendu compte lorsque j'ai intégré le SD.begin() dans le setup. La carte était du coup correctement détectée mais, dès que j’accédais au serveur arduino par firefox ca me remettait les traces du setup... bizarre bizarre 
Violation de mémoire -> Ok mais comment le sait tu ? En est tu sur ?  (sur un microcontrôleur une violation de mémoire ça veut tout et rien dire à la fois)
Le reset à la connexion ça sent le manque de RAM à plein nez !
Quand la librairie SD est initialisé il te reste environ 500 octets de ram disponible (enfin un peu moins de 400 en réalité vraiment utilisable).
Avec ton code source sous les yeux ce serait plus facile de t'aider smiley-wink

Je ne connais pas bien c++ mais c'est normal cette déclaration de SD ou c'est mal pensé?
C'est une déclaration extern tout ce qui a de plus classique.
C'est juste que tu as foiré un truc quelque par smiley-wink
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Jr. Member
**
Karma: 0
Posts: 75
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hello Skywodd,

Quote
C'est juste que tu as foiré un truc quelque par smiley-wink

smiley Je veux bien te croire smiley

Pour en finir j'ai juste réintégrer mon code dans un seul fichier et supprimer la partie CardInfo.. Cette dernière action a dut résoudre le pb.

Je vais ressayer de séparer mon code en 2 fichiers demain pour voir si ca tombe toujours en marche et pour ma comprehension. En plus j'ai encore 2 / 3 trucs à ameliorer (en particulier le traitement des images) et je mettrais ca dans les projets...
S



Logged

Pages: [1]   Go Up
Jump to: