Vai al contenuto

Open Programmer v0.7.4: Il programmatore USB free.. italiano


Messaggi raccomandati

http://images.nonsologaming.com/usbprog.jpg

Alberto Maccioni, nostro connazionale, ha progettato un programmatore USB per PIC, EEPROM I2C-SPI-MicroWire, micro ATMEL e dispositivi I2C e SPI.

La cosa più interessante (e meritoria) del progetto è che sia schemi di montaggio che programma di gestione (sia per Windows che per Linux) sono open source.

Chiunque può prendere in mano gli schemi e costruirsi un programmatore USB con costi di montaggio bassissimi, sia per componenti che per i materiali necessari.

 

Ringrazio Alberto M. per avermi permesso di postare questa sua guida su MS.

Sito ufficiale: http://openprog.altervista.org/

 

Caratteristiche:

* Completamente gratuito e Open Source (anche il firmware)

* E' in grado di programmare PIC10-12-16-18-24, dsPIC30-33, memorie I2C tipo 24XXXX, MicroWire tipo 93XX6, SPI tipo 25XXX, alcuni micro ATMEL; comunica con dispositivi I2C e SPI

* Interfaccia USB 2.0 Full Speed, classe HID (come tastiere, mouse ecc.)

* Autoalimentato via USB

* Non ha bisogno di driver

* Componenti di facile reperibilità  (costo stimato ~10€)

* Temporizzazioni gestite in hardware quindi veloce e affidabile (scrive un 18F2550 in 15s su Windows, 8s con Linux)

* Non impegna la CPU e non risente di altri programmi in esecuzione

* Programmi di controllo open source per Linux e Windows sviluppati ad-hoc.

 

 

Schema elettrico (v1.6)

Per implementare una periferica USB con i PIC ci vogliono veramente pochi componenti: il micro principale, il quarzo, qualche condensatore, qualche resistenza e il connettore USB tipo B, tutto come da Application Note della Microchip.

Il progetto è basato sul PIC18F2550, a 28 piedini, ma per ora viene occupato solo circa un terzo della memoria programma e 0% della eeprom, quindi è possibile usare anche il più piccolo 2455.

I 2458 e 2553 differiscono solo per l'ADC a 12 bit, quindi dovrebbero andare benissimo.

Con alcune modifiche ho adattato il tutto anche al 2450; questo modello non ha il modulo MSSP, quindi le funzionalità  I2C e SPI vengono emulate via software; non ha neanche il secondo canale PWM, quindi non può generare il clock per i micro Atmel che lo richiedono (cioè quelli configurati per il clock esterno); in questo caso il piedino RB3 ha la funzione di accendere un eventuale oscillatore esterno, da inserire opportunamente nella scheda di espansione Atmel.

Per poter usare i dispositivi a 40p corrispondenti (4450,4455,4458,4550,4553) bisogna modificare lo stampato.

Oltre a connettere il micro via USB bisogna generare le tensioni per la programmazione vera e propria; nel caso PIC-ICSP quindi servono tre transistor (per controllare VDD e VPP) e due linee dati (per dati e clock).

La tensione Vpp viene da un regolatore switching formato da Q4, L1, D3 è descritto di seguito.

 

Visualizza lo schema elettrico - Scarica in formato PDF

 

Circuito stampato del modulo base:

http://images.nonsologaming.com/Oprog_basePCB--.png

 

Molti componenti sono opzionali, servono solo per programmare alcuni tipi dispositivi o per applicazioni future: i connettori di espansione CONN2-3, le resistenze di protezione R11:23 (visto il costo perché non metterle?), le resistenze di pull-up I2C R26-27, il pulsante S1 (per ora non è utilizzato dal software), lo zoccolo per memorie I2C, il connettore ICSP-IN CONN4 (che serve a programmare il micro principale senza estrarlo, almeno fino a che non implementerò un auto-aggiornamento via USB).

Il circuito stampato è stato ottimizzato per usare una sola faccia, ma sono necessari anche alcuni ponticelli sul lato componenti; chi volesse può farne a meno usando un pcb a doppia faccia.

Nel montaggio bisogna fare attenzione all'orientamento dei transistor: Q1 ha l'emettitore a sinistra, Q2 in alto, Q3 e Q4 a destra.

Un circuito funzionante, una volta connesso al PC, fa lampeggiare il led D2 a 4Hz fino a quando non termina l'enumerazione, e successivamente a 1Hz.

Per verificare che tutto funzioni bene bisogna quindi eseguire la funzione "test hardware" nei programmi di controllo: in questa modalità , da eseguire senza dispositivi da programmare, vengono attivate in varie combinazioni le uscite dati CK, D, PGM, e le linee VCCU e VPPU; se la tensione misurata (ad esempio sui piedini 14-15-12-1-4 di U3) corrisponde a quanto dice il programma vuol dire che il circuito è funzionante.

La tensione VPP può non corrispondere esattamente a quella impostata, e avere errori anche di +-1V; questo è dovuto al fatto che il riferimento di tensione del convertitore DCDC è la VCC stessa, che viene fornita dal cavo USB e può variare da 4.75V a 5.25V; inoltre il partitore R1-R2 può introdurre un ulteriore errore del 5%.

Tra le cause più frequenti di malfunzionamento (vero o presunto) ci sono:

orientamento scorretto dei transistor,

difetti nel pcb come corti tra piste o piste aperte,

condensatori staccati,

microcontrollore principale non programmato."

Elenco componenti:

 

-U1 quarzo 12Mhz (anche 4, 8, 16, 20; bisogna riconfigurare il divisore nel micro)

-U2 18F2550 (anche 2450,2455,2458,2553,4450,4455,4458,4550,4553)

-U3 zoccolo 20p.

-U4 zoccolo 8p.

-Q1-2 BC557 (o qualsiasi PNP, attenzione al montaggio)

-Q3-4 BC547 (o qualsiasi NPN, attenzione al montaggio)

-D1-2 LED a piacere

-D3 1N4148 (o qualsiasi diodo, meglio se Shottky)

-L1 100uH tipo resistenza o altro

-R1 22K

-R2 12K

-R3 100K

-R4:6 10K

-R7 1M

-R8-9 2.2K

-R10 10K

-R11:23 100

-R24-25 300K

-R26-27 10K

-C1 22-100uF 25V

-C2-3 22pF

-C4 >= 220nF

-C5 100nF

-C6 10uF

-C7-8 100nF

-CONN1 USB tipo B

-CONN2-3 connettori a pettine femmina 10 poli

-CONN4 connettore a pettine maschio 5 poli

 

Firmware USB e HID (v0.7.0)

Per usare l'interfaccia USB sui PIC è necessario un firmware che implementi una delle classi definite dal consorzio USB o una nuova; io ho scelto la classe HID perché è supportata in modo nativo da tutti i sistemi operativi e quindi non necessita di alcun driver. La velocità  è più che sufficiente: in teoria si raggiungerebbero i 64KB/s, ma io ho misurato qualcosa come 20-40 KB/s, comunque sicuramente abbastanza per programmare dispositivi di 1-100KB di memoria.

Come ogni periferica USB anche questa ha un identificativo vid e pid, da ottenere ovviamente a pagamento; siccome io non ho un soldo da sprecare né ho da vendere il progetto, ho usato il vid della Microchip e un pid a caso: 0x4D8&0x100; sono entrambi configurabili a piacere (previa compilazione), quindi lascio all'utente la scelta.

Il programmatore appare al sistema come una periferica HID che comunica tramite pacchetti di 64 byte scambiati con cadenza di 1ms.

L'implementazione del firmware USB viene da un progetto open source poco noto, scritto da Alexander Enzmann, che io ho modificato e adattato al compilatore C18.

Ho anche scritto una breve guida su come usarlo; per quanto ne so io questo è l'unico firmware open source con supporto HID.

Il programmatore in se è semplicemente un interprete di comandi che pilota direttamente le uscite del micro seguendo un apposito insieme di istruzioni.

Il ciclo di controllo principale aspetta che venga ricevuto un pacchetto via USB, poi comincia a eseguire i comandi specificati occupandosi tra l'uno e l'altro della comunicazione col pc; allo stesso tempo gira la funzione di controllo del regolatore di tensione DCDC, chiamata a intervalli regolari tramite un timer (e un interrupt).

Compilare il tutto richiede solo strumenti gratuti: MPLAB e MCC18 versione studenti, disponibili sfortunatamente solo per il sistema (in)operativo a finestre.

Compilare con SDCC è sicuramente possibile ma richiede qualche modifica al sorgente.

Rilascio il tutto con licenza GPL2.

Qui si trova il progetto MPLAB completo in formato compresso; qui il firmware compilato in formato hex.

Qui il firmware compilato per 18F2450 (con funzionalità  ridotta, vedi schema elettrico).

 

Come si usa

La scheda base può ospitare i PIC a 8,14,16,18,20 piedini (eccetto i 10Fxxx) che vanno inseriti in U3 allineati al piedino 1:

http://images.nonsologaming.com/DIP8-20b.png

http://images.nonsologaming.com/Oprog.comp_base.png

In U4 vengono ospitate le memorie EEPROM I2C.

Per i 10Fxxx a 6 o 8 piedini aggiungerò in futuro un adattatore; nel frattempo ci si può arrangiare con collegamenti volanti.

Tramite i due connettori di espansione si possono poi collegare gli adattatori per altri dispositivi:

 

* PIC a 28-40 piedini + connettore ICSP

* PIC 8-20p. (come sulla scheda base, ma c'è più spazio per uno zoccolo ZIF) + conn. ICSP

* PIC16-18 a 3.3V + conn. ICSP (questo adattatore ha anche un regolatore a 3.3V)

* PIC24-30-33 + conn. ICSP (questo adattatore ha anche un regolatore a 3.3V)

* Memorie I2C, SPI, MicroWire e conn. I2C-SPI

* ATMEL 8-14-20-28-40p. e conn. I2C-SPI

* ST72 (in futuro)

 

Ovviamente se ne possono creare di altri o non costruirne e usarne nessuno.

Sui circuiti adattatori consiglio di inserire i pettini di espansione dal lato componenti e di lasciare il distanziatore plastico da quel lato; questo aumenta molto la resistenza meccanica, soprattutto in fase di estrazione.

Nel caso di dispositivi a 3,3V il software verifica la presenza di un adattatore a 3,3V (che ha RB1 in corto con RB0) per evitare danni irreversibili.

I 16F1xxx potrebbero anche essere programmati senza l'adattatore a 3,3V (solo i 16LF1xxx lo richiedono), ma il controllo è presente per entrambi per non fare confusione.

Vista l'impossibilità  di cancellare alcuni registri dei dsPIC30 a 3.3V, questi sono ora alimentati a 5V; chi avesse già  costruito l'adattatore (prima della v. 1.7) può facilmentemodificarlo.

Le immagini seguenti mostrano come inserire i dispositivi sulle schede di espansione:

I dispositivi più piccoli devono essere allineati al piedino 1 del rispettivo zoccolo.

E' anche possibile eseguire la programmazione "in circuit" collegando i segnali ICSP (VPPU,VDDU,ICD,ICK,GND) alla scheda applicativa; questi segnali sono presenti nei connettori di espansione del modulo base o più comodamente in alcune schede di espansione tramite apposito connettore.

I dispositivi a 3,3V richiedono una interfaccia ICSP anch'essa a bassa tensione, presente sulle schede di espansione a 3,3V.

 

 

Piedinatura dei connettori della scheda base e delle espansioni:

Espansione1(vicino al micro): RB7-RB0,RC7,RC6

Espansione2(vicino al bordo): RA3-RA5,RA2,RA1,RE3,VDD,GND,VPPU,VDDU

ICSP: VPPU,VDDU,ICD,ICK,GND

ICSP-IN: VPPU,VDDU,ICD,ICK,GND (da non confondere con ICSP; serve per programmare il micro principale senza toglierlo)

I2C/SPI: CK,DI,DO,GND (I2C non usa DO)

 

Come programmare il micro la prima volta?

E' un problema molto interessante, visto che un dispositivo nuovo è vuoto e non funziona come programmatore: a parte il classico "fattelo programmare da qualcuno che ce l'ha già " il mio consiglio è di usare una di quelle interfacce tanto in voga oggi, ad esempio JDM, magari costruita su millefori, assieme a winpic o picprog.

Potrebbe sembrare strano dover costruire un programmatore per farne un altro, ma non c'è modo di comunicare via USB senza firmware; credo però che ne valga la pena, visto che i programmatori seriali non sono molto affidabili, sono lenti, e soprattutto non si possono usare sui nuovi computer.

Inoltre, almeno fino a che non riuscirò a implementare un auto-aggiornamento, consiglio di tenere un micro di scorta per caricare le versioni aggiornate del firmware.

 

http://images.nonsologaming.com/base_4exp.JPG

 

Interfaccia grafica (solo Windows, v0.7.4)

OpenProg è scritto in VisualC++ 6.0 usando MFC. L'utilizzo è piuttosto semplice, basta collegare il programmatore e avviare il programma; poi selezionare il micro, eventualmente caricare un hex e infine leggere o scrivere; funziona con XP, sVista, 7.

Sulla scheda "Dispositivo" si possono modificare alcune opzioni di programmazione, per esempio la scrittura delle locazioni ID, calibrazione, l'uso della eeprom ecc.; solo le impostazioni compatibili col dispositivo selezionato verranno prese in considerazione.

La scheda I2C/SPI permette di comunicare con dispositivi generici I2C e SPI; se si utilizza il protocollo I2C bisogna sempre specificare il byte di controllo (e l'indirizzo se diverso da 0); il bit RW viene gestito automaticamente.

Ad esempio per scrivere manualmente 3 byte su una 24xx16 all'indirizzo 64 si scrive: A0 40 1 2 3

Visto che non sono necessarie librerie extra non ho incluso alcun installatore, è sufficiente scaricare l'eseguibile e avviarlo.

Il programma scrive e legge file hex8 e hex32, e per le memorie seriali anche file binari.

Le lingue supportate sono Italiano e Inglese; per introdurre altre lingue bisogna generare il file languages.rc (il comando è tra le opzioni) e modificarlo a piacimento; il nome della lingua è prima delle rispettive stringhe, tra parentesi quadre [].

Con la funzione "Test Hardware" e un multimetro è possibile verificare che il circuito stia effettivamente funzionando.

Nel caso di problemi o per pura curiosità  si possono salvare tutti i dati scambiati col programmatore, selezionando "registra eventi su file" tra le opzioni.

Le opzioni da linea di comando sono:

-d <dispositivo> , seleziona un dispositivo

-r <nome file> , legge dal dispositivo e scrive sul file

-w <nome file> , legge il file e scrive sul dispositivo

-gui , apre la GUI dopo la scrittura o la lettura (solo se specificati -w o -r)

http://images.nonsologaming.com/OpenProg.png

Eseguibile OpenProg (per Windows):

http://images.nonsologaming.com/D.png

 

Codice sorgente OpenProg (progetto Visual Studio 6)

http://images.nonsologaming.com/D.png

 

Linea di comando (Linux e Windows, v0.7.4)

OP è un eseguibile da linea di comando; la versione Windows non ha bisogno di installazione;

la versione Linux si interfaccia col dispositivo /dev/usb/hiddev0 (o quello che si specifica) e ha bisogno dei diritti di lettura su hiddevX.

es. >sudo chmod a+r /dev/usb/hiddev0

Per abilitare permanentemente un utente alla lettura si può procedere come segue (su Ubuntu e altre distribuzioni basate su Debian, verificare per le altre):

da root creare un file /etc/udev/rules.d/99-hiddev.rules

nel caso si voglia abilitare un gruppo di utenti scrivervi:

KERNEL=="hiddev[0-9]", SUBSYSTEM=="usb", SYSFS{idProduct}=="0100", SYSFS{idVendor}=="04d8", GROUP="<gruppo>"

in cui <gruppo> è uno dei gruppi a cui appartiene l'utente (per un elenco digitare "groups"); utilizzare un gruppo adeguato e se necessario aggiungere l'utente al gruppo scelto ("addgroup <utente> <gruppo>").

oppure, nel caso si vogliano abilitare tutti gli utenti, cambiare solo i permessi di lettura:

KERNEL=="hiddev[0-9]", SUBSYSTEM=="usb", SYSFS{idProduct}=="0100", SYSFS{idVendor}=="04d8", MODE="0664"

riavviare udev per applicare le modifiche:

> /etc/init.d/udev reload

 

Se collegando il programmatore non appare la periferica /dev/usb/hiddevX (e il LED non lampeggia a 1 Hz) è sufficiente eseguire alcune volte lsusb per forzare l'enumerazione da parte del sistema, eventualmente staccando e riattaccando il cavo.

 

Il programma si aspetta una periferica USB con vid&pid=0x4d8:0x100, se non specificato altrimenti.

Scrive e legge file hex8 e hex32 e per le memorie anche binari.

Con l'opzione --HWtest e un multimetro è possibile verificare che il circuito stia effettivamente funzionando.

E' possibile comunicare via I2C e SPI con dispositivi generici diversi dalle memorie; nel caso I2C bisogna specificare byte di controllo e indirizzo (o indirizzi) anche per una lettura; il bit RW viene gestito automaticamente.

Nel caso di problemi o per pura curiosità  si possono salvare tutti i dati scambiati col programmatore, tramite l'opzione -l; per qualche strano motivo per specificarne il parametro opzionale bisogna usare -l=<file>. Sarà  un baco di getopt?

Il supporto multilingue per ora è fermo a Italiano e Inglese.

 

http://images.nonsologaming.com/D.png

 

-Tutte le opzioni per la riga di comando sono disponibili sul sito ufficiale del progetto

 

-Vedi tutti gli integrati supportati dal programmatore: http://openprog.altervista.org/OP_ita.html#Supporto

 

Guida tratta dal sito http://openprog.altervista.org/ di Alberto Maccioni.

Link al commento
Condividi su altri siti

Re: Open Programmer v0.7.4: Il programmatore USB free.. ital

 

hai presente l'articolo del modchip Wiinja open source pubblicato ieri? beh... questo serve per scrivere nel chip il firmware.... e non solo... con la possibilità  di programmare gli integrati ti si apre la possibilità  di creare i tuoi apparecchi elettronici, i tuoi programmi da flashare negli integrati e via dicendo.

 

Una volta costruito questo programmatore ha migliaia di possibilità  di impiego nella programmazione degli integrati (e i programmatori USB costano)

Link al commento
Condividi su altri siti

Re: Open Programmer v0.7.4: Il programmatore USB free.. ital

 

hai presente l'articolo del modchip Wiinja open source pubblicato ieri? beh... questo serve per scrivere nel chip il firmware.... e non solo... con la possibilità  di programmare gli integrati ti si apre la possibilità  di creare i tuoi apparecchi elettronici, i tuoi programmi da flashare negli integrati e via dicendo.

 

Una volta costruito questo programmatore ha migliaia di possibilità  di impiego nella programmazione degli integrati (e i programmatori USB costano)

ù.ù grazie bus

Link al commento
Condividi su altri siti

  • 5 mesi dopo...
  • 2 settimane dopo...
  • 5 mesi dopo...
  • 3 mesi dopo...
  • 3 mesi dopo...

Programmatore eeprom

 

Ho realizzato il programmatore di eeprom apportando le seguenti modifiche:

 

-Dallo schema elettrico ho rimosso la parte riguardante l'alimentatore e ho lasciato i collegamenti allo zoccolo nominato "U4"

-Ho programmato un 18F2550 con il file OProg_v0.7.0.hex

 

Ho fatto dei test con 24LC16, 24LC32, 24LC64 e sono andati a buon fine sia in WindowsXp e in Windows 7 ultimate 32 bit.

 

Ringrazio ancora l'autore della discussione.:D:D:D

Link al commento
Condividi su altri siti

  • 4 settimane dopo...
  • 2 mesi dopo...
  • 3 settimane dopo...
Volevo costruire questo bellissimo programmatore pero' ho un dubbio nell'elenco componenti il valore di R24 e R25 e' dato a 300k, ora non essendo un valore standard chiedo se mettendo 2 resistenze in serie da 150k va bene lo stesso.Guardando le immagini sembra che le resistenze in questione siano da 220k.Rimango in attesa di una risposta ringraziandovi anticipatamente e soprattutto complimentandomi per l'ottimo programmatore e per lo stupendo sito.GRAZIE.
Link al commento
Condividi su altri siti

Volevo costruire questo bellissimo programmatore pero' ho un dubbio nell'elenco componenti il valore di R24 e R25 e' dato a 300k, ora non essendo un valore standard chiedo se mettendo 2 resistenze in serie da 150k va bene lo stesso.Guardando le immagini sembra che le resistenze in questione siano da 220k.Rimango in attesa di una risposta ringraziandovi anticipatamente e soprattutto complimentandomi per l'ottimo programmatore e per lo stupendo sito.GRAZIE.

 

Lo sto costruendo pure io in questo momento (anche se attendo alcuni pezzi che mi devono inviare).

E come te son curioso di provarlo ;)

Link al commento
Condividi su altri siti

Io il PCB l'ho realizzato con il metodo stampante al laser e poi ho stirato il tutto ma non con i fogli blu con della semplice carta da 160 mg il doppio di quella che si usa per la stampa normale e in pochissimo tempo ho ottenuto un perfetto PCB.Visto che per motivi di lavoro prima di sabato non riesco a montare il tutto potresti confermarmi i valori delle resistenze R24-R25 ch hai usato.Ringraziandoti in anticipo ti auguro un buon lavoro.
Link al commento
Condividi su altri siti

  • 8 mesi dopo...

Crea un account o accedi per lasciare un commento

Devi essere un membro per lasciare un commento

Crea un account

Iscriviti per un nuovo account nella nostra community. È facile!

Registra un nuovo account

Accedi

Sei già registrato? Accedi qui.

Accedi Ora

Giochi in Uscita



  • Community Hive Community Hive

    Community Hive allows you to follow your favorite communities all in one place.

    Follow on Community Hive
  • Utenti

    Non ci sono membri da mostrare

×
×
  • Crea Nuovo...