oh-pazzo Inserito: 25 giugno 2011 Segnala Inserito: 25 giugno 2011 buongiorno a tutti. io sto giocando col mikrob e il pic 16f876/a non riesco ad implementare il controllo wtd perchè non so come aumentarne il tempo di intervento. il pre l'ho settato a 128 ma avento usato tempi di attesa di 1,5sec nel programma non riesco ad azzerarlo in tempo.Mi potete aiutare...grazie1000...ottimo forum..
kappa47 Inserita: 28 giugno 2011 Segnala Inserita: 28 giugno 2011 Ciao.Non dice che frequenza del quarzo hai.Ammesso che tu abbia settato il tempo di watchdog al massimo, mi sembra strano che il tuo main impieghi piu' del tempo di watchdog per fare un giro completo e quindi ricaricarlo.Perdi tempo in qualche routine di attesa ?
oh-pazzo Inserita: 9 luglio 2011 Autore Segnala Inserita: 9 luglio 2011 scusa del ritardo ma non sono stato presente in questo periodo.No il problema è che il tempo lo perdo per delle segnalazioni luminose, comunque ho parziamente risolto il problema diminuendo questi tempi.Se conosci il Mikrobasic ti chiedo come mai in una routine di interrupt tmr0 in cui incremento una variabile non riesco a leggere la stessa variabile dal corpo del programma.ex sub procedure interruptinc (x)tmr0=10ecc eccend sub______________________________________________nel corpo del programma:if x=50 then porta.0=1x=0end ifse l' if lo metto dentro la routine di interrupt tutto va se cerco di leggerla dal programma no......
RealTime Inserita: 9 luglio 2011 Segnala Inserita: 9 luglio 2011 Se hai di questi problemi devi obbligatoriamente mettere le WD CLEAR all'interno del sotto-codice main (Routine di ritardo, loops, ect )RT
kappa47 Inserita: 10 luglio 2011 Segnala Inserita: 10 luglio 2011 Non credo sia un problema di watchdog ed e' vivamente scosigliato "seminare" l'aggiornamento del watchdog in piu' punti del programma.Dovrebbe essere in un solo punto nel main e MAI nelle funzioni di interrupt.Il tempo di esecuzione di tutto il programma deve essere minore del tempo di chiamata dell'interrupt con tmr0.Infatti se il confronto lo fai nella routine di interrupt e' ovvio che funziona.Se l'interrupt di tmr0 e' di 10 milliSec. e nel tuo applicativo (main) fai il test della variabile X ogni 20 millSec. difficilmente riuscirai a trovare la carrispondenza (o se la trovi, la trovi per caso).Spero di spiegarmi meglio con un esempio.1) poniamo che X sia = 492) nel main leggi X (che ovviamente e' 49) e non trovi corrispondenza.3) scatta l'interrupt tmr0: X=504) trascorrono 10 milliSec. ma tu nel main fai altre cose...5) scatta l'interrupt tmr0: X=516) quando sono trascorsi 20 milliSec. nel main torni a leggere la variabile X, ma ormai hai perso il passaggio.Una prova veloce la puoi fare dando per controllo un intervallo piu' ampio:if ((x>40) && (x<60))Altra prova: aumenta il tempo di tmr0.Facci sapere...Ciao.
Livio Orsini Inserita: 11 luglio 2011 Segnala Inserita: 11 luglio 2011 Per quanto microbasic non sia ottimizzato se 4 righe semplici fanno scattare il watch dog i casi non sono molti:1 - lo "if" non è come lo hai scritto2 - la routine di interrupt senza if rimane incompleta e cicla all'infinito3 - il programma è talmente poco ottimizzato che è necessario rivederlo seriamente. Se il termometro segna febbre si non si cambia non si cambia termometro, cerca una cura adeguata!
RealTime Inserita: 11 luglio 2011 Segnala Inserita: 11 luglio 2011 Fai una misura precisa utilizzando un piedino del micro e l'oscilloscopio. In questo modo avrai una misura precisa del tempo di esecuzione del tuo ciclo "main"RT
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora