Scheda UBW ultimo aggiornamento 19 luglio 2019 |
Indice
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:
Pulsante di reset
Risuonatore 20MHz
General Input Button (utilizzato anche per entrare in modalità programma nel corso di un reset)
Porta USB
Connettore TX / RX (può essere usato come un convertitore USB/UART)
Connettore PA - per accesso alle porte da RA0 a RA7.
Connettore PB - per accesso alle porte da RB0 a RB7.
Due LED di stato
Porta ICSP per programmazione in circuit
Alimentazione tramite porta USB o esterna
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
|
---|
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 |
|
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 |
|
SER_TTL |
Connettore 4 pin maschio Molex passo 2.54mm |
USB |
|
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 |
Saldatura delle resistenze e di alcuni ponticelli
Saldatura dello zoccolo dell'intergrato, dei condensatori e i pulsanti
scheda ultimata con i vari connettori, led
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:
"! 0" (non utilizzato)
"! 1" (non utilizzato)
"!2 Err: TX Buffer overrun"
Questo errore è generato se, per qualche ragione, il codice interno della
UBW tenta di inviare troppi dati al PC in una sola volta.
"!3 Err: RX Buffer overrun"
Questo errore è generato se, mentre il UBW sta ricevendo dati dal PC, il
buffer di ricezione interno è troppo pieno.
"!4 Err: Missing parameter(s)"
Il UBW invierà questo errore se si aspettava di trovare un altro parametro
nel comando, ma invece trovato un <CR> o <LF>.
"!5 Err: Need comma next, found: '<some_char>'"
Il UBW invierà questo errore se si aspettava di trovare una virgola, ma ha
trovato qualcos'altro. Il <some_char> sarà il carattere che ha trovato
al posto
della virgola.
"!6 Err: Invalid parameter value"
Questo errore significa che l'UBW ha trovato un parametro, ma il suo valore
era al di fuori del range accettabile.
"!7 Err: Extra parameter"
Questo errore indica che il UBW aspettato di vedere un <LF> o <CR>, ma invece
ha trovato una virgola in più o un parametro in
più.
"!8 Err: Unknown command '<command_chars>"
Questo errore indica che il nome o singolo comando non è stato
capito o non esiste. <command_chars> sarà uno o due byte che il UBW ricevuto
che non corrisponde ad alcun comando.
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) |
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"
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
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 |