Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

PIC18 problemi su Tad dell'ADC

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[21] Re: PIC18 problemi su Tad dell'ADC

Messaggioda Foto Utentethexeno » 2 gen 2014, 13:57

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
Avatar utente
Foto Utentethexeno
235 5 9
Frequentatore
Frequentatore
 
Messaggi: 298
Iscritto il: 12 apr 2010, 18:28

0
voti

[22] Re: PIC18 problemi su Tad dell'ADC

Messaggioda Foto Utentethexeno » 2 gen 2014, 16:36

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:

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?
Avatar utente
Foto Utentethexeno
235 5 9
Frequentatore
Frequentatore
 
Messaggi: 298
Iscritto il: 12 apr 2010, 18:28

0
voti

[23] Re: PIC18 problemi su Tad dell'ADC

Messaggioda Foto Utentec1b8 » 2 gen 2014, 17:31

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.
Fabio
Avatar utente
Foto Utentec1b8
3.595 3 8 13
G.Master EY
G.Master EY
 
Messaggi: 1770
Iscritto il: 15 gen 2009, 15:23

0
voti

[24] Re: PIC18 problemi su Tad dell'ADC

Messaggioda Foto Utentethexeno » 2 gen 2014, 17:42

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.
Avatar utente
Foto Utentethexeno
235 5 9
Frequentatore
Frequentatore
 
Messaggi: 298
Iscritto il: 12 apr 2010, 18:28

1
voti

[25] Re: PIC18 problemi su Tad dell'ADC

Messaggioda Foto UtenteTardoFreak » 2 gen 2014, 19:30

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. [-X
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.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[26] Re: PIC18 problemi su Tad dell'ADC

Messaggioda Foto Utentethexeno » 2 gen 2014, 20:44

Ricevuto! :ok:

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. :-)
Avatar utente
Foto Utentethexeno
235 5 9
Frequentatore
Frequentatore
 
Messaggi: 298
Iscritto il: 12 apr 2010, 18:28

0
voti

[27] Re: PIC18 problemi su Tad dell'ADC

Messaggioda Foto UtenteTardoFreak » 2 gen 2014, 23:24

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. :ok:

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.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[28] Re: PIC18 problemi su Tad dell'ADC

Messaggioda Foto Utentethexeno » 2 gen 2014, 23:51

Ottimo spunto.. :ok:
Avatar utente
Foto Utentethexeno
235 5 9
Frequentatore
Frequentatore
 
Messaggi: 298
Iscritto il: 12 apr 2010, 18:28

Precedente

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 7 ospiti