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

Odpovědět
Batata
Příspěvky: 38
Registrován: 05 kvě 2020, 08:14
Reputation: 0
Kontaktovat uživatele:

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

Příspěvek od Batata » 04 úno 2021, 11:23

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.

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

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

Příspěvek od jankop » 04 úno 2021, 11:38

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.

Batata
Příspěvky: 38
Registrován: 05 kvě 2020, 08:14
Reputation: 0
Kontaktovat uživatele:

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

Příspěvek od Batata » 04 úno 2021, 14:39

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.

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

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

Příspěvek od jankop » 04 úno 2021, 15:36

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.

Batata
Příspěvky: 38
Registrován: 05 kvě 2020, 08:14
Reputation: 0
Kontaktovat uživatele:

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

Příspěvek od Batata » 17 úno 2021, 09:45

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ě.

Batata
Příspěvky: 38
Registrován: 05 kvě 2020, 08:14
Reputation: 0
Kontaktovat uživatele:

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

Příspěvek od Batata » 17 úno 2021, 09:46

A ETH funguje normálně skoro vždy. Jen občas se neinicializuje správně.

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

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

Příspěvek od pavel1tu » 17 úno 2021, 10:10

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.
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Batata
Příspěvky: 38
Registrován: 05 kvě 2020, 08:14
Reputation: 0
Kontaktovat uživatele:

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

Příspěvek od Batata » 20 úno 2021, 07:02

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.

Batata
Příspěvky: 38
Registrován: 05 kvě 2020, 08:14
Reputation: 0
Kontaktovat uživatele:

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

Příspěvek od Batata » 05 lis 2022, 07:00

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.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 9 hostů