Scheda UBW
USB Bit Whacker

ultimo aggiornamento 19 luglio 2019


JLCPCB - 2$ per prototipi di PCB, di qualsiasi colore. Produzione in 24 ore!
L'Azienda di prototipi PCB più popolare, con oltre 700.000 clienti in tutto il mondo!
Recati presso la JLCPCB, riceverai regali e coupon gratuiti
presso Maker Faire Rome il 18-20 ottobre


Indice

Descrizione

La scheda UBW (USB Bit Whacker) è una scheda di sviluppo basata su un microcontrollore Microchip PIC con porta USB come PIC18F2455, PIC18F2550, PIC18F4455 o PIC18F4550. Quella che segue è una mia personale interpretazione dello schema base.

Scheda  UBW originale (primo prototipo)

 

Il progetto originale è a opera di Brian Schmalz che ha messo a disposizione tutto il materiale sul suo sito http://www.schmalzhaus.com/UBW/ , tutti gli strumenti utilizzati per la progettazione di questo progetto sono liberi, e il progetto è aperto a chiunque di utilizzare per quello che desiderano
La scheda è alimentata dalla connessione USB e ha vari connettori dove sono disponibili le porte del processore.
La particolarità della scheda è data dal fatto che all'interno del processore è presente uno speciale interprete di comandi di base per l'input e l'output di controllo.
Se collegato a un computer con un sintema operativo Windows / Max OS X /  Linux, la scheda UBW apparirà come una porta RS232.
A questo punto darà possibile il controllo dei singoli pins di  I/O pins del PIC attraverso semplici comandi trasmessi via seriale .
Il PIC viene programmato con un bootloader USB.
Questo significa che potete creare HEX file utilizzando qualsiasi compilatore o assembler (C18, CC8e, SDCC) e poi caricare il file HEX sul PIC senza un programmatore esterno - direttamente via USB.

La scheda prevede:

Realizzazione della scheda

Vediamo ora come realizzare la scheda, si procederà iniziando dalla realizzazione del circuito stampato.      Per la sua realizzazione si utilizzerà una basetta in vetronite (monofaccia) di dimensioni 67x54 mm circa, il metodo potrà essere quello della fotoincisione o del trasferimento termico utilizzando i cosiddetti fogli blu (PRESS-N-PELL), in questo caso ricordo che l’immagine delle tracce del circuito dovrà essere speculare.
Una volta inciso il rame, si verificherà in controluce o mediante l’utilizzo di un multimetro che non vi siano cortocircuiti soprattutto tra le piste più vicine.
Si passerà quindi alla foratura della stessa, utilizzando principalmente una punta da 0,8 mm, mentre se ne utilizzerà una dal diametro di 1 mm per i connettori e una da 2,5 mm per la presa USB..
In seguito si potrà passare al posizionamento e alla saldatura dei componenti seguendo lo schema visibile sotto.
Per la saldatura si utilizzerà un piccolo saldatore a punta fine, della potenza di circa 25 – 30 W.
S’inizierà dai ponticelli, proseguendo con le resistenze, i diodi led, controllandone l’orientamento.
Si potrà quindi, procedere con lo zoccoli dell'integrato, i pulsanti, i condensatori, e il risuonatore ceramico (che potrà essere montato su un piccolo zoccolo).
Continuando con i pin-strip e infine il connettore USB.
Terminato la saldatura si potrà inserire l'integrato IC1 nell'apposito zoccolo facendo attenzione alla tacca di riferimento che andrà rivolta in senso opposto con la presa USB.

A confronto l'originale e la simulazione effettuata con Eagle 3d

Il circuito è stato realizzato con il programma EAGLE in versione FREE

OurPCB, your most reliable PCB and PCBA supplier.

Focusing on PCB Prototype and PCB Assembly Turnkey Services.

One-Stop Wire Harness & Cable Assemblies Solution

 

Schema posizionamento componenti

Circuito stampato

Elenco componenti

C1

470nF Condensatore multistrato

C2

10µF Condensatore elettrolitico verticale

C3

100nF Condensatore multistrato

R1,R2

120 Ώ 1/4W

R3

150 Ώ 1/4W

R4,R5

10k Ώ 1/4W

D1,D2

LED ø3 mm - Rosso

D3

LED ø3 mm - Verde

IC1

PIC18F2550-I/SP SDIP+ zoccolo 14+14

Y1

Risuonatore ceramico 20MHz

ICSP

Pin strip maschio verticale 1x6

JP1

Pin strip maschio verticale 1x6

PA-PB

Connettore  10 Vie Molex

PWR

Morsettiera 2 poli passo 2,5mm

RESET-PRG

Pulsante tattile

 

SER_TTL

Connettore 4 pin maschio Molex passo 2.54mm

USB

Connettore USB tipo B ad angolo PCB

AN1

Pin strip maschio verticale 1x3

AN2

Pin strip maschio verticale 1x6

J1,J2

J10MM

J3

J5MM

 
Processore PIC18F2550 28-Pin
High Performance, Enhanced Flash, USB Microcontrollers with nanoWatt Technology

Piedinatura Datasheet Foto dell'integrato


Risuonatore ceramico 20 MHz
Piedinatura Datasheet Foto

 

Il cavo viene costruito con il connettore tipo A da un lato (computer) ed il connettore tipo B dall'altro (periferica).  Normalmente le nuove cpu hanno due porte USB, ma usano un solo canale IRQ ed un solo indirizzo di memoria I/O.  Sul singolo canale IRQ si possono usare fino a 112 periferiche utilizzando gli hubs e le extension-boxes

USB pinout

Pin N

Nome

 Funzione

Colore filo

1

Vcc

+5V massimo 500mA

Rosso

2

D-

data input to computer

Bianco

3

D+

data output from computer

Verde

4

GND

ZeroG round

Nero

 

Alcune fasi del montaggio

Saldatura delle resistenze e di alcuni ponticelli

Saldatura dello zoccolo dell'intergrato, dei condensatori e i pulsanti

scheda ultimata con i vari connettori, led

 

Alcuni dettagli della scheda

Dettaglio connettore ICSP

Dettaglio Led di presenza alimentazione e led collegamento

Dettaglio connettori porte PA e PB

Dettaglio Risuonatore ceramico 20 MHz e connettori 3 pin

SET COMANDI DISPONIBILI
(FIRMWARE 1.4.3)

In questa tabella sono riassunti i comandi con la lori sintassi disponibile per il firmware nella versione 1.4.3.      Altre informazioni più complete ed aggiornate possono essere trovate sul sito dell'autore http://www.schmalzhaus.com/UBW/

Comando Descrizione Sequenza comandi seguita da <CR> Esempio Valore di ritorno
R Reset R "R" "OK"
C Configura pin di I/O e analogici C,<DirA>,<DirB>,<DirC>,<AnalogEnableCount>
<DirA>,<DirB>,<DirC> = [0..255]; Output(0), Input(1) for each bit.
<AnalogEnableCount>=[0..12]; Number of I\Os to enable for analog input.
"C,4,245,52,0" "OK"
O Uscita porta digitale O,<PortA>,<PortB>,<PortC>
<PortX>=[0..255]; Output value to each port
"O,0,255,22" "OK"
I Input from digital ports
Returns decimal values for PortA, PortB,
and PortC separated by commas.
I "I" "I,001,045,205"
V Restituisce la versione del firmware V V" "UBW FW D Version 1.4.3"
A Analog input request
Returns decimal values for all enabled
analog inputs separted by commas.
A "A" "A,0145,1004,0000,0045"
T Timed I\O (digital and analog)
Periodically returns “I” and “A” packets
T,<Time>,<Mode>
<Time>=[1..30000]; Time in units of ms.
<Mode>=[0,1]; Digital “I” packets (0), Analog “A” packets (1)
"T,100,0" "OK"
PI Pin Input read
Returns decimal value of Port AND’ed with 2^^<Pin>
PI,<Port>,<Pin>
<Port> = [A,B,C]
<Pin>=[0..7]
"PI,C,6" "PI,<Value>"
PO Pin Output write
Writes to bit <Pin>
PO,<Port>,<Pin>,<Value>
<Port> = [A,B,C]
<Pin>=[0..7]
<Value>=[0..255]
"PO,A,3,0" "OK"
PD Pin Direction set PD,<Port>,<Pin>,<Direction>
<Port> = [A,B,C]
<Pin>=[0..7]
<Direction>=[0,1] ; Output(0), Input(1)
"PD,A,3,0" "OK"
MR Legge una locazione di memoria MR,<Address>
<Address>=[0..4095]; RAM address
"MR,3968" "MR,28"
MW Scrive in una locazione di memoria MW,<Address>,<Value>
<Address>=[0..4095]; RAM address
<Value>=[0..255]
"MW,3968,56" "OK"
CU Configure UBW
Setting parameter 1 to a value of 0 turns off
the “OK” response.
CU,<Parameter>,<Value>
<Parameter>=[0..255];
<Value>=[0..255]
"CU,1,0" "OK"
RC RC servo pulse output RC,<Port>,<Pin>,<Value>
<Port> = [A,B,C]
<Pin>=[0..7]
<Value>=[0..11890]
"RC,B,3,5945" "OK"
BO Bulk digital Output** BO,<ASCII_HEX_Bytes>
<ASCII_HEX_Bytes>=[00..FF]xN; Each byte in Hex is concatenated.
"BO,55A721" "OK"
BC Bulk digital Configure** BC,<Init>,<WaitMask>,<WaitDelay>,<StrobeMask>,<StrobeDelay>
<Init>=[0..255]; <Init> is initial value written to PortA.
<WaitMask>=[0..255]; “Busy” bit mask used if <WaitDelay> > 0.
<WaitDelay>= [0..255]; Units of 400ns.
<StrobeMask>=[0..255]; XOR’ed with <Init> for strobe signal.
<StrobeDelay>=[0..255]; Units of 830ns.
"BC,1,1,1,1,1" "OK"
BS Binary Send to parallel output** BS,<ByteCount>,<BinaryStreamOfBytes>
<ByteCount>=[1..56]; Number of bytes to be written
<BinaryStreamOfBytes>= Sequence of 8 bit characters to be written
"BS,3,#Ij" "OK"

Lista messaggi di errore:

Programmazione e collegamento

Una volta completato il montaggio occorre caricare l programma all'interno del processore, per questo motivo la scheda è dotata di apposito connettore ICSP, potrà così essere utilizzato un programmatore dotato anch'esso di questo connettore come il PIC


Scarica DRIVER

(MCHPFSUSB_Setup_v1.3.exe)
driver aggiornati al sito Microchip

Scarica
Firmware
(UBW_Boot20MHz_combo_2455.zip)

 Una volta collegata la scheda al programmatore questo riconoscerà automaticamente il processore

Si dovrà ora caricare il file caricare il file hex UBW_Boot20MHz_combo_2455..hex


Scarica
Firmware
(UBW_Boot20MHz_combo_2455.zip)

Premendo il tasto Write verrà trasferito all'interno della memoria del processore

La scheda per essere riconosciuta ha bisogno di appositi driver che si trovano
all'interno del file MCHPFSUSB_Setup_v1.3.exe


Scarica DRIVER

(MCHPFSUSB_Setup_v1.3.exe)
driver aggiornati al sito Microchip

Quando si collegherà la scheda alla porta USB, verrà segnalata la presenza di una nuova periferica
e alla richiesta si sceglierà quelli presenti nella cartella
\MCHPFUSB\fw\Cdc\inf\win2k_xp_vista32_64\
una volta copiati i vari file verrà creata una porta virtuale, nell'esempio sotto COM21

Utilizzano un programma Serial Terminal, nell'esempio sotto quello fornito dalla Parallax per la gestione della scheda Propeller
ma può essere utilizzato anche un'altro programma, settando come "Com Port" quello della propria scheda
se si invierà il comand "V" e se tutto è andato a buon fine si otterrà come risposta la stringa
"UBW FW Version 1.4.3"

Comando relè

La scheda UBW quando è collegata al PC apparirà come una porta RS232 e data la presenza dell'interprete fa si che questa possa essere programmata facilmente tramite semplici programmi come il Basic.
Nell'esempio si utilizza un piccolo modulo relè, per il collegamento si utilizzerà il connettore a tre pin connesso alla porta PA0

Il compilatore scelto per la realizzazione del programma di gestione lato PC è "Just Basic", un ambiente di sviluppo semplice, pratico e soprattutto gratuito, I’ideale per principianti ed esperti, dalle caratteristiche notevoli.
Ecco, alcune particolarità:
• è un ambiente di programmazione in Basic e da esso eredita tutte le caratteristiche intrinseche;
• è completamente GRATUITO per utilizzo personale e applicazioni commerciali;
• dispone di un editor con testo colorato in relazione ai diversi tipi di codice;
• ha possibilità di creare programmi in modo testo o applicazioni a finestre GUI
• gestisce numeri a precisione illimitata;
• include un debugger a livello sorgente con implementazione dei breakpoints;
• dispone di un editor personalizzabile di GUI;
• ha un help in linea molto completo;
• Supporta la gestione della porta seriale con protocollo RS232.

IL JUST BASIC E LA COMUNICAZIONE SERIALE
Il Just Basic, mette a disposizione un metodo semplice e sicuro per gestire la comunicazione seriale.
Il cuore del procedimento sta nell'istruzione OPEN "COMn.", la quale instaura ed apre una comunicazione seriale per la lettura e la scrittura, quindi stabilisce un flusso in entrata ed uscita. La gestione completa della seriale utilizza le API di Windows per la comunicazione. La sintassi base del comando è la seguente:

OPEN “COMn:baud,parity,data,stop" for random as #handle

Dove:
• "n" rappresenta il numero logico della porta seriale (1, 2, 3, ecc);
• "baud" rappresenta la velocità di comunicazione (bps)
• "parity" prevede invece i seguenti possibili valori:
N No parity
E Even parity
0 Odd parity
S Space parity
M Mark parity
• Valori disponibili per "data" sono: 5, 6, 7 e 8. Essi indicano la lunghezza della " parola" spedita;
• "stop" può assumere il valore di 1 o 2, a seconda di quanti bit di stop occorrono per la comunicazione.
Inoltre I'utente può aggiungere alcuni parametri opzionali, molto utili, che consentono di controllare al meglio le transizioni dei dati, anche in presenza di eventuali timeout. Essi sono i seguenti:
• CSn imposta il timeout del segnale di CTS, in millisecondi;
• DSn imposta il timeout del segnale di DSR, in millisecondi;
• PE abilita il controllo della parità;
• RS disabilita il controllo dell'RTS (request to send).
Una volta che la comunicazione è stabilita, per scrivere sulla porta seriale è sufficiente inoltrare il comando:

print #seriale, "STRINGA"

Per chiudere infine la comunicazione è opportuno utilizzare I'apposito comando, come segue:

close #seriale

 


Scarica programma

Nota: Quando si carica il programma occorrerà sostituire nella riga
ComPort$ = "com21" 'Numero porta
Il numero della porta che è stata attribuita dal sistema

 
Elenco revisioni
18/07/2019 Aggiornato pagina
24/08/2010 Emissione preliminare