Problema caricamento sketch su NANO con usb CH340G basato su ATmega328P

Ciao a tutti,
sto impazzendo con un clone del Nano, ovvero un Tinxi NANO 5V/16MHz con usb CH340G basato su ATmega328P (in allegato immagine).

ho installato i driver (in allegato)
nell’IDE ho correttamente selezionato la scheda, il processore e la porta
ho messo l’impostazione “verbose” nell’IDE per vedere tutto il dettaglio in fase di upload
non ho collegato nulla a nessun pin della board, solo collegamento mini-USB con il Mac

Il problema è che caricando degli sketch demo non ho grossi problemi, a parte che ogni tanto falliscono (ad es. “avrdude: stk500_recv(): programmer is not responding”).
Però sono sempre sketch piccoli.

Provando invece con un altro scketch, non c’è modo … carica qualche % e poi errori a raffica; lo stesso sketch caricato su un Micro Pro funzia perfettamente (come discusso in un altro post).

Qui di seguito lo sketch:

/*
 WiFiEsp test: BasicTest
 
 Performs basic connectivity test and checks.
*/

#include "WiFiEsp.h"

// Emulate Serial1 on pins 7/6 if not present
#ifndef HAVE_HWSERIAL1
#include "SoftwareSerial.h"
// SoftwareSerial Serial1(6, 7); // RX, TX
#endif


// chiavetta vodafone
/*
char ssid[] = "VodafoneMobileWiFi-123456";     // your network SSID (name)
char pwd[] = "11111111";  // your network password
*/

// chiavetta 3
char ssid[] = "WebPocket-1234";     // your network SSID (name)
char pwd[] = "222222222";  // your network password


char pwdErr[] = "xxxx";   // wrong password


void setup()
{
  Serial.begin(9600);
  Serial1.begin(115200);
  WiFi.init(&Serial1);
}

void loop()
{
  assertEquals("Firmware version", WiFi.firmwareVersion(), "1.5.2");
  assertEquals("Status is (WL_DISCONNECTED)", WiFi.status(), WL_DISCONNECTED);
  assertEquals("Connect", WiFi.begin(ssid, pwd), WL_CONNECTED);
  assertEquals("Check status (WL_CONNECTED)", WiFi.status(), WL_CONNECTED);
  assertEquals("Check SSID", WiFi.SSID(), ssid);

  IPAddress ip = WiFi.localIP();
  assertNotEquals("Check IP Address", ip[0], 0);
  Serial.print("IP Address: ");
  Serial.println(ip);
  
  byte mac[6]={0,0,0,0,0,0};
  WiFi.macAddress(mac);

  Serial.print("MAC: ");
  Serial.print(mac[5], HEX);
  Serial.print(":");
  Serial.print(mac[4], HEX);
  Serial.print(":");
  Serial.print(mac[3], HEX);
  Serial.print(":");
  Serial.print(mac[2], HEX);
  Serial.print(":");
  Serial.print(mac[1], HEX);
  Serial.print(":");
  Serial.println(mac[0], HEX);
  Serial.println();
  
  assertEquals("Disconnect", WiFi.disconnect(), WL_DISCONNECTED);
  assertEquals("Check status (WL_DISCONNECTED)", WiFi.status(), WL_DISCONNECTED);
  assertEquals("IP Address", WiFi.localIP(), 0);
  assertEquals("Check SSID", WiFi.SSID(), "");
  assertEquals("Wrong pwd", WiFi.begin(ssid, pwdErr), WL_CONNECT_FAILED);

  IPAddress localIp(192, 168, 168, 111);
  WiFi.config(localIp);
  
  assertEquals("Connect", WiFi.begin(ssid, pwd), WL_CONNECTED);
  assertEquals("Check status (WL_CONNECTED)", WiFi.status(), WL_CONNECTED);

  ip = WiFi.localIP();
  assertNotEquals("Check IP Address", ip[0], 0);


  Serial.println("END OF TESTS");
  delay(60000);
}


////////////////////////////////////////////////////////////////////////////////////


void assertNotEquals(const char* test, int actual, int expected)
{
  if(actual!=expected)
    pass(test);
  else
    fail(test, actual, expected);
}

void assertEquals(const char* test, int actual, int expected)
{
  if(actual==expected)
    pass(test);
  else
    fail(test, actual, expected);
}

void assertEquals(const char* test, char* actual, char* expected)
{
  if(strcmp(actual, expected) == 0)
    pass(test);
  else
    fail(test, actual, expected);
}


void pass(const char* test)
{
  Serial.print(F("********************************************** "));
  Serial.print(test);
  Serial.println(" > PASSED");
  Serial.println();
}

void fail(const char* test, char* actual, char* expected)
{
  Serial.print(F("********************************************** "));
  Serial.print(test);
  Serial.print(" > FAILED");
  Serial.print(" (actual=\"");
  Serial.print(actual);
  Serial.print("\", expected=\"");
  Serial.print(expected);
  Serial.println("\")");
  Serial.println();
  delay(10000);
}

void fail(const char* test, int actual, int expected)
{
  Serial.print(F("********************************************** "));
  Serial.print(test);
  Serial.print(" > FAILED");
  Serial.print(" (actual=");
  Serial.print(actual);
  Serial.print(", expected=");
  Serial.print(expected);
  Serial.println(")");
  Serial.println();
  delay(10000);
}

Cosa posso fare?

Nano V3.0 ATmega328 5V 16M CH340G.png

CH34x_Install_V1.3.zip (174 KB)

Hai provato la seriale, senza caricare nessuno sketch ?
Ovvio che ti ci vuole qualcosa che risponda alla seriale. Tutto per provare che ci sia trasferimento dati dalla USB.
Come la ESP, per esempio.

No, ma provo ... E' che comunque piccoli sketch vengono caricati e funzionano, perchè quelli più grandi no?

Quelli piú grandi intendi il Tuo? Che messaggi di errore da? Quanta Memoria ocupa? Ciao Uwe

Intendo lo sketch che ho riportato sopra ...

Mi da errori del tipo "avrdude: stk500_recv(): programmer is not responding". Posso riprovare e metto la lista.

S'è persa la comunicazione USB.

Ho un dubbio sul cavo USB, i driver dovrebbero essere a posto.

Forse il connettore miniUSB.

Non ho parole ... oggi senza modificare nulla il caricamento è funzionato perfettamente, anche con sketch voluminosi :o

Forse era un problema del Mac o di qualche buffer ... no comment ...

Il problema resta la non comunicazione con il modulo wifi, ma questa è un'altra storia >:(