Ardutester - Arduino Component Tester (INCOMPLETO)

Ok, stasera la provo.
Grazie.

Testato:
come dice lesto va bene, ma mancano dei parametri accessori, questa dovrebbe essere completa

-c arduino -p m8 -P COM1 -b 115200 -U flash:r:"C:\avr\test.hex":i

questa e' per la UNO, cambia la velocita' della porta, la com, ed il nome file

oltre a settare la corretta porta COM penso sia il caso di diminuire i baud a 19200.

Se si usa ArduinoISP bisogna senz'altro mettere la velocità a 19200, perché lo sketch che simula l'ISP lavora solo a quella velocità. Poi c'è da dire che al posto di "arduino" come tipo di programmatore (sempre nel caso si usi l'ArduinoISP) si può usare "stk500v1". Oppure "stk500v2" se si usa la Mega con l'ArduinoISP sopra.
Inoltre la stringa di testato vale per un Atmega8:

-p m8

Al parametro "-p" va passato il tipo di micro:
m328 = Atmega328/atmega328p
m168 = Atmega168/168P
t85 = Attiny85
t84 = Attiny84/84A
m2560 = Atmega2560
ecc...

Ma Paolo lo ha specificato che deve leggere la memoria di un ATmega8L...

stk500v1 sembra dia qualche problemino con le versioni più recenti di IDE 1.0.x, mentre è l'unica opzione possibile con 0022/3

Mea culpa, mea maxima culpa :sweat_smile:

stk500v1 sembra dia qualche problemino con le versioni più recenti di IDE 1.0.x, mentre è l'unica opzione possibile con 0022/3

Io non uso avrdude di Arduino ma quello della mia distribuzione.

deve solo aggiornare porta e velocita' seriale, come avevo gia' scritto di fare :slight_smile:
non ricordavo a memoria la velocita' per la 2009 per questo gli avevo detto di farlo lui stesso.
In definitiva sarebbe:

-c arduino -p m8 -P COMx -b 19200 -U flash:r:"C:\avr\test.hex":i

Tranne il caso dell'ArduinoISP allegato alla 1.0.0, che andava a 9600, in tutti gli altri casi la velocità per programmare usando l'Arduino come programmatore ISP è sempre 19200.

credo tu ti confondi (oppure io, uno dei due di certo si confonde :))
il parametro -b si riferisce alla velocita' della seriale via usb, quindi sulla uno va bene 115200, sulla 2009 e' 57600
se metti di meno funziona ugualmente.
Quello a cui ti riferisci tu e' la velocita' interna allo sketch arduinoISP

forse ha ragione Test, il parametro lo cambiavamo via sketch, non a caso l'ArduinoISP_LM (tue iniziali), come chiamai la tua versione automatica nell'articolo pubblicato sul tema, leggeva la versione di IDE e impostava 9600 o 19200. Vi faccio presente che nei miei studi ho trovato diverse situazioni nelle quali addirittura NON è possibile dichiarare tale parametro nella riga di comando, in caso contrario la programmazione non va a buon fine.....

io sono in ferie, Leo no, sono avvantaggiato :slight_smile:

a me non e' mai capitato che mettendo il -b non funzionasse, ma di certo hai fatto piu' esperimenti tu. Inoltre essendo dichiaratamente un parametro "Override", puo' essere credo sempre omesso

Se si parla di programmazione ISP via terminale usando un Arduino + ArduinoISP se non si mette la velocità a 19200 l'operazione non funziona.
Se si parla di comunicare con l'Atmega328 tramite il chip Atmega8/16U2 della UNO (oppure l'FT232 della 2009) allora la velocità da mettere è 115200 (oppure 57600) perché avrdude non dialoga con l'ArduinoISP ma con il firmware del chip convertitore (oppure direttamente con l'FT232).
Sono 2 casi distinti. Però se si sta usando l'Arduino+ArduinoISP per leggere un Atmega8L, questo immagino sarà montato su breadboard, quindi la velocità da mettere è 19200.

non ti seguo,

per memorizzare il programma presente su un micro messo su breadboard, via arduinoisp, l'arduinoisp verra' connesso via usb al pc che mandera' i comandi. il -b riguarda la seriale che esiste tra pc e arduinoisp, e sara' sempre un convertitore usb seriale.

No. Quando dialoghi con l'ArduinoISP devi "parlare" alla velocità specificata nello sketch. L'ArduinoISP lavora a 19200 bps, se ci parli più velocemente o più lentamente non funziona.
Non confondere la velocità con cui "parli" con il chip convertitore, nel caso dell'Atmega8/16U2 questa è 115200 e nel caso dell'FT232 è 57600: lui però è un tramite. Durante la programmazione, mette in comunicazione il PC con il chip da programmare e deve comunicare con lo sketch ArduinoISP che, ricordo, è un "emulatore" di un programmatore, quindi la velocità non può essere troppo elevata altrimenti non riesce a ricevere i dati e contemporaneamente a spedirli: per questo motivo, la sua velocità è impostata a 19200.
Ecco l'inizio del setup dell'ArduinoISP:

void setup() {
  Serial.begin(19200);
  ....

Come vedi, lo sketch apre la seriale a 19200 bps. Se non specifichi questa velocità, vai fuori temporizzazione e ricevi i messaggi di not in synch.

mmm
ora ti seguo, ma come mai usando la stringa mia originale, con una Uno, funziona a 115200 ? :grin:
Ho pensato forse che entra in gioco qualche buffer hw nel convertitore ?
Non sono a casa per farti una prova in realtime, ma ho letto altre volte con la stringa che ti ho messo, chip via arduinoisp

Se usi l'Arduino solo come convertitore, con il chip rimosso, e lo sketch lo spedisci ad un chip in standalone con bootloader caricato sopra, allora la velocità è quella che dici tu, ossia 57600/115200 bps. Ma se il chip in standalone non ha il bootloader ed usi la scheda Arduino con il suo micro e lo sketch ArduinoISP, allora la velocità deve essere 19200.

Te la do' vinta, per ora, non ho voglia di testare :slight_smile:
Ma ritornerò sulla questione :slight_smile:

Testato:
... non ho voglia di testare ...

Con il tuo nick, non puoi farne a meno :stuck_out_tongue: XD

(scusa, non ho proprio resistito :wink: XD)

Incongruenza è voluta, per sottolineare la mia attuale voglia di fare :slight_smile:

@Pighixxx
come suggerito da Leo si potrebbe sostituire la divisione nella ReadU con uno shiftamento
Questo

  //Convert to voltage;
  Value *= U;                                    //ADC readings * U_ref
  Value /= 1024;                                 // / 1024 for 10bit ADC

diventa

  //Convert to voltage;
  Value *= U;                                    //ADC readings * U_ref
  Value = (Value>>10);                                 // / 1024 for 10bit ADC

Molto più veloce della divisione, così Markus è felice. :grin:

P.S.
Credo si possa scrivere anche

  Value >>= 10;                                 // / 1024 for 10bit ADC

Testato:
Te la do' vinta, per ora, non ho voglia di testare :slight_smile:
Ma ritornerò sulla questione :slight_smile:

Sono tornato sulla questione come promesso, ed il risultato e' che... Hai ragione tu :slight_smile:

la stringa originale che ho messo io, -b 115200, non e' sbagliata, ma la uso per lavorare su un normale arduino via avrdude (ricordate gli esperimenti di lettura eeprom e lettura flash via usb ?)
Mentre per usare un arduino come programmatore, via ArduinoISP, che e' quello che voleva fare appunto paolo, serve il -b a 19200