Caratteristiche
- Scheda sperimentale con CPU Z80 4MHz, 32K ROM, 32K RAM, porta I/O
interna 8+8 bit.
- Convertitore USB / seriale TTL on board da cui prelevare anche
l'alimentazione (con fuse fast 250mA).
- Jumper per escludere i 5V USB e alimentare la scheda dall'esterno
tramite i connettori strip.
- Protocollo seriale 9600,8,N,2 (jumper per scollegare ricezione da
convertitore USB).
- LED attività e pulsante multifunzione.
- Connettori strip per tutti i segnali compresa la decodifica I/O
esterno (/IOE /IOW /IOR).
- Predisposizione bus I2C master (con controllo clock stretching).
- 4 in + 4 out ausiliari.
- Pulsante reset e LED indicatore di HALT.
- Assorbimento 130mA a 5V.
- Zero fili volanti!
Scopo
Costruire una versione più moderna del
vecchio TSP
(terminale seriale
programmabile) realizzato nel 1990, adatta ad essere collegata
direttamente ai PC attuali dotati di sole porte USB, equipaggiata di bus I2C
per interfacciarsi con la miriade di componenti che sono nati da allora,
e, come ulteriore sfida costruttiva e non ultima motivazione, riuscire
a fare tutto in modo
ordinato su millefori senza usare neanche un filo volante, nè lato rame
nè lato componenti (i ponticelli ortogonali alle piste di rame non si
considerano fili volanti ma parte del circuito assieme ad esse).
Immagini (click per ingrandire)
|
Schema elettrico completo.
Non sono indicate le
alimentazioni degli integrati e
i condensatori di bypass, che
restano sottointesi.
|
Schema di
montaggio sulle basette
stripboard (visto lato componenti).
In blu sono indicati i punti di
interruzione delle strisce di rame.
|
|
Immagini
delle interruzioni
delle basette sopra e sotto
viste lato rame. |
|
|
Foto delle basette montate,
quella superiore si innesta su
quella inferiore tramite connettori strip
lunghi (articolo 315031 su robot-italy.com).
Le due schede rimangono distanziate
esattamente di 15mm.
|
Vista lato
rame. Le strisce conduttive di queste
schede (articolo 450160 su distrelec.it)
permettono montaggi estremamente ordinati
senza bisogno di costruire piste con
spezzoni di conduttore o ponti di stagno.
Notare il nanofusibile SMD da 250mA
(articolo 272402 su distrelec.it)
|
|
|
Il circuito completo si
collega ad un PC
tramite il solo cavetto mini USB, da cui
viene anche alimentato.
|
Il
convertitore USB/seriale è il cuore
della comunicazione con il PC.
(articolo 990004 su robot-italy.com) |
|
API seriali
Il modulo TSP all'accensione, dopo un breve test e azzeramento della
RAM, rimane in attesa di comandi da parte del PC. Questi comandi vanno
inviati in modalità binaria, cioè non tramite stringhe ASCII ma
inviando direttamente i byte con il valore del comando. Ad esempio:
trasmettendo il byte di valore 31 il modulo risponde con due byte
contenenti i valori ASCII dei caratteri 'OK'.
Funzioni di base
+--------------+
31
-->
|
|
| SYNC
|
'OK' <--
|
|
+--------------+
+--------------+
32
-->
|
| Load scrive in memoria all'indirizzo
L_ADDR -->
|
| ADDR una sequenza di LEN bytes
H_ADDR -->
|
| (solo RAM).
L_LEN -->
| LOAD
|
H_LEN -->
|
| Indirizzo e lunghezza a 16 bit
BYTE1 -->
|
| vengono ricevuti prima byte basso
:
|
| e poi byte alto.
BYTEn -->
|
|
+--------------+
+--------------+
33
-->
|
| Dump trasmette al PC una sequenza di
L_ADDR -->
|
| LEN bytes leggendoli dalla memoria
H_ADDR -->
|
| dall'indirizzo ADDR (sia ROM che RAM).
L_LEN -->
| DUMP
|
H_LEN -->
|
|
BYTE1 <--
|
|
:
|
|
BYTEn <--
|
|
+--------------+
+--------------+
34
-->
|
| Effettua una CALL
L_ADDR -->
| CALL
| all'indirizzo specificato.
H_ADDR -->
|
| Puo' essere effettuata una RET
+--------------+
API programmi
Tramite chiamate RST i programmi sviluppati per il TSP possono usare le
subroutines di ricezione/trasmissione seriale del firmware.
Tenere presente che:
- Il programma utente viene avviato come subroutine, può ritornare al monitor seriale con RET.
- Le funzioni di basso livello del firmware alterano i registri alternativi.
- Il programma utente può modificare tutti i registri compreso lo SP, a patto di ripristinarlo se deve ritornare.
- Il programma utente non deve
modificare direttamente il valore di out_val (ultimo byte fisico della
RAM che contiene i valori condivisi da scrivere sulla porta di uscita).
- I punti di arrivo delle chiamate RST e dei gestori di interrupt
della pagina 0 della ROM sono riportati con delle JP alla pagina 0
della RAM, si possono quindi usare gli interrupt e le chiamate RST non
utilizzate per le subroutines del firmware.
- Fare
attenzione all'eventuale conflitto tra interrupt e subroutines firmware
richiamate (in particolare RTX seriale e scrittura sulla porta di
uscita condivisa).
.------------------------+------------------------.
| ROM
32K
| RAM
32K |
'------------------------+------------------------'
^
^
^
|
|
|
0
--'
32768
--'
65535 --'
Locazioni RAM riservate
-----------------------
65530 inizio stack (decresce verso indirizzi bassi)
65531 codici per effettuare una call a programma utente
:
65534
65535 valore condiviso (out_val) per scrittura su porta out
.............completare.....................
Idea per bootloader
E' possibile usare una EEPROM parallela 8K AT28C64B al posto della EPROM.
L'unica modifica riguarda il pin 27 (A14 sulla EPROM e write sulla EEPROM).
- Sulla basetta inferiore interrompere la pista A14 che raggiunge la EPROM e collegare il pin 27 al connettore strip.
- Sulla basetta superiore collegare il pin 27 al connettore strip,
in questo modo il segnale /WR viene inviato dalla basetta superiore al
pin 27 della EEPROM.
E' così possibile scrivere un bootloader nella EEPROM da 8K, che
attende un paio di secondi sulla seriale e poi avvia l'applicativo vero
e proprio. All'indirizzo 0 va naturalmente messo un JP all'indirizzo
del bootloader.
Siccome la EEPROM durante la scrittura diventa inaccessibile, è
necessario che il bootloader prima di tutto ricopi il proprio codice in
RAM (quindi questa parte di codice va assemblata con l' org adatto) e
continui da li l'esecuzione.
Il bootloader deve impedire la propria sovrascrittura. Se durante l'aggiornamento qualcosa va storto, il bootloader in EEPROM
non viene comunque toccato, quindi basta un reset e rifare la procedura.
Il TSP diventa quindi non solo "aggiornabile", ma anche utilizzabile
anche come sistema "standalone" (eventualmente in grado di salvare in
modo non volatile i propri dati di lavoro/configurazione usando una
subroutine di scrittura in RAM per quanto detto prima).
Files
Sorgente assembly firmware per la EPROM (.txt)
Binario assemblato (.zip) ottenuto con
pyZasm.
Sorgente assembly firmware provvisorio per la EPROM (.txt)
(Nota: le subroutines I2C e le chiamate RST sono ancora in
sviluppo)
(
i2c_nuovo.txt)
Disegno basetta superiore (.svg)
Disegno basetta inferiore
(.svg)
Disegno schema
elettrico (.svg)
Programma TUI Python (2.x e 3.x) per
dialogo con TSP (.txt) (da rinominare in .py)
EPROM programmata con
Arduino
e il vecchio programmatore.