Ho capito. Ma quindi, alla fine della fiera dove la metto quella impostazione?
Perché un #pragma dentro al main prima delle impostazioni dell'ADC viene compilato, ma resta a 10 bit. Farmi una struct come nell'header non sono in grado (ma si impara), solo che non voglio fare danni (per scrivere nel registro con NOMEREGISTRObits.LOCAZIONE), visto che non è presente nell'header pic18f47j53.h
PIC18 problemi su Tad dell'ADC
Moderatore:
Paolino
28 messaggi
• Pagina 3 di 3 • 1, 2, 3
0
voti
Allora, per avere la stessa sintassi ho replicato in un mio header richiamato nel main. Ho modificato nomi e indirizzo di accesso, così la sintassi REGISTRObits.LOCAZIONE funziona correttamente. Però non trovo sul datasheet il registro in cui è ricopiato il valore in 0x300005, per cui mi sono arragiato così.
Precisamente:
Così per la locazione ADCSEL compila. Il problema è che è a 10 bit ancora. Voi come fate?
Precisamente:
- Codice: Seleziona tutto
// Register: CONFIG3H
extern volatile unsigned char CONFIG3H @ 0x300005;
#ifndef _LIB_BUILD
asm("CONFIG3H equ 300005h");
#endif
// bitfield definitions
typedef union {
struct {
unsigned RD0 :1;
unsigned ADCSEL :1;
unsigned RD2 :1;
unsigned RD3 :1;
unsigned RD4 :1;
unsigned RD5 :1;
unsigned RD6 :1;
unsigned RD7 :1;
};
} CONFIG3Hbits_t;
extern volatile CONFIG3Hbits_t CONFIG3Hbits @ 0x300005;
// bitfield macros
#define _PORTD_RD0_POSN 0x0
#define _PORTD_RD0_POSITION 0x0
#define _PORTD_RD0_SIZE 0x1
#define _PORTD_RD0_LENGTH 0x1
#define _PORTD_RD0_MASK 0x1
#define _CONFIG3H_ADCSEL_POSN 0x1
#define _CONFIG3H_ADCSEL_POSITION 0x1
#define _CONFIG3H_ADCSEL_SIZE 0x1
#define _CONFIG3H_ADCSEL_LENGTH 0x1
#define _CONFIG3H_ADCSEL_MASK 0x2
#define _PORTD_RD2_POSN 0x2
#define _PORTD_RD2_POSITION 0x2
#define _PORTD_RD2_SIZE 0x1
#define _PORTD_RD2_LENGTH 0x1
#define _PORTD_RD2_MASK 0x4
#define _PORTD_RD3_POSN 0x3
#define _PORTD_RD3_POSITION 0x3
#define _PORTD_RD3_SIZE 0x1
#define _PORTD_RD3_LENGTH 0x1
#define _PORTD_RD3_MASK 0x8
#define _PORTD_RD4_POSN 0x4
#define _PORTD_RD4_POSITION 0x4
#define _PORTD_RD4_SIZE 0x1
#define _PORTD_RD4_LENGTH 0x1
#define _PORTD_RD4_MASK 0x10
#define _PORTD_RD5_POSN 0x5
#define _PORTD_RD5_POSITION 0x5
#define _PORTD_RD5_SIZE 0x1
#define _PORTD_RD5_LENGTH 0x1
#define _PORTD_RD5_MASK 0x20
#define _PORTD_RD6_POSN 0x6
#define _PORTD_RD6_POSITION 0x6
#define _PORTD_RD6_SIZE 0x1
#define _PORTD_RD6_LENGTH 0x1
#define _PORTD_RD6_MASK 0x40
#define _PORTD_RD7_POSN 0x7
#define _PORTD_RD7_POSITION 0x7
#define _PORTD_RD7_SIZE 0x1
#define _PORTD_RD7_LENGTH 0x1
#define _PORTD_RD7_MASK 0x80
#define _PORTD_PMD0_POSN 0x0
#define _PORTD_PMD0_POSITION 0x0
#define _PORTD_PMD0_SIZE 0x1
#define _PORTD_PMD0_LENGTH 0x1
#define _PORTD_PMD0_MASK 0x1
#define _PORTD_PMD1_POSN 0x1
#define _PORTD_PMD1_POSITION 0x1
#define _PORTD_PMD1_SIZE 0x1
#define _PORTD_PMD1_LENGTH 0x1
#define _PORTD_PMD1_MASK 0x2
#define _PORTD_PMD2_POSN 0x2
#define _PORTD_PMD2_POSITION 0x2
#define _PORTD_PMD2_SIZE 0x1
#define _PORTD_PMD2_LENGTH 0x1
#define _PORTD_PMD2_MASK 0x4
#define _PORTD_PMD3_POSN 0x3
#define _PORTD_PMD3_POSITION 0x3
#define _PORTD_PMD3_SIZE 0x1
#define _PORTD_PMD3_LENGTH 0x1
#define _PORTD_PMD3_MASK 0x8
#define _PORTD_PMD4_POSN 0x4
#define _PORTD_PMD4_POSITION 0x4
#define _PORTD_PMD4_SIZE 0x1
#define _PORTD_PMD4_LENGTH 0x1
#define _PORTD_PMD4_MASK 0x10
#define _PORTD_PMD5_POSN 0x5
#define _PORTD_PMD5_POSITION 0x5
#define _PORTD_PMD5_SIZE 0x1
#define _PORTD_PMD5_LENGTH 0x1
#define _PORTD_PMD5_MASK 0x20
#define _PORTD_PMD6_POSN 0x6
#define _PORTD_PMD6_POSITION 0x6
#define _PORTD_PMD6_SIZE 0x1
#define _PORTD_PMD6_LENGTH 0x1
#define _PORTD_PMD6_MASK 0x40
#define _PORTD_PMD7_POSN 0x7
#define _PORTD_PMD7_POSITION 0x7
#define _PORTD_PMD7_SIZE 0x1
#define _PORTD_PMD7_LENGTH 0x1
#define _PORTD_PMD7_MASK 0x80
#define _PORTD_SCL2_POSN 0x0
#define _PORTD_SCL2_POSITION 0x0
#define _PORTD_SCL2_SIZE 0x1
#define _PORTD_SCL2_LENGTH 0x1
#define _PORTD_SCL2_MASK 0x1
#define _PORTD_SDA2_POSN 0x1
#define _PORTD_SDA2_POSITION 0x1
#define _PORTD_SDA2_SIZE 0x1
#define _PORTD_SDA2_LENGTH 0x1
#define _PORTD_SDA2_MASK 0x2
#define _PORTD_RP19_POSN 0x2
#define _PORTD_RP19_POSITION 0x2
#define _PORTD_RP19_SIZE 0x1
#define _PORTD_RP19_LENGTH 0x1
#define _PORTD_RP19_MASK 0x4
#define _PORTD_RP20_POSN 0x3
#define _PORTD_RP20_POSITION 0x3
#define _PORTD_RP20_SIZE 0x1
#define _PORTD_RP20_LENGTH 0x1
#define _PORTD_RP20_MASK 0x8
#define _PORTD_RP21_POSN 0x4
#define _PORTD_RP21_POSITION 0x4
#define _PORTD_RP21_SIZE 0x1
#define _PORTD_RP21_LENGTH 0x1
#define _PORTD_RP21_MASK 0x10
#define _PORTD_RP22_POSN 0x5
#define _PORTD_RP22_POSITION 0x5
#define _PORTD_RP22_SIZE 0x1
#define _PORTD_RP22_LENGTH 0x1
#define _PORTD_RP22_MASK 0x20
#define _PORTD_RP23_POSN 0x6
#define _PORTD_RP23_POSITION 0x6
#define _PORTD_RP23_SIZE 0x1
#define _PORTD_RP23_LENGTH 0x1
#define _PORTD_RP23_MASK 0x40
#define _PORTD_RP24_POSN 0x7
#define _PORTD_RP24_POSITION 0x7
#define _PORTD_RP24_SIZE 0x1
#define _PORTD_RP24_LENGTH 0x1
#define _PORTD_RP24_MASK 0x80
#define _PORTD_SS2_POSN 0x7
#define _PORTD_SS2_POSITION 0x7
#define _PORTD_SS2_SIZE 0x1
#define _PORTD_SS2_LENGTH 0x1
#define _PORTD_SS2_MASK 0x80
Così per la locazione ADCSEL compila. Il problema è che è a 10 bit ancora. Voi come fate?
0
voti
Personalmente non ho mai avuto bisogno di modificare i fuses a run-time, quindi non ho una soluzione pronta e collaudata.
L'indirizzo in cui viene copiato il registro CONFIG3H è l'indirizzo 0x300005, quindi il tuo programma dovrebbe cambiare l'indirizzo 0x300005.
Non ho mai provato e sul datasheet non ho mai trovato nulla che dica il contrario, pertanto immagino che quelle locazioni si possano cambiare e che per cambiare queste locazioni di memoria non si utilizzino le solite istruzioni mov o simile, ma si debba seguire una procedura ben precisa che coinvolge i registri TBLPTRx, EECONx ed TABLAT.
E' una procedura per nulla semplice e da esplorare.
L'indirizzo in cui viene copiato il registro CONFIG3H è l'indirizzo 0x300005, quindi il tuo programma dovrebbe cambiare l'indirizzo 0x300005.
Non ho mai provato e sul datasheet non ho mai trovato nulla che dica il contrario, pertanto immagino che quelle locazioni si possano cambiare e che per cambiare queste locazioni di memoria non si utilizzino le solite istruzioni mov o simile, ma si debba seguire una procedura ben precisa che coinvolge i registri TBLPTRx, EECONx ed TABLAT.
E' una procedura per nulla semplice e da esplorare.
Fabio
0
voti
Già, mi son fatto un'idea simile, essendo essi in locazioni diverse: quelle sono locazioni della Flash, e quel PIC18 come hai detto ne fa una copia volatile al reset, e quindi modificabile (cit. tua e del datasheet) e non trovando nulla su quella locazione volatile, effettivamente bisogna fare delle procedure di accesso alla flash (che però non possono essere non-volatili, quindi qualcosa come logica non mi quadra). In ogni caso, si sta andando oltre.
Per cui il verdetto finale (se ho capito) è che il Pierin senza un qualsivoglia PicKit non può, normalmente, lavorare su 12 bit. Per la cosa che sto facendo è relativamente importante sapere questa informazione per certo, perché porta a future strade differenti. Anche economicamente, perché se avrò bisogno dei 12bit dovrò comprare un programmatore, cosa che attualmente sto cercando di evitare.
Chiedo conferme anche a TardoFreak, in quanto creatore della schedina.
Per cui il verdetto finale (se ho capito) è che il Pierin senza un qualsivoglia PicKit non può, normalmente, lavorare su 12 bit. Per la cosa che sto facendo è relativamente importante sapere questa informazione per certo, perché porta a future strade differenti. Anche economicamente, perché se avrò bisogno dei 12bit dovrò comprare un programmatore, cosa che attualmente sto cercando di evitare.
Chiedo conferme anche a TardoFreak, in quanto creatore della schedina.
1
voti
Precisazione: non sono il "creatore" della schedina perché io non sono in grado di creare nulla. Al limite l' ho progettata, realizzata (o che dir si voglia) ma non creata.
Ciò detto,
Ad essere sincero non mi sono posto il problema della risoluzione dell' ADC. Il bootloader dovrebbe servire come entry point. Una volta visto che si possono fare cose che funzionano è quasi d' obbligo passare al PicKit3. E questo vale soprattutto per i neofiti perché permette di effettuare un vero debug. E' anche vero che i microcontrollisti più scafati non usano (quasi) mai il debugger se non in situazioni particolari. Diciamo che è più utile ad un neafita che ad un grand master. Inoltre 10 bit è la risoluzione "standard" degli ADC dei PIC.
Tuttavia, appena avrò un po' di tempo (e di testa) metterò una versione di bootloader con 12 bit di risoluzione. Se proprio non se ne può fare a meno si cerca qualcuno nelle vicinanze che abbia un PicKit3 e si programma il bootloader per ADC a 12 bit.
Comunque l' HID bootloader (quello che funziona con windows) permette di programmare anche i bit di configurazione. E' un' operazione da fare con estrema attenzione ed essere sicuri di modificare solo il bit incriminato. Tutti gli altri devono esserci e devono essere come si presentano nel file di configurazione del progetto di base!
Signori, occhio alla penna perché basta un errore ed il bootloader se ne va a put ... ehm ... si rovina.
Ciò detto,
Ad essere sincero non mi sono posto il problema della risoluzione dell' ADC. Il bootloader dovrebbe servire come entry point. Una volta visto che si possono fare cose che funzionano è quasi d' obbligo passare al PicKit3. E questo vale soprattutto per i neofiti perché permette di effettuare un vero debug. E' anche vero che i microcontrollisti più scafati non usano (quasi) mai il debugger se non in situazioni particolari. Diciamo che è più utile ad un neafita che ad un grand master. Inoltre 10 bit è la risoluzione "standard" degli ADC dei PIC.
Tuttavia, appena avrò un po' di tempo (e di testa) metterò una versione di bootloader con 12 bit di risoluzione. Se proprio non se ne può fare a meno si cerca qualcuno nelle vicinanze che abbia un PicKit3 e si programma il bootloader per ADC a 12 bit.
Comunque l' HID bootloader (quello che funziona con windows) permette di programmare anche i bit di configurazione. E' un' operazione da fare con estrema attenzione ed essere sicuri di modificare solo il bit incriminato. Tutti gli altri devono esserci e devono essere come si presentano nel file di configurazione del progetto di base!
Signori, occhio alla penna perché basta un errore ed il bootloader se ne va a put ... ehm ... si rovina.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
0
voti
Ricevuto!
Ho visto adesso l'unlock dei bit per rendere effettiva la modifica del file sorgente di configurazione. Eh, che vuoi fare, vorrà dire che mi farò questo "PicKregalino" in futuro.
Ho visto adesso l'unlock dei bit per rendere effettiva la modifica del file sorgente di configurazione. Eh, che vuoi fare, vorrà dire che mi farò questo "PicKregalino" in futuro.
0
voti
Se vuoi fare una cosa ben fatta e allo stesso tempo dare un contributo ai pierinisti, quando avrei il PicKit (così sei al riparo) prova a modificare gli option bits tramite il bootloader e scrivi, magari in un articolo, l' esito dell' esperimento.
Attendo con ansia.
Attendo con ansia.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
28 messaggi
• Pagina 3 di 3 • 1, 2, 3
Torna a Firmware e programmazione
Chi c’è in linea
Visitano il forum: Nessuno e 6 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)

