Ardu-Aquarium Controller v. 3.3.1

Grazie, ho corretto ed in realtà funziona anche con

byte frecciaalto[8] = {B00100,B01110,B11111,B00000,B00000,B00000,B00000,B00000}; //  vettore che contiene i dati per creare 
                                                                                 //  una freccia rivolta verso l'alto per 
                                                                                 //  evidenziare i dati da impostare nei
                                                                                 //  vari menu

void stampafrecce()          // Creata per semplificare il codice dell'impostazione di data e ora stampa semplicemente due frecce consecutive
  {
   lcd.write(0);
   lcd.write(0);
  }

In realtà questa è una delle tante cose che non ho capito ed ad un certo punto le ho assunte così come sono, in pratica io dichiaro un vettore chiamato frecciaalto, ma nella funzone dico srcivi 0 ???? Qualcuna sa spiegarmi perché?

Riccardo

:blush: Ecco mi auto rispondo, in setup avevo messo questa riga di comando:

lcd.createChar(0, frecciaalto);    // creo la freccia verso l'alto usando i dati del vettore frecciaalto

E' una cosa che avevo fatto chissà quanto tempo fà e l'avevo completamente dimenticata. Scusate la domanda inutile. :blush:

Riccardo

Ciao a tutti, ho ri-iniziato, tempo permettendo a lavorare sul controller, e siccome uno dei problemi principali che ho è la reattività dei pulsanti, ho deciso di iniziare da loro, cominciando dall'HW, in pratica, a parte le funzioni di acquisizione dei dati le funzioni che poi girano in continuazione quando il controller è operativo per il momento sono quella di mantenimento della temperatura dell'acqua e di gestione del fotoperiodo per entrambe le linee luci (sono entrambe da rivedere, soprattutto quelle delle luci). Bene se faccio girare tutto non riesco più ad utilizzare i tasti, devo insistere parecchio prima che finalmente li legga, se commento le funzioni invece i tasti ricominciano a funzionare perfettamente, questo mi ha fatto capire che allo stato attuale delle cose, più implemento funzioni e più il problema diventerà evidente.

Avrei deciso quindi di sfruttare il piedino int del pcf collegato al pin 2 di arduino, per forzare la lettura dei tasti attraveso l'interrupt, anche se questo significa abbandonare la libreria IOexp e riscrivere una bella fetta di codice.

Secondo voi è la giusta strada?

Inoltre prima di iniziare a scrivere righe e righe di codice, volevo essere sicuro di sfruttare al meglio bus I2C, così seguendo le istruzioni di Leo in quest'altro topic (http://arduino.cc/forum/index.php/topic,138882.60.html), ho sostituito lel resistenze di pull-up del bus (prima usavo 10k), prima con valore di 2,2k e poi con valore 1k, la corrente misurata sul bus corrisponde rispettivamente 2,2 mA e 0,5mA, purtroppo non le ho da 1,5k ma i valori misurati corrispondono effettivamente ai calcoli così come suggeriti da Leo, quello che non mi torna è che pensavo seguendo i consigli sia di PaoloP che di LEO che disabilitando le pull-up interne, avrei visto i valori di corrente cambiare, invece non cambia nulla, con o senza pull-up la corrente misurata è sempre la stessa… Mi viene il dubbio che l’attivazione delle pull-up influisca solo sulla frequenza di lavoro del bus, ma non avendo un oscilloscopio, non posso verificare… sempre che non abbia dette una Riccardata.

C'è qualcuno che mi sa dire qualcosa?

Grazie Riccardo

Le pull-up interne vengono attivate dalla libreria con la chiamata a Wire.begin(); quindi qualsiasi settaggio per disabilitarle deve essere messo dopo questo comando.

Per quando riguarda la libreria IOexp non credo ci debba rinunciare. Devi solo attivare il controllo dei pulsanti tramite interrupt, ma utilizzando sempre la libreria per leggerne lo stato.

Ciao, come da suggerimento ho commentato le righe 76 e 77 di twi.c come da codice che segue:

// digitalWrite(SDA, 1);
// digitalWrite(SCL, 1);

ma nessuna variazione, poi ho provato a non commentarle, ma cambiando il valore di attivazione ovvero:

  digitalWrite(SDA, 0);
  digitalWrite(SCL, 0);

ed ancora nulla, quindi ho inserito le due righe dopo wire.begin();

  wire.begin()
  digitalWrite(SDA, 0);
  digitalWrite(SCL, 0);

ed ancora nulla, in pratica ora sto usando pull-up da 2,2k e quasiasi comando io usi per disattivare le pull-up interne, misuro sempre 2,2 mA, sto usando Arduino rev. 3.

Non so cosa devo fare o dove sbaglio, please help me :~

Riccardo

Controlla che sui device attaccati al bus non ci siano integrate delle resistenze.

Ciao PaoloP, grazie per il tuo interessamento,
sul bus I2C sono collegati:

  • 1 PCF8574AP per il display
  • 1 PCF8574AP per i tasti
  • 1 DS1307

Ho letto/cercato di decifrarne i datasheet, ma non leggo o comunque non ho trovato nulla, li metto in allegato, voi siete sicuramente più bravi di me…

Riccardo.

DS1307.pdf (298 KB)

PCF8574_4.pdf (135 KB)

non riesco mica ad aprire gli allegati.. :(

Ciao,
Sto fugando gli ultimi dubbi sull’HW del controller,
Mi sono imbattuto in questo tutorial: http://www.laurtec.it/brief-notes/programmazione-pic/125-bn0013-it-pcf8574-i2c-io-expander-libreria-ed-utilizzo
Ed ho utilizzato lo schema in figura 4 per attivare il led di un fotoaccoppiattore (4n35) utilizzando un pcf, poi ho collegato il fotoaccoppiatore alla scheda relé ed ha funzionato alla grande,
Questo mi fa venir voglia di abbandonare lo shift register in favore del pcf con i fotoaccoppiatori per pilotare i relé, il circuito si complica ma guadagno altri tre pin liberi.
Voi cosa ne pensate?
Quali accorgimenti dovrei attuare?
Non impegno troppo il bus I2C con tre pcf e rtc che lavorano tutti insieme?

Riccardo :slight_smile:

Non impegno troppo il bus I2C con tre pcf e rtc che lavorano tutti insieme?

e perche’ ?.. puoi collegare un centinaio di dispostivi I2c. Ci sono problemi di capacita’ totale, ma non saranno certo 4/5 dispositivi a far superare questi limiti
D’altronde dialogano solamente uno alla volta con il Micro

Ciao brunello, In effetti è così, ho lasciato in funzione il circuito montato tutta la notte con una funzioncina random che attivava a casaccio i fotoaccoppiatori senza riscontrare problemi, sarei quasi orientato a togliere lo shift register anche se si complica leggermente il circuito aggiungendo 8 fotoaccoppiatori...

Riccardo

ciò che non c'è non si può rompere...

occhio che gli indirizzi i2c siano tutti diversi. dato che l'i2c usa indirizzi a 7 bit (l'8 bit indica se stai leggendo o scrivendo), hai 2^7 indirizzi = 128, meno gli indirizzi riservati, fanno 112 indirizzi usabili: http://www.i2c-bus.org/addressing/

Ciao a tutti,
questa settimana sono stato assente dal forum ma ho comunque eseguito delle modifiche al’’HW del controller.

lesto:
ciò che non c’è non si può rompere…

occhio che gli indirizzi i2c siano tutti diversi. dato che l’i2c usa indirizzi a 7 bit (l’8 bit indica se stai leggendo o scrivendo), hai 2^7 indirizzi = 128, meno gli indirizzi riservati, fanno 112 indirizzi usabili: Addressing - I2C Bus

Si Lesto grazie, come puoi vedere, ho impostato un indirizzo diverso per il pcf che comanderà la scheda relé.

Ed ecco le modifiche

Ho montato la UNO rev. 3, spostato i cavi del bus I2C sui rispettivi pin, seguito il consiglio di PaoloP in merito all’utilizzo dei PWM e spostato quindi le linee luci sui pin 5 e 6, per finire avendo adottato un PCF anche per comandare la scheda relé, è sparito lo shift register e di conseguenza si sono liberati i pin 7,8, e 9, ecco la foto:

Sistemati i condensatori per il debouncing HW, ho rivestito i reofori con guaina arancione perché avevo paura di falsi contatti, sono quelli azzurri a sinistra del pcf utilizzato per la lettura dei tasti, Come ho già scritto, ho tolto lo shift register, in favore del pcf, è quello tutto a destra, ecco la foto:

Vista del particolare dei collegamenti per i fotoaccoppiatori, chissa se esiste un unico integrato tipo un array di fotoaccoppiatori… io l’ho cercato, ma non sono stato capace di trovarlo, ma sono una vera schiappa in questo senso… :blush:

Ed in ultimo una vista complessiva della bread e di tutti i componenti:

Il software, non ha subito ancora grossi cambiamenti, ho solo inizializzato le uscite del pcf in setup e sostituito i comandi per lo stesso all’interno della funzione per il mantenimento dell’acqua, lo metto in allegato, ma va ben ripulito, a breve aggiorno anche i post di presentazione.

Come sempre, spero nei vostri pareri/consigli/critiche… :slight_smile:

Grazie in anticipo Riccardo.

acquarium_controller.ino (61.4 KB)

Cavolo, davvero complimenti per il lavoro, con le bredboard non è semplice (almeno per me :slight_smile: ) essere così puliti. Avevo iniziato tempo fa a sviluppare un controllo alba/tramonto, fasi lunari e temperatura, ho un marino tropicale ed ero all’inizio del percorso e fatto tutto o quasi con il comando IF e poco più, ma poi ho lasciato perdere per diversi motivi. Mi piacerebbe seguire ora il vostro progetto e sto cercando di capire cosa mi manca della parte HW (quasi tutto) e soprattutto non vedo citazioni allo sketch per poter studiare empiricamente le diverse funzionalità o avere comunque una base dalla quale partire. Non sarò sicuramente d’aiuto visto che sono quello che ne capisce di meno e spero appunto di poter imparare da voi.

Ciao, lo sketch è in allegato al mio ultimo reply ed al topic che descrive il funzionamento del SW, in quanto ad essere utile, lo si può essere in tanti modi, anche solo testando quello che viene fatto per esempio, se ti allinei lato HW, poi è tutto più facile.

Ciao Riccardo

riciweb: Ciao, lo sketch è in allegato al mio ultimo reply ed al topic che descrive il funzionamento del SW, in quanto ad essere utile, lo si può essere in tanti modi, anche solo testando quello che viene fatto per esempio, se ti allinei lato HW, poi è tutto più facile.

Ciao Riccardo

Come in privato rinnovo i complimenti per il lavoro svolto, in particolare per la chiarezza di come svolgi il lavoro eseguito, ma soprattutto per la gentilezza e non meno per pazienza di sopportarmi :) Grande Riccardo

--> http://dspace.dial.pipex.com/isocom/csm170.htm Anche se non credo si trovino in giro.

Comunque, mi puoi spiegare il motivo dei fotoaccoppiatori? Le tensioni di funzionamento non sono le stesse? L'isolamento dalla 12V e dalla 230V non l'hai già fatto sulla scheda relè?

Eh si… sono cieco :smiley: non l’avevo proprio visto. Sono giorni che sto girando intorno ad un nuovo acquisto di materiale, prenderò sicuramente spunto da te, è verissimo, se si potesse lavorare sullo stesso progetto in più persone aumentando quindi le prove pratiche da un lato e la ricerca dall’altro sarebbe sicuramente un lavoro molto migliore che prendere sempre spunti diversi ed adattarli ogni volta, naturalmente ognuno ha le sue necessità, ma lo vedo un progetto ben strutturato e per un utente medio tipo me andrebbe più che bene quindi interessatissimo a seguirvi e per un più esperto, partendo da una buona base non ci sarebbe nessun problema ad espandere il tutto. Complimenti ancora e grazie per il lavoro che stai/state facendo, davvero impeccabile sia per la fattura che per la disponibilità che dimostrate.

PaoloP: --> http://dspace.dial.pipex.com/isocom/csm170.htm Anche se non credo si trovino in giro.

Comunque, mi puoi spiegare il motivo dei fotoaccoppiatori? Le tensioni di funzionamento non sono le stesse? L'isolamento dalla 12V e dalla 230V non l'hai già fatto sulla scheda relè?

Ciao PaoloP, grazie per la ricerca, ora vedo di approfondire. I fotoaccoppiatori, sono un mezzo per poter usare il PCF, che da solo non riesce a pilotare i darlington, collegato come ho fato io prendendo spunto dalla figura 4 di questo link http://www.laurtec.it/brief-notes/programmazione-pic/125-bn0013-it-pcf8574-i2c-io-expander-libreria-ed-utilizzo mandando a zero le uscite del pcf che mi interessano mando 5v pieni col giusto amperaggio ai darlington che così funzionano, quindi non sono un traguardo ma un mezzo. Ad ogni modo i vantaggi sono che mi sono liberato dello shift register, che se anche fino ad ora funzionava bene, ad ogni avvio mi faceva sfarfallare tutti i relé, ho guadagnato tre pin liberi ed infine con la sola libreria IOexp leggo sia i tasto che piloto i relé, c'è anche che così ottengo un doppio isolamento galvanico e la cosa non mi dispiace affatto :D

Ad ogni modo grazie PaoloP, sei sempre prezioso.

Dandovino: Eh si... sono cieco :D non l'avevo proprio visto. Sono giorni che sto girando intorno ad un nuovo acquisto di materiale, prenderò sicuramente spunto da te, è verissimo, se si potesse lavorare sullo stesso progetto in più persone aumentando quindi le prove pratiche da un lato e la ricerca dall'altro sarebbe sicuramente un lavoro molto migliore che prendere sempre spunti diversi ed adattarli ogni volta, naturalmente ognuno ha le sue necessità, ma lo vedo un progetto ben strutturato e per un utente medio tipo me andrebbe più che bene quindi interessatissimo a seguirvi e per un più esperto, partendo da una buona base non ci sarebbe nessun problema ad espandere il tutto. Complimenti ancora e grazie per il lavoro che stai/state facendo, davvero impeccabile sia per la fattura che per la disponibilità che dimostrate.

Fa niente, non ti preoccupare, se sarai dei nostri non può farmi altro che piacere :)

Ciao Riccardo.

Si si ;) giusto il tempo di ordinare tutta la 'brodaglia' :D avete a proposito qualche dritta? A parte Arduino stesso per il resto della componentistica dove si può cercare senza fare mille ordini in negozi diversi?