Go Down

Topic: Economica stand alone programmabile USB (Read 14557 times) previous topic - next topic

niki77

Jul 06, 2012, 04:50 pm Last Edit: Jul 06, 2012, 05:02 pm by niki77 Reason: 1
Buongiorno a tutti,

Tempo fà ho avuto la necessità di creare una piccola board per atmega328 capace di poter essere collegata ad una porta usb per emulare il funzionamento di una tastiera USB.

Ho dato una bella guardata in giro su internet e scopiazzando quà è là ho messo insieme una scheda che escludendo i connettori arriva si e no a 10 componenti, ha la porta usb direttamente connessa all'atmega328 , e con un apposito firmware caricato nel bootloader, è capace di essere programmata senza l'aggiunta di programmatore esterno, anche direttamente all'interno dell IDE di Arduino.





Allego anche uno zip contenente vario materiale , tra cui i  file di Eagle , il firmware già compilato per il bootloader, i driver per windows e un file di supporto per agevolare la configurazione della board sull'ambiente Arduino.

Dettaglio del file MUCCAS.ZIP


  • usbasp-windriver.2011-05-28.zip - Archivio contenente i driver di sistema per alcune versioni di windows

  • boards_entry.txt - file con le linee da aggiungere al file boards.txt di arduino

  • bootloader_license.txt - file di condizioni di licenza di Objective Development per il firmware del bootloader

  • mega328p_12mhz.hex - file hex del bootloader usbasploader

  • usb_stick.sch - file dello schema elettrico della scheda

  • usb_stick.brd - file del circuito stampato della scheda



nota: MUCCAS (Multipurpose Usb Compatible Compact Atmega Stick)

P.S. - Per un acronimo migliorato ci vorrebbe l'aiuto di leo...



Il firmware in oggetto è USBaspLoader , basato sulla pluricriticata libreria V-USB della Objective Development .
In allegato c'è la versione giusta per poter essere caricata nel chip atmega328p per un clock di 12mhz (in futuro mi riprometto di provare anche a 16mhz, dicono che funzioni ugualmente ma non l'ho provato personalmente), e il file bootloader_License.txt che spiega esattamente le condizioni per l'utilizzo del software .

Colgo l'occasione per specificare che :

DECLINO OGNI RESPONSABILITA' PER UN UTILIZZO INAPPROPRIATO DI QUESTO SOFTWARE O DAL MANCATO RISPETTO DELLE NORME STABILITE DAL PRODUTTORE DELLO STESSO IN MATERIA ILLUSTRATE NEL CONTRATTO DI LICENZA.

Per la costruzione della scheda in oggetto , il passo principale consiste nella creazione del circuito stampato.
Prima di procedere all'assemblaggio , qualora non utilizziate lo zoccolo per l'atmega, è opportuno che procediate alla programmazione del bootloader col firmware fornito, altrimenti poi non avete modo di programmarlo se non dissaldandolo dalla scheda!
Una volta assemblato il tutto e verificate le connessioni si può procedere ad un veloce collaudo di massima in questo modo:

Verifica funzionale (Windows xp):


  • Applicare il jumper jp6 (modalità programmazione abilitata)

  • Connettere il cavo usb alla scheda e conseguentemente al pc.(non preoccupatevi se già dopo l'inserimento del cavo  vi viene notificato un errore di 'Periferica Usb non riconosciuta')

  • Premere il pulsante di reset a bordo della scheda.(a questo punto invece se  vi viene notificato un errore di 'Periferica Usb non riconosciuta' potete preoccuparvi  :smiley-mr-green:)
  • Il pc a questo punto dovrebbe chiedervi i driver per il dispositivo (li trovate in allegato nello zip)
    Installateli, se tutto è andato a buon fine in questo momento la vostra scheda verrà riconosciuta come un UsbAsp (potete controllare su gestione periferiche di windows xp , troverete una voce dell'albero principale denominata LibUSB-Win32 Devices con all'interno un nodo USBAsp)





  • Fatto ciò possiamo dire che la scheda è pronta per essere programmata.




Nota: Mi scuso con gli utenti linux ma non ho potuto provare su questo sistema, ho effettuato prove solo su windows xp e windows7, di cui però non ho l'immagine.


Per rendere questa scheda visibile e programmabile dall'ambiente di Arduino si rende necessario aggiungere alcune righe all'interno del file di configurazione delle schede (boards.txt) affinchè l'ambiente sappia cosa e come programmarla.

Creazione entry nel file boards.txt di Arduino:


  • Aprire il file boards.txt situato nella cartella ARDUINOFOLDER\hardware\arduino

  • Con l'ausilio di un editor di testo e prestando attenzione a non commettere errori incollare il contenuto presente nel file boards_entry.txt (presente all'interno del file zip) alla fine del file e salvate.
    Nota: Non è obbligatorio incollare le righe alla fine del file,  basta che il contenuto venga incollato alla fine di un blocco già esistente, in maniera tale da avere in tutti i casi l'insieme di righe raccolto tra le due linee di cancelletti (#####) senza aver sputt...to tutto il resto!

  • Se avete l'IDE di Arduino aperto chiudetelo e riavviatelo, altrimenti non vedrete le modifiche appena effettuate

  • Andate sul menu Tools/Boards e vedete se è presente la entry appena creata, se è visibile selezionatela e siete pronti per inviare sketch alla nuova scheda!!




A questo punto non rimane che testare la programmazione, munitevi di breadboard o collegate direttamente un led con resistenza al pin 6 del connettore jp2 (equivalente del pin 13 digitale di arduino, quello dove in genere si trova il led)

Programmazione della scheda:


  • Inserire il jumper jp6 nella scheda

  • Premere il pulsante reset

  • Se non lo avete fatto prima andate su  Tools/Boards e selezionate la vostra scheda

  • Caricate lo sketch blink e premente il tasto Upload

  • Se alla fine dell'upload non ci sono errori ed il led lampeggia avete eseguito tutto con successo!



Nota bene:

Non è necessario rimuovere il jumper a fine programmazione, il bootloader passerà automaticamente al programma caricato alla fine dell'upload.
Se si sconnette la USB, o semplicemente se si resetta la scheda , qualora vi sia il jumper inserito quest'ultima partirà sempre in modalità programmazione.
Quando non serve più programmare rimuovere il jumper jp6, la scheda ripartirà sempre puntando direttamente al programma caricato.
Se ci sono problemi fatemi sapere e proverò ad aiutarvi fin dove mi è possibile.
Saluti.



Vi è una spiegazione scientifica a tutto.
La fede è solo quell'anello che si porta al dito dopo il matrimonio.

superlol

bello, appena mi ritorna la 2009 programmo l'atmega col nuovo firmware e butto tutto si breadboard, però vorrei la versione a 16MHz prima :smiley-sad-blue:
se non chiedo troppo non sarebbe possibile anche un bootloader per 8MHz se la vusb regge? sarebbe comodo per piccole applicazioni in cui non si voglia troppo "sbatti"...
Il nuovo forum italiano sull'elettronica: http://www.electroit.tk/ <--- Nuovamente online!

PaoloP

Se non ricordo male, o Leo o Lesto ci hanno sbattuto la testa più volte e poi hanno abbandonato il progetto.
A questo punto meglio una Leonardo minimale che contiene già la gestione della USB. Purtroppo il chip è solo SMD.  :(

niki77


bello, appena mi ritorna la 2009 programmo l'atmega col nuovo firmware e butto tutto si breadboard, però vorrei la versione a 16MHz prima :smiley-sad-blue:
se non chiedo troppo non sarebbe possibile anche un bootloader per 8MHz se la vusb regge? sarebbe comodo per piccole applicazioni in cui non si voglia troppo "sbatti"...


Purtroppo ad 8mhz non penso si riesca a farla funzionare... troppo poco.
Il fw si trova compilato anche a 16 e 20mhz, se vuoi provarlo ci fai sapere come va, ma prima di addentrarti a fare esperimenti penso che sia utile avere una base di partenza a 12 che funziona, dopodichè cambi il quarzo e riprogrammi il bootloader con la versione adeguata.  ;)
Vi è una spiegazione scientifica a tutto.
La fede è solo quell'anello che si porta al dito dopo il matrimonio.

leo72


Se non ricordo male, o Leo o Lesto ci hanno sbattuto la testa più volte e poi hanno abbandonato il progetto.
A questo punto meglio una Leonardo minimale che contiene già la gestione della USB. Purtroppo il chip è solo SMD.  :(

Io ci ho sbattuto la testa. Ma usavo un chip intermedio programmato con il firmware Avr-cdc.
Non ho mai provato l'USBaspLoader.

Madwriter


Se non ricordo male, o Leo o Lesto ci hanno sbattuto la testa più volte e poi hanno abbandonato il progetto.
A questo punto meglio una Leonardo minimale che contiene già la gestione della USB. Purtroppo il chip è solo SMD.  :(

Vabbè ci sono gli adattatori per gli smd , smd to dip.
Quote
Release 2009-08-22
Fixed a bug in the 12.8 MHz module: End Of Packet detection was made in the center between bit 0 and 1 of each byte. This is where the data lines are expected to change and the sampled data may therefore be unstable. We therefore check EOP only if bits 0 and 1 have both been read as 0 on D-.
Fixed a bit-stuffing problem in the 16 MHz module: If bit 6 was stuffed, the unstuffing code in the receiver routine was ca. 1 cycle too long. If multiple bytes had the unstuffing in bit 6, the error summed up until the receiver was out of sync.
Updated bits in Configuration Descriptor's bmAttributes according to USB 1.1 (in particular bit 7, it is a must-be-set bit now).
Included option for faster CRC routine (thanks to S?awomir Fra? for the code).
Improved documentation about USB-IDs.

a quanto pare i bug per il 16mhz sono stati risolti dal 2009 almeno cosi vedo dal sito "ufficioso"
http://www.obdev.at/products/vusb/download.html
"Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi..." Albert Einstein

superlol



bello, appena mi ritorna la 2009 programmo l'atmega col nuovo firmware e butto tutto si breadboard, però vorrei la versione a 16MHz prima :smiley-sad-blue:
se non chiedo troppo non sarebbe possibile anche un bootloader per 8MHz se la vusb regge? sarebbe comodo per piccole applicazioni in cui non si voglia troppo "sbatti"...


Purtroppo ad 8mhz non penso si riesca a farla funzionare... troppo poco.
Il fw si trova compilato anche a 16 e 20mhz, se vuoi provarlo ci fai sapere come va, ma prima di addentrarti a fare esperimenti penso che sia utile avere una base di partenza a 12 che funziona, dopodichè cambi il quarzo e riprogrammi il bootloader con la versione adeguata.  ;)

riesci a postare il firmware anche per 16MHz? (più che altro è perchè non ho quarzi da 12MHz a casa  XD )
a 8MHz sarebbe comunque carino tentare, ci sarebbe un buon risparmio energetico, si tradurrebbe nell'avere una scheda davvero piccola (se poi in smd sarebbe grande quanto una moneta da 2€)...
invece trovo scomodo il fatto che il bootloader faccia partire il firmware dopo la programmazione: se io ho ancora il jumper che porta a massa il pin ed io il pin lo ho in uscita come segnale alto creo un corto....
Il nuovo forum italiano sull'elettronica: http://www.electroit.tk/ <--- Nuovamente online!

leo72

Il firmware in formato sorgente è scaricabile dal sito del progetto USBaspLoader:
http://www.obdev.at/products/vusb/usbasploader.html

niki77


Il firmware in formato sorgente è scaricabile dal sito del progetto USBaspLoader:
http://www.obdev.at/products/vusb/usbasploader.html



...E già compilato per varie frequenze sul sito della Objective Development.
Vi è una spiegazione scientifica a tutto.
La fede è solo quell'anello che si porta al dito dopo il matrimonio.

Madwriter


Il firmware in formato sorgente è scaricabile dal sito del progetto USBaspLoader:
http://www.obdev.at/products/vusb/usbasploader.html


lo avevo postato anche io ma nessuno mi pensa   :smiley-sad-blue:
"Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi..." Albert Einstein

pitusso


superlol



Il firmware in formato sorgente è scaricabile dal sito del progetto USBaspLoader:
http://www.obdev.at/products/vusb/usbasploader.html


lo avevo postato anche io ma nessuno mi pensa   :smiley-sad-blue:

scusa non avevo visto  :smiley-sad-blue:

beh allora aspetto l'arduino e vedo se va...

in caso come è possibile integrare poi la comunicazione seriale? (o è meglio apra un nuovo topic?)
Il nuovo forum italiano sull'elettronica: http://www.electroit.tk/ <--- Nuovamente online!

leo72


lo avevo postato anche io ma nessuno mi pensa   :smiley-sad-blue:

Non l'avevo notato. Hai messo il link dopo 50 righe di quote, si è perso un po'  :P

Madwriter



lo avevo postato anche io ma nessuno mi pensa   :smiley-sad-blue:

Non l'avevo notato. Hai messo il link dopo 50 righe di quote, si è perso un po'  :P

hahaha scherzavo , domani provo a realizzarlo anche io su bread e vediamo come va  :smiley-mr-green:
"Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi..." Albert Einstein

BrainBooster

ma la metaboard no vi piaceva? infondo cos'ha in più, solo lo stadio di alimentazione...

Go Up