|
|||||||
| Arcade | Registrazione | Blogs | Regolamento | Feedback | FAQ | Lista Utenti | Calendario | Segna come Letti |
| Ultimi 5 blog pubblicati su PcTuner Blog | ||
|
||
![]() |
|
|
Strumenti Discussione | Modalità Visualizzazione |
|
|
#1 |
|
Registered User
|
Guida alla CONFIG WORD
Perché non usare i mezzi che l'assembler vi mette a disposizione.
__________________La parola di configurazione in esadecimale è poco chiara e ingestibile. Il file "processore.INC" fornito dalla Microchip mette a disposizione tante belle definizioni per sistemare la parola di configurazione; usiamole. Codice:
__CONFIG _CP_OFF&_DEBUG_OFF&_WRT_OFF&_CPD_OFF&_LVP_OFF&_BODEN_ON&_PWRTE_ON&_WDT_OFF&_XT_OSC ;Per __CONFIG vedi: Special Features of the CPU. Per ovviare all'inconveniente è possibile dividerlo ulteriormente. Codice:
#define CONFIG _CP_OFF & _DEBUG_OFF & _WRT_OFF & _CPD_OFF __CONFIG CONFIG & _LVP_OFF & _BODEN_ON & _PWRTE_ON & _WDT_OFF & _XT_OSC ;Per __CONFIG vedi: Special Features of the CPU. Per suprciuk tu usi questa qui sotto ma quella giusta è quella qui sopra. Codice:
__CONFIG _CP_OFF&_DEBUG_OFF&_WRT_OFF&_CPD_OFF&_LVP_ON&_BODEN_ON&_PWRTE_ON&_WDT_OFF&_XT_OSC
Camillo
Il VeroProgrammatore può contare fino a 1024 con le dita delle mani. Grazie a .mau. Le donne e i gatti fanno quello che vogliono, gli uomini e i cani dovrebbero rilassarsi e abituarsi all'idea. R.A.Heinlein Ultima Modifica di Camillo : 10-03-2006 15.36.03. |
|
|
|
|
|
#2 |
|
Super Moderator
|
Credo che questo topic di Camillo se messo un po' in ordine possa diventare un'utile guida.
__________________Ogni PIC ha una locazione della memoria riservata a contenere le informazioni relative alla configurazione. Si tratta di una locazione al di fuori dell'area di programma e quindi vi si può accedere solo in fase di programmazione e non a run-time. Per impostare tale valore si usa, riferendomi all'asm di mplab, una direttiva specifica la __CONFIG Quindi la direttiva config accetta come argomento un valore a 14 bit (se il core del microcontrollore è a 14 bit) che può essere fornito in binario, decimale, esadecimale oppure utilizzando una notazione simbolica che cercherò di illustrare di seguito caldeggiandone l'utilizzo ![]() Le costanti simboliche che si utilizzano per "comporre" la config word non sono una mia scelta arbitraria, ma sono definite all'interno del file "include" che normalmente viene linkato in un programma asm ed è specifico per ogni microcontrollore. Nel file include sono definite le costanti simboliche per identificare i vari registri del pic e spesso anche i singoli bit di ogni registro. Nel nostro caso ci si riferisce ai singoli bit del registro di configurazione. Codice:
_CP_ALL EQU H'1FFF' ; Code Protect On _CP_OFF EQU H'3FFF' ; Code Protect Off _DEBUG_OFF EQU H'3FFF' ; In Circuit Debugger Off _DEBUG_ON EQU H'37FF' ; In Circuit Debugger On _WRT_OFF EQU H'3FFF' ; No prog memmory write protection _WRT_256 EQU H'3DFF' ; First 256 prog memmory write protected _WRT_1FOURTH EQU H'3BFF' ; First quarter prog memmory write protected _WRT_HALF EQU H'39FF' ; First half memmory write protected _CPD_OFF EQU H'3FFF' ; Data Memory Code Protection Off _CPD_ON EQU H'3EFF' ; Data Memory Code Protection On _LVP_ON EQU H'3FFF' ; Low Voltage Programming On _LVP_OFF EQU H'3F7F' ; Low Voltage Programming Off _BODEN_ON EQU H'3FFF' ; Brown Out Reset On _BODEN_OFF EQU H'3FBF' ; Brown Out Reset Off _PWRTE_OFF EQU H'3FFF' ; Power Up Timer Off _PWRTE_ON EQU H'3FF7' ; Power Up Timer On _WDT_ON EQU H'3FFF' ; Watch Dog Timer On _WDT_OFF EQU H'3FFB' ; Watch Dog Timer Off _RC_OSC EQU H'3FFF' ; RC Oscillator _HS_OSC EQU H'3FFE' ; HS Oscillator _XT_OSC EQU H'3FFD' ; XT Oscillator _LP_OSC EQU H'3FFC' ; LP Oscillator Per impostare la configurazione desiderata è quindi sufficiente concatenare le costanti simboliche opportune mediante la seguente sintassi (che poi è quella postata da Camillo poco sopra): Codice:
__CONFIG _CP_OFF & _DEBUG_OFF & _WRT_OFF & .... ecc. ecc.... Utilissimo se prendete codice scritto da un po' di tempo di cui non vi ricordate i particolari e ancor di più se il codice è scritto da altri e per pic con i quali non avete grande familiarità. ![]() ![]() ![]() Tu non sai niente, Jon Snow! |
|
|
|
|
|
#3 |
|
Registered User
|
Includo un'esempio di come viene trattata la configurazione usando il C18.
__________________Questo è utilizzato da me per il PIC18F4620 che la vuole su 14 byte. Codice:
#pragma romdata configuration = 0x0300000
const rom char config[]={
0xFF,
OSC_XT_1H,
BORV_43_2L & PWRT_ON_2L & BOREN_SBORDIS_2L,
WDT_ON_2H & WDTPS_256_2H,
0xFF,
LPT1OSC_ON_3H & MCLRE_OFF_3H & PBADEN_OFF_3H & CCP2MX_PORTC_3H,
XINST_OFF_4L & STVREN_ON_4L & LVP_OFF_4L & DEBUG_OFF_4L,
0xFF,
CP0_OFF_5L & CP1_ON_5L & CP2_ON_5L & CP3_ON_5L,
CPB_OFF_5H & CPD_OFF_5H,
WRT0_OFF_6L & WRT1_OFF_6L & WRT2_OFF_6L & WRT3_OFF_6L,
WRTC_OFF_6H & WRTB_OFF_6H & WRTD_OFF_6H,
EBTR0_OFF_7L & EBTR1_OFF_7L & EBTR2_OFF_7L & EBTR3_OFF_7L,
EBTRB_OFF_7H
};
Camillo
Il VeroProgrammatore può contare fino a 1024 con le dita delle mani. Grazie a .mau. Le donne e i gatti fanno quello che vogliono, gli uomini e i cani dovrebbero rilassarsi e abituarsi all'idea. R.A.Heinlein |
|
|
|
|
|
#4 |
|
Registered User
|
Oltre al CONFIG anche gli altri registri possono essere trattati nella stessa maniera.
__________________Quelle che seguono sono delle definizioni che uso con i PIC16F627/628. Le tengo in un mio file che includo nel sorgente, in questo file ci sono altre cose che qui non riporto. Se trovate le lettere accentate incomprensibili Š perch‚ ho la pessima abitudine di scrivere i sorgenti con un'editor sotto DOS. Scusatemi. Codice:
;Ultima modifica il 20/02/04 per prove con F630. ;************************************************************************* ; Definizioni per il registro OPTION_REG che si trova nel banco 1 (0x81). ; Di default Š 0xFF per cui vanno fatti gli and del voluto. #define OPTION_DEF 0xFF ;Default di OPTION. Era valido per i 16C5x. #define RBPU_DIS 0xFF ;Resistenze di pull-up del port B disabilitate. #define RBPU_ENA 0x7F ;Resistenze di pull-up del port B attivate. #define INTEDG_RIS 0xFF ;Interrupt Edge Select BIT: in salita su RA2/INT. #define INTEDG_FAL 0xBF ;Interrupt Edge Select BIT: in discesa su RA2/INT. #define T0CS_RA2 0xFF ;Sorgente del clock: transizione su RA2/T0CKI. #define T0CS_CLK 0xDF ;Sorgente del clock: sul ciclo interno (CLKOUT). #define T0SE_H_L 0xFF ;TMR0 si incrementa con transizione in discesa. T0CKI #define T0SE_L_H 0xEF ;TMR0 si incrementa con transizione in salita. T0CKI #define PSA_WDT 0xFF ;Prescaler assegnato a WDT. Da 1:1 a 1:128. #define PSA_T0 0xF7 ;Prescaler al modulo del timer 0. Da 1:2 a 1:256. ;Ricordati di aggiungere l'and col valore del prescaler. ; Definizioni per il registro T1CON che si trova nel banco 0 (0x10). ; Di default Š 0x00 per cui vanno fatti gli or del voluto. #define TMR1GE_DEF 0x00 ;Il timer Š attivo o ignorato in funzione di TMR1ON. #define TMR1GE_T1G 0x40 ;Se TMR1ON=1 il timer lavora se il pin T1G Š basso. #define T1CKP_1_8 0x30 ;Prescaler del timer 1 a 1:8. #define T1CKP_1_4 0x20 ;Prescaler del timer 1 a 1:4. #define T1CKP_1_2 0x10 ;Prescaler del timer 1 a 1:2. #define T1CKP_1_1 0x00 ;Prescaler del timer 1 a 1:1. #define T1LP_OFF 0x00 ;L'oscillatore LP Š spento o ignorato. F630/676 #define T1LP_ENA 0x08 ;L'oscillatore LP Š abilitato dal timer 1. F630/676 #define T1OSC_OFF 0x00 ;Oscillatore 1 shut off (vedi nota sul manuale). #define T1OSC_ON 0x08 ;Oscillatore 1 abilitato. #define T1SYNC_DEF 0x00 ;Il timer usa il clock o Š ignorato in funzione di TMR1CS. #define T1SYNC_NOT 0x04 ;Se TMR1CS=1 non c'Š sincronizzazione, se 0 Š sincro con l'esterno. #define TMR1CS_INT 0x00 ;Clock interno (Fosc/4). #define TMR1CS_EXT 0x02 ;Clock esterno da T1OSO/T1CKI. #define TMR1ON_STP 0x00 ;Timer 1 abilitato. #define TMR1ON_ENA 0x01 ;Stop timer 1. ; Definizioni per il registro CMCON che si trova nel banco 0 (0x1F). ; Per F630/676 Š compatibile ma si trova in 0x19 e non ha il comparatore 2. ; Di default Š 0x00 per cui vanno fatti gli or del voluto. #define C2OUT_L 0x00 ;Comparazione di C2. E' funzione di C2INV (vedi manuale). #define C2OUT_H 0x80 ;Comparazione di C2. E' funzione di C2INV (vedi manuale). #define C1OUT_L 0x00 ;Comparazione di C1. E' funzione di C1INV (vedi manuale). #define C1OUT_H 0x40 ;Comparazione di C1. E' funzione di C1INV (vedi manuale). #define C2INV_INV 0x00 ;C2 ha l'uscita invertita. #define C2INV_NINV 0x20 ;C2 ha l'uscita non invertita. #define C1INV_INV 0x00 ;C1 ha l'uscita invertita. #define C1INV_NINV 0x10 ;C1 ha l'uscita non invertita. #define CIS_RA0RA1 0x00 ;In funzione di CMx connette RA0 o RA1 (vedi manuale). #define CIS_RA3RA2 0x08 ;In funzione di CMx connette RA2 o RA3 (vedi manuale). ;Ricordati di aggiungere l'or per le operazioni di CM0, CM1 e CM2. #define PORTA_DIG 0x07 ;Port A totalmente digitale. Codice:
LIST P=16F628,N=0,C=132,F=INHX8M,R=DEC ERRORLEVEL 0, -302;, -224, -306, -202, -305 INCLUDE "xxxxxxxx.INC" ; Contiene le definizioni sopra riportate. IFDEF __16F628 INCLUDE "P16f628.INC" __CONFIG _CP_75&_WDT_ON&_BODEN_ON&_PWRTE_ON&_XT_OSC&_LVP_OFF&_MCLRE_OFF ENDIF omissis ;--------------------------------------------------------------------------- Main: ;sistema le porte e i registri clrf Port_A clrf Port_B RAM_0_1 ;settaggio porte: movlw TRISDyW movwf TRISB movlw TRIS_PA movwf TRISA ;settaggio registro OPTION. movlw RBPU_DIS&INTEDG_FAL&T0CS_CLK&T0SE_L_H&PSA_T0&0xF8 ;prescaler /2 movwf OPTION_REG ;set del timer RAM_1_0 ;Timer 1: clock interno, prescaler /2. ;movlw T1CKP_1_2 | T1SYNC_NOT | TMR1CS_INT | TMR1ON_ENA ;movwf T1CON movlw PORTA_DIG ;Port A totalmente digitale. movwf CMCON ;Mette a 0 tutto il banco 0 della RAM. omissis
Camillo
Il VeroProgrammatore può contare fino a 1024 con le dita delle mani. Grazie a .mau. Le donne e i gatti fanno quello che vogliono, gli uomini e i cani dovrebbero rilassarsi e abituarsi all'idea. R.A.Heinlein Ultima Modifica di Camillo : 19-03-2006 11.25.34. |
|
|
|
|
|
#6 | |
|
Registered User
|
Quote:
Penso che processor.inc sia un nome di comodo, ufficialmente Microchip non lo usa. Sarà da sostituire con il nome del PIC utilizzato. Cosa che ti ha già passato Fluid e che tu già utilizzi. A proposito io non sono per niente pio e non posseggo nessuna anima.
Camillo
Il VeroProgrammatore può contare fino a 1024 con le dita delle mani. Grazie a .mau. Le donne e i gatti fanno quello che vogliono, gli uomini e i cani dovrebbero rilassarsi e abituarsi all'idea. R.A.Heinlein |
|
|
|
|
|
|
#8 |
|
Registered User
|
Ciao a tutti, ho apprezzato non poco questo thread che mi ha fatto risparmiare molte domande inutili. Adesso però che ho bisogno di creare una applicazione piuttosto complessa mi servirebbe anche una descrizione completa di ogni opzione della config word. Qualcuno sa dove posso trovarne una? Grazie!
|
|
|
|
|
|
#9 | |
|
Super Moderator
|
Quote:
Che pic stai usando? ![]() ![]() ![]() Tu non sai niente, Jon Snow! |
|
|
|
|
|
|
#11 | |
|
Super Moderator
|
Quote:
Ti allego la tabella riassuntiva; la spiegazione di ciascun parametro puoi trovarla di seguito nel datasheet del componente. A livello di codice nel P18F4550.INC trovi tutte le definizioni e in questo documento hai un riepilogo per tutta la famiglia 18F: http://ww1.microchip.com/downloads/e...ngs_51537f.pdf ![]() ![]() ![]() Tu non sai niente, Jon Snow! |
|
|
|
|
|
|
#12 |
|
Registered User
|
salve a tutti, so che magari arrivo tardi, ma vorrei chiedervi una cosa... sono riuscito a settare i config con il C18, ma per settare il deviceID come si fa?????? e poi nel post del 12-03 hai inseritodel codice... il C18 dove lo trova quel codice, lo devo fare io o c'è gia salvato, in teoria c'è gia dato che sono riuscito ad impostare i config, giusto? scusate le mille domande... grazie
|
|
|
|
|
|
#14 | |
|
Registered User
|
Quote:
Codice:
#pragma config OSC = HSPLL #pragma config FCMEN = OFF #pragma config IESO = OFF #pragma config PWRT = ON Ultima Modifica di BitBerzerkir : 11-01-2007 15.39.38. |
|
|
|
|
|
|
#15 | |
|
Registered User
|
Quote:
Camillo
Il VeroProgrammatore può contare fino a 1024 con le dita delle mani. Grazie a .mau. Le donne e i gatti fanno quello che vogliono, gli uomini e i cani dovrebbero rilassarsi e abituarsi all'idea. R.A.Heinlein |
|
|
|
|
|
|
#16 |
|
Registered User
|
mplab e configuration bit
Colgo l'occasione per salutare e complimentarmi per il sito e naturalmente pongo una questione.
Sto cercando di imparare la programmazione dei PIC e per questo mi sono procurato da un'amico il picstart plus con il relativo software Mplab 7.5. Ora prendendo in considerazione il pic 16f628 che sembra faccia al mio caso,non riesco a capire perchè devo usare la direttiva __CONFIG per settare le modalità di funzionamento,esempio quella dell'oscillatore.Dal manuale microchip mi pare di aver capito che basta seguire la seguente procedura: configure-(setting)select device e poi configuration bit.Da qui posso settare la famosa parola a 14 bit,quindi scrivere del codice nel file asm e programmare il chip.Ma perchè anche nel file d'esempio f628tmpo.asm compare questa direttiva seguita da codice da righe di codice di esempio? __CONFIG _CP_OFF & _WDT_ON & _BODEN_ON & _PWRTE_ON & _ER_OSC_CLKOUT & _MCLRE_ON & _LVP_ON Inoltre se io la cancello e setto i bit come descritto sopra non è tutto piu semplice? |
|
|
|
|
|
#17 |
|
Super Moderator
|
Ciao mantico, benvenuto su PcTuner
__________________![]() Un codice per pic è fatto per funzionare con una ben precisa config word. Se cambi la config word, nella maggior parte dei casi ottieni un sistema non funzionante o, nel caso migliore, malfuzionante. Quindi è concettualmente sbagliato tenere separate le due cose. Inoltre se oggi scrivo un programma so perfettamente quale config devo metterci per farlo funzionare e posso impostarla in sede di programmazione come dici tu. Ma se riprendo il codice fra sei mesi non posso sperare di ricordarmi quel particolare codice (magari ne scrivo 10 al giorno...) che config aveva nè posso permettermi di ristudiarmi di nuovo tutto il codice per capire quale sia la config giusta. E' una questione di buon senso: la config è parte integrante del programma e bisogna renderla quanto più esplicita e comprensibile si può ![]() ![]() ![]() ![]() Tu non sai niente, Jon Snow! |
|
|
|
|
|
#18 | |
|
Registered User
|
Quote:
Se io prendo in mano un listato e trovo: __CONFIG 11111111110111b Mi potrebbe venire un'infarto mentre tento di decifrarlo. Non che questo __CONFIG _CP_OFF & _WDT_ON & _BODEN_ON & _PWRTE_ON & _ER_OSC_CLKOUT & _MCLRE_ON & _LVP_ON sia molto più capibile però con un po' di pratica e frequentazione dell'ambiente anche senza prendere in mano il manuale e cercare la pagina opportuna si sa che: la protezione del codice è inattiva il watch dog timer è attivo il brown-out reset è attivo il timer all'accensione è attivo l'oscillatore è di tipo esterno con l'oscillazione su un'uscita che il piedino di reset fa la sua funzione e quindi va messo al positivo che il piedino PGM serve per programmare a bassa tensione e non come I/O Se desideriamo disattivare il WDT e sufficiente mettere due F al posto di una N ed il gioco è fatto e senza tanto scartabellare. Hai dato un'occhiata alla CONFOG (sic) dei PIC18?
Camillo
Il VeroProgrammatore può contare fino a 1024 con le dita delle mani. Grazie a .mau. Le donne e i gatti fanno quello che vogliono, gli uomini e i cani dovrebbero rilassarsi e abituarsi all'idea. R.A.Heinlein |
|
|
|
|
|
|
#19 |
|
Registered User
|
Se c'è una cosa nel net che distingue un sito da un'altro,sopratutto in argomenti
specifici è la chiarezza.La diffusione di informazioni approssimate e poco chiare è una merce abbondante in rete......ancora complimenti per la vostra professionalità!!!!! |
|
|
|
|
|
#20 |
|
Registered User
|
3d eccellente! Nonostante sia "datato", direi sia da considerarsi un evergreen. Grazie a tutti per l'utilissimo aiuto che offrite continuamente. Avrei una piccola domanda e poi un giudizio da parte di chi di pic ne ha programmati a bizzeffe.
Intanto, vorrei sapere se le opzioni non abilitate, possono essere omesse (p.e.: __CONFIG _CP_OFF & _CCP1_RB2 & _DEBUG_OFF & ... = __CONFIG _CCP1_RB2 & ...). e poi, cosa ne pensate delle forma: Codice:
RADIX DEC INCLUDE "P16F84.INC" ERRORLEVEL -302 ;Setup of PIC configuration flags ;XT oscillator ;Disable watch dog timer ;Enable power up timer ;Disable code protect __CONFIG 3FF1H |
|
|
|
![]() |
Per le vostre immagini su questo forum potete usare PcTunerUp! Iscriviti gratuitamente alla nostra newsletter. |
| Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 visitatori) | |
| Strumenti Discussione | |
| Modalità Visualizzazione | |
|
|