logo_lego.gif (833 byte)

RCX

ultimo aggiornamento della pagina 16/01/20


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!
Continua la produzione dei PCB standard a 2 strati durante le festività primaverili


ll Robot Command eXplorer (RCX) è un componente dela Lego Mindstorms System, il cui scopo è quello di pilotare piccoli robot mobili.
Dotato di un microprocessore Hitachi H8/3292 memoria esterna aggiuntiva da 32 kbyte, e di numerose periferiche che permettono di implementare applicazioni complesse.
I componenti esterni a disposizione sono:
  • quattro pulsanti;
  • tre porte di input per il collegamento di vari tipi di sensori;
  • tre porte di output per il pilotaggio di attuatori come ad esempio piccoli motori;
  • un LCD, che consente la visualizzazione di numeri (utile, anche se non molto potente, per il debug);
  • uno speaker;
  • una porta a raggi infrarossi.

homotix

 Pulsanti: i pulsanti presenti sull’RCX Brick svolgono le funzioni mostrate in tabella.

 

FUNZIONE

View Mostra lo stato dei sensori e dei motori
On-Off Accende e spegne il Brick RCX
Prgm Seleziona un programma da eseguire tra quelli caricati in memoria
Run Manda in esecuzione il programma selezionato

I pulsanti “View” e “Prgm” sono dipendenti dal firmware installato, quindi le loro funzioni sono programmabili. In tabella è mostrata la loro funzione se utilizzati con il firmware standard.

 

Porte di Input: le porte di input sono numerate da 1 a 3 per essere ben distinguibili da quelle di output e contengono un convertitore A/D da 10 bit.    Ad esse può essere collegato ogni tipo di sensore presente nel kit, come ad esempio quelli di luminosità, rotazione, contatto, temperatura, o altri contenuti nelle espansioni in commercio.    Per essere utilizzate, queste porte necessitano di essere configurate ogni volta che un programma le utilizza.
 

Porte di Output: le porte di output sono etichettate con A, B, C.    Ognuna può essere connessa ad uno o più attuatori utilizzando i mattoncini dedicati al collegamento elettrico dei componenti.     Anche se nel kit iniziale sono forniti solo motori funzionanti in DC con tensioni da 0V a 7V, queste porte possono essere utilizzate con qualsiasi altro tipo di sensore progettato per Lego Mindstorms in commercio.

 

Display LCD: il display è composto da 5 digits, più numerosi altri simboli indicanti lo stato dei sensori, la presenza di programmi eseguibili in RAM, il loro stato di esecuzione ed altre funzioni a seconda del firmware installato, per un totale di 43 segmenti controllabili singolarmente con chiamate a funzioni di basso livello.

 

Altoparlante: nell’RCX è integrato anche un piccolo altoparlante capace di emettere suoni controllabili via software per quanto riguarda intensità e durata.

 

Porta IR: la porta ad infrarossi è l’unico strumento che permette la comunicazione tra RCX Brick e la IR Tower collegata con l’esterno; questo è purtroppo un grosso limite della tecnologia Lego Mindstorms ed impone significativi limiti di mobilità ai robots che necessitano di comunicare con altri dispositivi in quanto un collegamento visivo tramite infrarossi richiede la presenza frontale dell’interlocutore rispetto alla porta IR ed una distanza limitata, tipicamente da 1 a 10 metri rispettivamente per le trasmissioni a corto e lungo raggio. Inoltre la trasmissione di dati è limitata tra porta IR e IR Tower poiché il protocollo di comunicazione non è quello standard utilizzato per la maggior parte dei PC.

 

Come già accennato, l'RCX di Lego Mindstorms si basa sul processore Hitachi H8/3292 della famiglia H8/3297. Il chip integra in se una CPU della serie H8/300, memoria e dispositivi di I/O, e un controllore di interruzioni.
 

CPU H8/300
Si tratta di un microprocessore di tipo RISC con registri accessibili a 16 bit o a 8 bit.
I modi di indirizzamento previsti sono indirizzamento indiretto di registro, indirizzamento assoluto, indirizzamento immediato, indirizzamento relativo al Program Counter e indirizzamento indiretto di memoria.
Lo spazio di indirizzamento è a 16 bit (dunque un totale di 64 kbytes) per dati e programma.
Il set di istruzioni è composto da 55 istruzioni, divise in varie categorie:
trasferimento dati singoli e a blocchi, operazioni di tipo logico e aritmetico, operazioni di shift, manipolazione di bit, salti, controlo di sistema.


 

On-chip Memory
La memoria on-chip si divide in 16 kbytes di ROM e 512 bytes di RAM.
È presente inoltre un register le da 128 bytes, dedicato ai registri di I/O.
La MEMORY MAP definisce in quale modo la memoria on-chip ed eventuale
La memoria esterna aggiuntiva devono essere mappate nello spazio di indirizzamento a 16 bit.
Attraverso due bit di un particolare registro (Mode Control Register, MCR, bit 1 e 0 chiamati MD1 e MD0) si possono impostare tre diverse modalità di funzionamento.
A seconda della modalità di funzionamento impostata, è possibile utilizzare solo la memoria on-chip o anche eventuali espansioni esterne. In particolare:

• in modalità espansa 1 sono disponibili la RAM on-chip e l'espansione esterna di memoria;
• in modalità espansa 2 sono disponibili la ROM e la RAM on-chip e l'espansione esterna di memoria;
• in modalità single-chip sono disponibili solo ROM e RAM on-chip.

On-Chip Input/Output
Sono presenti, integrati nel chip, vari dispositivi di I/O. Si evidenziano in particolare:

• tre tipi di timer (un Free Running Timer a 16 bit, un timer a 8 bit con 2 canali e un watchdog timer utilizzabile anche come timer normale), i quali possono funzionare senza bisogno di circuiteria esterna aggiuntiva;
• un'interfaccia per la comunicazione seriale di tipo ful-duplex compatibile con lo standard UART, che può
operare sia in modalità sincrona sia in modalità asincrona;
• un convertitore A/D con risoluzione di 10 bit, con otto canali analogici di ingresso; da notare che il multiplexer
dedicato può agire sia in modalità single-shot (un unico campionamento) sia in modalità scan (conversioni
continue),
• 7 porte di I/O.

 


Particolari che formano l'RCX

 

 

 

1 2 3 4 5
NEC Modulo RAM Un banco di flip flops Hitachi H8/3292 Single Chip Microcomputer Un banco di porte NAND Tre identici integrati uno per controllare un singolo motore
D43256BGU-70LL
0017XD063
74HC377D
D0479ME
HRn0005
71748.51A
HD6433292B02F
0030        JAPAN
74HC10D
D1943PL
Hnn0014C
MLX10402CA
004802 1400

 

La programmazione dell’RCX

Come già accennato, le possibilità di programmazione dell’RCX sono molteplici, principalmente grazie a diversi firmware a disposizione con ambienti e linguaggi di programmazione tra cui scegliere in base alle proprie esigenze, alle proprie capacità o, semplicemente, per comodità.
Naturalmente dover cambiare firmware non è affatto obbligatorio: quello standard offre, seppur con qualche limitazione, interessanti possibilità di programmazione.
Primo fra tutti, va descritto il sistema di programmazione "visuale" messo a punto dalla Lego e fornito in dotazione, che unisce ad una indubbia facilità d’uso (ricordiamo che la Lego consiglia i prodotti della serie Mindstorms ad un pubblico dai 12 anni in su) delle evidenti limitazioni (per esempio, l’impossibilità di utilizzare variabili) che portano presto un utente mediamente evoluto a passare ad altri sistemi.
La programmazione nell’ambiente visuale consiste nel creare, attraverso l’uso di comandi o di procedure definibili, dei programmi composti da task che saranno eseguiti in maniera concorrente dall’RCX.
Si possono avere fino a 10 task per ogni programma, che possono essere sia attivi che inattivi.
Il metodo di programmazione è davvero semplice: ogni comando impartibile all’RCX è rappresentato da una "tessera" sulla quale compaiono le eventuali opzioni; per creare un programma non c’è altro da fare che giustapporre le varie tessere in catena per indicare il flusso dell’algoritmo.

Sono a disposizione un buon numero di comandi predefiniti, ad esempio per l’accensione e lo spegnimento dei motori e per la regolazione di tutti i parametri (verso di rotazione e potenza);  tessere particolari permettono la gestione dei sensori: per mezzo di slide bar si ha la possibilità di determinare due "zone d’azione" del sensore mentre, nella parte bassa, la tessera si biforca per specificare un’azione da effettuare nel caso in cui il valore del sensore cada in una zona o nell’altra. Sono previsti comandi per il controllo del flusso, come strutture condizionali e di iterazione (sebbene queste ultime non possano essere annidate).

Mindstorms e Visual Basic

Restando nell’ambito di utilizzo del firmware standard, la Lego fornisce un’altra possibilità di programmazione dell’RCX: il controllo ActiveX Spirit.ocx.
Le funzionalità offerte sono davvero notevoli: si hanno a disposizione più di 80 diverse funzioni membro che consentono di controllare ogni aspetto dell’RCX.
Si hanno metodi per la gestione dell’IR Tower e delle comunicazioni con l’RCX (ad esempio, per inizializzare la trasmissione o per controllare la presenza dell’RCX), per il controllo del firmware (ad esempio, per comandare il download di un nuovo firmware) e per la creazione e la gestione di task all’interno dei quali si possono comandare i motori, utilizzare i sensori e le variabili interne dell’RCX.
Una caratteristica davvero interessante di Spirit.ocx è quella di poter controllare il microcomputer in due modi diversi: creando dei task e scaricandoli nella memoria dell’RCX o impartendogli comandi "on-line".
La prima modalità è quella tradizionale e ricalca lo schema di programmazione dell’ambiente visuale della Lego: si costruisce il programma (naturalmente con ben altra potenza e flessibilità), si sceglie in quale slot posizionarlo, lo si scarica utilizzando il collegamento ad infrarossi e, quando ne sarà comandato l’avvio, questo sarà eseguito, per intero, dall’RCX.
In particolare, un task può essere creato all’interno di una qualunque funzione del programma Visual Basic, ad esempio associandolo all’evento "click" di un Command Button e deve essere contenuto in un blocco di questo tipo (supponendo di aver chiamato "RCX" il controllo Spirit.ocx inserito nella nostra applicazione):


RCX.BeginOfTask 1

RCX.EndOfTask



Con l’istruzione BeginOfTask viene delimitato l’inizio di un task e, nel nostro esempio, viene selezionato lo slot di programma numero 1; mentre, con l’istruzione EndOfTask, avviene il download dell’intero programma; al termine dell’operazione viene generato l’evento Download Done che può essere utilizzato per controllare l’esito del download e gestirne eventuali errori.
La seconda modalità di programmazione, come già accennato, consente un controllo on-line dell’RCX: in questa modalità possono essere inviate al microcomputer singole istruzioni che saranno eseguite, una alla volta, non appena ricevute. Naturalmente non tutti i comandi disponibili sono utilizzabili on-line, in quanto hanno senso solo se inseriti in un task.
I comandi vengono, pertanto, suddivisi in due categorie: i Downloadable Commands, utilizzabili in un blocco BeginOfTask – EndOfTask e gli Immediate Commands, utilizzabili in qualunque momento, con un buon numero di comandi che appartengono ad entrambe le categorie.
 

Altri firmware alternativi:
  • LegOS - un corredo di librerie in linguaggio C che implementano le funzione per pilotare l'hardware;
  • librcx, un set ridotto din codice in C per RCX;
  • PbForth - firmware that allows users to write Forth programs to run on the brick;
  • leJOS - una macchian vistuale in Java.

 

Elenco revisioni
11/09/2005 Emissione preliminare