Problema programmazione PIC
Ciao a tutti
sto costruendo un circuito con un PIC 18F4525 che mi faccia da convertitore tra due protocolli
ho però un grosso problema.
Ho scritto tutto il codice e ho incominciato a simularlo
Come compilatore C uso il C18 della microchip e come ambiente di sviluppo uso MPLAB 8.80 e MPLAB.X
il programma è corretto dal punto di vista della sintassi, ma dopo che vengono eseguite le prime righe di codice, durante la simulazione il programma riparte dall'inizio anziché proseguire.
Diciamo che è come se avvenisse un reset
Ovviamente ho controllato il watchdog (che avevo disattivato) ma non si attiva.
Nel registro dei flag di reset non cambia nulla
pertanto il reset non dovrebbe avvenire.
Inizialmente ho pensato che potesse essere un problema di simulazione, quindi ho programmato il circuito che nel frattempo avevo costruito, e ho visto che si comporta nello stesso modo
sono giorni che faccio prove ma non capisco che cosa succeda.
non posto il codice perchè è enormemente lungo
Se qualcuno avesse voglia di provare a darmi una mano sarei felice di caricarlo da su qualche server per dargli modo di scaricarlo.
altrimenti mi basterebbero anche dei suggerimenti su quali potrebbero essere le cause
grazie a tutti
Ciao
sto costruendo un circuito con un PIC 18F4525 che mi faccia da convertitore tra due protocolli
ho però un grosso problema.
Ho scritto tutto il codice e ho incominciato a simularlo
Come compilatore C uso il C18 della microchip e come ambiente di sviluppo uso MPLAB 8.80 e MPLAB.X
il programma è corretto dal punto di vista della sintassi, ma dopo che vengono eseguite le prime righe di codice, durante la simulazione il programma riparte dall'inizio anziché proseguire.
Diciamo che è come se avvenisse un reset
Ovviamente ho controllato il watchdog (che avevo disattivato) ma non si attiva.
Nel registro dei flag di reset non cambia nulla
pertanto il reset non dovrebbe avvenire.
Inizialmente ho pensato che potesse essere un problema di simulazione, quindi ho programmato il circuito che nel frattempo avevo costruito, e ho visto che si comporta nello stesso modo
sono giorni che faccio prove ma non capisco che cosa succeda.
non posto il codice perchè è enormemente lungo
Se qualcuno avesse voglia di provare a darmi una mano sarei felice di caricarlo da su qualche server per dargli modo di scaricarlo.
altrimenti mi basterebbero anche dei suggerimenti su quali potrebbero essere le cause
grazie a tutti
Ciao
Risposte
ciao
se non è il programma a fare il reset allora può essere l' HD.
se alimenti tramite porta di un PC portatile, prova a cambiare porta o meglio ancora usare altro PC, magari fisso da porta USB diretta dalla scheda madre.
la scheda di sviluppo assorbe parecchio e non sempre il portatile la regge.
se la compilazione è andata OK, e se non ci sono cicli di reset inseriti, direi che dipende dall'HD.
E' un'ipotesi, da valutare, se non già considerata.
ciao
claudio
se non è il programma a fare il reset allora può essere l' HD.
se alimenti tramite porta di un PC portatile, prova a cambiare porta o meglio ancora usare altro PC, magari fisso da porta USB diretta dalla scheda madre.
la scheda di sviluppo assorbe parecchio e non sempre il portatile la regge.
se la compilazione è andata OK, e se non ci sono cicli di reset inseriti, direi che dipende dall'HD.
E' un'ipotesi, da valutare, se non già considerata.
ciao
claudio
Rispondere così da distanza non è facile perchè le variabili sono tante.
Il watchdog lo spegni dai bit delle opzioni se non ricordo male.
Se hai un oscilloscopio controlla che sul pin di reset non ci siano glitch o impulsi strani.
Con le opzioni sempre, metti il reset interno e il pin MCLR come general I/O.
La Vdd deve essere pulita.
Fai un loop infinito di NOP all'inizio del codice e controlla che il micro stia li dentro senza resettarsi ( metti un break prima del loop).
Se usi l' ICD3 per debuggare sappi che è un catorcio e può dare diversi fastidi.
Il watchdog lo spegni dai bit delle opzioni se non ricordo male.
Se hai un oscilloscopio controlla che sul pin di reset non ci siano glitch o impulsi strani.
Con le opzioni sempre, metti il reset interno e il pin MCLR come general I/O.
La Vdd deve essere pulita.
Fai un loop infinito di NOP all'inizio del codice e controlla che il micro stia li dentro senza resettarsi ( metti un break prima del loop).
Se usi l' ICD3 per debuggare sappi che è un catorcio e può dare diversi fastidi.
Prima di tutto grazie mille per la risposta
Il watchdog é disabilitato sia via software che da configurazione iniziale
ho controllato che non avvenga alcun reset per via del WD, mi ero dimenticato di menzionarlo.
Inoltre ho controllato il registro RCON che mi indica quale é la sorgente del reset e il non ce ne sono.
Per quanto riguarda l'MCLR per ora é impostato non come IO perché uso l'ICD2 come debugger e programmer, quindi lo controlla lui. Se non lo imposto in quel modo non mi lascia debuggare il controllore
La Vdd é pulita, sia perché uso un alimentatore stabile, e anche perché é regolata da un 7805 con tutti i suoi bei condensatori di stabilizzazione.
Inoltre il reset mi capita sia nella realtá che durante la simulazione, quindi non penso che dipenda dall'alimentazione
Sto incominciando a pensare che sia un qualche tipo di problema legato al linker, magari fa dei salti strani tra banchi che non capisco. Purtroppo ho poca esperienza e nulla da cui attingere.
Adesso ho ricominciato a scrivere il codice con un altro compilatore e vedo se mi fa lo stesso scherzo
Io, come ho detto ho l'ICD2 e stavo pensando di prendere l'ICD3. dici che é una ciofeca?
Il watchdog é disabilitato sia via software che da configurazione iniziale
ho controllato che non avvenga alcun reset per via del WD, mi ero dimenticato di menzionarlo.
Inoltre ho controllato il registro RCON che mi indica quale é la sorgente del reset e il non ce ne sono.
Per quanto riguarda l'MCLR per ora é impostato non come IO perché uso l'ICD2 come debugger e programmer, quindi lo controlla lui. Se non lo imposto in quel modo non mi lascia debuggare il controllore
La Vdd é pulita, sia perché uso un alimentatore stabile, e anche perché é regolata da un 7805 con tutti i suoi bei condensatori di stabilizzazione.
Inoltre il reset mi capita sia nella realtá che durante la simulazione, quindi non penso che dipenda dall'alimentazione
Sto incominciando a pensare che sia un qualche tipo di problema legato al linker, magari fa dei salti strani tra banchi che non capisco. Purtroppo ho poca esperienza e nulla da cui attingere.
Adesso ho ricominciato a scrivere il codice con un altro compilatore e vedo se mi fa lo stesso scherzo
Io, come ho detto ho l'ICD2 e stavo pensando di prendere l'ICD3. dici che é una ciofeca?
Ma no, va bene l'ICD3. Anzi rispetto all'ICD2 è un netto miglioramento.
Per il tuo problema mi sa che devi fare un po' di debug.
In questo caso dovresti essere in grado di usare il simulatore software, che ha il grosso vantaggio del trace, per cui quando hai il reset o il runaway del ProgCounter, puoi sempre vedere da dove proveniva.
Per il tuo problema mi sa che devi fare un po' di debug.
In questo caso dovresti essere in grado di usare il simulatore software, che ha il grosso vantaggio del trace, per cui quando hai il reset o il runaway del ProgCounter, puoi sempre vedere da dove proveniva.
grazie
per ora pare che cambiano compilatore il problema sia sparito
ho usato il CCS e non ho piú salti
Per quanto riguarda il trace, purtroppo sono carente di esperienza e non so bene come usarlo
per ora pare che cambiano compilatore il problema sia sparito
ho usato il CCS e non ho piú salti
Per quanto riguarda il trace, purtroppo sono carente di esperienza e non so bene come usarlo