Pages: [1] 2   Go Down
Author Topic: Arduino con RTC e MCP23017  (Read 1955 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 1
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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)
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21254
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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


Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
« Last Edit: August 25, 2012, 02:34:44 am by Nittola » Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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


Offline Offline
Newbie
*
Karma: 1
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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


Tuscany
Offline Offline
Edison Member
*
Karma: 66
Posts: 1970
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset



* bus_I2C.png (9.14 KB, 768x384 - viewed 73 times.)
Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Tuscany
Offline Offline
Edison Member
*
Karma: 66
Posts: 1970
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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


* IcBus.png (30.97 KB, 873x1164 - viewed 64 times.)
« Last Edit: August 25, 2012, 08:38:00 am by brunello » Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
« Last Edit: August 25, 2012, 10:06:40 am by Nittola » Logged

Tuscany
Offline Offline
Edison Member
*
Karma: 66
Posts: 1970
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Tuscany
Offline Offline
Edison Member
*
Karma: 66
Posts: 1970
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: August 25, 2012, 06:37:44 pm by brunello » Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Tuscany
Offline Offline
Edison Member
*
Karma: 66
Posts: 1970
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Pages: [1] 2   Go Up
Jump to: