Clicca Quì, per aggiungere adesso questo Sito ai Preferiti Fai di Hobby Elettronica la tua Home Page.Clicca Quì! Si Eseguono per Aziende e privati, Progettazione e Consulenza su Dispositivi Elettronici e Programmi per Windows, Cliccare Quì!

   

  PicNet..
Free Project by ElettronicaNet.com
 
UN altro Ottimo Programmatore per la famiglia dei
 

 PICmicro™

 


Sapete cos'è questo mostro a sinistra? Beh, forse se state leggendo queste righe non lo
sapete ma vi interessa.. Lo scopo di questo articolo è infatti introdurre a tutti, anche ai nuovi arrivati, l'utilizzo dei PICmicro. Questo articolo spiega come partire da zero nella creazione del nostro programmatore.

 

I PIC della MicroChip
sono una famiglia di integrati molto versatili: il 12c508 è utilizzato ad esempio per le modifiche alla playstation, il 16f84 è utilizzatissimo nelle smart card applicazioni per automazione industriale codifiche difitali etc, e pertanto sta avendo davvero una grande diffusione.


   Caratteristiche salienti del nostro programmatore

  • Alimentazione: 15/16 Vcc  / 12Vca
  • Programma tutti i PIC della serie 16XXXX fino a 40 pin (DIP40)

      

  • programma le eeprom seriali I2C

     



  •  
     

    Ecco gli schemi di come Posizionare i chip sullo zoccolo ziff del programmatore

    12c5xx 12c67x 16f627-8 16f84
           
    16f872 16f876 16f877 24Cxx

     
    Esistono diversi tipi di programmatori, e se andate a comprarli nei negozi, i più miseri costano almeno 100 Euro; questo scoraggia molto. Esistono però molti programmatori 'alternativi' come il nostro ad esempio, oppure il MultiPippo, ludipipo o il JDM etc.
    Vi presentiamo lo schema elettrico ed il pcb per la realizzazione di PicNet,
    un ottimo programmatore che vi permetterà di programmare praticamente tutta la serie dei Pic 16FXXX - 12CXXX e le note eeprom 24CXX



    PicNet schematics:

    Schema elettrico
     
     
    Circuito Stampato
     
     
    Elenco dei Componenti:
     

    Parliamo adesso del software da utilizzare congiuntamente con questo programmatore, si tratta di IC-prog uno dei migliori programmi gratuiti prelevabili dalla rete

    Innanzitutto il PIC andrà inserito nello zoccolo ZIF del programmatore (collegato al pc tramite una prolunga seriale) è necessario settare i parametri di comunicazione. La comport dove è andrà collegato il programmatore (1 o 2 se avete il mouse su com1). Se avete il modem su com2 e il mouse su com1 staccate il modem quando programmate e usate la com2. Successivamente settiamo il tipo di programmatore che stiamo utilizzando, ovvero come "propic2 programmer" compatibile, ed inoltre anche le polarità di programmazione come mostrato nella slide successiva

     
    Per scaricare gratis IC-prog:  Clicca Quì









    A) caricamento dell'hex. Tale file non è altro che la mappa della memoria programma del pic, che durante la programmazione sarà copiata all'interno del pic.I file hex sono il risultato creato dalla compilazione di un file asm. Tale file contiene le istruzioni che il pic dovrà eseguire. Un apposito programma converte le istruzioni in numeri e genera il file 'nome.hex' che andrà inserito nel pic. Se usate pic.exe i file hex vanno copiati nella cartella del pic (consiglio c:\pic) così state presto ad entrarci da dos. Andate in 'loal hex' dal menu file e apritene uno. Analoga procedura per i programmi da windows, che però consentono di spostarsi tra le cartelle.

    B) settaggio dei 'fuses'. I fuses sono delle celle di memoria che vengono programmate sul pic alla fine della scrittura del codice. Servono per indicare la modalità di funzionamento. Sono 4:

  • CodeProtect: Default[NO] Indica se il codice del pic deve essere protetto da lettura. Utile per evitare spinaggio industriale, ma inutile per noi, dato che dopo il pic non sarà più scrivibile!
  • PowerUpTimer: Default[YES] Attende 50mSec prima di iniziare l'esecuzione del programma, in modo che l'alimentazione si stabilizzi.
  • WatchDogDimer: Default[NO] Inutile a noi, serve per evitare che il programma si pianti. Se il programma non dà segnale di vita entro un certo tempo, viene resettato il pic. Controproducente.
  • Oscillator: Default[XT o RS] Setta il tipo di oscillatore: XT = quarzo o esterno RS = rc LP,HS non utilizzati da noi.
    Perchè il pic funzioni correttamente è importante il settaggio dei fuses; di solito NO,YES,NO,RS.

    Ora è possibile programmare il pic cliccando su program. Se avete seguito le istruzioni alla lettera entro breve la barretta arriverà al 100% segnando la fine della programmazione. Vedrete che dalla seconda programmazione in poi, farete tutto in 10 secondi!

    Riepologo: Per programmare inserire il pic e collegare la seriale al pc. Copiare l'hex nella cartella del pic.exe, lanciarlo, caricare l'hex, settare i fuses (se non sono gia corretti nell'hex caricato), programmare e se volete per sicurezza controllate la scrittura ('compare'). Siete pronti per mettere il pic sulla sua basetta e godervi il frutto delle vostre fatiche!!






    A questo punto dovreste almeno essere in grado di discernere un pic da un'aspirapolvere, riuscure ad inserirlo nel programmatore (dove stavate cercando di inserire la coda del gatto) e programmarlo con un file hex (se durante la programmazione si illumina + di una lampadina da 100W e fa + fumo dei fumogeni da disco, allora non dovevate collegarlo al 220!). Ok, ora arriva la parte software che inizialmente può essere un po difficile da comprendere, ma alla fine vedrete che risulta naturale, dato che si utilizzano al massimo una ventina di istruzioni diverse (su 35 che il pic ci mette a disposizione).

    Iniziamo a descrivere il processo di compilazione, ovvero di creazione di un .hex a partire da un .asm. Tale operazione viene eseguita dall' MPASM, il compilatore free che la microchip mette a disposizione aggratis. Dal sito www.microchip.com scaricatevi l'ultima versione dell'MPLAB (attuale 5.11.03), il software che vi permette di scrivere il programma per pic, compilarlo e vedere se presenta errori. In caso contrario produrrà il file hex relarivo al programma.
    Come si vede dal disegno qui sotto, per programmare un pic bisogna seguire le seguenti fasi:
  • Con un editor (Notepad, edit, o direttamente l'MPLAB che consiglio) si scrive il programma come una serie di istruzioni e direttive una sotto l'altra.
  • Il compilatore MPASM (se usate l'MPLAB c'è il tasto verde per lanciarlo direttamente) prende il file asm scritto da voi e eventuali files di include .inc per dare in uscita 4 files che hanno lo stesso nome dell'asm, ma estensione divesa.
  • Nel caso non ci siamo errori, l'hex è buono e possiamo scriverlo sul pic, altrimenti nell'err (o nella schermata di errore dell'MPLAB) trovate la descrizione degli errori.
    Quanto detto risulta molto più semplice a farsi che a dirsi. Cmq voi prelevate il programma, installatelo e vedrete che è semplicissimo da usare. L'importante è all'inizio creare un project e dargli un nome. Con quello stesso nome dovrete creare il file asm, tornare nel progetto, fare 'add node' e specificare il file asm creato. Una volta fatto ciò non avrete più problemi di compilazione!
    Finora vi ho dato gli stumenti per creare un programma partendo da un testo, e metterlo all'interno della flash del pic. Ora però vi serve per forza una mini guida su come programmare. Esiste 'Pic by Example', una guida in italiano di Sergio Tanzilli, disponibile su www.tanzilli.com che insegna partendo da zero l'assembly per pic. L'ho utilizzata io agli inizi, e vi assicuro che in un giorno se gia sapete qualcosa, guardando gli esempi diverrete degli abilissimi programmatori.

    Riepilogo: Scaricare ed installare l'MPLAB. Creare un nuovo pregetto con con pic 16f84. Creare un file asm (inizialmente vuoto) e salvarlo con nome nomeprogetto.asm. Andare in Edit Project ->add node, specificare il file asm e dare ok. Scrivete il programma nella finestra dell'asm, compilate per vedere se ci sono errori. Se no, verrà creato il file .hex che tratterete come già descritto.







    Primo esempio: effetto SuperCar con 12 LED!
    Spero che prima di arrivare qui abbiate gia guardato il corso di Tanzilli xè la descrizione che qui darò dei comandi sarà molto sinetica. Riporto di seguito il codice dell'ASM in questione (lo faccio al momento, ma dovrebbe essere esatto) commentandolo ove si presenti la necessità.
    Per realizzare un effetto supercar, possiamo utilizzare le porte di i/o del pic settate come uscita. Ma poichè rA4 è open-collector (non da in uscita il livello alto), evitiamo di usarlo. Utilizzeremo quindi rB0-rB7 e rA0-rA3. 12 linee che saranno collegate tramite altrettante resistenze ad una fila di led con il catodo (il taglietto) a massa. Per Settare dei valori alti/bassi, è sufficiente scrivere sulla porta (a o b). Ovviamente possiamo anche compiere rotazioni, e facendolo sulla porta otteniamo lo scorrimento di un led. Ma come passare da rb7 a ra0 e viceversa? il concetto è semplice. Ruotando, si spostano tutti i bit a destra o sinistra di uno, il bit che entra proviene dal carry (che noi metteremo a zero per far entrare uno zero) e quello che esce va a finire nel carry. Va da se che ruotando a sinistra la porta B, il bit che esce andrà in carry e ruotando a sinistra la porta A, otterremo il passaggio del bit uscito da rb7 a rA0. Useremo inoltre due routines, una che fa salire il bit e una che lo fa scendere, con un controllo alla fine per invertire il senso di marcia dei bit. Infine ci sarà una routine di delay che ci permetterà di vedere l'effetto supercar, che, se non ci fosse il ritardo via software si tramuterebbe in una riga di led sempre accesi. Analizziamo dunque il sorgente
        PROCESSOR       16F84
        RADIX           DEC
        INCLUDE         "P16F84.INC"
  • Direttiva PROCESOR: dice al programma che stiamo utilizzando il PIC 16f84
  • Direttiva RADIX: specifica che i numeri sono in formato decimale. Cioè se scrivo 10 significa il numero decimale 10, diverso da 0x10 (esadecimale del numero 16) e 00000010B (binario di 2)
  • Direttiva INCLUDE: specifica al compilatore di caricare quel file, che include le definizioni di alcuni parametri standard. Vedremo meglio più avanti
        __CONFIG        3FF3H
  • Direttiva CONFIG: setta i fuses del pic. 3FF3 significa NO,YES,NO,RS. Vedere la sezione 'burning'. La si mette solo per evitare di inserirli manualmente
        ORG     0CH
        Count   RES     2
        Direz   RES     1
  • Direttiva ORG 0Ch: Dice al compilatore che cio che segue fa parte della ram. Segue la:
  • Direttiva RES: Riserva 'n' bytes di memoria per la variabile (2 bytes per Count e 1 per Direz)
         ORG     00H
  • Direttiva ORG 00H: Dice al compilatore che da qui in poi inizia il programma vero e proprio. In caso di reset del pic, si riparte da qui.
         bsf     STATUS,RP0
         movlw   00000000B
         movwf   TRISA
         movlw   00000000B
         movwf   TRISB
         bcf     STATUS,RP0
  • Instruzione BSF: mette a 1 il bit specificato (RP0) nel registro specificato (STATUS). In realtà RP0 e STATUS sono dei numeri e sono definiti in quel file .inc che abbiamo incluso sopra. Ovviamente RP0 sarà un numero che va da 0 a 7 dato che ogni registro o cella di ram ha 8 bit. Ad esempio:
    bsf PORTB,4 -> alza il 5° piedino (rB4) della porta B, ponendolo a livello alto.
  • Istruzione MOVLW: carica nell'accumulatore (indicato con 'W' nei PIC) una costante. Nel caso 0.
  • Istruzione MOVWF: Mette l'accumulatore nel registro specificato (TrisA)
  • Istruzione BCF: contrario di BSF, mette a 0 il bit.
    Significato di questo blocco: TRISA e TRISB sono i registri (8 cellette di memoria) che specificano se le porte A e B sono di ingresso o uscita. 0 significa uscita, 1 ingresso. Caricando 0 in a e in B, otteniamo la configurazione delle 2 porte come porte di uscita. Per andare a modificare questi 2 registri dobbiamo prima mettere a 1 RPO. Alla fine lo rimettiamo a 0. Una istruzione tipo:
    bsf TRISB,3 -> non fà nulla se RP0 è basso, mentre se viene eseguita prima che venga abbassato RP0, setta la 4a linea della porta A come ingresso.
        movlw   00000001B
        movwf   PORTB
        clrf    PORTA
        clrf    Direz
        clrf    Count
        clrf    Count+1
        bcf     STATUS,C
  • Istruzione CLRF: mette a 0 una variabile o registro.
    Significato del blocco. PORTB è la porta B; scrivendo su questa si vanno a cambiare gli stati delle linee della porta B. In pratica; della porta B viene attivata solo la prima linea (bit 0) le altre tutte basse. Tutte basse anche quelle della porta A. Mettiamo a 0 la variabile Direzione (0 = salita 1 = discesa), la Count e la Count+1 (che non ha nome, ma per count avevamo riservato 2 bytes). Notare che Count+2 corrisponderebbe a Direz. Infine viene pulito il bit CARRY che si trova nel registro STATUS, dove avevamo incontrato anche RP0.
    Ora arriva il programma principale:
    MainLoop
        call    Delay
        btfss   Direz,0
        goto    Sali
  • Istruzione CALL: chiama una subroutine. In questo caso lancia la funzione 'delay'.
  • Istruzione BTFSS Direz,0: Controlla il bit '0' della variabile 'Direz' e salta l'istruzione successiva se il bit è uno, mentre l'eseguirà se il bit è zero.
    In questo blocco, dopo avere ritardato di un po' l'esecuzione con la funzione delay, si controlla se stiamo salendo o scendendo. Nel primo caso il bit 0 di direz è a 0, per cui salterà alla funzione 'Sali', mentre se fosse a 1 continuerebbe l'esecuzione saltando il 'goto Sali'. Ovviamente laddove salterà ci sarà la funzione scendi.
    Scendi
        rrf     PORTA,F
        rrf     PORTB,F
        btfsc   PORTB,0
        bcf     Direz,0
        goto    MainLoop
  • Istruzione RRF: ruota a destra una variabile, inserendo come nuovo bit il carry e ponendo quello che esce nel carry.
    Come spiegato in precendenza, faccio scorrere verso giu il bit ruotando a destra dalla porta A alla porta B. Successivamente controllo se sono a fine discesa (cioè ho l'1 nel bit 0 della PORTB). Se no, continua daccapo, altrimenti cambia direzione (da 1 a 0) e riparti daccapo.
    Sali
        rlf     PORTB,F
        rlf     PORTA,F
        btfsc   PORTA,3
        bsf     Direz,0
        goto    MainLoop
    Come la precedente scendi. Viene chiamata si il bit 0 di 'Direz' vale '0'. Ruota a sinistra finchè non raggiungiamo il 4° bit della porta A, a quel punto.. si scende!
    Delay
        movlw   40
        movwf   Count+1
    DelayLoop
         decfsz  Count,F
         goto    DelayLoop
         decfsz  Count+1,F
         goto    DelayLoop
         return
  • Istruzione DECFSZ: Decrementa una variabile e salta l'istruzione successiva se vale zero. Per fare un delay, l'istruzione successiva sarà un goto a questa istruzione, di modo che decrementi ciclicamente la variabile e quando vale 0, esca dal ciclo.
  • Istruzione RETURN: termina una call, tornando al programma principale dove era stata chiamata la funzione.
    In questo blocco, settiamo a 40 il valore di Count+1. Poi c'è un ciclo interno che ripete 256 volte il decremento di Count e la goto, e un ciclo più esterno che ripeterà 40 volte il ciclo interno. Per ottenere un ritardo accettabile insomma, dobbiamo fare circa ventimila operazioni per niente!!
        END
    Finalmente l'ultima direttiva: END chissà a che serve...

    Riepilogo: Per assemblare il codice e fare l'hex ricopiare il programma in un .asm e compilarlo con l'MPLAB come descritto nel 3° capitolo. In seguito mettetelo nel pic, create il circuito base come descritto nel punto uno, stagnate i led in fila con il meno a massa e le resistenze in ordine da rB0 a rA4. Alimentate con una pila da 4,5 o 6 volt e il gioco è fatto!






    Prima di terminare, un paio di links che potrebbero tornarvi utili...

    www.tanzilli.com
    -ha una guida fantastica che descrive la parte software in modo egregio !
    come.to/thepicarchive -infinite informazioni sui pic e molti source code da scaricare!!
    www.picpoint.com -una sessantina di progetti per pic in continuo aumento.. www.bobblick.com/bob/projects/mclock/index.html -un progetto fantastico!



    Note della RedazioneElettronicaNet,  declina ogni possibile responsabilità derivante  
    dall''uso delle informazioni tecniche pubblicate su questa pagina

    Qualora vengano segnalati contenuti non conformi alla legge
    o protetti da copyright, questi verranno immediatamente rimossi

     

     

   

    The... 
  

di Licciardò Maurizio
Progettazione Realizzazione Vendita di Hardware Software, componenti elettronici  Automatismi industriali, programmi per pc personalizzati.
Sviluppo e pubblicazione di  siti internet pagine ASP, PHP  Siti Web.

CCIAA CAGLIARI  P.IVA 02697440929  tel. 333.7602601
 info@elettronicanet.com      http://www.elettronicanet.com

  Per richiedere Preventivi Gratuiti, Cliccare Quì

 

Hobby Elettronica Index

pic micro microcontrollori programmatori software hardware firmware progetti con i pic come programmare i pic le smart card gold box gold card applicazioni con i pic 16f84 16f828 12c508 12c509 le eeprom 24c64 24c128 assembler assemlare routine routines per i pic microchip gratis software gratuito per i pic pic basic software da scaricare gratis risorse gratis per i pic micro devices progetti gratis per i pic automatismi industriali elettronica digitale alta frequenza