Pages: [1]   Go Down
Author Topic: Ardweeny bloccato - programma scrive in loop sulla seriale  (Read 495 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 27
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

buonasera.
ho caricato maldestramente un programma che continua a scrivere con Serial.println sulla seriale..
di conseguenza non riesco piu a caricare il programma dall'ide
rimane nello stato "sto caricando" e sotto appare "avrdude: stk500_getsync(): not in sync: resp=0x00"

ho fatto qualche ricerca e per questo problema consigliano di resettare il micro premendo il pulsante di reset un attimo prima che l'ide inizi a trsmettere il programma... ho provato in vari modi ma non riesco piu a farlo funzionare smiley-sad

siete la mia unica speranza..   

Code:

void setup() {
   Serial.begin(9600);
}

void loop() {
  digitalWrite(ledPin,1);  // let led blink
  delay(70);
  digitalWrite(ledPin,0);  // let led blink
 
  int mic=readMic();
  long vcc=readVcc();
 
  Serial.print("vcc="  );
  Serial.print(vcc  );
  Serial.print("    mic="   );
  Serial.println(mic   );
}
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 574
Posts: 12679
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

si chiama "procedura di emergenza" e purtroppo è l'unico modo immediato per risolvere la questione, devi beccare il momento opportuno per premere il reset manualmente e ciò ti permette di caricare un qualsiasi nuovo sketch, risolvendo il problema. Cerca bene sul Forum e trovi la sequenza precisa per risolvere.
L'alternativa è quella di procurare un qualsiasi altro Arduino e ricaricare il bootloader mediante la tecnica ISP.
Logged


0
Offline Offline
Newbie
*
Karma: 0
Posts: 27
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

miracoloo ce l'ho fatta!!!
ho trovato la spiegazione di come usare un altro arduino per programmare il bootloader crcando "arduino isp" come mi hai detto tu..
purtroppo la procedura con il pulsantino di reset l'ho provata per due giorni .. cosi come indicato nel forum ma non sono riuscito mai a farlo funzionare...
grazie mille!!  in 5 minuti ho risolto..  smiley-wink

Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 27
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ora pero mi viene un dubbio:
perche lo sketch che ho caricato mi piantava l'arduino..??
tra una scrittura e l'altra sulla seriale c'erano alemeno 70ms
e quindi si pone il problema:

Se uso un loop che prevede la scrittura sulla seriale (ad esempo se devo leggere i valori di un sensore) , quanto tempo devo lasciare inattiva la seriale affinche l'ide riesca acaricare i programmi senza problemi?

...
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 574
Posts: 12679
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

È buona norma far partire la seriale dopo un tempo di un paio di secondi così copri il tempo delreset automatico.
Logged


Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 335
Posts: 23133
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ora pero mi viene un dubbio:
perche lo sketch che ho caricato mi piantava l'arduino..??
tra una scrittura e l'altra sulla seriale c'erano alemeno 70ms
e quindi si pone il problema:

Se uso un loop che prevede la scrittura sulla seriale (ad esempo se devo leggere i valori di un sensore) , quanto tempo devo lasciare inattiva la seriale affinche l'ide riesca acaricare i programmi senza problemi?

...
70 ms sono niente.. come ti ha detto Michele, ti serve minimo minimo 1 secondo, meglio 2.
Logged


0
Offline Offline
Newbie
*
Karma: 0
Posts: 27
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

infatti inserendo delay(2000) all'inizio del programma non ho piu avuto problemi...
la cosa che non capisco ancora bene però è la seguente:

il programma inizia con 2 secondi di attesa e poi parte un ciclo stretto di scrittura sulla seriale...
io mi aspettavo che i due secondi all'inizio servissero per riuscire a caricare il programma in quei due secondi appunto (quindi reset e caricamento).
mentre ora l'arduino accetta la programmazione anche durante il ciclo di scrittura sulla seriale, senza bisogno di doverlo resettare...




Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 335
Posts: 23133
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

I 2 secondi iniziali vengono trascorsi "girandosi i pollici", ossia introducono un ritardo che possa permettere all'utente di premere materialmente l'icona di upload di un nuovo sketch dopo che si è collegata la scheda al computer.
Logged


Italy (Venice)
Offline Offline
Edison Member
*
Karma: 25
Posts: 1362
Quello che non c'è non si può rompere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

La seriale della tua applicazione viene condivisa con la porta di comunicazione con il sistema di sviluppo, se la tua applicazione tiene occupata la seriale tutta per lui il sistema di sviluppo viene escluso ,  un delay iniziale fà sì che si possa recuperare  la connessione con il sistema di sviluppo

una cosa simile accade quando si progetta schede in cui il programma rimane più tempo in sleep che attivo, riconnettersi con la scheda mediante ISP durante il debug a volte risulta  faticoso

Logged

italy
Offline Offline
Sr. Member
****
Karma: 6
Posts: 313
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

A me è capitato qualche volta di bloccare l'IDE (sia 1.0.5 che 1.0.4) per colpa di troppi dati spediti alla seriale, purtroppo, l'unico rimedio era riavviare l'IDE dopo averlo resettato con Task Manager (e ci metteva un bel po ad essere "killed") poi ho rivisto il modo di inviare dati alla seriale e ho risolto, all'inizio pensavo fosse la versione 1.0.5 perché è iniziato da li, ma poi ho visto che era lo sketch che lo faceva intasare...
Logged

"The only way to do great work is to love what you do. If you haven’t found it yet, keep looking. Don’t settle" - Steve Jobs

Italy (Venice)
Offline Offline
Edison Member
*
Karma: 25
Posts: 1362
Quello che non c'è non si può rompere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

la cosa più semplice 5 secondi e fatto:  attacchi l'ISP programmer , un bel erase e go!
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 574
Posts: 12679
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

http://forum.arduino.cc/index.php?topic=231870.msg1671716#msg1671716
Logged


0
Offline Offline
Shannon Member
****
Karma: 136
Posts: 10525
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

un sistema più veloce è di tenere premuto reset PRIMA di inserire alimentare l'arduino (ovvero PRIMA di collegarlo alla USB), cliccare sull'ide upload, appa compare la scritta "sketck size balablabla"lasciare il pulsante di reset.

il problema sui 70ms:
prendiamo il baudrate "standard" di 9600, equivale a 960 byte al secondo, ovvero 0.96 byte o caratteri al MS.

Quindi se la scrittura è più di 70 caratteri, non ce la fai. un sistema per aspettare l'invio di tutti i caratteri è usando la Serial.flush() (negli ide > 1.0.0 se ricordo bene)

il propblema è che questi byte finiscono poi nel 8u2, nel suo buffer interno, e poi da questo nel buffer del PC, che chissà che giri tortuosi può fare.

nel momento in cui resetti, devi anche attendere che i buffer si puliscano, (in particaolare quello dell'8u2), altrimenti il programmatore vedrà arrivare questi dati enon capisce più nulla. In teoria anche tenere premuto a lungo il reset funziona, ma alle volte anche decine di secondi, finchè il led TX si spegne
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Pages: [1]   Go Up
Jump to: