
La consolle M16C RENESAS permette sia di visualizzare su di un display 16x2 i dati ricevuti dalla seriale che di inviare una stringa di dati, magari in risposta ad una determinata richiesta.
M16C Renesas CONSOLLE REMOTA
1.SCOPO del progetto Renesas M16c consolle
Quante volte usando un apparato ci viene pensare come sarebbe comodo poter avere più informazioni di quel benedetto led che assume 527 colori o lampeggia in 6432 modi diversi ma poi, in fin dei conti, sempre uguali. Quante applicazioni oggi fanno uso di un modulo GSM? Telecontrolli, teleattuatori, comandi attivazione remota ecc. ma che pensandoci bene perché non usarlo per ricevere o inviare SMS? Certo ci sarebbe da rilavorare sul firmware, ma almeno avremmo l'hardware a disposizione! Bene, se vi siete trovati in una di queste situazioni il progetto della consolle remota (realizzata con il microcontrollore Renesas m16c) che segue può fare al caso vostro.
2.DESCRIZIONE M16C consolle
La consolle M16C RENESAS permette sia di visualizzare su di un display i dati ricevuti da un altro sistema che di inviare una stringa di dati, magari in risposta ad una determinata richiesta.
I principali blocchi funzionali che la compongono sono:
1)Display di visualizzazione.
2)Tastiera alfanumerica.
3)Seriale di comunicazione.
4)Unita centrale di elaborazione.
Di seguito andremo ad analizzare nel dettaglio ognuno di questi blocchi.
3.DISPLAY DI VISUALIZZAZIONE M16C
Per poter visualizzare i dati la scelta è caduta su di un classico display alfanumerico 16x2 ovvero un dispositivo in grado di visualizzare 16 caratteri standard ASCII su due righe. L'interfacciamento con il microcontrollore Renesas avviene mediante tre segnali di controllo e otto segnali per la linea dati, ovviamente gestiti all'interno del firmware.
4.TASTIERA ALFANUMERICA consolle M16C
Una tastiera alfanumerica da 14 tasti (0-9,RD,WR,SEND,UP DOWN) permette di scrivere i dati da inviare. L'interfacciamento con il microcontrollore è stato realizzato sfruttando il metodo a matrice ciò permette di diminuire il numero di I/O necessari alla connessione elettrica e semplifica la realizzazione del driver firmware di gestione.
5.SERIALE DI COMUNICAZIONE Renesas M16C
La comunicazione con il mondo esterno è affidata ad una seriale tramite segnali di TX, RX e GND. Un semplice transceiver RS232 è interposto tra l'unità centrale e l'esterno.
6.UNITA' CENTRALE DI ELABORAZIONE Renesas M16C
Il controllo del sistema è affidato ad un microcontrollore a 16bit Renesas della serie M16C/62P che grazie suo firmware può controllare e gestire in tempo reale il corretto funzionamento della CONSOLLE. La stesura del programma è stata realizzata in C e si compone dei principali blocchi funzionali:
gestione tastiera.
gestione display.
gestione seriale.
Queste routines vengono eseguite in maniera ciclica all'interno del main program e permettono all'utente di usufruire di tutte le funzionalità della CONSOLLE. Ovviamente ci sono anche driver software più a basso livello per la gestione fisica delle periferiche (per esempio acquisizione tastiera o inizializzazione display.)
Di seguito viene illustrata la routine che acquisisce la configurazione della tastiera.
Gestione Tastiera
//Title: gestione_tastiera_100.c //Author: najro.prestato //Current Rev: 100 //Mod.Descr.: Modulo per acquisizione tasti // // ptastihi e ptastilo congelano lo stato della tastiera alla prima acquisizione. // mtastihi e mtastilo congelano lo stato della tastiera alla successiva acquisizione. // tastihi e tastilo vengono usati per far si che ogni modulo del programma possa accedere // in tempo reale allo stato della tastiera. // NB: tasto premuto bit=0 // tasto non premuto bit=1 // // Esempio 1: // nessun tasto premuto // tastilo=11111111b tastihi=11111111b // // Esempio 2: // tasto 4 premuto per un tempo NON accettabile // ptastilo=11111110b (*) ptastihi=11111111b // dopo x mS tasto non attivo // mtastilo=11111111b mtastihi=11111111b // dato che mtastilo diverso da ptastilo non aggiorno tastilo e tastihi che mantiene // il valore precedente ovvero la configurazione per nessun tasto premuto (Esempio 1) // // Esempio 3: // tasto 4 premuto per un tempo accettabile // ptastilo=11111110b(*) ptastihi=11111111b // dopo x mS tasto attivo // mtastilo=11111110b(*) mtastihi=11111111b // dato che mtastilo è uguale a ptastilo aggiorna tastilo e tastihi con la nuova configu- // -razione ovvero: // tastilo=11111110b(*) tastihi=11111111b //

In pratica si acquisiscono (usando dei registri di appoggio) ad intervalli regolari le configurazioni della tastiera e poi si confrontano; nel caso in cui siano uguali i registri tastilo e tastihi ; in questa maniera ci si svincola da eventuali problemi di spike, spurie, attivazioni rapide ecc.
Mentre queste sono le funzioni per gestire un display 16x2 con controller S6A0069 della Samsung
//Title: Gestione_Display__100.c //Author: najro.prestato //Current Rev: 100 //Mod.Descr.: Gestione display LCD con controller tipo Samsung S6A0069 // Il formato di LCD e'gestito da LCD_ROWS e LCD_COLS // La modalita' e' gestita da LCD_BUS. // I pin di Controllo dello lcd dichiarati dalle seg. costanti: // LCD_RS pin per Register selector // LCD_RW pin per Read/Write // LCD_EN pin per Enable // LCD_IO_RS tris per Register selector // LCD_IO_RW tris per Read/Write // LCD_IO_EN tris per Enable // I pin per DATA vanno tutti su una stessa porta. // 8 bit: D0-D7 connessi a Portx0 - Portx7 // 4 bit: D4-D7 connessi a Portx4 - Portx7 // Il punto Top,Left è impostato a 1,1 // L'impostazione delle connessione avviene mediante: // LCD_PORT_DATA pin port per Data // LCD_IO_DATA tris per Data // Per modificare le caratteristiche per altri LCD: // accedere e modificare lcd.h //Note: Size Char pos DDRAM addresses // 2*16 00..15 00h..0Fh + 40h..4Fh // 2*20 00..19 00h..13h + 40h..53h // // //Funzioni disponibili per pilotaggio LCD: // // lcdinit(void) Inizializza LCD // checkbf(void) Attende la fine dell'ultima operazione // lcdclear(void) Invia comando Clear & Home // lcdputch(char) Scrive un carattere nella pos. del cursore // lcdputs(char *) Scrive una stringa di caratteri // lcdwrite(char, char) Scrive un byte unsigned nella DD RAM // lcdcommand(char) Scrive un comando // lcdgetch(char) Legge il carattere nella pos. cursore // lcdread(char) Legge un byte unsigned dalla DD RAM // lcdsetcurs(char, char) Imposta il cursore a riga, colonna // lcdgetcurs (char, char) Ritorna la riga, colonna attuale del cursore //
Questa è la routine che gestisce la comunicazione seriale:
//Title: Gestione_Seriale_100.c //Author: najro.prestato //Current Rev: 100 //Mod.Descr.: Modulo gestione RS232: // Protocollo di comunicazione -> STX CMD DATI ETX // Comandi Gestiti -> MI: Visualizza sul display stringa ASCII contenuta in DATI // -> MA: invia sulla seriale una stringa ASCII contenuta in DATI //

Questo è invece lo schema elettrico.
Lista parti Consolle M16C Renesas
Item Qty Reference Part ________________________________________________________ 1 8 C1,C4,C5,C6,C8, 1uF C9,C10,C13 2 3 C2,C3,C7 0,1uF 3 2 C11,C12 22pF 4 6 D1,D3,D4,D5,D6,D7 BYD17D 5 1 D2 LGR971 6 1 J1 CON8 7 1 J2 DISPLAY 16x2 8 1 J3 MOLEX 53261-1290 9 1 J4 MOLEX MICRO-FIT 10 1 Q1 BCX 54-16 11 1 Q2 MMBT2222 12 1 R1 2K2 13 4 R2,R3,R19,R21 4K7 14 4 R4,R5,R6,R7 100K 15 5 R8,R12,R13,R14,R15 1K 16 6 R9,R11,R16,R18,R20,R25 47K 17 2 R10,R24 10 18 1 R17 0 19 2 R22,R23 10K 20 1 U1 M30624FGPFP 21 1 U2 ST232BD 22 1 U3 DS1818 23 1 U4 24LC16 24 1 Y1 4 MHz
Non ho volutamente riportato la parte alimentazione in quanto ognuno può riutilizzare qualche alimentatore pensato per altre applicazioni l'importate è fornire al sistema 5Vdc.
Aspetto con interesse i vs commenti e/o domande.

La consolle M16C utilizza un microcontrollore a 16 bit Renesas della serie M16C/62P?
Si, il microcontrollore fa parte della famiglia Renesas M16C/62P come indicato nell’articolo.
Nello specifico il micro è denominato M30624FGPFP
le case di microcontrollori sono sempre complicate con i part number, Renesas poi è sempre stata ‘maestra’ in questo….
Però funzionano, ed anche bene, e questo è l’importante 🙂
La comunicazione seriale, in ricezione, è collegata tramite un transistor direttamente al micro, bypassando il driver (ST232).
Questo sia perche è un inplementazione per scopi futuri, sia perche in questo modo, adattando le resistenze, può ricevere segnali sia dalla RS232 che dai 5V di un altro dispositivo generico. Come un altro micro, ad esempio.