Jump to content
PLC Forum

stefanelli.maurizio

PIC 18f2550 Interrupt pin-on-change oltre i 4 ingressi

Recommended Posts

stefanelli.maurizio

Buongiorno a tutti, sono qui a porvi un quesito circa la possibilità di ampliare la funzione di Interrupt pin-on-change oltre i 4 ingressi (RB4:7);

mi trovo in possesso di una serie di PIC18F2550 (18F4550 etc) dove devo monitorare via interrupt 6 o 7 ingressi e poi prendere delle decisioni: questi devono rispondere alla funzione pin-on-change sia sul fronte di salita che di discesa ed in base al valore che questi assumono eseguire le opportune routine.

Link to post
Share on other sites

Livio Orsini

Metti in OR tutti i segnali e il risultato dell'OR lo invii ad un ingresso di interrupt.

I medeismio segnali li connetti anche ai normali ingressi del micro.

Con la routine di servizio dell'interrupt verifichi quale ingresso ha cambiato di stato ed in che direzione,da qui esegui il comando/servizio associato.

Link to post
Share on other sites
max.bocca

Livio ma se fai OR è uno già alto non vedi più la variazione, io avevo fatto una OR dei fronti per espandere gli ingressi e poi collegato anche gli ingressi.

Link to post
Share on other sites
Livio Orsini

Ho semplificato un po',  in effetti bisogna fare or dei fronti; anzi 2 or: uno per i positivi e l'altro per i negativi

 

Link to post
Share on other sites
stefanelli.maurizio

Vi ringrazio della risposta e scusate se mi faccio sentire soltanto adesso: quindi se dovessi monitorare 6 ingressi RA0:5 ho bisogno di un OR magari fatto con 6 semplici diodi veloci per il fronte di salita ed altri sei per il fronte di discesa (bifronte) in modo da generare due differenti segnali di Interrupt da inviare ad esempio su due ingressi RB4:5 per poi leggere lo stato dei pin su RA0:5 al momento dell'evento giusto(?) esistono dei cmos tipo OR multi ingresso (?) se si quali modelli(?) Grazie a tutti

Link to post
Share on other sites
Livio Orsini

Mandi l'OR fronte positivo ad un ingresso di interrupt, e l'OR dei fronti negativi ad un altro ingresso di interrupt.

Devi anche mandare tutti i segnali ad altrettanti ingressi normali per poter discriminare quale dgli ingressi ha avuto la variazzione di stato.

 

A memeoria non ricordo le sigle però esistono Cmos che hanno funzione di OR a 4 ed anche ad 8 ingressi. Oppure puoi usare un array di transitors open collector e realizzare un "wired OR".

Link to post
Share on other sites
stefanelli.maurizio

Ciao a tutti, scusate ma la vedo diversamente: l'interrupt "pin_on_change" viene scatenato da una variazione dello stato su un qualsiasi pin dichiarato come ingresso RB4:7 sia sulla transizione H->L che L->H; quando si verifica un evento c'è un tempo di latenza che ho indicato con TLAT nel quale si risolve l'interrupt e si è pronti nuovamente a catturarne un'altro. Da qui il disegno che ho fatto sotto prende come esempio due segnali applicati a RA0 ed RA1 e sotto ho indicato come questi dovrebbero secondo me essere inviati ad un pin configurato come INT_ON_CHANGE. La porta logica OR può indicarmi che uno dei pin è variato ma non è in grado di indicarmi la variazione nel caso vari anche l'altro, un po come si vede nei due diagrammi temporali piccoli che ho inserito sopra.

20201026_125237.jpg

Link to post
Share on other sites
Livio Orsini
2 ore fa, stefanelli.maurizio ha scritto:

La porta logica OR può indicarmi che uno dei pin è variato ma non è in grado di indicarmi la variazione nel caso vari anche l'altro, un po come si vede nei due diagrammi temporali piccoli che ho inserito sopra.

 

Forse non hai lette attentamente quello che ho scritto.

Si fa l'OR dei fronti e lo si invia all'ingresso di interrupt.

I segnali nel senso di livelli e non di fronti, si inviano ognuno ad una sua porta.

Lo routine di servizio fotografa e memorizza i livelli, si confrontano con i precedenti, ovvero l'ultima memorizazione, e si individuano gli ingresso che sono variati di livello.

A livello asm sono all'incirca 5-6 istruzioni, quindi tutto è fatto in modo rapidissimo.

 

Sono più di 40 che uso questo sitema, a partire dallo 8085 che aveva un solo ingresso di interrupt sensibile ai fronti.

Link to post
Share on other sites
stefanelli.maurizio
10 minuti fa, Livio Orsini ha scritto:

 

Forse non hai lette attentamente quello che ho scritto.

Si fa l'OR dei fronti e lo si invia all'ingresso di interrupt.

I segnali nel senso di livelli e non di fronti, si inviano ognuno ad una sua porta.

Lo routine di servizio fotografa e memorizza i livelli, si confrontano con i precedenti, ovvero l'ultima memorizazione, e si individuano gli ingresso che sono variati di livello.

A livello asm sono all'incirca 5-6 istruzioni, quindi tutto è fatto in modo rapidissimo.

 

Sono più di 40 che uso questo sitema, a partire dallo 8085 che aveva un solo ingresso di interrupt sensibile ai fronti.

Grazie Silvio, appena riesco provo a fare ciò che mi hai scritto; una cosa non mi è purtroppo chiara e ci devo pensare un'attimo: prendo un CD4075 che contiene 3 porte OR a tre ingressi e collego RA0, RA1, RA2 agli ingressi mentre l'uscita a RB4; se uno dei pin di ingresso va alto, l'uscita va alta e quindi scatena l'interrupt che viene eseguito (leggo il valore dei pin RA0-2 e lo memorizzo; successivamente un'altro di questi ingressi va alto mentre l'uscita dell'OR rimane alta e non va in interrupt. Come si fa?

 

 

Link to post
Share on other sites
Livio Orsini
4 minuti fa, stefanelli.maurizio ha scritto:

Grazie Silvio,

 

No, per favore non storpiarmi il nome: io sono Livio e Silvio mi èanche antipatico.:smile:

 

7 minuti fa, stefanelli.maurizio ha scritto:

Come si fa?

 

Non devi fare l'OR degli ingressi ma l'OR dei fronti. Prima estrai il fronte, poi fai l'OR.

Link to post
Share on other sites
stefanelli.maurizio
2 ore fa, Livio Orsini ha scritto:

 

No, per favore non storpiarmi il nome: io sono Livio e Silvio mi èanche antipatico.:smile:

 

 

Non devi fare l'OR degli ingressi ma l'OR dei fronti. Prima estrai il fronte, poi fai l'OR.

Scusa per il nome Livio, ops mi è scappato effettivamente... allora sono proprio arruginito di brutto. Non capisco o non mi rendo conto forse di quale sia la differenza tra l'OR degli ingressi e quello dei fronti: quello degli ingressi lo faccio esternamente al microprocessore con una logica a parte dal quale estrapolo il segnale da inviare al pin di interrupt, oppure leggo gli ingressi del micro ed effettuo l'OR con l'istruzione nel micro. Il fronte è diverso: leggo il pin del micro e quando sale o scende leggo il fronte ma senza l'ausilio di componentistica interna. Livio, mi puoi fare un esempio per favore? come si estrae il fronte di un segnale? dove posso trovare qualche info?

Edited by stefanelli.maurizio
aggiunta
Link to post
Share on other sites
max.bocca

Il fronte puoi crearlo con una rete C R e un diodio.

Per esempio un fronte di salita: Il segnale entra sul condensatore (come un filtro passa alto) e in parallelo alla resistenza puoi mettere un diodo con K a GND e A al punto serie C R.

Normalmente preferisco entrare su porte a trigger per essere più sicuro

Link to post
Share on other sites
Livio Orsini

Ci sono diverse tecniche per estrarre i fronti di commutazione, il più semplece te lo ha illustrato Maxbocca. Se poi interfacci questo circuito con un buffer Schmittrigger hai anche la commutazione secca.

Se hai pazienza ti pubblico qualche schema di rivelatori di fornti. Oppure puoi farti una semplice ricerca in rete con parole chiave come "circuito discriminazione fronti".

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...