Problema programmazione PIC

Summerwind78
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

Risposte
Sk_Anonymous
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

Quinzio
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.

Summerwind78
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?

Quinzio
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.

Summerwind78
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

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.