Pages: [1]   Go Down
Author Topic: Conflicto SD vs LED  (Read 307 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buenas tardes,

Soy nuevo en el foro y escribo por una pequeña duda, o eso creo, para la que no encuentro solución. Estoy trabajando en un proyecto consistente en un sistema de adquisición de datos. Para ello uso varios sensores, una tarjeta SD, un reloj RTC, un LED RGB, etc. El modelo de microntroladora es Arduino UNO rev3 y el IDE que estoy usando es la versión 1.0.5.

Me encuentro en un punto en el que tengo que avisar con un LED cuando se da una circunstancia determinada. En principio es algo muy fácil que no debería entrañar mayor problema. Conecté el LED RGB al pin 13 (el que lleva la resistencia interna conectada) e incluí el código del ejemplo "Blink" para hacer una primera prueba. Mi sorpresa fue que no funcionaba. Entonces probé el programa de ejemplo solo y comprobé que si funcionaba perfectamente. La estrategia que seguí fue ir aislando código hasta quedarme con el causante del error. Pues bien, he descubierto que el problema viene con el SD.begin de la parte de la tarjeta SD. Parece que entra en conflicto con las instrucciones para el encendido del LED. Os reflejo el código aislado que da error.

Code:
#include <SD.h>
// Variable global para la tarjeta SD
const int chipSelect = 10;   // Pin CS para la tarjeta Arduino. Hay que habilitarlo en modo salida para que funcione
//Variable global para el uso de LEDs
int led_rpm = 13;

void setup()
{
  Serial.begin(57600);     
  Serial.print("Initializing SD card...");    // Asegurarse de configurar el pin 10 en modo salida, incluso aunque no se use. Sino no funciona la tarjeta SD.
  pinMode(chipSelect, OUTPUT);
  // Comprueba si la tarjeta existe y puede ser inicializada:
 [code] if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
  }
  else Serial.println("card initialized.");
  // Inicialización del pin led_rpm como salida
  pinMode(led_rpm, OUTPUT);
}
 
void loop()
{
  // Bucle para encender un led si se llega a sobrepasar las rpm por encima de las establecidas
  digitalWrite(led_rpm,HIGH);        // Enciende el LED
  delay(1000);
  digitalWrite(led_rpm,LOW);         // Apaga el LED
  delay(1000); 
}
[/code]
 
Si hacéis una prueba y quitáis esta parte de código:

 if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
  }
  else Serial.println("card initialized.");

...funciona perfectamente.

Agradecería cualquier ayuda que podáis darme. Gracias de antemano.

Saludos,
Logged

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

Perdonad que he copiado mal el código al ser nuevo en este foro. Está partido pero sale al completo.

Como apunte adicional, confirmar que tanto con la parte de la SD como sin ella, el código compila bien. El problema es que el LED no actúa en el primer caso y sí en el segundo (cuando elimino la parte SD.begin).

Gracias de nuevo,
Logged

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

Hola de nuevo,

Ya he solucionado el asunto. Resulta que el protocolo de comunicación SPI para la tarjeta SD usa los pines 11, 12 y 13 y, por tanto, no pueden ser usados para conectar, por ejemplo, un LED.

Lo he conectado a otro pin libre con una resistencia externa y todo resuelto.

Lo pongo por si a alguno le sirve de ayuda en el futuro.

Saludos,
Logged

Pages: [1]   Go Up
Jump to: