Vai al contenuto
PLC Forum


creare un bus di più segnali con arduino si può?


kym

Messaggi consigliati

Non so se si può con facilità fare quello che voglio fare, l'idea mi è venuta da un bus su un veicolo che son riuscito a studiare.

 

Due centraline collegate con un solo filo tra di loro gestiscono poi diversi ingressi-uscite analogiche:

 

stupidamente vorrei che con un solo filo poter leggere lo stato di 6-7 porte senza tirare 6-7 fili o più.

 

Si può fare una roba del genere? 10 porte un filo un altro micro un display e mi dice che succede a queste 10 porte: alte, basse in digitale o la tensione che misura se in analogico o se voglio le comando io sempre tramite un solo filo.... 

Link al commento
Condividi su altri siti


Si l'ho visto ma è complicato da gestire e a me non interessa interfacciarmi con il bus dell'auto anche perchè dove lo devo mettere non c'è bus:superlol:

Voglio qualcosa di sempliciotto, per utilizzare cavi già presenti ma vorrei molti canali.......

 

Ad esempio un atmega64 poi anche dei tiny84 in giro sempre collegati al master con un filo e basta.

Link al commento
Condividi su altri siti

Per arduino la cosa più semplice è usare il bus I2C che ha già librerie pronte e reperibili a 13 per dozzina. Poi usi un classico 8574 che è una porta semi biderezionale, che può essere configurata. Ha 8 linee che possono essere ingressi o uscite secondo comando di configurazione; ha 3 linee di indirizzo quindi ce ne stanno 8 sul medesimo bus.

Se usi un di quei display I2C, come quelli che usa Luigi, quel display usa proprio un  8574 per portare i dati ed i comandi che di solito ti occupano 6 linee di arduino.

Link al commento
Condividi su altri siti

dici che è una cosa semplice da fare o divento matto?

mi leverebbe d'impiccio tantissimo poterlo fare altrimenti devo smontare tutto e far passare cavi e cavi.....

Link al commento
Condividi su altri siti

Ci sono già tante biblioteche pronte.

Funziona benissimo senza diventatci matti.

Io lo avevo anche provato per il gusto di vedere se andava bene.

Quando ho un po' tempo e, soprattutto, voglia ricerco lo sketch di prova che avevo fatto e lo metto sul forum.

Link al commento
Condividi su altri siti

Scanner

Prova

 

Questi sono i 2 sketches di arduino. Il primo è file per fare il test sul bus I2C, lo si trova in rete e l'ho verificato e funziona egregiamente.

Il secondo è il mio sketch per provare a leggere e scrivere il PCF8574

Link al commento
Condividi su altri siti

vediamo se ho capito: hai usato il driver dei display I2C come se scrivi in un ldc ma per avere una logica ON-OFF ....

giusto?

 

E quindi, si possono mettere sul medesimo BUS (un atmega32/64 stand-alone) fino ad 8 .....   quindi 8 x 8 .... 64 I/O ..........

 

NON male .........

 

Curiosità tu cosa hai fatto esattamente?

 

Adesso aspetto la decina di schedine che ho ordinato e mi metto all'opera.

Accidenti oggi ho cercato i componenti per fare il "dimmer" con lo zerocrossing non ho trovato una mazza, finchè non mi arrivano sono fermo, accidenti.

 

Ed il bello che i trasformatori incapsulati non li riesco a trovare ad un buon prezzo.

 

Link al commento
Condividi su altri siti

Quote

Un piacciugo resinarli ci ho provato una volta .... mai più....

Mi è piaciuta l'espressione .... :superlol:

 

Quote

3,5A o 3,5VA ?

E' vero che non è rivolta a me 'sta domanda ? dimmi di si !

Link al commento
Condividi su altri siti

Si a te a te non l'hai detto..... :P

 

Livio, nei modulini che si trovano già fatti per le espansioni ho letto una cosa che mi ha lasciato perplesso:  ogni 2 secondi manda basso/alto le uscite

 

Che vuol dire????  se non è collegato a nulla?

 

Dici che è semplice fare una cosa così:

 

micro che mi legge degli stati alto/basso   ----------------------------------------------------------- BUS -------------------------------------------- 2/3  PCF8574 uno che ripete alcuni degli stati letti dal micro e gli altri che dal programma leggono e mettono su alto e/o basso altri I/O in base a cosa fa il codice..

 

è semplice la cosa?

tu che esperimenti hai fatto con queste espansioni? hai comandato a distanza senza problemi come se programmassi le uscite dirette sul micro?

 

affidabilità? problemi?

 

io ci voglio collegare tutta la sensoristica aggiunta e alcuni comandi non critici posteriori e tirare 26 cavi è un suicidio così utilizzerei 2 dei 5 che ho già, la +12 già c'è (+15 & +30 per gli stati) devo anche discriminare l'alternatore in carica o non, stavolta lo voglio fare in modo serio (altro che gli scatolotti che te la mettono in comunicazione immediata all'ACC), con ritardo di commutazione e tasto emergenza collegamento seconda batteria per avviamento 5 secondi, e poi mi è venuta in mente la possibilità di dirgli se i volt della principale scendono sotto una certa soglia collega immediatamente la seconda batteria e tramite un pin dell'allarme GPS (furto carburante che non uso) mi manda un sms per avvisarmi.

 

Far passare tutti sti segnali è un casino se il bus funziona + un attimo realizzare tutto.

 

 

Link al commento
Condividi su altri siti

Senti fai le cose come si deve.

Prima ti leggi il datasheet del PCF8574, te lo studi bene e poi ne parliamo. Non posso spiegarti come fare se non sai nemmeno di cosa si sta parlando.

Di queste periferiche di In/out su bus I2C ce ne sono parecchie, ad esempio ci sono quelle della Microchip che ha usato Walterword. Il PCF8574 è il più facile da usarsi.

Link al commento
Condividi su altri siti

kym , invece di perdere tempo qua a fare le faccine e i ribaltamenti , guardati in giro , magari con google ...e troverai miliardi di cose su I2C 

Poi in base a quello che devi fare le modifichi , le riscrivi oppure le usi come sono sono .

Non c'e' miglior cose che cercare e provare 

Livio non ha tempo . è sempre impegnato con centinaia di progetti , non può scriverti i codici ;)

Link al commento
Condividi su altri siti

Non è che volevo un codice, forse mi avete frainteso.... volevo capire l'applicazione che aveva fatto lui per farmi un idea, solo descrizione ed in quale situazione ha dovuto usare espansioni tramite bus e se quello che voglio io è fattibile o simile.... anche da te, visto che l'hai fatto.

 

Io non ho modo di fare prove ancora perchè non ho il modulino in mano... ho visto che c'è un sacco di roba in giro ma tra l'esserci un sacco di roba e che sia poi funzionante ci passa l'oceano.... senza fare prove....

 

quello volevo sapere da lui, anche perchè, lui o tu non siete nella mia testa quindi non sapete cosa voglio fare, nemmeno volendo potreste scrivermi un codice :)

ogni caso è differente ed il mio, centra proprio niente con quello che fate voi, ovvero l'automazione industriale da quel che ho inteso.

 

PS:   ad esempio la libreria ledfader (credo che è stra-conosciuta) funziona benissimo per carità, ma se comandi con non più di 3 pulsanti/azioni altrimenti dalla 4 in poi vengono tranquillamente ignorate, son diventato scemo a capirlo pensavo di sbagliare io....

 

per capirci:  array led su uscita pin 10

 

5 ingressi logici che corrispondono a contatti LOW/HIGH

 

1 se low accendi con fading A

2 se low spegni con fading B

3 se high spegni con fading C

4 se low accendi con fading D

 

la 4 non funziona!   se nell'istruzione però ci metti altri comandi vengono eseguiti perfettamente ma il comando del led, anche su altro pin non funziona se cancello esempio la 1 la 4 funziona perfettamente..... è un bug credo non so....  non potevo usare il delay perchè mi blocca tutto e lo spegnimento lento (15 secondi di fadeout) deve essere interrompibile ed essere immediato se il 3 diventa high.

 

ho provato in tutti i modi a riscriverlo cambiando il valore del fading per ovviare (prima erano 8 istruzioni) ma niente da fare, dalla 4 non va più niente.

 

 

 

 

 

Link al commento
Condividi su altri siti

io  ho implementato I2C varie volte , su micro MCP , su Arduino ed ora sto scrivendo un porting su orange pi .

Ci sono librerie per gestire I2C a diversi livelli, ci sono anche librerie per gestire uno specifico device che sia PCF o MCP23017 , dipende da cosa devi fare

In questo file, per esempio, scrivo tutte le uscite del WSystem su I2C

#include <Wire.h>

.................
  
void setup()
{
  Wire.begin();                                                 // inizializzazione  I2C bus come master
  delay(50);
  configOutputI2C();
}
  
void loop()
{ 
 .....................
  writeOutput();
}  
  
void writeOutput()
{
	
	for(int j=0;j<MAXOUTPUT;j++)                      
	{
		 dataApp.I2Coutput[j]=0x00;
	}
	
	lenI2COutput=sizeof(dataApp.myOutput)/8;
	for(int i=0;i<lenI2COutput;i++)                        // per ogni byte del vettore 
	{
		for(int j=0;j<8;j++)                          // per ogni bit del byte del vettore
		{
			 dataApp.I2Coutput[i] |=dataApp.myOutput[j + (i*8)] << j;
		}
	}
	
	for(int j=0;j<lenI2COutput;j++)                          // per ogni byte output
	{
		configOutputI2C();
	    
		Wire.beginTransmission(0x21);                     // seleziono il dispositivo MCP20317 con indirizzo 0x21
	    Wire.write(0x12 + (byte)j);                       // seleziono il suo registo GPIOA e GPIOB
	    Wire.write(dataApp.I2Coutput[j]);                 // scrivo il primo byte sulla porta  A e B
	    Wire.endTransmission();
	  
	}
	
}  
  
void configOutputI2C()
{
	Wire.beginTransmission(0x21);                                 // chip MCP23017 impostato come uscite digitali
	Wire.write(0x00);                                             // registro IODIRA  1° byte del chip
	Wire.write(0x00);                                             // impostato come uscite digitali , porta A
	Wire.endTransmission();
	
	Wire.beginTransmission(0x21);
	Wire.write(0x01);                                             // registro IODIRA  2° byte del chip
	Wire.write(0x00);                                             // impostato come uscite digitali , porta B
	Wire.endTransmission();
}  

 

Ricordati che se usi un MCP23017 , l'indirizzo minimo impostato nel dispositivo è 0x20 , per cui se usi uno dei 3 dip switches di indirizzo esterno devi fare la somma...questo spiega perchè io uso 0x21 come indirizzo 

ciao

Walter

 

Link al commento
Condividi su altri siti

La mia applicazione penso sia fuori da quelle classiche oltretutto, e me lo conferma quello che mi hai postato.

Forse è la più banale, ma forse è quella meno usata e quindi devo veramente partire da quasi zero.

Io userò il PCF8574  (ne ho ordinati diversi).

 

nel mio caso deve essere proprio una espansione delle uscite con la comodità di andare a fare ciò lontano dal micro master di qualche metro passandosi due fili anzichè uno per ogni I/O .....

 

Appena mi arrivano i moduini inizierò a fare un pò di prove, se riesco a fare qualcosa di affidabile mi evito di smantellare mezza macchina e portare un sacco di fili tra davanti a dietro.

 

Ho letto che si può fare anche unedo più atmega con apposito codice ma pare sia più "debole" e critico come sistema almeno leggendo in giro pare che la soluzione con i pcf sia più "sicura" e più versatile.

 

Una curiosità:  distanza tra master e i vari slave ?

 

ciao

Link al commento
Condividi su altri siti

I2C  non dovrebbe supera l'rodine del metro o giu di li , e in teoria in base alla lunghezza fisica andrebbero dimensionate le resistenze di pull up tra i due segnali  clock e dati e i 5V .Se usi un arduino due che lavora a 3V3 oppure raspberry ed affini , devi utilizzare un convertitore 3V3 - 5V TTL  per il bus .

 

https://github.com/skywodd/pcf8574_arduino_library

Link al commento
Condividi su altri siti

Uso direttamente atmel328 stand-alone.

I 5 volt e la massa li prendo da qualunque parte tanto l'alimentazione è dello stesso impianto.

Clock e dati "forse" ci sarà da ritoccare le resistenze son almeno 3 metri, è da provare sul campo meno male che il filo che ho è schermato.....   no niente 3,3V tutto 5V  (atmega stand alone o arduino minipro5V).

 

Ho trovato un link interessante per la funzione che interessa a me, sono un pugno di comandi, ma finchè non provo non credo che sia così semplice.

 

Se funziona così bene, faccio delle prove anche con metrature più importanti, 35 metri vediamo se riesco a comandare le luci del giardino a distanza via BUS.....

Anche li ci arrivo con del cavo schermato con un pò di fili liberi (abbondo sempre si sa mai) dall'impianto di allarme, ne dovrei avere almeno 5 liberi son arrivato con due 8) giusti per fare la prova, se funziona seziono i lampioncini in giardino uno ad uno e faccio qualche gioco di luce comandato da dentro casa, figata!!!!

 

Alla scatola dove arrivo con i fili di fianco ho l'altra scatola con i fili a stella dei 9 lampioncini e tutti i vari segnapassi più fontanella elettrica, albero di natale con più prese e qualche presa in giro per il giardino tutte con fili in abbondanza, un bel pcb con un pò di relè e ci esce un giochetto di luci simpatico in 20x30x10 ai voglia a mettere relè!

Link al commento
Condividi su altri siti

35 Metri te li scordi con I2C , è un bus seriale con lo scopo di mettere in comunicazione tra di loro diversi dispositivi  che stiano nei paraggi.

Anche per 3 Mt non lo farei ...secondo me a te serve qualcosa tipo RS485 , modbus o altro protocollo che puoi anche crearti . 

Link al commento
Condividi su altri siti

Quote

.secondo me a te serve qualcosa tipo RS485 , modbus o altro protocollo che puoi anche crearti . 

 

Concordo!

I2C è fatto per lavorare con circa 1 m al massimo di bus, poi i segnali si degradano.

Link al commento
Condividi su altri siti

Voglio provare con I2C ho visto che ci sono degli extender che aumentano la possibilità sia di usare più slave sia come metratura del collegamento.

Diminuiscono di 10 volte la perdita dei 400pf sulla linea, qualcuno dice che con degli extender ogni 10/15 metri ha superato tranquillamente i 50metri.

http://pdf1.alldatasheet.com/datasheet-pdf/view/15878/PHILIPS/P82B715.html

 

Se riesco faccio passare a spezzoni e metto gli estender alimentandoli a 12V, forse il sistema è più pratico del rs485 se non riesco passo direttamente a rs485... anche li ci sono i modulini già fatti pronti per arduino a 50 cent cad.

 

Non ho ben capito la storia di mettere un NE555 pe sincronizzare il segnale di start quando vuoi usare 4 fili per avere la possibilità di un centro stella con tutti che possono impartire comandi anziche avere un solo master e tutti slave.... Interessante questa cosa, in pratica si potrebbero avere più punti di controllo a 4 fili e gli slave a 2 fili, per me un mondo nuovo. Ma questo è un gioco per passare il tempo ad agosto, quello che mi serve è 2-3 metri I2C in auto e spero li terrà modificando solo le resistenze o anche li metto una coppia di extender, devo provare sul campo come si comportano.

 

 

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