Pages: [1]   Go Down
Author Topic: [solucionado] arduino mega 2560 + Modulo SD LCstudio + enc28j60 (ethernet)  (Read 582 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buenas tardes,

Una consulta he buscado por Internet a ver si es posible conectar estos dos módulos al mismo tiempo pero no he encontrado nada de nada, solo conección por separado que me funciona, pero estos dos módulos usan los mismo pines (miso, mosi, sck, cs) entonces no tengo manera de conectarlos en forma simultanea.

alguna idea? o no es compatible?

saludos
Edu
« Last Edit: June 17, 2014, 10:07:08 am by EduRoman » Logged

Palencia, Spain
Offline Offline
Sr. Member
****
Karma: 25
Posts: 486
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola. Los dispositivos SPI comparten los pines MISO,MOSI Y SCK. a mayores cada uno necesita su propio PIN CS para establecer/cortar comunicación con el arduino. Deberás definir, por tanto, pines CS distintos en cada librería.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola. Los dispositivos SPI comparten los pines MISO,MOSI Y SCK. a mayores cada uno necesita su propio PIN CS para establecer/cortar comunicación con el arduino. Deberás definir, por tanto, pines CS distintos en cada librería.
No se mucho del tema me estoy recién embebiendo del tema, conecto ambos dispositivos al mismo miso, mosi, skc y defino un PIN CS distinto para ambos ej: SD pin 49 y LAN pin 48.
Pueden ser cualquier pin o tengo que usa algos en especial? ( onda algunos específicos, porque se que el pin 53 se usa de cs en mega, pero no se si existen mas.

muchas gracias por tu orientación,

saludos

Edu.
Logged

Palencia, Spain
Offline Offline
Sr. Member
****
Karma: 25
Posts: 486
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Pues yo dejaría uno de los dos dispositivos con CS en el pin 53, pues para que funcione el SPI el pin 53 debe ser declarado como salida aunque no lo utilicemos. El CS del otro dispositivo lo puedes conectar a cualquier otro pin digital, pero se lo tienes que indicar a la librería (en unos casos en la inicialización, y en otros modificando la propia librería). Sería conveniente que pongas tu código y se te podría ayudar un poco más.
Saludos.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Las pruebas que estoy haciendo son unir el código de mi shield SD y de mi Shiel Ethernet, para luego poder usarlo para guardar datos de sensores de temperatura humedad etc (data logger) y tener un servidor que me muestre el estado actual de los sensores y poder apagar y prender unos rele.
pero como puedes ver el código esta en base de prueba. realice el cableado como me lo dijiste me funcionaron ambos shield, así que ahora solo me queda configurar y poder generar el server con ayuda de la SD, lo tengo pensado en ajax.

PD. cuantos shield puedo conectar al mismo miso, mosi, sck, tienes alguna idea de cuanto puede manejar el mega?


http://es.zimagez.com/zimage/img20140529215943.php


Code:
// This is a demo of the RBBB running as webserver with the Ether Card
// 2010-05-28 <jc@wippler.nl> http://opensource.org/licenses/mit-license.php

#include <EtherCard.h>
#include <SD.h>

// declara ethernet
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
static byte myip[] = { 192,168,1,102 };

byte Ethernet::buffer[500];
BufferFiller bfill;

//declara SD
File dataFile;
int led = 13;


void setup () {
// iniciq ether
  if (ether.begin(sizeof Ethernet::buffer, mymac, 7) == 0)
    Serial.println( "Failed to access Ethernet controller");
  ether.staticSetup(myip);
  ether.printIp("IP:  ", ether.myip);
  ether.printIp("GW:  ", ether.gwip);  
  ether.printIp("DNS: ", ether.dnsip);
  
//inicia SD mas comentarios
Serial.begin(9600);
  pinMode(led, OUTPUT);
  Serial.print("Iniciando SD card...");
  pinMode(6, OUTPUT);
  pinMode(led, OUTPUT);
  digitalWrite(6, HIGH);
  if (!SD.begin(6)) {
  Serial.println("Fallo comunicacion o no existe SD");
  digitalWrite(led, HIGH);
  return;}
  digitalWrite(led, LOW);
  Serial.println("SD Iniciada.");
  
  dataFile = SD.open("datalog.txt", FILE_WRITE);
  
  /////////
  if (dataFile) {
    Serial.println("Escribiendo Informacion...");
    dataFile.println("Escribiendo Informacion...");
    
    Serial.println("");
    dataFile.println("");
    
    Serial.println("Programo: Alejandro Acosta Elias");
    dataFile.println("Programo: Alejandro Acosta Elias");
    
    Serial.println("");
    dataFile.println("");
    
    Serial.println("<<< Datalogger >>>");
    dataFile.println("<<< Datalogger >>>");
    

    dataFile.close();}
    else {
    Serial.println("error opening test.txt");}
  ////////////
}

static word homePage() {
  long t = millis() / 1000;
  word h = t / 3600;
  byte m = (t / 60) % 60;
  byte s = t % 60;
  bfill = ether.tcpOffset();
  bfill.emit_p(PSTR(
    "HTTP/1.0 200 OK\r\n"
    "Content-Type: text/html\r\n"
    "Pragma: no-cache\r\n"
    "\r\n"
    "<meta http-equiv='refresh' content='2'/>"
    "<title>RBBB server</title>"
    "<h2>$D$D:$D$D:$D$D</h2>"
  "<h1>Hello from Arduino!</h1>"
    "<p>A web page from the Arduino server</p>"
    
    ),
      h/10, h%10, m/10, m%10, s/10, s%10);
  return bfill.position();
}

void loop () {
  word len = ether.packetReceive();
  word pos = ether.packetLoop(len);
  
  if (pos)  // check if valid tcp data is received
    ether.httpServerReply(homePage()); // send web page data
    
 //guarda SD
 
   String dataString = "";
  for (int analogPin = 0; analogPin < 3; analogPin++) {
    int sensor = analogRead(analogPin);
    dataString += String(sensor);
    if (analogPin < 2) {
      dataString += ","; }}
      
dataFile = SD.open("datalog.txt", FILE_WRITE);

  if (dataFile) {
    digitalWrite(led, LOW);
    dataFile.println(dataString);
    delay(1);  
    dataFile.close();
    Serial.println(dataString);
  }  
  else {
    Serial.println("Fallo comunicacion.txt");
    Serial.println("Revise conecxion");
    digitalWrite(led, HIGH);
    delay(1); }
}
« Last Edit: May 30, 2014, 03:23:30 pm by EduRoman » Logged

Palencia, Spain
Offline Offline
Sr. Member
****
Karma: 25
Posts: 486
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Teóricamente puedes conectar cuantos dispositivos quieras al mismo MOSI, MISO y SCK, pero sólo puedes comunicarte con uno de ellos en cada momento, seleccionándolo a través de su pin SS. Echa un vistazo a la referencia de SPI y conocerás más cosas.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Noter,
toda la razón puedo conectar muchos SPI, después de unos días lo logre, gracias por tu guía.

use esta idea
http://johnboxall.wordpress.com/2011/05/17/tutorial-arduino-and-the-spi-bus/



saludos y nuevamente gracias
Logged

Brasil - SP
Offline Offline
Newbie
*
Karma: 0
Posts: 39
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Olá EduRoman, conseguil fazer funcionar?
Estou com o mesmo problema.
Obrigado

Sérgio
Logged

Pages: [1]   Go Up
Jump to: