USBTinyISP

Ciao a tutti, facendo riferimento a questo topic http://arduino.cc/forum/index.php/topic,110429.15.html mi domandavo se ho fatto tutto correttamente:

ho installato winavr, dal quale ho estrapolato avrdude... ho scaricato il firmware e realizzato il seguente collegamento per interfacciare arduino uno al micro attiny2313

piu il classico condensatore tra reset e gnd...

dopo di che ho usato i comandi indicati da leo72:

avrdude -U lfuse:w:0xe4:m -U hfuse:w:0x9f:m -U efuse:w:0xff:m -p t2313 -c stk500v1 -P porta_computer
avrdude -U flash:w:nome_firmware:i -p t2313 -c stk500v1 -P porta_computer

fatto questo, da cmd ottengo la schermata allegata...ho fatto correttamente? ps. uso arduinoISP

avrdude.png

Ho appena provato anche da linux e ottengo:

localhost carlo # avrdude -U lfuse:w:0xe4:m -U hfuse:w:0x9f:m -U efuse:w:0xff:m -p t2313 -c stk500v1 -P /dev/ttyACM0 -F

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0x000000
avrdude: Yikes!  Invalid device signature.
avrdude: Expected signature for ATtiny2313 is 1E 91 0A
avrdude: reading input file "0xe4"
avrdude: writing lfuse (1 bytes):

Writing |                                                    | 0% 0.00s ***failed;  
Writing | ################################################## | 100% 0.08s

avrdude: 1 bytes of lfuse written
avrdude: verifying lfuse memory against 0xe4:
avrdude: load data lfuse data from input file 0xe4:
avrdude: input file 0xe4 contains 1 bytes
avrdude: reading on-chip lfuse data:

Reading | ################################################## | 100% 0.00s

avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x0000
         0xe4 != 0x00
avrdude: verification error; content mismatch

avrdude: safemode: lfuse changed! Was e4, and is now 0
Would you like this fuse to be changed back? [y/n] y
avrdude: stk500_recv(): programmer is not responding

come posso risolvere? il collegamento è corretto perché i sketch tradizionali li carico senza problemi con il software arduino 0023

Perché hai intitolato il thread "USBtinyISP"?
Stai usando un USBtinyISP oppure vuoi replicare questo programmatore?

Per ora prova aggiungendo il parametro "-b 19200", che in quelle stringhe per avrdude non c'è. Serve ad impostare la velocità di comunicazione, e senza di esso lo sketch ArduinoISP non lavora correttamente.

leo72:
Perché hai intitolato il thread "USBtinyISP"?
Stai usando un USBtinyISP oppure vuoi replicare questo programmatore?

Per ora prova aggiungendo il parametro "-b 19200", che in quelle stringhe per avrdude non c'è. Serve ad impostare la velocità di comunicazione, e senza di esso lo sketch ArduinoISP non lavora correttamente.

Ciao, il mio intento è quello di realizzare un USBtinyISP riportato in questo post: Schema USBTinyISP modificato - #2 by igor99480 - Generale - Arduino Forum
e per programmare l'attiny2313 utilizzo arduinoISP.

ora mi trovo in ambiente Linux, e ho scaricato come da suggerimento il firmware da USBtiny-based AVR Programmer

al post Schema USBTinyISP modificato - #22 by leo72 - Generale - Arduino Forum suggerivi (fatalità te :slight_smile: ) i seguenti comandi per settare l'oscillatore esterno da 12, e per caricare l'hex:

avrdude -U lfuse:w:0xe4:m -U hfuse:w:0x9f:m -U efuse:w:0xff:m -p t2313 -c stk500v1 -P porta_computer

avrdude -U flash:w:nome_firmware:i -p t2313 -c stk500v1 -P porta_computer

dando anche solo il primo comando in giro vedo che ci sono degli errori:

# avrdude -U lfuse:w:0xe4:m -U hfuse:w:0x9f:m -U efuse:w:0xff:m -p t2313 -c stk500v1 -P /dev/ttyACM0 

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0x000000
avrdude: Yikes!  Invalid device signature.
         Double check connections and try again, or use -F to override
         this check.


avrdude done.  Thank you.

allora ho aggiunto l'opzione -F ottenendo lo stesso degli errori:

# avrdude -U lfuse:w:0xe4:m -U hfuse:w:0x9f:m -U efuse:w:0xff:m -p t2313 -c stk500v1 -P /dev/ttyACM0 -F

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0x000000
avrdude: Yikes!  Invalid device signature.
avrdude: Expected signature for ATtiny2313 is 1E 91 0A
avrdude: reading input file "0xe4"
avrdude: writing lfuse (1 bytes):

Writing |                                                    | 0% 0.00s ***failed;  
Writing | ################################################## | 100% 0.08s

avrdude: 1 bytes of lfuse written
avrdude: verifying lfuse memory against 0xe4:
avrdude: load data lfuse data from input file 0xe4:
avrdude: input file 0xe4 contains 1 bytes
avrdude: reading on-chip lfuse data:

Reading | ################################################## | 100% 0.00s

avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x0000
         0xe4 != 0x00
avrdude: verification error; content mismatch

avrdude: safemode: lfuse changed! Was e4, and is now 0
Would you like this fuse to be changed back? [y/n] Y
avrdude: stk500_recv(): programmer is not responding

Come potrei risolvere? purtroppo è la prima volta che utilizzo avrdude da linea di comando e non ci capisco molto... se aggiungo l'opzione da te indicata -b 19200 ottengo:

# avrdude -U lfuse:w:0xe4:m -U hfuse:w:0x9f:m -U efuse:w:0xff:m -p t2313 -c stk500v1 -P /dev/ttyACM0 -F -b 19200
avrdude: stk500_recv(): programmer is not responding

avrdude done.  Thank you.

Il parametro "-F" non lo usare mai. Forzi un'operazione anche contro il volere di avrdude, e potresti fare dei danni.
Prova con avrdude distribuito con l'IDE di Arduino, lo trovi in /hardware/tools/
E con esso usa il suo file .conf.

Quindi, ricapitoliamo:

  1. spostati in /hardware/tools e lì copiaci il firmware
  2. apri poi un terminale in questa cartella e dai:
    ./avrdude -C ./avrdude.conf -U lfuse:w:0xef:m -U hfuse:w:0xdb:m -p t2313 -c stk500v1 -P /dev/ttyACM0 -b 19200
    NB: questi sono i fuse che Adafruit imposta per il suo USBtinyISP (li ho presi dalla versione 1.0 del programmatore)
    NB2: in questo modo imposti il micro per usare un clock esterno quindi se la scrittura va a buon fine, poi ti serve il risonatore ceramico da 12 MHz esterno

Riporta cosa dice avrdude.

Purtroppo ancora nulla da fare...

# ./avrdude -C ./avrdude.conf -U lfuse:w:0xef:m -U hfuse:w:0xdb:m -p t2313 -c stk500v1 -P /dev/ttyACM0 -b 19200
avrdude: stk500_recv(): programmer is not responding

avrdude done.  Thank you.

A questo punto servono delle info:
che versione dell'IDE usi?
che distribuzione stai usando?
che Arduino hai?

leo72:
che versione dell'IDE usi?

con la 1.0.1 ottengo quanto sopra riportato, mentre con la 0022 ottengo:

# ./avrdude -C ./avrdude.conf -U lfuse:w:0xef:m -U hfuse:w:0xdb:m -p t2313 -c stk500v1 -P /dev/ttyACM0 

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e950f
avrdude: Expected signature for ATtiny2313 is 1E 91 0A
         Double check chip, or use -F to override this check.

avrdude done.  Thank you.
# ./avrdude -C ./avrdude.conf  -U flash:w:main.hex:i -p t2313 -c stk500v1 -P /dev/ttyACM0 

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e950f
avrdude: Expected signature for ATtiny2313 is 1E 91 0A
         Double check chip, or use -F to override this check.

avrdude done.  Thank you.

leo72:
che distribuzione stai usando?

Sabayon Linux X

leo72:
che Arduino hai?

Arduino UNO R3

Il parametro -b 19200 non puoi ometterlo, infatti AVRDUDE sta leggendo la signature del micro di Arduino.
Se usi l'IDE 1.0.1 al posto di stk500v1 devi scrivere arduino.

-U flash:w:main.hex:i io la scrivo col percorso del file (WIN):

-U flash:w:C:\main.hex:i

altra cosa: il "classico" condensatore lo devi togliere, serve solo se hai il problema dell'autoreset, diversamente ti impedisce di lavorare.

mmm.. forse passando da windows a linux devo aver combinato qualche casino...

ho ricaricato l'arduinoISP e ho magicamente risolto con la 0023 64 bit... i comandi utilizzati sono stati quelli segnalati nel primo post con l'aggiunta del parametro -b 19200

grazie mille come sempre....

un ultima domanda... guardando lo schema.. le resistenze 22-47 si intende K vero?

assolutamente no, anzi il valore standard è 68 ohm, 22 ohm mi sembra davvero troppo poco.

Risposte in libertà:

  1. se hai la UNO R3 non va usato il condensatore anti-autoreset perché la UNO R3 ha l'Optiboot 4.4 che risolve quel problema;
  2. usando avrdude stk500v1 o arduino sono equivalenti: il secondo emula il primo. Tant'è che nelle ultime versioni di avrdude è stato inserito "arduino" tra le opzioni selezionabili come programmatore, ma è indifferente perché l'ArduinoISP emula proprio un programmatore STK500 versione 1.
  3. come dice Michele, stavi cercando di programmare l'Atmega328 dell'Arduino, lo conferma la signature che ti scriveva: 0x1e950f è quella del 328
  4. per replicare l'USBtinyISP io ho usato R da 47 ohm, se può esser d'aiuto

una sola precisazione, nell'AVRDUDE della 0022 il programmatore "arduino" non c'è quindi bisogna usare STK500v1, nella 1.0.1 ci sono entrambi.

  • in lettura di uno stand-alone si usa comunque STK500v1
  • invece in scrittura si deve usare STK500v1 nella 0022 e arduino nella 1.0.1
    Ovviamente le mie prove riguardano le versioni integre di 0022 e 1.0.1, quindi ognuna col proprio AVRDUDE.exe

Io uso avrdude del mio sistema, probabilmente usando quello distribuito con l'IDE le cose cambiano.

Ciao a tutti, prima che faccia danni ho un ultima domanda.. ho realizzato l'usbtinyisp... ora lo devo collegare all'atmega328 da programmare... mi domandavo:

i pin MOSI, MISO, SCK, RST, VCC, GND dell'USBtinyISP vanno collegati ai ripsettivi pin MOSI, MISO, SCK, RST, VCC, GNDn dell'atmega328... giusto?

max95:
Ciao a tutti, prima che faccia danni ho un ultima domanda.. ho realizzato l'usbtinyisp... ora lo devo collegare all'atmega328 da programmare... mi domandavo:

i pin MOSI, MISO, SCK, RST, VCC, GND dell'USBtinyISP vanno collegati ai ripsettivi pin MOSI, MISO, SCK, RST, VCC, GNDn dell'atmega328... giusto?

--> www.michelemenniti.it/VHD/Elettronica/GPAT_v4.pdf

No, il pin RST del Tiny2313 non va collegato al corrispondente del 328. Il pin RST dell'Atmega328 va collegato al pin che pilota il reset del Tiny2313, che se non ricordo male nell'USBtinyISP è il pin 16 del 2313. Per sicurezza ricontrolla gli schemi del programmatore di Adafruit

Ciao a tutti.. rieccomi...

risolta la parte software ho un problema nella parte hardware...

facendo riferimento all'allegato (prelevato da questa discussione http://arduino.cc/forum/index.php/topic,110429.0.html ) la scheda non viene riconosciuta dal pc (sia sotto win7 che sotto linux)...ho controllato e ricontrollato il circuito da me realizzato piu volte...

mi confermate la correttezza dello schema?

In che senso non viene riconosciuta?
Che ti dice dmesg?

Che distro usi, poi?
Ricordati che l'USBtinyISP necessita di permessi aggiuntivi per poter essere montato senza problemi.
Leggi la parte finale di questa pagina:
http://www.ladyada.net/make/usbtinyisp/avrdude.html

Prova l'ultima riga, perché sulle distro più recenti le altre due non funzionano sempre (ricordati di riavviare il computer dopo aver salvato il file)

ciao, ho provato su windows... io collego la scheda, nessun led si accende e se do il comando indicato ottengo sempre:

ho provato con il tester a controllare un po e ho notato che tra + e - ho circa 5.05 V ma sui pin 2 e 3 dell'usb ho una tensione di 0 V...
nel dubbio ho riprogrammato anche il 2313, ma nulla da fare...