YAPP versione 2.1
(Yet Another Pic Programmer)

Lo YAPP è un programmatore in-circuit seriale per PIC16x84 persato come tool di supporto per il corso Pic By Example ma adatto in generale allo sviluppo di prototipi.

Come visibile nella figura seguente:

lo YAPP si connette al PC tramite la porta seriale RS232. A differenza di molti altri programmatori dello stesso livello, lo YAPP non utilizza i criteri della porta seriale (DTS e RTS) per generare i segnali di programmazione per il PIC ma solamente le linee RXD e TXD per comunicare ad alto livello con il PC.

Questa caratteristica consente di utilizzare lo YAPP con diversi sistemi operativi e linguaggi di programmazione. In queste pagine viene fornita la documentazione completa del protocollo di comunicazione tra YAPP e PC per favorire chi volesse sviluppare il proprio programma di gestione su PC.

Due programmi d'esempio vengono inoltre forniti per MS/DOS (funzionante anche nelle sessioni DOS di Windows 3.1 e Windows 95) e Java completi di source commentati.

NOTE SULLA PROGRAMMAZIONE ICSP™

La programmazione ICSP (In-Circuit Serial Programming) implementata dalla Microchip per la programmazione dei PIC della serie 12C5XX, 16CXXX cosente di programmare il chip direttamente sulla scheda destinazione abbreviando i tempi di sviluppo/produzione di schede basate sui PIC.

Tutta la documentazione necessaria per implementare apparecchiature di programmazione ICSP è disponibile gratuitamente sul sito Microchip o sul CD distribuito sempre da Microchip.

Tale programmazione viene effettuata tramite tre soli collegamenti + massa tra il programmatore ed il PIC da programmare ovvero:

MCLR Piedino di master clear (pin 4 su PIC16x84) utilizzato per applicare la tensione di programmazione VPP al chip.
RB6 Linea 6 della porta B (pin 12 su PIC16x84) utilizzata come linea CLOCK.
RB7 Linea 7 della porta B (pin 13 su PIC16x84) utilizzata come linea DATA.

La modalità di comunicazione con il PIC è di tipo seriale sincrono in cui i bit trasmessi sulla linea DATA (pin RB7) vengono scanditi dal segnale generato sulla linea di CLOCK (pin RB6). Quest’ultimo viene generato dal programmatore mentre il DATA è bidirezionale a seconda dell’operazione in corso. In figura 2 viene riportato un esempio di trasmissione di un comando dal programmatore al PIC.

Tutte le operazioni sul PIC da programmare devono essere precedute dall’invio di un comando da parte del programmatore per comunicare al PIC l’operazione che si intende eseguire. La lunghezza dei comandi è sempre di 6 bit a volte seguiti da una trasmissione di 14 bit contenenti il valore da programmare. Nella seguente tabella viene riportato l’elenco dei comandi riconosciuti dal PIC:

Comando dal programmatore Codice comando Descrizione
Load Configuration 000000 Invia al PIC il prossimo dato da scrivere in memoria programma. Al codice comando segue immediatamente il dato da memorizzare.
Load Data for Program Memory 000010 Invia al PIC il prossimo dato da scrivere in memoria dati. Al codice comando segue immediatamente il dato da memorizzare.
Read Data from Program Memory 000100 Legge dal PIC la locazione corrente dall’area programma. Appena riceve questo comando il PIC trasmette al programmatore il valore letto.
Increment Address 000110 Incrementa il puntatore alla locazione corrente nella memoria dati/configurazione/programma.
Begin Programming 001000 Programma la locazione corrente.
Load Data for Data Memory 000011 Invia al PIC il prossimo valore da scrivere in memoria dati. Al codice comando segue immediatamente il dato da memorizzare.
Read Data from Data Memory 000101 Legge dal PIC la locazione corrente dalla memoria dati. Appena riceve questo comando il PIC trasmette al programmatore il valore letto.
Bulk Erase Program Memory 001001 Cancella l’intera memoria programma
Bulk Erase Data Memory 001011 Cancella l’intera memoria dati

Il PIC dispone internamente di tre aree di memoria distinte programmabili dall’esterno: l’area programma pari ad 1 kbyte nel PIC16x84, l’area dati pari a 64 byte e l’area configurazione pari a 8 byte. Tutte le aree di memoria sono implementate su FLASH. Le sole aree di programma e dati possono essere lette dall’esterno.

Per poter scrivere in una qualsiasi locazione il programmatore deve inviare al PIC uno dei comandi LOAD seguito da 14 bit contenenti il dato da memorizzare. Volendo ad esempio scrivere nella locazione 0 della memoria programma basterà inviare al PIC la sequenza:

Load Data for Program Memory + valore a 14 bit
Begin Programming

Il comando Load Data trasferisce semplicemente il dato a 14 bit in un buffer provvisorio all’interno del PIC, il comando Begin Programming effettua la scrittura vera e propria del dato nella memoria programma. L’indirizzo della locazione di memoria che viene scritta è contenuto in un puntatore di scrittura azzerato automaticamente non appena il PIC viene messo in programmazione (MCLR=12 volt) ed incrementato tramite il comando:

Increment Address

A questo punto per programmare la locazione successiva basterà trasmettere nuovamente i seguenti comandi:

Load Data for Program Memory + valore locazione 1
Begin Programming
Increment Address

e così via fino alla scrittura completa del programma. Per poter scrivere in una locazione di memoria non è necessario effettuare operazioni di cancellazione.

L’area dati e l’area configurazione si programmano con le stesse modalità utilizzando il comando LOAD relativo. L’area dati è un’area FLASH visibile anche dal programma in esecuzione sul PIC, la sua programmazione può essere utile per assegnare dei valori iniziali alle variabili utilizzate dal nostro programma. L’area configurazione contiene dati invisibili al programma su PIC ma utili per determinare la modalità di funzionamento di alcuni dispositivi interni al PIC quali l’oscillatore di clock, il watchdog timer, ecc. che vedremo successivamente durante il nostro corso.

COME FUNZIONA LO YAPP

Lo YAPP si occupa di generare tutti i segnali necessari per programmare il PIC a partire dai comandi inviato dal PC sulla porta RS232. In pratica lo YAPP si occupa di tradurre i comandi dal formato seriale asincrono a 9600 baud 8,1,N nel formato Microchip e viceversa. Tutte le temporizzazioni interne necessarie alla corretta programmazione vengono gestite dal micro (anch'esso un PIC) presente sullo YAPP liberando il programma di gestione su PC dalle problematiche di gestione delle temporizzazione. Questa caratteristica ci consente di scrivere il programma di gestione con linguaggi ad alto livello tramite i quali risulta ifficile gestire temporizzazioni precise.

Il collegamento tra lo YAPP e la scheda da programmare avviene tramite un connettore a sei contatti sul quale sono presenti i seguenti segnali:

Pin Funzione
1 MCLR - Da collegare al pin MCLR del PIC da programmare.
2 DATA - Da collegare al pin RB7 del PIC da programmare.
3 CLOCK - Da collegare al pin RB6 del PIC da programmare.
4 GND – Massa.
5 N.C. - Questo pin non viene collegato e serve come chiave per evitare inserzioni errate.
6 +12 Volt – Tensione di alimentazione proveniente dalla scheda prototipo per alimentare lo YAPP.

SCHEMA ELETTRICO

Come possiamo vedere dallo schema elettrico, il funzionamento dello YAPP è basato a sua volta su un PIC, in particolare un 16C54 (U1) di cui viene fornito il sorgente in assembler in alternativa è possibile utilizzare anche un 16x84. Esso si occupa di interpretare i comandi ricevuti dal PC tramite la porta RS232 e di inviare i segnali di programmazione corretti al PIC da programmare.

Il circuito integrato U2, un MAX232, si occupa di convertire i segnali RS232 la cui tensione varia da –12 volt a + 12 volt nei rispettivi segnali TTL da 0 a 5 gestibili dal PIC16C54 (U1). In particolare sul pin 12 (RB6) del PIC viene inviato il TxD proveniente dal PC e dal pin 11 (RB5) viene generato il segnale da inviare all’RxD del PC.

Lo YAPP si comporta come un dispositivo DCE (Data Comunication Equipment) e per collegarlo al PC occorre utilizzare un cavo dritto, ovvero un cavo in cui i connettori alle estremità siano collegati pin a pin. Un cavo modem può andare benissimo mentre è assolutamente da evitare l’uso di un cavo null-modem nel quale vengono scambiati i collegamenti tra i pin dei connettori. Chi volesse realizzare in proprio il cavo di collegamento può seguire lo schema riportato nella seguente figura:

Il diodo led verde D1 ed il diodo led rosso D2 servono rispettivamente ad indicare quando lo YAPP è pronto a ricevere comandi dal PC (stato di READY) o quando lo YAPP è entrato in PROGRAMMAZIONE.

Quando il led verde è acceso, la linea MCLR viene messa a +5 volt consentendo al PIC appena programmato di iniziare l’esecuzione del codice.

L’alimentazione dello YAPP viene ricavata direttamente dalla scheda prototipo tramite il pin 6 del connettore e quindi ridotta a +5 volt dall’integrato U3 per alimentare gli integrati U1 e U2. La +12 volt viene utilizzata anche per generare la tensione di programmazione Vpp inviata al PIC tramite il pin MCLR.

LINKS

Manuale utente YAPP.EXE

Protocollo di comunicazione YAPP/PC

DOWNLOAD

Schema elettrico YAPP.PDF (13Kb)
 Source assembler YAPP21.ZIP versione 2.1 (7 Kb)
Source C (Turbo C++ 1.0) + eseguibile MS/DOS YAPPDOS.ZIP versione 1.3 (29 Kb)

In caso di problemi scrivere a tanzilli@picpoint.com

FEEDBACK

mail.gif (1061 byte)  Per eventuali commenti e/o chiarimenti scrivete a :

Sergio Tanzilli (tanzilli@picpoint.com)
Viale Giulio Agricola, 61 - 00174 Rome - Italy
Tel. +39-06-71510914 - Portatile: +39-0335-6152295

 
Home page

PICPOINT, SXPOINT and ELETTROSHOP (C) 1997/98 by Andrea Galizia
For comments on this web site, write to webmaster@picpoint.com
Web design by Tiziano Galizia

Pic by example (c) 1997/98 by Sergio Tanzilli & Tiziano Galizia