[GUIDA] Costruire un dongle USB compatibile con PSGROOPIC utilizzando un PIC18F – Guide Hacking PS3

Home Forum [GUIDA] Costruire un dongle USB compatibile con PSGROOPIC utilizzando un PIC18F – Guide Hacking PS3

Visualizzazione 0 filoni di risposte
  • Autore
    Post
    • #34274
      god88
      • Amministratore
      • Post: 7355

      GUIDA: Costruire un dongle USB compatibile con PSGROOPIC utilizzando un PIC18F

      0) Indice

      1) Introduzione
      2) Costruire un Programmatore su Porta Parallela (LPT)
      2.1) Programmatore LPT a basso voltaggio (LVP)
      2.2) Programmatore LPT ad alto voltaggio (HVP)
      3) Programmare il PIC usando la porta Parallela
      4) Costruzione del dongle USB
      5) Utilizzo del BOOTLOADER USB Microchip [OPZIONALE]
      Appendice A – Guida all’acquisto dei Componenti
      A.1) Resistenze
      A.2) Condensatori
      A.3) Quarzi e Risonatori
      A.4) Transistor, Diodi, Varie
      Appendice B – Soluzione dei Problemi comuni
      B.1) Il PIC non viene programmato
      B.2) Il Dongle viene programmato ma non funziona
      Appendice C – Adattare i file HEX al dongle realizzato
      Appendice D – Programmatore JDM su porta seriale
      D.1) Costruzione del Programmatore
      D.2) Utilizzo del Programmatore

      1) Introduzione

      Nel seguito verrà fornita la procedura per la costruzione e la programmazione di un dongle USB (una pennetta) generico basato su microcontrollore PIC. Pensate al PIC come ad un computer in miniatura, con il suo processore, la sua ram, il suo disco rigido e le sue porte di I/O, è tutto racchiuso in un solo integrato. Il circuito che realizzeremo ha innumerevoli usi così come innumerevoli sono possibili programmi (files HEX) che potrete utilizzare. Un particolare programma è PSGROOPIC (porting su PIC del PSGROOVE), un altro potrebbe essere quello relativo all’interfaccia SPI/USB per leggere/scrivere la nand dell’Xbox360. Questa guida tuttavia è essenzialmente intesa alla parte hardware, le applicazioni specifiche saranno trattate solo in mdo superficiale.

      I PIC verificati come compatibili per questo progetto sono i seguenti:

      • PIC18F2455
      • PIC18F2550
      • PIC18F4455
      • PIC18F4550

      La serie 18F2XXX ha 28 pin mentre la serie 18F4XXX ha 40 pin, i piedini necessari nel nostro caso sono comunque presenti su tutti i modelli, cambia solo la posizione ma è immediato adattare lo schema. Dei 18F4XX è disponibile una versione a 44pin per quanto ci riguarda equivalente a quella da 40, ma ve la sconsiglio per la maggiore difficoltà del montaggio (si tratta di una versione per SMD ed i pin sono molto piccoli). I file HEX da utilizzare sono in generale intercambiabili fra questi microcontrollori, la frequenza preimpostata può variare, ma si tratta di un parametro che può essere modificato via software .

      La guida può essere utilizzata seguendo vari percorsi. Inizialmente dovrete scegliere se effettuare la prima programmazione del PIC usando la porta parallela (LPT) o quella seriale (RS232). La porta seriale è maggiormente diffusa, ma il circuito del programmatore leggermente più complesso. La parte 2) della guida spiega come realizzare il programmatore LPT e la parte 3) come utilizzarlo. Se optate per il programmatore seriale sostituite l’appendice D a queste 2 sezioni, leggendo quindi in successione Parte 1) -> Appendice D -> Parte 4). Tenete presente che l’appendice D è più sintetica delle parti 2) e 3), quindi nel caso aveste dubbi su alcune delle cose dette vi consiglio la lettura di quei paragrafi. Una volta costruito il programmatore dovrete scegliere se utilizzare o meno il bootloader descritto nella parte 5). Come spiegato meglio nel seguito il bootloader facilita enormemente l’aggiornamento del PIC permettendo di utilizzare l’interfaccia USB e il circuito finale (quello della pennetta) per le programmazioni successive alla prima. Se volete installare un bootloader, dopo aver costruito e testato il programmatore, leggete la parte 5). Fatelo prima di passare alla realizzazione del dongle, quindi in effetti prima della parte 4).

      2) Costruire un Programmatore su Porta Parallela (LPT)

      ATTENZIONE: La porta parallela del PC va settata da BIOS come ECP / Bidirezionale perché il programmatore funzioni

      Il PIC la prima volta deve essere programmato con un’interfaccia seriale o parallela utilizzando un software opportuno come winpic800. Verranno fornite due procedure entrambe per la porta parallela. Una più semplice a basso voltaggio (LVP) basata sul programmatore ART2003 ed una più elaborata ad alto voltaggio (HVP). Un PIC è programmabile a basso voltaggio SOLO se il flag LVP è abilitato, tale flag può essere modificato solo con un programmatore ad alto voltaggio. I PIC NUOVI e MAI PROGRAMMATI hanno il flag abilitato.

      Un PIC programmato a basso voltaggio non eseguirà l’output sul pin PGM/RB5 perché esso viene utilizzato per determinare quando attivare la “modalità programmazione”, quindi se utilizzate un HEX che prevede l’uso di quel pin ad es. per un LED, dovrete patcharlo o ricompilarlo opportunamente. Inoltre, per evitare che il PIC possa entrare in modo programmazione accidentalmente compromettendo il funzionamento del dongle USB, il pin PGM non potrà essere lasciato “libero”, ma andrà legato con VPP ad una resistenza di pullup oppure connesso alla massa VSS.

      Un PIC programmato ad alto voltaggio non ha nessuna di queste limitazioni perché utilizza un livello di 12V sul pin VPP per entrare in programmazione, tuttavia lo schema circuitale prevede l’uso di qualche componente in più e una doppia alimentazione 12V / 5V (es. molex PC). Il programmatore seriale JDM descritto nell’appendice D è ad alto voltaggio e rappresenta un’alternativa valida nel caso si voglia evitare la doppia alimentazione.

      Per programmare il PIC dalla seconda volta in poi può essere usata anche l’interfaccia USB, ma per farlo occorrerà installare un bootloader e utilizzare un file HEX opportuno predisposto per il bootloader. Si dovrà anche fornire al dispositivo un sistema per capire quando predisporsi per la programmazione (modalità bootloader) e quando caricare l’applicazione principale. Ciò può essere fatto ad esempio collegando un interruttore o un jumper tra qualcuno dei pin di input del PIC e VSS. Questo argomento verrà trattato per esteso nella parte 5 della guida, sappiate però che indipendentemente dalla presenza o meno del bootloader, il PIC potrà sempre essere programmato tramite la porta parallela o quella seriale.

      2.1) Programmatore LPT a basso voltaggio (LVP)

      La programmazione su porta parallela può dare qualche problema nel caso al porta non riesca a fornire al PIC la corrente necessaria per questa operazione. C’è molta variabilità fra le LPT riguardo la tensione di output e la corrente massima erogata e questo rende impossibile creare una procedura ideale che funzioni per tutti nel caso si voglia alimentare il PIC tramite la porta. Verranno presentati due circuiti. Il primo è uno schema semplificato che utilizza un piccolo trucco per supplire la corrente di cui eventualmente il PIC necessita aggiungendo un collegamento dal “rosso” di un cavo USB. Il secondo utilizza transistor come buffer invertitore sulla tensione di alimentazione VDD ed un condensatore C0 con capacita da 10uF (ma va bene anche più grande) per stabilizzare. Il secondo schema è quello “formalmente corretto” il primo però funziona nella stragrande maggioranza dei casi.

      Lista dei componenti da acquistare per la versione semplificata (LVP1):

      • Microcontrollore: PIC18F2455 o PIC18F2550 o PIC18F4455 o PIC18F4550
      • Condensatore C0 da 10 o più microFarad (opzionale)
      • Connettore DB25 Maschio (da inserire nella porta parallela)
      • Cavetto USB

      Lista dei componenti da acquistare per la versione completa (LVP2):

      • Microcontrollore: PIC18F2455 o PIC18F2550 o PIC18F4455 o PIC18F4550
      • Transistor NPN BC637 (o equivalente)
      • Resistenza RB da circa 1 KiloOhm
      • Resistenza RC da 100 Ohm
      • Condensatore C0 da 10 o più microFarad
      • Connettore DB25 Maschio (da inserire nella porta parallela)
      • Cavetto USB o altra sorgente per +5V DC con almeno 50 milliAmpère di erogazione.

      Le resistenze sono intese da 1/4 Watt o superiori ed i condensatori con tensione nominale di 10Volt o superiore. Vi rimando all’appendice A per maggiori informazioni sui componenti.

      Per il montaggio se dovete programmare un solo PIC potrete saldare questi componenti direttamente sul connettore LPT ed utilizzare dei fili volanti da connettere ai pin dell’integrato. Se invece avete intenzione di riutilizzare più volte il programmatore utilizzate una basetta millefori ed un socket adatto al vostro PIC (DIP28 per la serie 18F2 o DIP40 per la 18F4).

      Qui di seguito sono riportati gli schemi del circuito.

      LVP1
      Spoiler

      LVP2
      Spoiler

      2.2) Programmatore LPT a alto voltaggio (HVP)

      Anche in questo caso verranno presentati due circuiti. Il primo utilizza il solito trucco dell’alimentazione supplementare oltre ad un transistor come buffer invertitore sui 12V diretti in VPP. Il secondo, quello formalmente corretto, usa due buffer, uno per VDD ed uno per VPP.

      Lista dei componenti da acquistare per la versione semplificata (HVP1):

      • Microcontrollore: PIC18F2455 o PIC18F2550 o PIC18F4455 o PIC18F4550
      • Transistor NPN BC637 (o equivalente)
      • Resistenza RB da circa 10 KiloOhm
      • Resistenza RC da circa 10 KiloOhm
      • Condensatore C0 da 10 o più microFarad (opzionale)
      • Connettore DB25 Maschio (da inserire nella porta parallela)
      • Cavetto USB

      Lista dei componenti da acquistare per la versione completa (HVP2):

      • Microcontrollore: PIC18F2455 o PIC18F2550 o PIC18F4455 o PIC18F4550
      • 2x Transistor NPN BC637 (o equivalente)
      • Resistenza RB1 da circa 1 KiloOhm
      • Resistenza RC1 da 100 Ohm
      • Resistenza RB2 da circa 10 KiloOhm
      • Resistenza RC2 da circa 10 KiloOhm
      • Condensatore C0 da 10 o più microFarad
      • Connettore DB25 Maschio (da inserire nella porta parallela)
      • Cavetto USB o altra sorgente per +5V DC con almeno 50 milliAmpère di erogazione.
      • Trasformatore da 12V DC qualsiasi amperaggio o altra sorgente equivalente (es. giallo del Molex PC)

      Come prima le resistenze sono intese da 1/4 Watt o superiori ed i condensatori con tensione nominale di 10Volt o superiore. Consultate l’appendice A per maggiori informazioni sui componenti.

      Il montaggio del programmatore (HVP1 quantomeno) può essere portato a termine direttamente sul connettore DB25, ma se avete intenzione di programmare più PIC vi conviene optare per una basetta millefori ed un socket per il PIC.

      Gli schemi sono riportati nelle immagini sottostanti..

      HVP1
      Spoiler

      HVP2 Spoiler

      3) Programmare il PIC usando la porta Parallela

      Collegate il connettore LPT al PC e nel caso degli schemi HVP attivate anche il trasformatore da 12V. Se state usando gli schemi semplificati (LVP1 ed HVP1) il cavetto usb per il momento resta staccato dal PC, se invece avete optato per quelli completi (LVP2 ed HVP2) potrete collegarlo o attivare la sorgente da +5V alternativa eventualmente utilizzata.

      Aprite WinPic800 ( scaricabile qui ). Nel menù “Language” scegliete la lingua che preferite (nel mio caso inglese) quindi richiamate “Hardware” dal menù “Settings”. Nella finestra che si aprirà selezionate il programmatore “ART2003” e togliendo la spunta a “Blockade configuration” impostate tutto come nelle immagini sottostanti. Scegliete quella relativa vostro schema di programmatore, ovviamente la porta parallela dovrà essere quella a cui è connesso il PIC, non necessariamente LPT1. Quando avrete finito cliccate su “Apply edits” per applicare le modifiche.

      LVP1 Spoiler

      LVP2 Spoiler

      HVP1 Spoiler

      HVP2 Spoiler

      Ora dalla finestra principale del programma scegliete il vostro PIC usando la casella in alto a destra e verificate che tutto funzioni regolarmente con “Detect Device” dal menù “Device”. Dovreste avere una risposta come la seguente, in questo esempio si tratta di un PIC 18F4550:

      Se il vostro PIC non venisse riconosciuto, continuate e provate a programmarlo, la cosa potrebbe essere normale.

      Aprite l’hex da programmare usando il menù file e cliccate sul pulsante “Setting” situato a destra. Tutto deve essere impostato come nell’immagine qui sotto, ad eccezione di “Oscillator Selection” che dipende dal quarzo che avete intenzione utilizzare per la parte 4) e dei FLAG LVP ed MCLRE. Il primo va abilitato solo se state usando un programmatore a basso voltaggio (schemi LVP1 ed LVP2), il secondo va abilitato solo se avete intenzione di utilizzare una resistenza di pullup su VPP nel dongle. Di questo parleremo meglio nella parte dedicata alla costruzione della pennetta, per ora sappiate che l’opzione base è abilitare MCLRE per il basso voltaggio e disabilitarlo per l’alto voltaggio.

      Non vi resta che cliccare su “Program All” dal menù “Device” per scrivere nella flash del PIC il programma contenuto all’interno del file hex. Dopo la programmazione verificate il buon esito dell’operazione con “Verify All” sempre dal menù “Device”.

      Se il PIC vi da un errore all’inizio della programmazione e state usando gli schemi semplificati (LVP1 ed HVP1), provate a sovrapporre l’alimentazione supplementare (ossia attaccate il cavetto USB) e riprovate. Se continuasse a darvi errore staccate e riattaccate il cavetto USB tentando più volte la programmazione. In caso non riusciste a risolvere controllate l’appendice B sui problemi comuni oppure optate per un schema completo (LVP2 o HVP2).

      4) Costruzione del dongle USB

      Il circuito principale del dongle utilizza un quarzo oscillatore la cui frequenza può essere scelta liberamente tra 4 e 24 MHz in multipli di 4, le frequenze valide sono cioè 4, 8, 12, 16, 20, 24. Dovrebbe funzionare anche con 40MHz e 48MHz. Il motivo di questa versatilità è che il PIC utilizza un circuito PLL interno, qualsiasi frequenza voi scegliate sarà moltiplicata a 96Mhz e divisa in base alle necessità. Ovviamente occorrerà settare l’HEX che andrete a programmare in base al quarzo che adopererete. I condensatori Cq servono a stabilizzare il quarzo, normalmente hanno un valore di 22pF. Vi segnalo tuttavia che questa applicazione del PIC tollera senza problemi un errore di qualche decimo di punto percentuale sulla frequenza, pertanto la maggioranza dei quarzi funzionerà bene anche senza condensatori Cq.

      Il condensatore Cusb serve al regolatore interno per i 3.3V ed è fondamentale perché l’interfaccia usb funzioni correttamente. Può avere un valore da 100 nF fino a qualche uF, di solito viene usato un condensatore da 470nF. Il condensatore da 10uF C0 serve a stabilizzare la tensione di alimentazione, è opzionale durante l’utilizzo del dongle dopo la programmazione.

      In un PIC programmato a basso voltaggio, la resistenza di “pullup” collegata a VDD, Rpup, porta ad un valore alto i pin “legati” VPP e PGM non appena viene data l’alimentazione. Come già detto questo serve ad evitare che il microcontrollore entri accidentalmente in modalità programmazione o in reset impedendo il normale funzionamento. Può essere usata una resistenza da circa 10k. Un alternativa è slegare VPP e PGM, collegare PGM a VSS, disabilitare MCLRE da WinPic800 in fase di programmazione ed omettere Rpup lasciando VPP libero.

      Nel caso dei PIC programmati ad alto voltaggio la scelta più semplice per questo progetto è disabilitare MCLRE in programmazione e lasciare entrambi i pin VPP e PGM liberi. Alternativamente si può abilitare MCLRE e collegare VPP ad una resistenza di pullup su VDD.

      I componenti da acquistare sono i seguenti:

      • Microcontrollore: PIC18F2455 o PIC18F2550 o PIC18F4455 o PIC18F4550
      • Resistenza Rpup da circa 10 KiloOhm (opzionale se MCLRE viene disabilitato in programmazione)
      • Due condensatori Cq da 22 picoFarad (probabilmente superflui)
      • Quarzo: 20 MegaHertz (o altro multiplo di 4 compreso fra 4 e 24)
      • Condensatore Cusb da circa 470 nanoFarad
      • Condensatore C0 da circa 10 microFarad (opzionale)
      • Connettore USB Type A Plug o Type B Jack (va bene anche un cavo usb tagliato)

      Come al solito resistenze sono intese da 1/4 Watt o superiori, condensatori da 10Volt o superiori. Notate che nello schema del circuito c’è un + vicino ai condensatori, quel segno indica la polarità da rispettare nel caso vogliate adoperare condensatori polarizzati come quelli elettrolitici (il polo opposto al + è ovviamente il – , anche se non è indicato). Gli usuali condensatori ceramici o in poliestere non hanno polarità quindi se state usando tali componenti potrete tranquillamente ignorare quel segno.

      Per ulteriori spiegazioni sui componenti vi rimando all’appendice A.

      Il circuito base può anche essere migliorato aggiungendo un LED con una resistenza Rs in serie fra i pin RB1 e VSS. Il LED potrà essere di qualsiasi tipo ed il valore tipico per la resistenza è 470 Ohm (ma va bene fino ad1 KOhm). Il LED è un diodo pertanto va orientato con il catodo (polo negativo, stanghetta più corta) diretto in Vss. Non preoccupatevi però se non siete sicuri di quale sia il catodo perché un LED storto si limita a non accendersi senza compromettere il circuito. Vi basterà girarlo per risolvere il problema. Ricordatevi che questo è solo un abbellimento non essenziale per il funzionamento del dongle. E’ anche possibile spostare il LED nel caso lo voleste su un altro pin, vi basterà modificare l’HEX da programmare come descritto nell’appendice C.

      Se volete utilizzare un bootloader come spiegato nella parte 5 della guida, aggiungete un jumper o un interruttore o un pulsante tra VSS ed il pin RC6 (pin 17 nei 18F2 , PIN25 nei 18F4). Ancora una volta è possibile cambiare il pin 17 con uno qualsiasi di quelli liberi, vi basterà patchare l’hex del bootloader come spiegato nell’appendice C.

      Per il montaggio è consigliabile l’utilizzo di una basetta millefori su cui montare i componenti.

      Qui di seguito sono riportati gli schemi utilizzabili a seconda del programmatore (LVP o HVP), del settaggio su MCLRE e della serie del PIC (18F2 o 18F4). Alcuni sono inseriti nello spoiler per favorire la lettura della guida.

      18F2, LVP, MCLRE Spoiler

      18F2, HVP Spoiler

      18F2, LVP Spoiler

      18F4, LVP, MCLRE Spoiler

      18F4, HVP Spoiler

      18F4, LVP Spoiler

      5) Utilizzo del BOOTLOADER USB Microchip [OPZIONALE]

      Questa sezione della guida è opzionale, va considerata un’integrazione della parte 3 e serve solo se volete installare un bootloader. Il bootloader in questione permette l’aggiornamento del dongle tramite la porta USB senza ricollegare il programmatore. Si tratta di un pacchetto software che comprende:

      • Un firmware bootloader per il PIC compatibile con USB
      • Un Driver Windows per il PIC in modalità bootloader
      • Un Programmatore USB per Windows (PDFSUSB)

      Il firmware è un piccolo programma situato nel bootsector, all’inizio della memoria flash del PIC, immediatamente prima dell’applicazione. Viene eseguito all’avvio ed in base alla chiusura o meno di un jumper/interruttore esegue una delle due seguenti azioni:

      • Se il codice dell’applicazione è mancante o corrotto oppure il jumper/interruttore è chiuso, il PIC viene predisposto per la programmazione via USB.
      • Altrimenti viene richiamata l’applicazione principale (PSGROOPIC o altro)

      Il jumper in questione può essere posto tra VSS ed RC6, quest’ultimo è il pin sopra D+, ossia il 17 nella serie 18F2 o il 25 nella serie 18F4. E’ anche possibile utilizzare un altro pin al posto del 17, vi basterà correggere l’hex del bootloader come decritto nell’appendice C.

      Ora poiché il firmware bootloader occupa la prima porzione della flash, il codice applicativo sarà collocato dopo il bootloader a partire da un certo indirizzo. Le istruzioni presenti nella nostra applicazione che contengono riferimenti assoluti ad altre locazioni di memoria (goto, call e letture della flash in memoria) necessitano quindi di una correzione in fase di compilazione e collegamento. Occorrerà cioè spostare in avanti i suddetti riferimenti di uno spiazzamento pari allo spazio riservato al bootloader. Questa operazione è detta rilocazione ed è la ragione per cui i file HEX normali che scrivevamo usando WinPic800, non possono essere utilizzati con il bootloader e viceversa. La situazione è complicata ulteriormente dal fatto che non tutti i bootloader occupano la stessa quantità di memoria, quindi c’è anche incompatibilità fra bootloader.

      Il bootloader che noi useremo è quello microchip USB standard (MCHPUSB) che colloca il codice utente a partire dall’indirizzo 0x800, si tratta del bootloader incluso con le prototype board olimex e molte altre schede commerciali. Dalla sua ha la stabilità del software dal lato PC ed il ridotto ingombro sulla flash del PIC. Nell’appendice C a questa guida trovate un tool ed una procedura per adattare un hex generico in modo che sia utilizzabile con questo bootloader.

      Come sarà chiarito meglio fra breve non serve modificare i flag o settare la frequenza del quarzo, il bootloader verrà impostato in modo da non poter modificare la configurazione della scheda che voi sapete per certo essere corretta.

      Prima di tutto però il firmware del bootloader va installato usando il programmatore esterno. Quindi predisponete tutti i collegamenti come indicato nella prima parte della guida e scaricate questo file.

      Si tratta del software relativo all’interfaccia USB/SPI per leggere/scrivere la nand dell’XBOX 360, come già detto noi useremo lo stesso bootloader. Il file che dovrete scrivere con WinPic800 è PicXBoot.HEX, l’operazione è stata già ampiamente descritta nella guida, l’unica variazione è rappresentata da alcuni dei settings riportati nello screen qui sotto.

      WRTB e WRTC vengono abilitati per impedire la sovrascrittura accidentale del bootloader o dei flag di configurazione a causa di un HEX file errato. MCLRE va abilitato solo se lo schema del dongle prevede una Rpup, fate riferimento alla parte della guida in cui è descritta la costruzione del dongle per maggiori informazioni. LVP va abilitato se si sta usando lo schema a basso voltaggio ed “oscillator selection” va modificato in base alla frequenza del quarzo o del risonatore.

      Una volta completata la scrittura vi basterà connettere il dongle alla porta USB e verrà riconosciuta una nuova device USB che è appunto il pic in bootloader mode. Notate che per questa prima esecuzione del bootloader non è necessario chiudere il jumper perché manca un applicazione valida dopo il bootloader. Windows vi chiederà il driver che è incluso nell’archivio da voi scaricato all’interno dell’omonima cartella.

      Installato correttamente il nuovo dispositivo non vi resta che aprire il programmatore USB che rappresenta il software PC-side del pacchetto bootloader. Si tratta dell’applicazione PDFSUSB sempre contenuta nell’archivio.

      Dalla finestra principale di PDFSUSB selezionate il vostro PIC in bootloader mode (PICDEM FS USB…), quindi cliccate su Load HEX ed aprite un file HEX da scrivere. Per provare potrete usare il file PICFLASH.HEX incluso nell’archivio, si tratta del flasher per l’xbox360 ed è di sicuro funzionante. Se l’HEX file contiene delle impostazioni (frequenza del quarzo ecc.) diverse da quelle con cui è stato scritto il firmware da WinPic800, vi comparirà un messaggio di warning. In questo caso cliccando sul tasto “Cancel/Annulla” opterete per mantenere i settaggi esistenti che voi sapete essere corretti per la vostra board (altrimenti il bootloader non sarebbe partito). Se avete seguito la guida e settato WRTC qualunque scelta facciate questo programmatore USB non riuscirà a sovrascrivere la vostra configurazione, solo un altro flash con il programmatore esterno potrà farlo.

      Per scrivere l’HEX che avete appena aperto cliccate su “Program Device”, se non ci sono problemi il risultato finale sarà quello dell’immagine sottostante.

      Ora che è stata scritta un’applicazione valida disconnettendo e riconnettendo il dongle dall’USB non verrà più caricato il bootloader, ma tale applicazione. Per richiamare ancora il bootloader bisognerà chiudere il jumper tra RC6 e VSS come spiegato all’inizio.

      Per i futuri aggiornamenti è consigliabile inoltre eseguire un backup prima della scrittura di un nuovo firmware. La procedura è molto semplice, basta cliccare su “Read Device” e a lettura ultimata salvare l’HEX di backup mediante “Save To HEX File”.

      Appendice A – Guida all’acquisto dei Componenti

      Sono disponibili numerose alternative per acquistare online i componenti del dongle. Varie catene di vendita internazionali per l’elettronica e l’hobbistica offrono servizi per il nostro paese.

      Fra gli shop che effettuano le spedizioni direttamente dall’italia ci sono Farnell ed RS entrambe con un catalogo di quasi 500.000 prodotti. Quindi Distrelec che ne offre circa 100.000. Gli ordini vengono evasi in giornata con corriere ed arrivano di norma in 24 ore. Farnell è un ottimo distributore ma richiede una partita iva per poter completare l’acquisto, su RS e distrelec invece potrete comprare normalmente usando il codice fiscale per la fatturazione. I costi di spedizione sono di 9 euro per Farnell, di 6 euro per RS e di 8 euro per distrelec, i prezzi dei componenti sono tutti IVA esclusa. Per ordini di almeno 100 euro la spedizione è gratuita. Come forma di pagamento le carte di credito sono sempre accettate ed in alcuni casi è possibile usare anche il bonifico e/o il versamento su c/c postale.

      Per quanto riguarda le catene che spediscono dall’estero digikey è sicuramente da consigliare, a patto però di spendere almeno 65 euro in modo da avere gratis la spedizione, che altrimenti costerebbe 18 euro. I prezzi di digikey sono iva esclusa, ma l’iva non verrà pagata a loro bensì al corriere al momento della consegna. Gli ordini conclusi prima delle 3:00AM vengono evasi in giornata e normalmente passano 3 giorni lavorativi dall’evasione all’arrivo della merce a casa vostra. Il pagamento è tramite carta di credito. Simile come servizio a digikey è mouser che però a mio avviso è un po’ più caro.

      Se vi servisse solo il PIC potreste anche provare qualche fornitore più piccolo tipo futurlec, ma ce ne sono molti altri. Spediscono dagli stati uniti a soli $4 ed accettano anche paypal, ma i tempi di consegna sono sui 10-15 giorni lavorativi. Anche qui di regola ci sarebbe da pagare l’iva, ma dato che Futurlec utilizza la posta ordinaria e non il corriere, c’è la possibilità che la dogana lasci passare il pacchetto senza addebiti.

      A.1) Resistenze

      Spoiler
      Le resistenze (più correttamente chiamate resistori) sono il componente elettronico passivo più comune, le trovate dappertutto e costano pochissimo. La loro funzione principale in elettronica è quella di fungere da limitatore per la corrente che fluisce in un altro componente.

      I tre parametri con cui normalmente vengono selezionate sono la potenza massima espressa in watt, il valore misurato in ohm e la tolleranza in punti percentuali.

      La potenza massima la si può intuire dalle dimensioni del componente, quelle più grandi hanno una potenza superiore. Per il circuito a cui si riferisce questa guida possono essere utilizzate comuni resistenze da 1/4 di Watt (sono lunghe circa mezzo centimetro). Per queste resistenze la tolleranza ed il valore vengono espressi utilizzando un codice colorato a 4 o 5 fasce.

      Posted Image

      Nel caso ci siano 4 fasce per conoscere il valore della resistenza dovrete posizionarla con le barre oro/argento a destra e leggere i primi 3 colori. La tabella cui fare riferimento è riportata qui sotto:

      I primi 2 colori sono cifre numeriche il terzo è un moltiplicatore. Se ad es. leggete arancio-arancio-rosso il valore è

      Arancio(3) Arancio(3) Rosso(x100) = 33×100=3300=3.3k

      Il quarto colore indica la tolleranza, oro 5%, argento 10%, nessuna fascia 20%. In caso di ambiguità le fasce possono anche essere decentrate a sinistra per facilitare l’identificazione dell’orientamento di lettura.

      Le 5 fasce sono utilizzate per le resistenze di precisione, in questo caso i primi tre colori forniscono il valore, il quarto il moltiplicatore ed il quinto la tolleranza (verde 0.5%, marrone 1%, rosso 2%).

      E’ possibile anche usare l’aritmetica delle resistenze per ottenere i valori che riuscite a reperire. Mettendo n resistenze UGUALI in parallelo (collegate con gli estremi omologhi in comune) il valore si divide per n. Ad esempio 3 resistenze in parallelo da 33k vi forniranno una resistenza da 11k.

      Collegando resistenze qualsiasi in serie (l’estremo finale della prima assieme a quello iniziale della seconda e così via) il valore si somma. Ad esempio mettendo in serie una resistenza da 4.7k con una da 10k otterrete una resistenza da 14.7k.

      Di seguito i link per l’acquisto di alcune delle resistenze utilizzate nella guida, gli altri valori potrete facilmente trovarli usando la funzione di ricerca all’interno del negozio online prescelto.

      Farnell: 100, 10K

      RS: 100, 10K

      Digikey: 100 10K

      A.2) Condensatori

      Spoiler
      Il condensatore è un altro comunissimo componente passivo, che nei circuiti digitali tipo il nostro viene solitamente utilizzato come elemento stabilizzatore. Potete assimilarlo ad un piccolo “magazzino di carica elettrica”. Se la tensione subisce una diminuzione improvvisa (o un aumento), il condensatore “supplisce” svuotandosi (o riempiendosi maggiormente) ed assicurando un flusso di corrente stabile. Il parametro fondamentale che lo caratterizza è la capacità (misurata in Farad) che ne quantifica il potere stabilizzante. Più grande è la capacità, meglio il condensatore contrasterà una variazione improvvisa della tensione. Ed in effetti nel nostro circuito le capacità C0 e Cusb sono relativamente grandi. Tuttavia non si può mettere capacità enorme in punti i cui i segnali devono poter variare, perché quello che fa la capacità è proprio “opporsi” alle variazioni. Quindi le due Cq che nello schema del dongle insistono sui pin “oscillanti” devono avere un valore piuttosto piccolo. Un altro parametro che si deve specificare quando si acquista un condensatore è la tensione nominale che rappresenta la massima differenza di potenziale applicabile fra gli estremi del componente. Per il circuito della guida potranno essere usati senza problemi condensatori con tensione nominale dai 10V in su. Infine come sempre c’è una tolleranza, espressa di solito utilizzando una lettera maiuscola, che indica la possibilità di errore rispetto alle caratteristiche dichiarate. Normalmente una tolleranza del 5% (lettera J) o del 10% (lettera K) è accettabile (le prime lettere dell’alfabeto corrispondono a percentuali più basse).

      In base alla tecnologia con cui vengono prodotti è possibile distinguere vari tipi di condensatore. Tuttavia se capacità, tensione nominale e tolleranza non cambiano, due dispositivi realizzati mediante processi differenti possono essere considerati come equivalenti, almeno limitatamente ai semplici circuiti descritti in questa guida. Bisogna solo fare attenzione a riconoscere i condensatori polarizzati, che vanno montati rispettando un determinato orientamento.

      I condensatori senza polarità più comuni sono i condensatori ceramici e i condensatori in poliestere. I primi hanno capacità tra 1pF a 100nF, i secondi vanno da 1nF ad 1uF. I condensatori polarizzati sono in genere condensatori elettrolitici con capacità più elevata da 100nf fino a 10mF.

      Le capacità dei condensatori vengono indicate sul package in vari modi. Per i condensatori ceramici nell’ordine dei picoFarad si utilizzano in genere tre cifre numeriche, le prime due per una mantissa e l’ultima per un esponente in base 10. Ad es. il numero 104 rappresenta 10*10^4 pF = 100000pF = 100nF. I condensatori in poliestere usano spesso un codice con punto decimale che esprime la capacità in uF, così ad es .47 indica 0.47uF = 470nF, non è raro però che questo tipo di condensatore adotti una sigla particolare decisa dal produttore. I condensatori elettrolitici hanno normalmente la capacità espressa in uF sul package. Può capitare anche di trovare un codice alfanumerico, con la lettera associata all’ordine di grandezza utilizzata al posto del punto decimale. Ad es. 4n7 indica 4.7nF e 22p indica 22pF.

      Al valore della capacità può poi seguire una lettera maiuscola associata ad una tolleranza ed eventualmente la tensione nominale. Ad es. per un condensatore ceramico 104K indica 100nF con tolleranza del 10%, per un condensatore in poliestere .47J50 indica 470nF con tolleranza del 5% e tensione nominale di 50V.

      Come i resistori anche i condensatori possono essere combinati secondo una loro aritmetica. In questo caso però, al contrario di quello che accadeva con le resistenze, le capacità in parallelo si sommano fra loro, mentre la capacità di n condensatori UGUALI in serie si divide per n.

      Di seguito alcuni link per l’acquisto dei condensatori utilizzati nella guida:

      Farnell: 10uF, 470nF, 22pF

      RS: 47uF, 10uF, 470nF, 22pF

      Digikey: 10uF, 470nF, 22pF

      A.3) Quarzi e Risonatori

      Spoiler
      Il quarzo (o meglio l’oscillatore) è un dipolo il cui compito è fornire il segnale di temporizzazione al microcontrollore. Non ha polarità, è un dispositivo perfettamente simmetrico e va montato fra i due pin OSC del PIC. I parametri che lo identificano sono la frequenza in Hertz, la tolleranza e la stabilità termica. Per questa applicazione è accettabile una tolleranza fino a qualche decimo di punto percentuale, quindi il parametro è irrilevante per i quarzi la cui tolleranza è misurata normalmente in parti per milione (ppm). Anche della stabilità termica (che indica la variabilità della frequenza col crescere della temperatura) ci importa poco visto che non utilizzeremo il componente per applicazioni di precisione o in condizioni estreme. Resta la frequenza che potrà essere scelta a piacere fra i multipli di 4 compresi tra 4MHz e 24MHz.

      Per fornire una frequenza stabile il quarzo di solito necessita di due piccoli condensatori fra i pin “oscillanti” e Vss. Il valore di queste capacità dipende dalla frequenza e dalle caratteristiche del quarzo. Nel nostro caso potranno essere utilizzati tranquillamente due condensatori ceramici da 22pF con una tensione massima di almeno 10V. Va segnalto tuttavia che per il circuito descritto in questa guida l’omissione dei due condensatori non provoca particolari problemi.

      Un alternativa è l’utilizzo di un risonatore a tre poli che equivale al blocco costituito dal quarzo con i due condensatori. Il pin centrale del risonatore andrà connesso a Vss ed i due pin laterali indifferentemente ad OSC1 ed OSC2. Lo scotto da pagare è una minore accuratezza, i risonatori prevedono una maggiore tolleranza sulla frequenza rispetto ai quarzi, nell’ordine dei decimi di punto percentuale. In ogni caso per la nostra applicazione quei valori sono accettabili.

      Di seguito alcuni link per l’acquisto:

      Digikey: Quarzo20MHz, Risonatore20MHz

      RS: Quarzo12MHz, Risonatore20MHz

      Farnell:Quarzo20MHz, Risonatore20MHz

      A.4) Transistor, Diodi, Varie

      Spoiler
      I diodi nella loro forma base sono dei rettificatori, cioè dei bipoli che consento il passaggio della corrente in un solo verso, quello che va dal polo positivo (anodo) a quello negativo (catodo). Il catodo è individuabile grazie alla banda verticale che attraversa il package. Bisogna tener presente che sebbene i diodi consentano il passaggio della corrente ai loro estremi si verifica comunque una caduta di tensione tra 0.6V ed 1V similmente a quanto accade con le resistenze. Tuttavia a differenza delle resistenze che seguono la legge di ohm la caduta sul diodo è grossomodo costante e non dipende dalla corrente almeno per variazioni limitate di quest’ultima. Un altro tipo di diodo, lo shottky utilizzato spesso nei circuiti d’interfaccia, presenta una caduta di tensione più bassa (tra 0.2V e 0.35V) e dei tempi di commutazione piccolissimi. Un esempio di diodo rettificatore è dato dai comunissimi 1N4148 (utilizzabili con correnti fino a 150mA) mentre i diodi BAT42 e BAT43 sono shottky facilmente reperibili.

      Anche i led sono diodi, con la proprietà di emettere radiazione luminosa quando attraversati da corrente, quindi vanno montati con il polo negativo (stanghetta più corta) orientato opportunamente. La caduta di tensione sui led varia intorno ai 2V. Quando si utilizza un led bisogna in genere anche inserire una resistenza in serie per limitare la corrente. Se il led richiede ad esempio 1.7V e la tensione a cui noi vogliamo impiegarlo è 5V, per limitare la corrente a 10mA dovremo utilizzare una resistenza del valore di (5-1.7)/10m = 3.3*100 = 330 Ohm.

      Un altro tipo di diodo, usato spesso come rudimentale regolatore di tensione, è lo zener. Esso si comporta normalmente come un rettificatore, ma quando la tensione inversa applicata (quella tra catodo ed anodo) supera la sua “tensione zener” consente il passaggio di corrente. Questo vuol dire che se mettiamo uno zener da 5.1V tra due nodi su cui normalmente arrivano 12V, montandolo “al contrario” con il catodo nel nodo positivo, lo zener limiterà le tensione fra quei due nodi a 5V. Ovviamente va inserita anche una resistenza per limitare la corrente e possibilmente una capacità per stabilizzare la tensione. Quando si acquista uno zener basta specificarne la tensione caratteristica (5.1V,3.3V,12V sono quelle più utilizzate) e la potenza massima di impiego, in genere ½ Watt.

      I transistor BJT o bipolari (così chiamati perché la corrente che li attraversa è dovuta sia a portatori postivi che ad elettroni negativi) sono stati impiegati in questa guida per realizzare interruttori e buffer di tensione.

      Innanzitutto si è fatto uso del BC637 o del BC547, ma è una scelta arbitraria. Pressoché qualunque transistor di tipo NPN può essere adoperato al loro posto, l’importante è che sia orientato correttamente. I transistor BJT hanno tre terminali E (emettitore) B (base) e C (collettore). Si tratta sostanzialmente di un dispositivo controllato in corrente, la corrente che fluisce nella base determina quella che passa tra collettore ed emettitore.

      Ad esempio nello schema del programmatore HVP1 il transistor funziona come un interruttore pilotato dalla corrente che arriva nella base. Se sulla base applichiamo una tensione positiva, della corrente fluisce attraverso RB ed il transistor si chiude portando l’uscita sul collettore a massa. Quando invece sulla base c’è una tensione nulla, il transistor si apre e l’uscita viene connessa a all’alimentazione tramite RC. A noi serviva un buffer in grado di portare i livello dell’uscita a 12V e quella utilizzata rappresentava una soluzione relativamente semplice. Il fatto che si tratti di un invertitore (trasforma i bassi in alti e viceversa) non crea particolari problemi poiché i segnali possono essere invertiti anche via software modificando le relative caselle “inv” negli hardware settings del programmatore.

      Ora per montare correttamente il transistor bisogna individuare base collettore ed emettitore. La base è riconoscibile verificando con un tester la continuità fra i terminali. Nei transistor NPN ci sarà passaggio di corrente solo quando il polo positivo del tester (il rosso) sarà a contatto con la base. Tuttavia per distinguere E e C occorre utilizzare una funzione opportuna dei multimetri che fornisce la misura di hFE, guadagno di corrente del BJT. Spostando la rotellina del tester su hFE ed inserendo i piedini del transistor nell’apposito socket i cui buchini sono contrassegnati con E B e C, si leggerà un valore positivo superiore a 20-30 (può arrivare anche a qualche centinaio) solo quando il transistor sarà orientato correttamente.

      Se non siete in grado di fare queste misurazioni comunque non preoccupatevi, potrete sempre verificare il circuito come spiegato nell’appendice B della guida. Ovviamente è possibile anche cercare di reperire il datasheet del vostro transistor tramite internet, riporta sempre la posizione dei pin rispetto al package.

      Di seguito alcuni link per l’acquisto, sono tutti presi da RS ma potrete usare la ricerca per trovare prodotti simili negli altri shop:

      Diodo Rettificatore
      Zener 5.1V
      Transistor BC547
      LED 3mmRosso

      USB TypeA Plug
      DB25 Maschio
      DB9 Femmina

      Appendice B – Soluzione dei Problemi comuni

      B.1) Il PIC non viene programmato

      Se il PIC non viene riconosciuto da WinPic800 provate a scrivere ugualmente il file HEX, spesso funziona. Se non è questo il caso assicuratevi che il programmatore sia operativo. Entrate in “Hardware Settings” e dopo aver verificato che le impostazioni coincidano con quelle del vostro circuito (come spiegato nella guida) mettete la spunta nella colonna test in corrispondenza dei pin che volete testare. Quindi con un tester/multimetro impostato a voltmetro (rotellina su 20V DC) verificate le tensioni relative sui pin dell’integrato come schematizzato nell’immagine sottostante.

      Come prima cosa spuntate VDD ed assicuratevi che la tensione misurata sul PIC cada fra 4.5V e 5.5V. Nel caso il risultato non fosse questo vorrebbe dire che c’è un problema con l’alimentazione. Rincontrollate tutto, verificate che il cavo USB sia collegato se il circuito realizzato lo prevede e che le porte del PC utilizzate funzionino.

      Se il test ha dato l’esito sperato lasciate abilitato VDD nella colonna test di WinPic800 e procedete a controllare gli altri pin. Dovrete spuntare cioè due caselle per volta VDD più quella da verificare. Un pin “spuntato” dovrà diventare alto (misurerete un valore di 3.5V – 5.5V) un pin senza spunta dovrà essere basso (0V – 0.5V). Fa eccezione il caso del programmatore ad alto voltaggio per il quale il test su VPP con la spunta deve dare un valore compreso fra 10V e 12.5V, nel test senza spunta VPP varrà come sempre 0V – 0.5V.

      Spoiler

      Se le tensioni sul PIC cadono fuori degli intervalli indicati difficilmente riuscirete a programmare. Controllate allora tutte le saldature per verificare l’assenza di falsi contatti o corto circuiti ed assicuratevi che nel bios del PC, la porta parallela sia impostata come ECP/Bidirezionale.

      Un problema di alimentazione è la causa principale per gli errori di programmazione, in questi casi l’aggiunta del condensatore C0 (o l’impiego di una capacità più grande, fino a 100uF) può essere determinante. In particolare C0 potrebbe aiutare quando WinPic800 riconosce il PIC ma non lo programma (errore in scrittura). In genere questo vuol dire che la LPT non eroga sufficiente corrente al PIC nei momenti critici.

      Un altra causa di mancato riconoscimento o errore di programmazione è l’assenza del flag LVP nei tentativi a basso voltaggio. Un PIC flaggato ad alto voltaggio è programmabile SOLO in HVP.

      B.2) Il Dongle viene programmato ma non funziona

      Innanzitutto provate ad installare un HEX demo per il framework USB di microchip come questo. Windows dovrebbe riconoscere una nuova device USB chiedendovi di installare il driver (che è incluso nell’archivio). In caso contrario le possibili situazioni di errore sono le seguenti:

      E1) Windows non riconosce nessun dispositivo
      E2) Windows segnala un dispositivo sconosciuto e non funzionante
      E3) Windows riconosce inizialmente il dispositivo ma da un errore successivamente senza completare l’installazione dei driver

      Le possibili cause di questi problemi sono le seguenti:

      C1) Il PIC va in reset o programmazione all’avvio
      C2) Il regolatore di tensione non fornisce i 3.3V
      C3) Il connettore USB è saldato/collegato male, ci sono falsi contatti e/o corto circuiti
      C4) La frequenza del quarzo/oscillatore non corrisponde alle impostazioni del PIC

      C1 si applica solo ad E1, mentre C2, C3, C4 sono cause per tutte le condizioni di errore.

      Innanzitutto per escludere C1 controllate che lo schema circuitale del dongle sia concorde con le scelte di programmazione (impostazione di MCLRE e presenza/assenza di Rpup). Se necessario verificate anche tutte le saldature sulla parte del circuito relativa ai pin VPP e PGM.

      Fatto ciò passate a C2 misurando con un tester la tensione fra i due estremi del condensatore Cusb quando il PIC viene connesso. Quella tensione dovrebbe essere 3.3V. Un valore instabile e di poco inferiore a 3.3V (es. 2V) indicherebbe un problema con il condensatore. In tal caso sostituitelo con uno più grande (arrivate fino a 10uF se serve) o saldatelo meglio.

      Per quanto riguarda C3 ispezionate attentamente il dongle nell’area dei collegamenti USB. Verificate che le saldature siano stabili e non vi siano falsi contatti o corto circuiti. Al limite dissaldate il connettore USB e risaldatelo dopo averlo controllato attentamente (oppure utilizzate un cavetto tagliato per provare la pennetta).

      La soluzione migliore per C4 è la sostituzione del quarzo, potrete però anche tentare utilizzando altre impostazioni per la scelta della frequenza all’atto della programmazione.

      Appendice C – Adattare i file HEX al dongle realizzato

      GP (GroopicPatcher) è un piccolo eseguibile che ho creato per facilitare alcune delle operazioni descritte in questa guida. Serve ad adattare i file HEX già compilati al circuito particolare che avete realizzato, potete scaricarlo qui. A questo link trovate i sorgenti nel caso vogliate personalizzarlo.

      Le operazioni principali che è in grado di portare a termine sono le seguenti:

      • Rilocazione dell’HEX in modo che sia utilizzabile con il bootloader
      • Patch della posizione del LED di stato in modo che corrisponda al vostro circuito
      • Patch dei flag di configurazione LVP ed MCLRE oltre a quello relativo alla frequenza

      In più può riassegnare il jumper utilizzato per richiamare il bootloader nel caso non lo voleste sul pin17.

      Per utilizzarlo aprite un prompt dei comandi di windows ( si trova in menu avvio > accessori ) e dalla cartella che contiene il programma digitate:

      gp <file hex in ingresso> <file hex in uscita>

      Oppure semplicemente rinominate il file da modificare come “in.hex” copiatelo nella cartella che contiene GP e cliccate due volte sul file start.bat, verrà creato un file out.hex che rappresenta il risultato dell’elaborazione.

      Nel seguito sono descritti i due scenari tipici d’uso.

      Adattare l’hex applicativo (psgroopic)

      Dopo aver richiamato GP usando come in.hex il file da modificare, vi sarà data la possibilità di scegliere l’opzione di rilocazione. Se avete seguito questa guida dovrete selezionare MCHPUSB (digitando 2 seguito da invio).

      Quindi vi verrà chiesto se volete reimpostare i flag, digitate N perché modificare i flag non serve se si usa un bootloader.

      Alla richiesta di spostare un LED, digitate S perché normalmente i file hex reperibili hanno il LED in una posizione diversa da quella del vostro dongle. Ora sarà richiesto il PIN di partenza. Normalmente è B4, ma non preoccupatevi perché se digitate un pin dove non è presente il LED il programma se ne accorgerà e vi farà ripetere la selezione. Il PIN di arrivo è quello dove voi avete sistemato il LED, fate riferimento all’immagine sottostante, i PIN A0,A1,… B0,B1,…,C0,C1,… corrispondono a RA0,RA1,… RB0,RB1,…,RC0,RC1,… .

      Spoiler

      Infine dovrete scegliere se spostare o meno un jumper, ovviamente bisognerà digitare N perché in questo caso non stiamo lavorando sull’hex del bootloader.

      Adattare l’hex del bootloader

      Questa volta usate GP sul file picxboot.hex che contiene il nostro bootloader.

      Selezionate N alla richiesta di rilocazione ed S a quella di modifica dei flag, scegliendo poi i valori corrispondenti al circuito realizzato per frequenza, LVP ed MCLRE. Le restanti opzioni di configurazione veranno impostate implicitamente come indicato nella parte 5) della guida.

      Digitate N alla richiesta di spostare un LED, quindi S a quella di spostare un bottone/interruttore. Il jumper di default si trova sul PIN C6 che è quello di partenza. Il pin di arrivo lo sceglierete voi in base a dove vorrete sistemare l’interruttore (fate riferimento all’immagine precedente per ricavare il nome dei PIN).

      Appendice D – Programmatore JDM su porta seriale

      In quest’appendice seguiremo una via alternativa a quella delle parti 2 e 3 della guida. Costruiremo un programmatore seriale (JDM) ed utilizzeremo il software di programmazione PICPgm al posto del solito WinPic800. Il JDM è un programmatore ad alto voltaggio quindi per la per la preparazione degli HEX e la realizzazione del dongle (Parte 4) dovrete fare riferimento alle soluzioni HVP. Ricordate che è richiesta una porta RS232 nativa, i convertitori USB/seriale non sono compatibili.

      D.1) Costruzione del Programmatore

      Questa non è la versione più semplice del JDM, cercando in rete probabilmente troverete schemi per programmatori seriali JDM-compatibili davvero minimali. Tuttavia non funzionano sempre con i PIC in questione perché in genere non convertono i livelli in entrambi i sensi, ma si limitano ad applicare delle resistenze come limitatori di corrente. La programmazione tramite la porta seriale è un po’ più problematica di quella su LPT ed i programmatori eccessivamente semplificati tendono a non funzionare o ad essere instabili. Il JDM che descriverò nel seguito è quello classico con un paio di cambiamenti sui valori dei componenti validi per il nostro caso. Nello spoiler qui sotto trovate qualche spiegazione in più sul funzionamento del circuito.

      Spoiler
      Il principio alla base del circuito è quello di usare un riferimento diverso per la massa del PIC e quella della seriale. Il GND della seriale diventa il VDD del PIC, in questo modo quando il PIC fornisce un valore basso, la tensione che arriva alla seriale sarà in effetti negativa come previsto per le RS232 (le inversioni eventuali sono sempre gestite via software). Quando il PIC scrive un valore alto, un transistor “sconnette” la linea PGD e il pin usato come DATAOUT della seriale (DTR) “tira su” il pin usato come DATAIN (CTS). Questo funziona perché il software del JDM ha l’accortezza portare ad 1 il DATAOUT quando non lo utilizza, notate che è presente una resistenza fra DTR e CTS che permette a DTR di funzionare come un pullup quando il PIC scrive. Quando il PIC è in lettura quella resistenza non da fastidio perché sarà sempre il transistor a fornire il livello alto corretto, agisce anzi da limitatore per la corrente che la seriale potrebbe assorbire mentre il PIC legge uno 0. Il clock seriale è fornito dal pin RTS opportunamente “tagliato” nei livelli per mezzo di due diodi rettificatori che portano a VDD e VSS. Come già detto la tensione di alimentazione VDD è fissata al GND della seriale, la rete di zener e condensatori assicura valori di VSS+5 per VDD e VSS+10 per VPP.

      La lista dei componenti è la seguente, come al solito vi rimando all’appendice A per maggiori informazioni:

      • 2 Diodi “Zener”da 5.1V , es. diodi 1N5231
      • 2 Transistor NPN generici , es. transistor BC547
      • 4 Diodi rettificatori generici , es diodi 1N4148
      • 2 resistenze da 1.5K e 10K rispettivamente, ¼ Watt
      • 2 condensatori da 47uF e 100uF rispettivamente, 25V
      • Connettore DB9 Femmina (da inserire nella porta seriale)

      E questo è lo schema elettrico:

      Spoiler

      D.2) Utilizzo del Programmatore

      Per una maggiore compatibilità la programmazione è eseguita usando PICPgm invece di WinPic800, trovate il software a questo indirizzo , scaricate l’ultima beta disponibile.
      Nell’immagine qui sotto è riportata la finestra principale del programma con quei pochi comandi che useremo, la selezione del PIC non è necessaria, utilizzate pure l’ “Autodetect”.

      Spoiler

      Cominciate con il richiamare “Hardware Selection/Configuration” dal menù “Hardware” ed impostate tutto come in questo screen (cambiate solo la porta se non state usando COM1):

      Spoiler

      Ora il vostro PIC dovrebbe essere riconosciuto o eventualmente lo sarà dopo un riavvio del programma. Caricate il file HEX, e spostatevi nel TAB “Config Bits” dove potrete impostare i vari flag (Frequenza, LVP, MCLRE ecc). La finestra è quella nell’immagine sottostante, vi consiglio comunque di pre-configurare il file HEX come descritto nell’appendice C in modo da non dover cambiare nulla dal programmatore.

      Spoiler

      A questo punto non vi resta che cliccare sul bottone per la programmazione ed aspettare che il software finisca il suo lavoro. Evitate di tentare l’operazione su un PC sovraccarico con molte applicazioni aperte. Al termine fate un’ulteriore verifica sulla scrittura e passate alla parte 4 della guida.

      Se vuoi entrare a far parte dello staff, clicca qui!

Visualizzazione 0 filoni di risposte
  • Devi essere connesso per rispondere a questo topic.