Jump to content
PLC Forum


Wsystem, ovvero nascita di un sistema domotico.


walterword
 Share

Recommended Posts

Livio Orsini

Non certo quella dei politici. :lol:

Significa che, se, ad esempio, avevi programamto le porte come uscite durante l'inizializzazione generale e poi non riesci a leggerle, si è corrotta la programmazione della porta o per disturbi entrati direttamente nello MCP o attraverso la liea I2C.

Link to comment
Share on other sites


quella dei politici non è corruzione ma normale amministrazione e comportamento lecito .

Si è quello che succede che ti dicevo .Puo' essere che togliendo e ridando alimentazione si resetta e nonostante il transistor , il condensatore e la resistenza , succede qualcosa ;in teoria il reset dovrebbe influire sullo stato delle uscite e non sul loro settaggio

Va be comunque devo lavorare sulla tesi e va benissimo anche cosi , altrimenti rischio di star qua tutto il giorno a caricare programmi e perdere tempo

Poi al limite si potrebbe progettare una bella shield di ingressi ed uscite e farla fare come si deve .E' chiaro che tutti i fili , lo stagno , le piste vicine ci sian qualche cosa poco chiaro

Link to comment
Share on other sites

mi fa ancora lo stesso scherzo , tutto ieri sera l'ha fatto , oggi invece dopo averlo programmato non lo fa piu .

Non capisco ....ma credo che ci sia qualcosa nei fili e collegamenti , non ho altre idee :angry:

Link to comment
Share on other sites

Posso suggerire di controllare le masse?

Dalla foto mi pare che tu stia usando la schedina che distribuisce le alimentazioni come "centro-stella" delle masse, prova a rivedere il circuito d' alimentazione, ricordati che quei DC-DC hanno la massa, per così dire, passante, quindi non serve collegarla in uscita, fossi in te cercherei di rendere tutti i collegamenti di alimentazione il più corti possibile usando come centro di massa (sto ripetendo troppo sta parola) lo shield di arduino che hai sopra il due :unsure:

Edited by Wolfy
Link to comment
Share on other sites

Livio Orsini

Parlo per esperienza.

Devi disaccoppiare il +5V dello MCP tramite un filtri LC; metti un induttore di filtro da circa 220 µHy inn srie al +5V direttamente sul punto d'ingresso della scheda, a valle dell'induttore ci metti un elettrolitico da 22µF al tantalio.

Poi bisogna vedere se non ci sono rientri dai vari cablaggi.

Link to comment
Share on other sites

si in effetti le varie schede le ho cablate di corsa , ci possono essere anche dei micro c.c.

Livio , la tensione dle MCP la prendo tra l'induttore e il condensatore giusto ?

Link to comment
Share on other sites

dunque, ho mesos in piedi il protocollo di comunicazione WProtocol tra Android e il WShield-Arduino Due

Finalmente sono risucito a stabilire una connessione Bluetooth stabile lavorando su diversi threads in multitasking lato android .Lato Arduino lavoro in seriale a 115200baud

Android , pur programmandolo in java, è un sistema molto delicato , ci sono motle cose da sapere e capire bene

Ovviamente non bado all'estetica grafica , ma punto sulla funzionalità

Nel video consigliato , per quanto si possa vedere , stabilisco la connessione con il dispositivo BT , poi entro nella pagina con 4 pusanti on-off per accendere direttamente 4 rele' che chiamo luci per dare un senso pratico

I comandi impostano i bit di un vettore che risiede in arduino i quali vengono copiati sui bytes out del dispositivo I2C

A breve altre pagine tra cui la pagina delle visualizzazioni dei dati ambientali e una pagina per impsotare tramite pulsanti alcune funzionalità tipo controllo automatico delle luci tramite sensore luce , chiusura tapparelle tramite sensore pioggia , avviamento irrigazione tramite crepuscolare e ora ect ect , ma queste solo logichette che si possono sempre fare piu avanti

L'importante è costruire l'architettura e la struttura dei due progetti , programmazione ad oggetti e C/C++

93e192bd01691f4f50e3351b6852be44.png

6f2698a81f6eb374f0cbdc93e69b2570.png

642a734270c21aa101fb11218f2e1ee0.png

5ff5903afb42b28266895edd35540012.png

Edited by walterword
Link to comment
Share on other sites

comunque in settimana sostituisco le due schede rele' con due schedine a led , giusto per finire il progetto di tesi

Per i rele' si tratta di gestire la cosa professionalmente con filtri ect che ora non posso proprio inserire per via dei tempi e i relativi costi di modifica :D

Livio , metto due schedine pizza micro output collegate al MCP senza inverter e fine del discorso , sperando che non mi faccia piu lo stesso scherzo .... ^_^

Link to comment
Share on other sites

in teoria il reset dovrebbe influire sullo stato delle uscite e non sul loro settaggio

Il reset agisce sul settaggio delle porte, dopo il reset tutte le porte sono settate come ingressi! E' per questo che se togli l'alimentazione all'MCP e poi la riattacchi ti ritrovi le uscite in alta impedenza.

Mi sono arrivati gli integrati e domani posso iniziare ad utilizzarli.

Ciao.

Link to comment
Share on other sites

Livio Orsini
E' per questo che se togli l'alimentazione all'MCP e poi la riattacchi ti ritrovi le uscite in alta impedenza.

Anche senza togliere tensione si entra in questa configurazione, basta un disturbo sufficientemente potente sulla linea di reset, o sulla stessa alimentazione, per portare lo MCP in configurazione default.

Questa è la ragione per cui i dispistivi I2C son comodi come espansori di I/O ma vanno trattati con le dovute precauzioni EMC.

Io, quando son costretto ad espansioni per il campo, preferisco usare circuitazioni simili a quelle dei PLC che hanno un bus seriale piuttosto robusto. non sto parlando di busa di campo, ma proprio del busa che collega le esapnsioni di I/O alla CPU.

Link to comment
Share on other sites

Livio Orsini

No, se ricordo bene c'è un gruppo RC.

Però quando fai gli assiemaggi volanti con variesche prototipo e schede su millefori, se cisono relè che commutano è facile che ci siano accoppiamenti sui cablaggi di spikes di discreta energia.

Link to comment
Share on other sites

sto cablando una scheda con 16 led e lo schigoso MCP23017

Ho gia tolto le due schede rele' ma il problema rimane .

Guardando l'uscita seriale che di solito scrive ogni 300mS , noto dei cambiamenti di frequenza trasmissiva

Sto verificando uno per uno che i dispositivi I2C funzionino correttamente perche se uno solo di questi e' in rogna mi impesta e rallenta tutto il programma

Sembrerebbe che ci sia qualcosa sulla linea I2C che non va bene

Link to comment
Share on other sites

Livio Orsini

Prova ad abbassare la velocità di trasmissione I2C, meglio partire lenti e salire.

Link to comment
Share on other sites

credo sia gia su 100k

Ma poi per evitare overload ho impostato le varie letture a tempo , per esempio i sensori di temperatura, pressione e umidità li leggo alternativamente ogni5-10 sec , non serve leggerli ad ogni ciclo programma ...

Sto diventando scemo e sto perdendo un sacco di tempo

Link to comment
Share on other sites

Innanzitutto complimenti per il gran lavoro e per aver condiviso scelte e soluzioni.

Vedo che anche tu sei dovuto "uscire dal micro" ormai vale più la app android che tutto il lavoro su micro/arduino e schede varie.

Quanto all'I2C, non ho capito bene il problema (mi sembra tu stia ipotizzano qualcosa nella comunicazione).

Ti lascio alcuni spunti anche se probabilmente sono strade già esplorate

Il driver sw per la porta I2C ha una gestione dell'errore? Cosa succede se qualcosa va storto ?

Fronti dei segnali sono dritti o delle banane arrotondate? Io scenderei di molto rispetto i 100K così i fronti son sicuri

Se il problema è sporadico io innescherei un "bombardamento" con comunicazione continua su I2C per aumentare la frequenza di ripetizione.

Controllerei anche il sw a volte scappa un aggiornamento del buffer del driver I2C mentre non ha ancora terminato la scrittura del buffer precedente

e così ti ritrovi a mandare un "messaggio misto"

Non ho letto la documentazione del microchip ma se è possibile leggere lo stato delle uscite io per sicurezza realizzaerei la procedura di scrittura in due step scrittura e lettura dello stato delle uscite per controllare se tutto è andato a buon fine. Se va sempre storta dopo due tre volte dai un reset al driver d'uscita.

Link to comment
Share on other sites

Livio Orsini
Quanto all'I2C, non ho capito bene il problema (mi sembra tu stia ipotizzano qualcosa nella comunicazione).

Accacca c'è un primo problema dovuto all'espansore MCP. Quando viene resettato, o per alimentazione iniziale, o per apposito segnale sul pin di reset, l'integrato si autoconfigura nella configurazione di default, ovvero con tutte le porte in configurazione ingresso ad alta inpedenza.

Questa configurazione può portare ad avere gli attuatori in condizione non sicura. Ci sono alcuni modi per risplvere il problema all'inizializzazione.

La cosa peggiore capita invece quando per disturbi l'espansore viene resettato. Walter ha già messo una pezza scrivendo sempre il comando di configurazione prima della scrittura. poi, fatalmente, bisognerà agire sull'immunità ECM della scheda, però essendo il suo lavoro di tesi per il momento può anche soprassedere.

Ora sembra che ci sia un ulteriore problema. Durante la trasmissione-ricezione sembrerebbe che sul bus I2C ci siano delle anomalie.

Walter io qualche mese fa ti ho segnaltao un sftware "sniffer" per I2C, te lo ricordo ancora; prova a farlo girare se ci sono errori sulle periferiche te lo segnala sicuramente.

Link to comment
Share on other sites

Ho provato l'MCP23017 con Arduino Uno, con una uscita collegata al reset.
Faccio lampeggiare dei led collegati alla porta A e naturalmente funziona.

Confermo che al reset si comporta come ha detto Livio sopra.

Per accacca:

si possono leggere sia le uscite che il latch associato ed anche i registri di controllo di direzione, se li azzero (porta programmata come uscita) e poi li ritrovo a 0xff vuol dire che il chip

si è resettato.

Ciao.

Link to comment
Share on other sites

Livio Orsini

Da questo punto di vista è meglio il PCF, dove le porte sono uscite di default e per leggere gli ingressi bisonga prima scrivere tutti "1"

Edited by Livio Orsini
Link to comment
Share on other sites

tempo fa avevo ipotizzato i PCF , ma anche loro se togli e ridai l'alimentazione vanno in tilt , se ti ricordi Livio ....e da questo avvo deciso per i MCP

Nel bus I2C ho anche un traslatore di livello apposito 3V3 <-> 5V . Alcuni dispositivi come RTC , barometro sono nel bus 3V3 mentre altri come MCP sono nel bus 5V si vede bene nel disegno di progetto .....

Devo cercare lo sniffer se lo trovo .....

Link to comment
Share on other sites

ho terminato in questo momento la scheda 16 led con MCp23017 e l'ho inserita

al primo colpo non funzionava nulla cosi ho riprogrammato l'arduino ed ora funziona tutto che e' una meraviglia , leggo il barometro , gli ingressi , scrivo sulle uscite ....la seriale come si vede dal les e' veloce

Ognitanto se si impalla stacco e riattacco l'alimentazione dello switch principale e qualche volta sembra ripartire correttamente .Adesso lo faccio andare senza toccarlo ....tuca nient ....per vedere cosa fa.

Ognitanto a livello di distribuzione enel noto dei cali di tensione , la lampadina si attenua leggermente per 1-2 secondi e poi ritorna a luccicare , questo problema lo hanno diverse persone in questa zona ...

Link to comment
Share on other sites

void writeOutput(byte dato)
{
        if(readInput(0) == 0xff) configIO();   // se la porta A è programmata come ingresso la riprogrammo.
	Wire.beginTransmission(device);        // seleziono il dispositivo MCP20317 
  	Wire.write(0x12);                      // seleziono il suo registo GPIOA
  	Wire.write(dato);                      // scrivo il primo byte sulla porta  A
	Wire.endTransmission();
}
Facendo in questo modo il mio circuito riparte correttamente dopo aver tolto e rimesso l'alimentazione del chip.

Il reset è collegato ad una resistenza di pull-up.

Link to comment
Share on other sites

io ho collegato nella nuova scheda a led il reset direttamente ai 5V

I oconsidero di default , in base al datasheet del MCP , che in condizioni normali le porte sono settate come ingressi , comunque ora ottimizzo la cosa come hai fatto tu, cioe oltre a settare come uscite le porte del chip 2 faccio che setto sempre come ingressi le porte del chip 2 , ho due chip ....16 ingressi e 16 uscite ...ora sembra funzionare a tutta birra , da piu di un ora ....mah

Link to comment
Share on other sites

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
 Share


×
×
  • Create New...