Vai al contenuto
PLC Forum


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


stefanelli.maurizio

Messaggi consigliati

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 al commento
Condividi su altri siti


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 al commento
Condividi su altri siti

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 al commento
Condividi su altri siti

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 al commento
Condividi su altri siti

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 al commento
Condividi su altri siti

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 al commento
Condividi su altri siti

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 al commento
Condividi su altri siti

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 al commento
Condividi su altri siti

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 al commento
Condividi su altri siti

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 al commento
Condividi su altri siti

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?

Modificato: da stefanelli.maurizio
aggiunta
Link al commento
Condividi su altri siti

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 al commento
Condividi su altri siti

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 al commento
Condividi su altri siti

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 account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...