avvio loop lento !?

Ciao a Tutti,

volevo costruire un cronometro (minuti e secondi) usando un 74HC595 ed un display 4 cifre SH5461AS (catodo comune) il codice che stavo provando è questo:

int latch = 12; 
int CLK = 13;
int data = 11; 

int seg1 = 5;
int seg2 = 6;
bool chi = true;

byte table[] =
{ 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 
  0x39, 0x5e, 0x79, 0x71, 0x00, 0x80};

void setup() {
  Serial.begin(9600);
  pinMode(seg1, OUTPUT);
  pinMode(seg2, OUTPUT);
  digitalWrite(seg1, LOW);
  digitalWrite(seg2, LOW);
  pinMode(latch, OUTPUT);
  pinMode(CLK, OUTPUT);
  pinMode(data, OUTPUT);
  digitalWrite(latch, LOW);
  shiftOut(data, CLK, MSBFIRST, 0);
  digitalWrite(latch, HIGH);
  delay(500);
}

void loop() {

  for ( byte i = 0; i <= 17; i++) {
    Display(i);
    Serial.print(i);
    Serial.print(" ");
    Serial.print(table[i], DEC);
    Serial.print(" ");
    Serial.println(table[i], BIN);
    delay(500);
  }

  void Display(byte num)
  {

    digitalWrite(latch, LOW);
    shiftOut(data, CLK, MSBFIRST, table[num]);
    if (chi) {
      digitalWrite(seg1, HIGH);
      digitalWrite(seg2, LOW);
    }
    else {
      digitalWrite(seg2, HIGH);
      digitalWrite(seg1, LOW);
    }
    digitalWrite(latch, HIGH);
    if (num == 17) {
      chi = !chi;
    }
  }

da quando l’ho caricato nel MEGA2560 ho notato che ci impiega circa 10-12 secondi per entrare nel loop…la seriale inizia a trasmettere ma nel display a segmenti il primo numero appare all’ottavo ciclo…poi tutto ok.
allora le domande sono…10-12 secondi non sono un’eternità!?..ho provato altri sketch e fa lo stesso (10-12 secondi)…perchè il display inizia a funzionare dall’ottavo ciclo?..ho già provato altri pin per latch,CLK, data…ma è lo stesso.
grazie

update:

ho provato lo stesso sketch con un UNO ed entra subito nel loop...cosa può essere successo al MEGA?... :(

comunque anche con l'UNO la prima cifra viene mostrata all'ottavo ciclo...?

update2:

ho notato che il problema ce l'ho quando il MEGA è collegato al cavo USB...se collego ad un alimentatore esterno funziona bene...che sia il caso di eseguire quella che si chiama "manovra d'emergenza"...o qualche cosa di simile?

Non ho la piú pallida idea. Ciao Uwe

L'alimentazione è stabile? Mi sa che il cavo USB non ce la fa: potrebbe essere la porta USB che non riesce a fornire la corrente sufficiente, oppure il cavo ha una resistenza troppo elevata.

ciao Datman,

avevo pensato anch'io a quest'eventualità...ho preso un UNO utilizzando lo stesso sketch, lo stesso cavo e collegando le stesse cose e funziona correttamente.

...ad aggiungere il terzo update...se durante l'avvio (collegamento del cavo USB) premo il pulsante di reset, diciamo dopo 1-2 secondi, tutto si avvia subito senza problemi.

questo problema c'è anche se carico lo sketch di esempio BLINK...quindi...penso...con consumo minimo.

Presuppongo che le schede non sono dei originali Arduino.

È facile che abbiano un errore nel circuito di reset e percui non parte subito.

Ciao Uwe

Ciao uwefed,

Esatto il MEGA è un clone che ha lavorato bene per diversi mesi...ed all'improvviso il problema. Diciamo che ho risolto contattando il fornitore che me lo cambia.

Sí, sarebbe stato il mio prossimo consiglio di provare con un altro. Ciao Uwe