Go Down

Topic: Arduino con RTC e MCP23017 (Read 2 times) previous topic - next topic

Nittola

Salve a tutti. Vi espongo subito il mio problema. Stavo pensando di costruirmi un orologio a tubi Nixie con un Arduino Uno Rev3. Purtroppo, ho bisogno di 16 uscite. Ed è qui che entra in gioco l'MCP23017. Ora però, guardando il data sheet di quest'ultimo, noto che i PIN 12 e 13 sono SCL e SDA, quindi vanno collegati con i rispettivi SCL e SDA di Arduino. Però bisogna anche collegare questi due PIN ai rispetti SCL e SDA dell'RTC. Come faccio? I pin A0, A1 e A2 dell'MCP23017 sono i selettori per le uscite? Come vanno usati?Per favore siate clementi, ancora non ho potuto provare/azzardare niente con Arduino (non ho neanche la scheda e il libro dovrebbe arrivarmi a fine mese)

uwefed

Il bus I2C puó adressare fino a 127 dispositivi. IL RTc e il MCS23017 hanno indirizzi diversi che in parte possono essere impostati con le entrate A0, A1 e A2.
Non hai problemi a collegrae entrambi a  SCL e SDA
Libreria per il MCP23017: https://github.com/adafruit/Adafruit-MCP23017-Arduino-Library
http://www.arduino.cc/en/Reference/Wire

Ciao Uwe



Nittola

#2
Aug 25, 2012, 09:16 am Last Edit: Aug 25, 2012, 09:34 am by Nittola Reason: 1
Ah quindi basta che cambio il segnale in uscita? Cioè devo collegare attraverso una breadboard SCL e SDA sia all'RTC che al MCP23017? Perdona la mia ignoranza

EDIT: Un'altra cosa che non capisco è questa immagine. Perchè i PIN 17, 16 e 15 sono collegati a GND se sono selettori?

leo72


Ah quindi basta che cambio il segnale in uscita?

No, ogni dispositivo I2C ha un suo indirizzo stabilito in HW (si chiama ID) spesso univoco altre volte parzialmente modificabile a seconda dei segnali alto o basso che presenti su alcuni dei sui pin (es. i chip EEPROM).
Devi controllare sul datasheet gli ID di entrambi i dispositivi.

Quote

Cioè devo collegare attraverso una breadboard SCL e SDA sia all'RTC che al MCP23017? Perdona la mia ignoranza

Sì, tutti i pin  SCL e SDA devono essere collegati fra loro, e le linee portate poi ai pin I2C dell'Arduino. Ricordati le resistenze di pull-up da mettere sulle linee, con alimentazione a 5V usa resistenze con valore compreso fra 1,5K e 2,2K.

Quote

EDIT: Un'altra cosa che non capisco è questa immagine. Perchè i PIN 17, 16 e 15 sono collegati a GND se sono selettori?

Si torna a ciò che ti ho detto prima, dando un segnale alto o basso ad un pin (alto = collegato a Vcc, basso = collegato a GND) imposti il pin a 1 oppure 0 (rispettivamente per alto e basso), modificando così l'ID del chip.

Nittola


Si torna a ciò che ti ho detto prima, dando un segnale alto o basso ad un pin (alto = collegato a Vcc, basso = collegato a GND) imposti il pin a 1 oppure 0 (rispettivamente per alto e basso), modificando così l'ID del chip.

Quindi posso collegarlo anche ad altri pin? Basta che imposto l'uscita in HIGH e LOW?

leo72



Si torna a ciò che ti ho detto prima, dando un segnale alto o basso ad un pin (alto = collegato a Vcc, basso = collegato a GND) imposti il pin a 1 oppure 0 (rispettivamente per alto e basso), modificando così l'ID del chip.

Quindi posso collegarlo anche ad altri pin? Basta che imposto l'uscita in HIGH e LOW?

Non capisco cosa vuoi dire. I pin per impostare la parte modificabile dell'ID del dispositivo sono prefissati, generalmente indicati con Ax (x=numero). Non puoi scegliere pin diversi. Per dare il segnale HIGH, letto come "1", colleghi a VCC, per dare LOW, letto come "0", colleghi a GND.

Brunello


Nittola

Scusate, stiamo facendo confusione per colpa mia. Sono un vero ignorante in materia, vi chiedo di essere clementi e un minimo di pazienza. Ritorniamo al problema in origine: vorrei creare un orologio a Tubi Nixie. Ogni tubo dovrebbe avere 11 Pin (0,1,2,3,4,5,6,7,8,9 e il .) + 2 di alimentazione (+ e -). Essendoci 4 tubi Nixie, per pilotarli ho bisogno di quattro 74141 (data sheet). Per pilotare questi ultimi, le porte dell'Arduino Uno non sono sufficienti. Mi conviene usare un MCP23017 o un PCF8574? Spiegatemi il perchè e il funzionamento della vostra scelta. Grazie

Brunello

#8
Aug 25, 2012, 02:29 pm Last Edit: Aug 25, 2012, 03:38 pm by brunello Reason: 1
Non cambia molto. Puoi usare un MCP23017 o  2 x PCF8574
( il PCF8574 ha solo 8 porte )

Oppure degli Shift-Register, come i 74HC595.

Edit:  7441, non 74141

Nittola

#9
Aug 25, 2012, 04:56 pm Last Edit: Aug 25, 2012, 05:06 pm by Nittola Reason: 1
Stavo pensando pure io di usare 2 Shift-Register, ma siccome sono registri a scorrimento, penso che possa esserci del ritardo alla lunga. Comunque io le porte del MCP23017 o dei PCF8574 li controllo con delle librerie ed eventuali comandi giusto?

Brunello

C'e' anche il PCF8575, che dovrebbe essere identico al PCM23017. a parte la piedinatura ( ma non l'ho mai usato e non ne sono sicuro ).

Quote
Comunque io le porte del MCP23017 o dei PCF8574 li controllo con delle librerie ed eventuali comandi giusto?


Giusto.
e i 74hc595 con lo ShiftOut.

Un sistema vale l'altro, comunque non c'e' nessunissimo problema di ritardo, io con gli Shift-Register ci faccio orologi a 10 cifre


Nittola

Ecco qua un abbozzo. Ora devo collegare A2, A1 e A0 al GND dell'Arduino? E un'altra cosa. Quante apparecchiature posso alimentare con Arduino? Devo ancora alimentare l'MCP23017, i quattro 7441 (posso collegarli alla massa che c'è dopo le resistenze? [P.S. Dopo ogni resistenza dovrebbe esserci un LED, ma ho dimenticato di disegnarli...]) e forse un altro Shield per emettere audio

Brunello

#12
Aug 26, 2012, 12:54 am Last Edit: Aug 26, 2012, 01:37 am by brunello Reason: 1
Bello lo schema in un foglio a quadretti... e' tanto vintage...

Ma non dovevi pilotare delle Nixie ?
E che ci fanno tutte quelle resistenze ( con il led che manca ) verso massa ?
le uscite dei 7441 o 74141 vanno al Catodo del.... diciamo.... " Display"

E non ci puoi pilotare dei Led, i 74141 non forniscono abbastanza corrente

Si, i GND vanno TUTTI collegati insieme
Comunque, dato che questi IC sono quasi introvabili e visto che hai a disposizione un microcontrollore, potresti anche pilotarle in multiplexing.
Qui c'e' un esempio con un PIC http://www.elettronicain.it/main/elettronicainsieme/pdf/nixie.pdf, ma in rete se ne trovano a decine .
Cerca " Multiplexed nixie clock " . Cavolo, hanno gia' fatto l'Arduinix

Nittola

Però con un Multiplexer non so se posso mettere una funzione di sveglia...

Brunello

Il multiplexer riguarda quella parte che fa' da interfaccia verso il display.
E' una modalita' piu' complessa di gestione rispetto a delle decodifiche standard, pero' abbatte notevolmente i costi e riduce la complessita' del circuito.

Ai tempi delle Nixie non c'erano microcontrollori programmabili e il tutto veniva costruito con logiche TTL. Pero' a meno che tu non voglia costruire una replica in stile vintage di detto orologio ( e allora Arduino non va' usato ) tanto vale farlo sfruttando al massimo la possibilita' che ti da' la programmazione di un Chip.

Se vai sul sito di  @leo72 ( poco sopra c'e' un suo post e il link lo trovi nella firma ) troverai degli esempi di gestione di un orologio in multiplexing

Go Up