Vai al contenuto
PLC Forum


Pulsanti & Pic - come discriminarli ?


Stefano Sormanni

Messaggi consigliati

Stefano Sormanni

Per una applicazione vorrei realizzare una linea con una serie di pulsanti per l'accensione, lo spegnimento, e la dimmerazione delle luci con soli 2 fili (+ 2 fili per l'alimentazione). Quello che non mi riesce fare è come discriminare un interruttore dall'altro. avevo pensato di inserire sul frutto una schedina con un PIC che abbia 4 I/0 con la possibilità di usare 3 di queste per impostare l'indirizzo e l'ultima per la comunicazione.

Però rimane il problema come li descrimino i vari pulsanti ?

Grazie

Link al commento
Condividi su altri siti


ifachsoftware

Mi sembra di capire che vuoi realizzare un bus seriale.

Per fare la discriminazione degli I/O devi assegnare ad ogni zona un indirizzo univoco , poi via software ti fai un protocollo con cui spedisci l'indirizzo + il bit del pulsante premuto.

Per impostare l'indirizzo nel PIC che io sappia hai sostanzialmente 3 strade

1) Usi un DIP-SWITCH da attaccare ad ogni PIC a x poli in base al N° di Nodi che ti servono

2) Imposti il nodo direttamente nel software

3) Siccome hai detto che hai 4 ingressi di cui 3 vanno ai pulsanti e 1 libero , potresti usare l'ingresso libero che normalmente e' alto , quando lo colleghi a massa il PIC si mette in modalita' apprendimento , quando mandi un comando di broadcast (per esempio il classico numero di nodo 255) solo quel pic processa il dato ricevuto dal server che gli imposta l'indirizzo , una volta settato apri il contattino , e tale numero di nodo lo salvi nell'EEPROM

Ciao :)

Link al commento
Condividi su altri siti

Io tempo fa avevo iniziato un progetto simile ... che poi non ho mai portato a termine (come del resto accade per il 99% delle mie idee <_< ) per motivi di tempo.

Comunque la mia idea era molto più semplice (... almeno dal mio punto di vista :D ):

avevo intenzione di realizzare una rete R-2R "distribuita" ... mi spiego meglio (se riesco) ...

avevo pensato a un "bus" a 3 fili (GND, Vref, segnale), che partivano dalla "centrale" (una scheda con un PIC) e andavano a tutti i pulsanti. Il vincolo è che questo "bus" non può avere derivazioni, ma deve necessariamente passare per tutti i pulsanti in sequenza (entra-esci da ogni pulsante). Ogni pulsante collega la linea "Vref" alla linea "segnale" mediante una resistenza "2R" se premuto, oppure collega la linea "Vref" alla linea "GND" (sempre tramite la resistenza) se non premuto. La linea Vref sarà poi interrotta da una resistenza "R" prima di "uscire" dal pulsante per andare al successivo (pertanto non sarebbe corretto chiamare la linea "Vref" ... ad ogni pulsante viene aggiunta in serie una resistenza "R").

In conclusione, sulla linea "segnale" ottengo una tensione "analogica" uguale a:

costante x (P0 2^0 + P1 2^1 + P2 2^2 + P3 2^3 + P4 2^4 + P5 2^5 + P6 2^6 + P7 2^7)

(nell' ipotesi di 8 pulsanti).

dove P0, P1, ecc. rappresenta lo stato (0 o 1) dei pulsanti ... in pratica è un convertitore DAC!

Con il PIC posso convertire il segnale analogico in digitale ... ed ho un byte in cui ogni bit mi da lo stato di un pulsante!

In tal modo posso rilevare anche la pressione contemporanea di ognuno dei pulsanti.

Che ve ne pare? E' un' idiozia o può avere un senso ... ?

Link al commento
Condividi su altri siti

ifachsoftware

Secondo me un segnale analogico che gira in quel modo per la casa e' soggetto a disturbi e penso che ti dara' molti problemi , ritengo l'ipotesi di un segnale differenziale come la RS485 ottimale

Ciao :)

Link al commento
Condividi su altri siti

probabilmente hai ragione ...

anche se il segnale analogico non è un segnale che "trasmette dei dati" mediante modulazioni varie ... in pratica è un segnale analogico che assume livelli costanti.

Certo che con 8 pulsanti si hanno 256 livelli, per cui la "distanza" tra un livello e l' altro è di Vref/256. Se Vref fosse 5 V, la distanza tra i livelli diventerebbe 19.5 mV ... un po' poco!

Se i pulsanti fossero 4 si avrebbe 5/16 = 312.5 mV ... un po' meglio.

Altrimenti si dovrebbe utilizzare una Vref maggiore (ma poi il convertitore del PIC non è più utilizzabile direttamente ....).

Mah, forse è un' idea assurda!

Comunque fai sapere come risolvi il problema che mi interessa!

Link al commento
Condividi su altri siti

Stefano Sormanni

Quindi in riferimento a quanto diceva ifach, dovei inviare in maniera continua un segnale di tipo '12' o '13' dove 1 è il nodo e 2 o 3 è il pulsante.

Ma se io ho più accensioni contemporanee ho un intasamento sulla RS485 ?

Inoltre: il mio circuito dovrà avere anche un convertitore MAX485?

grazie

Link al commento
Condividi su altri siti

ifachsoftware

Ciao Stefano , in pratica se usi una configurazione master/slave devi fare il polling degli slave ogni xx ms.

Il fatto di usare una transceiver RS485 e' legato al fatto che presumo i vari punti luce siano sparsi a vari metri di distanza l'uno dall'altro.

Come alternativa alla RS485 potresti usare dei PIC con CAN a bordo e in quel caso puoi lavorare in multi master ossia invece di fare il polling i vari punti luce ti chiamano quando hanno delle variazioni.

In ogni caso anche se usi dei moduli con can a bordo esternamente devi collegarci un transceiver.

Ciao :)

Link al commento
Condividi su altri siti

Stefano Sormanni

Dato che devo lavorare con dei chip molto piccoli (6-8 pin) e questi non hanno la possbilità di avere il CAN a bordo avevo pensato di discriminare i tasti con dei treni di impulsi di diversa ampiezza: es 25, 50, 75, 100 mS e il ricevitore va a testare il periodo e quindi mi chiude un contatto piuttosto che un altro.

L'unico inconveniente che mi viene in mente è che se contemporaneamente premo due pulsanti sulla stessa linea succede un casino..... :angry:

Potrebbe funzionare?

Link al commento
Condividi su altri siti

ifachsoftware

Stefano , in ogni caso presumo che dovrai andare ad una certa distanza quindi dovrai mettere dei transceiver di potenza (ed e' sempre un chip a parte sia che usi una 485 che un CAN) , il fatto che mandi dei treni di impulsi in contemporanea ti dara' sicuramente dei problemi.

Per quanto riguarda un esempio di rete multimaster esisteva in rete un esempio di tanzilli che si chiamava PIC NET PLUS , ora purtroppo non c'e' piu' in rete , pero' se mi mandi il tuo indirizzo e-mail in privato , ti spedisco i files che avevo scaricato tempo fa.

Per il fatto che devi usare dei chip piccoli , ti posso dire che per esempio il il PIC18F2480 o il PIC18F2580 hanno 28 PIN su package QFN.

Ciao :)

Link al commento
Condividi su altri siti

ciao stefano, io sto realizzando una cosa simile alla tua utilizzando il protocollo Modbus.

I limiti sono le tempistiche. in quanto è un protocollo con scansione a polling......ma per fare quello che vuoi tu penso che vada + che bene.

le specifiche le trovi in internet ed il protocollo è abbastanza semplice da sviluppare.

se ti serve qualcosa chiedi pure

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