Stránka 1 z 1

Ethernet shield a SD karta problém při startu

Napsal: 04 úno 2021, 11:23
od Batata
Ahoj, mám svůj nový Ethernet Shield a když nahraji program(při nahrávání mám ve shieldu vloženou SD kartu), tak se mi Ethernet asi půl minuty inicializuje a potom nefunguje. Pokud nahraji program bez SD karty ve shieldu, tak se ethernet inicializuje normálně a funguje.

Kód: Vybrat vše

#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>
#include <Wire.h>
#include <MCUFRIEND_kbv.h>
#include <Calibri12pt7b.h>
#include <calibrib18pt7b.h>

byte mac[] = {0x90, 0xA2, 0xDA, 0x00, 0x9C, 0xB7};

char* server;
String addr;

EthernetServer svr(80);
IPAddress err(0,0,0,0);
MCUFRIEND_kbv tft;
String read = 
R"(
<!DOCTYPE html>
<html>
	<head>
		<title>Arduino Mega 2560</title>
		<meta charset="utf-8">
	</head>
	<body>
		<h1>501 Internal Server Error</h1>
		Error in server SD unit. Cannot read server file.
	</body>
</html>
)";
uint16_t bg = tft.color565(220,150,0);
bool sd;
void setup(){
    Serial.begin(9600);
    tft.reset();
    tft.begin(tft.readID());
    tft.invertDisplay(true);
    tft.setRotation(3);
    tft.fillScreen(bg);
    tft.setTextColor(0, bg);
    tft.setCursor(0, 18);
    tft.setFont(&calibri12pt7b);
    tft.println("Inicializace Ethernetu...");
    Ethernet.begin(mac);
    tft.fillScreen(bg);
    tft.setFont(&calibri12pt7b);
    delay(1000);
    tft.setFont(&calibrib18pt7b);
        tft.setCursor(0, 22);
    tft.print("ServerDuino V1");
    tft.setFont(&calibri12pt7b);
    tft.print('\n');
    tft.println(Ethernet.localIP() != err ? "ETH v poradku" : "ETH nefunguje");
    tft.print("IP ");
    tft.println(Ethernet.localIP());
    tft.print("SD karta ");
    sd = SD.begin(4);
    tft.println(sd?"v poradku" : "nefunguje");
    
}
String last;
    int ypos = 90;
void state(String st){   
    if(last != st){ 
        last = st;
        tft.setCursor(0,ypos+20);
        tft.fillRect(0,ypos, 480, 38, bg);
        tft.print(st);
    }
}
uint32_t lastConnection = millis();
bool cleared = true;
void loop(){
    if(Serial.available()){
        bg = tft.color565(Serial.parseInt(), Serial.parseInt(), Serial.parseInt());
        tft.setCursor(0, 22);
        tft.setFont(&calibrib18pt7b);
        tft.print("ServerDuino V1");
        tft.setFont(&calibri12pt7b);
        tft.print('\n');
        tft.println(Ethernet.localIP() != err ? "ETH v poradku" : "ETH nefunguje");
        tft.print("IP ");
        tft.println(Ethernet.localIP());
        tft.print("SD karta ");
        sd = SD.begin(4);
        tft.println(sd?"v poradku" : "nefunguje");
        tft.setCursor(0,ypos+20);
        tft.fillRect(0,ypos, 480, 38, bg);
        tft.print(last);
    }
    EthernetClient client = svr.available();
    if(client.available() && client.connected()){
        lastConnection = millis()+60000;
        cleared = false;
        state("Zadost o pripojeni...");
        Serial.println("New Connection:");
        client.readStringUntil('/');
        String request = client.readStringUntil(' ');
        File file = SD.open(request);
        state("Soubor ");
        
        if(file){            
            tft.print("otevren      ");
            client.println("HTTP/1.1 200 OK\n");
            while(file.available()){
                read.concat(file.read());
            }
            file.close();
            client.println(read);
        }
        else{           
            tft.println("vadny        ");
            client.println("HTTP/1.1 200 OK\n");
            client.println(read);
        }
        String response;
        while(client.available()){
            response.concat((char)client.read());
        }
        client.stop();
        tft.fillRect(0,78, 480, 242, bg);
        tft.print(response);
        delay(500);
    }
    else {
        state("System bezi...");
    }
    if((!cleared)&&millis() > lastConnection){
        cleared = true;        
        tft.fillRect(0,78, 480, 242, bg);
    }
}
ještě k těm fontům calibri - ty jsem si sám vytvořil a při testování je můžete nahradit jinými.

Re: Ethernet shield a SD karta problém při startu

Napsal: 04 úno 2021, 11:38
od jankop
Jak jsem pochopil, tak tam máš ještě TFT. Samozřejmě se ti tluče Ethernet s tím SD slotem na displeji, to je snad naprosto jasné, když to nefunguje.

Re: Ethernet shield a SD karta problém při startu

Napsal: 04 úno 2021, 14:39
od Batata
SD karta funguje i s připojeným TFT, tím to nebude. Mám s tím ještě jeden problém. Chci načítat serverové html soubory z SD karty, a zobrazovat údaje o serveru na TFT. Když použiji SD.exists, tak mi to hlásí, že soubor existuje, ale když ho otevřu, tak mi to hlásí file == false.

Re: Ethernet shield a SD karta problém při startu

Napsal: 04 úno 2021, 15:36
od jankop
Myslel jsem si, že máš Arduino, na něm Ethernet shield a na něm TFT shield s SD slotem. A že v této situaci ti nefunguje SD karta. Pak si myslím, že je problém, jak jsem uvedl výše. Pokud je to jinak, tak to musíš lépe specifikovat.

Re: Ethernet shield a SD karta problém při startu

Napsal: 17 úno 2021, 09:45
od Batata
SD karta nefunguje, ale to je ta karta na Ethernet shieldu. A navíc jak kdy, někdy se inicializuje normálně a soubory jdou číst normálně.

Re: Ethernet shield a SD karta problém při startu

Napsal: 17 úno 2021, 09:46
od Batata
A ETH funguje normálně skoro vždy. Jen občas se neinicializuje správně.

Re: Ethernet shield a SD karta problém při startu

Napsal: 17 úno 2021, 10:10
od pavel1tu
Ten dotaz tu zněl několikrát
- definuj co vše máš a po jakých rozhraních zapojené.

Jak se tu naznačuje, pokud tam máš SD 2x, může to dělat problémy a nemyslí se tím SD karty fyzicky ale slot na ni.

Re: Ethernet shield a SD karta problém při startu

Napsal: 20 úno 2021, 07:02
od Batata
Mám Ethernet shield s CS pinem shieldu 10 a SD slot na shieldu má CS pin 4. Potom mám TFT displej s CS pinem SD karty 10, ale normálně to s tím Ethernetem funguje, protože v TFT nemám SD kartu. Jinak nemám připojeno vůbec nic a na SD kartě mám jeden soubor ve formátu TXT, SD kartu jsem zformátoval na FAT32, protože u FAT16 mi to hlásí, že SD je příliš velká. A ještě k těm problémům s inicializací - problémy trvají i po odpojení TFT displeje.

Re: Ethernet shield a SD karta problém při startu

Napsal: 05 lis 2022, 07:00
od Batata
Tak nakonec jsem na to přišel. Stačí při čtení z karty vždy na CS pinu Ethernetu hodnotu HIGH a na CS pinu karty LOW. Jinak je třeba, aby na pinu CS karty bylo pořád HIGH.