Jump to content
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




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


Recommended Posts

stefanelli.maurizio
Posted

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.


Posted

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.

Posted

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.

Posted

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

 

stefanelli.maurizio
Posted

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

Posted

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

stefanelli.maurizio
Posted

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

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

stefanelli.maurizio
Posted
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?

 

 

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

stefanelli.maurizio
Posted (edited)
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
Posted

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

Posted

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...