PIC problema .....

R

Rambo

Guest
Ho un problema con una porzione di codice che ho per un programma.La sezione che ho allegato è per il chip in un paintball pistola e ha a che fare con l'accensione e lo spegnimento del cannone, che è controllato da un pulsante di accensione portb, 6.Sto usando il PIC16F628A e sto utilizzando MPLAB w / picstart plus per programmarlo.E 'sicuramente un problema con il intterupts perché quando mi rivolgo interrompe off, il codice funziona bene.Ma per qualche motivo, quando sono su, il programma non sembra funzionare a tutti-anche se in debug in MPSIM, tutto sembra funzionare perfettamente.Se questo è alcuna indicazione di ciò che c'è di nuovo, quando il programma si avvia, la luce rossa che si trova sul portb, 5 soggiorni molto opaco, e il livello di tensione al pin è solo di circa 1,5 volt, che mi fa pensare che da qualche parte è spegnere e su molto più rapido.

Ecco cosa si suppone accada.La batteria è collegato.Il programma sottolinea l'etichetta "inizio" subito.Il intcon registro di configurazione per consentire RB porto cambiamento interrompe.Trisa e trisb sono setup, ecc.Quindi il programma va in sleep mode,
in attesa che il pulsante di alimentazione per essere spinto.Quando il programma deve puntare per affrontare 0x04.Poi un po 'nel "potere" registro tiene traccia del fatto che la pistola è svolta su on o off.Se il suo spegnersi risale al sonno.Se è acceso, il programma torna a "inizio", ma questa volta salta oltre il sonno di istruzioni e va al programma principale.Qualsiasi aiuto sarebbe apprezzato.

http://home.comcast.net/ ~ millersseven / testprog.asm

 
Uno dei vostri problemi è che i programmi non ritorna mai da interrompere via RETFIE istruzione.

Come il 16F628 (A), ha solo un livello di 8 stack overflow dello stack sarà molto presto ...

E non si deve utilizzare il SONNO istruzioni
all'interno del programma principale e interrompere,
vorrei utilizzare solo nel programma principale.

Il vostro principale del programma ha bisogno anche di un loop infinito altrimenti il programma partirà di nuovo e ancora e ancora

<img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Molto Felice" border="0" />E se non ricordo male si dovrebbe mettere un NOP istruzioni direttamente dopo ogni SONNO istruzioni.

Anche il tuo post FUSIBILE impostazioni forse
c'è qualcosa che non va troppo?

speriamo che questo aiuta e migliori saluti

 
RETFIE non mi aiuta in questo caso.Ma mi riattivare il GIE bit quando interrompere la routine è finita.Ho NOP dopo ciascuna delle istruzioni, anche se il sonno che ha tagliato fuori dal porzione ho dato.Il programma principale è un loop senza fine, ma solo scegliere di collegare la parte del programma che è stato avermi dato problemi.Quando si collega la batteria, tutto dovrebbe essere spento e deve essere in stato di Stop, ma non lo è.Se i dont attivare GIE però, tutto funziona bene.Essa non ha alcun senso.

 
anche voi non sono state salvate nel registro di routine di interrupt

 
Qui ci sono le impostazioni di fusibile.
Oscillatore interno, I / O sui piedini RA6 e RA7
Watchdog off
Power off fino alla rovescia
codice proteggere off
bruno di individuare off
master chiaro consentire al largo
bassa tensione programma.chiuso
EE leggere la protezione dei dati.chiuso

Non riesco a trovare un modo per utilizzare il ritorno di istruzioni.Quando si verifica l'interrupt voglio il programma per iniziare tutto da capo, non continuare a dove si è interrotta.I GIE riattivare anche dopo l'interruzione, che è ciò che accade RETFIE fa.
Forse questo darà al meglio il problema.Ho messo un po 'di codice di prova dopo la "Start" etichetta e dopo tutto è stato istituito.Si tratta di una luce verde lampeggiante.Ora, quando ho avviato il programma, la stessa cosa succede damn-la luce rossa si accende sordo-anche se si dovrebbe andare a destra per la luce verde lampeggiante.Ora, se io continuo GIE disabili, quindi la luce verde inizia a lampeggiare come dovrebbe.

Sto assumendo che stai parlando del "potere" che il registro utilizzato per tenere traccia di on / off.Essa non ha bisogno di essere salvati durante il sonno.Quando il programma va a dormire, il potere viene cancellata la registrazione, che è esattamente ciò che il programma conta su.

 
Rambo ha scritto:

Qui ci sono le impostazioni di fusibile.

bruno di individuare off

master chiaro consentire al largoNon riesco a trovare un modo per utilizzare il ritorno di istruzioni.
Quando si verifica l'interrupt voglio il programma per iniziare tutto da capo, non continuare a dove si è interrotta.
 
http://home.comcast.net/ ~ millersseven / program.asm Questo è il programma completo

Ho attivato Brown Out Detect, ma il programma si avvia senza che in entrambi i casi.Ho trovato il programma in cui si sta attaccato a, ma non sono sicuro di come ci si arriva.L'etichetta di "off" è dove il programma si sta in qualche modo.Ho trovato questo da cambiare la luce rossa (portb, 4) a blu (portb, 5), e abbastanza sicuro quando ho collegato la batteria, la luce blu acceso ottuso.Ma rende assolutamente alcun senso come il programma si sta lì, e tanto meno come è nei pressi di loop di tenere la luce rossa opaca.
Capisco che questo è in genere non vengono utilizzati come interrompe, ma non posso pensare a nessun altro modo per farla funzionare.Ma in teoria dovrebbe funzionare e funziona perfettamente in MPLAB debugger.I'm stumped.

 
Credo che il problema ha a che fare con la debouncing del commutatore.È chiaro il RBIF
all'inizio del interrompere, ma è chiaro che dovrebbe, alla fine, dopo aver debounced l'interruttore.Altrimenti, se è chiaro che, all'inizio, non appena si prende il dito lo switch off della RBIF sarà fissato di nuovo e si chiama l'interrupt AGAIN.Così pensa il tuo programma è spento, quindi, in attesa di prendere il dito lo switch off (impostazione RBIF), chiede l'interrupt NUOVAMENTE RBIF perché è stato impostato, quindi pensa che il programma è spento.

Se si deseleziona RBIF alla fine, si sono di compensazione che dopo aver atteso per il dito a venire fuori l'interruttore e per ogni rimbalzo.Quindi non si deve interrompere la chiamata due volte.

 

Welcome to EDABoard.com

Sponsor

Back
Top