Problema con spi lcd128x64 y modulo sd

buena noche comunidad espero esten muy bien, mi tema es que estoy haciendo un proyecto y tengo inconvenientes en trabajar un modulo sd y un display lcd128x64 ambos al tiempo mediante comunicacion spi, trabajando uno al tiempo me funcionan de maravilla, pero al trabajarlos juntos no se si es por que se interfiere la comunicacion spi de ambos y ninguno me funciona, el modulo sd no me reconoce y el display lcd no muestra imagen, tambien noto que se detiene el void loop por que si pongo un comentario por comunicacion serial no me envia, como si estuviera detenido el codigo en el void loop, enseño mi codigo ojala alguien me pueda dar un consejo de que estoy haciendo mal
muchas gracias por cualquier ayuda que me puedan dar

//libreria para modulo microsd
#include <SPI.h>  // incluye libreria interfaz SPI
#include <SD.h>   // incluye libreria para tarjetas SD
//defino pin para el select slave del modulo microsd
#define SSpin 10  // Slave Select en pin digital 10
File archivo;     // objeto archivo del tipo File
//chip select   señal de reloj    master in slave out   master out slave in
//cs 10         sck 13            miso 11               mosi 12

//libreria para display
#include <Arduino.h>
#include <U8g2lib.h>
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif

//U8G2_ST7920_128X64_1_SW_SPI u8g2(U8G2_R0, /* enable clock=*/13, /* RW data=*/11, /* RS CS=*/7, /* reset=*/8); //no deja, da error con liberia sd
//chip select   señal de reloj    master in slave out   master out slave in     reset
//cs 7          sck 13            miso -                mosi 11                 rs 8
U8G2_ST7920_128X64_1_SW_SPI u8g2(U8G2_R0, /* enable clock=*/4, /* RW data=*/3, /* RS CS=*/2, /* reset=*/5);  //al poner otros pines diferentes a los del modulo sd el problema persiste


void setup() {
  //Comunicacion serial
  Serial.begin(9600);

  //inicializo el modulo sd
  Serial.println("Inicializando tarjeta ...");    // texto en ventana de monitor
  if (!SD.begin(SSpin)) {                         // inicializacion de tarjeta SD
    Serial.println("fallo en inicializacion !");  // si falla se muestra texto correspondiente y
    return;                                       // se sale del setup() para finalizar el programa
  }
  Serial.println("inicializacion correcta");  // texto de inicialización correcta

  //inicializo la libreria del display
  u8g2.begin();

  //Serial.println("salio void setup");
}

void loop() {

  //Serial.println("voidloop"); //esta parte es la que digo que se deja de enviar cuando pongo ambos modulos juntos, parece que se detiene el void loop

  //mostramos las mediciones tomadas en el display
  u8g2.firstPage();
  do {
    //proceso();
    u8g2.setFont(u8g2_font_6x10_tf);  //definimos el tipo de letra
    u8g2.drawStr(0, 10, "Estacion fotovoltaica");
    u8g2.drawStr(0, 20, "hora:");
    u8g2.drawStr(0, 30, "humedad temp.");
    u8g2.drawStr(0, 40, "lum diam");
    u8g2.drawStr(0, 50, "volt amp ");
    u8g2.drawStr(0, 60, "pot in pot out");
  } while (u8g2.nextPage());
}


void proceso() {
  
//aqui leo info de los modulos y ya, elimine esto para que no quede muy largo el codigo

  //escribimos los valores en la sd
  archivo = SD.open("datos.txt", FILE_WRITE);  // apertura para lectura/escritura de archivo datos.txt
  if (archivo) {
    // guardamos los valores ya leidos
    archivo.println(String(temp) + "," + String(hum) + "," + String(lux));
    archivo.close();  // cierre de archivo
  } else {
    Serial.println("error en apertura de datos.txt");  // texto de falla en apertura de archivo
  }
}

¿Publicar los programas originales que funcionaron (antes de pegarlos juntos)?

¿El módulo es para SD o microSD?
Te pregunto porque el 99% (si no el 100%) de los módulos para microSD tienen un error de diseño y no liberan el bus SPI cuando deben hacerlo por lo que no se pueden usar junto a otros módulos SPI.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.