Newsgroup: it.hobby.elettronica.digitale
Titolo: Problema Iterrupt PicBasic

Problema PicBasic
Sto leggendo un encoder in quadratura a circa 1Khz
con un Pic 16F628A a 20 Mhz
Le due quadre entrano in PortB (pin 4 e 5) in modo da sfruttare
interrupt
La routine di Int incrementa solo il contatore di impulsi
NB: le quadre dell' encoder sono di circa 1ms
la routines di Int č di pochi us... ci sta tranquillamente
Il conteggio viene visualizzato su un display
Se la visualizzazione avviene dopo alcuni secondi che
l'encoder ha finito di girare il gli impulsi vengono contati
correttamente (so quanti sono)
se visualizzo il conteggio durante la rotazione alcuni impulsi
vengono persi, piu volte visualizzo piu ne perdo...
sembra che la scrittura sull LCD disabiliti l'interrupt
Stesso effetto se esco in seriale...
Ma allora che Interrupt č ???
Puo essere Pic basic che nell istruzione LCDOUT o Hserout gestisca
a suo piacimento gli interrupt ?
Che sia risolvibiile ?
Grazie...
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/


Probabilmente e' risolvibile, ma hai provato a chiedere sul forum della 
Melabs o direttamente alla Melabs, qualche volta ho chiesto direttamente a 
loro e con stupore devo dire che hanno risposto, magari posta anche il 
listato. 

 Ma allora che Interrupt è ???
provo a risponderti io...
E' una grossa limitazione del Picbasic. In pratica se nel momento che si 
verifica l'interrupt il processore è impegnato ad eseguire una pausa o, nel 
tuo caso, scrivere sull'lcd, l'interrupt viene sì acquisito, ma viene solo 
"parcheggiato" (flaggato), non eseguito; non appena il processore finisce di 
scrivere su lcd o qualunque cosa stava facendo, con suo comodo esegue 
l'interrupt con le conseguenze che hai visto...
Se nel frattempo poi ci sono stati x interrupt hardware o di overflow dei 
timer mentre il processore era impegnato, questi vanno persi.
L'unico sistema per risolvere è quello di scrivere il codice di interrupt in 
assembler e inserirlo nel listato racchiuso tra le direttive ASM e ENDASM, 
oppure riscrivere il programma in c . Ad esempio, il compilatore c HI-tech 
non ha nessun problema a gestire gli interrupt.
Questa limitazione è quella che mi ha spinto ad imparare il C, altrimenti 
sarei rimasto felice e contento col Picbasic.
Dai un occhiata al manuale del picbasic, pagina 184, c'è un esempio di 
interrupt in assembler.
Ciao
Alex 

 Che sia risolvibiile ?
Potrebbe essere dovuto al fatto che anche la gestione dell' lcd o della 
seriale utilizzino interrupt.
Non avendo il micro che utilizzi una priorità o una gestione multipla, il 
programma asserva il primo che arriva causando così il difetto di 
funzionamento manifestato.
Non conosco nello specifico il picbasic, ma ho il sospetto che il tuo codice 
potrebbe essere da rivedere.
Prova a postare qualche riga (in particolare la gestione degli interrupt ed 
il ciclo di visualizzazione lcd).
Roberto P. 

 Ma allora che Interrupt è ???
L'interrupt del PicBasic non è un interrupt, dimenticati che esista e vivi 
felice.
Cerca "PBP Instant Interrupt di Darrel Taylor", sono delle librerie 
aggiuntive
create da quel tale e che ti permettono una vera gestione interrupt in 
PicBasicPro.
(non sono sicuro che esistano anche per la serie PIC16, dai un occhio, 
sicuramente per la PIC18)
Marco

 Ma allora che Interrupt è ???


 
Devi utilizzare l'interrupt assembler che è istantaneo come è spiegato 
bene nel manuale e anche nel sito o forum.
Comunque anche in questo modo puoi avere dei problemi se stai eseguendo 
delle istruzioni critiche che richiedo temporizzazioni, devi studiarti 
bene il programma cercando di evitare le problematiche che avresti 
comunque anche scrivendo in asm.

 Alx PD
Se possibile facci sapere come ti rispondono, ho letto un po sul forum ma 
non mi sembra di avere trovato tuoi post sul problema 

 ha scritto nel messaggio news:fmo008$iq3$1...@aioe.org...
