Salve a tutti ragazzi,
avendo acquistato una considerevole vagonata di PC8574, avrei pensato di realizzare un port expander, per ora piloterebbe dei led alle sue 8 uscite, ma in futuro magari perchè no...appoistamente ridimensionate le uscite anche dei relè.
Per la parte di programmazione non c'è problema..appena pronto il circuito funzionante ho già in mente come realizzare il codice grazie alla lib Wire.
Quello che chiedo è una piccola mano col circuito elettrico visto che a dimensionare correnti etc sono un cane (chiedo scusa ai cani).
Allego lo schema che ho realizzato
il pcf non ha abbastanza corrente da dare per accendere un led.
Invece riesce a succhiarne tanta. Metti l'anodo (gamba lunga) di ogni led a 5v con una resistenza in mezza (220 ohm va più che bene) e il catodo (gamba corta) nell'uscita del pcf.
Per accendere il led devi abbassare la porta del pcf.
Hai ragione , il pFC8674 non ha uscite simmetriche, ma puó dare i 25mA specificati solo se l'uscita é a massa percui uscita LOW. Se colleghi l' utenza come proposta da Whole Ti limita la corrente a qualche centinaio di µA.
Anche le resistenza da 330 Ohm vanno bene per limitare la corrente dei LED.
guarda quanta corrente possono assorbire gli integrati, se il valore massimo è maggiore della corrente del diodo allora metti una resistenza pari a (5v - Vd)/Id dove Vd e Id sono rispettivamente la caduta sul diodo e la corrente che lo attraversa.
Altrimenti se la corrente assorbita è minore di quella del diodo dovrai tenerti un po' sotto a questa per far funzionare il tutto senza preoccupazioni. A occhio farei un 10%. quindi la formula sarà (5V-Vd)/(Ipcf - 0.1Ipcf)
Open Drain: per i FET
é la stessa cosa come Open Collector per i transistori BJT.
Praticamente il source o rispettivamente l'emettitore é messo a massa.
Il transistore quando viene pilotato mette l'uscita a massa.
Quando non é pilotato l'uscita é aperta e se serve un segnale HIGH deve essere messo una resistenza verso l'alimentazione positiva.
Questo permette di mettere in paralello delle uscite. Questo viene usato nel interfaccia I2C per questo devi mettere una resistenza a +5V.
L' alternativa é il "totem pole". Lí 2 transistori mettono in altrenativa l'uscita o a LOW o a HIGH. Una gran parte delle uscite sono cosí. Tipicamente della famiglia TTL e cmos serie 4000. Non possono essere messe 2 uscite in paralello perché quando una va a LOW e l'altro a HIGH é praticamnete un corto del alimentazione e romperebbe gli integrati. Eccezzione: i CMOS possono essere messi in paralello se vengono pilotati uguale. Questo serve per avere piú corrente.
Altra possibilitá é l' uscita "tri state". Questo tipo di uscita ha 3 stati: LOW, HIGH e alta impedenza. L' arduino ha queste uscite dove il stato di alta impedenza é quando definisci un uscita digitale come entrata.
Questo tipo di uscite sono presente in tutti gli integarti che vanno su un bus (collegati uscite sulla stessa pista o conduttore). Tipicamente tutti microprocessori, memorie, e altri integrati che vanno collegati col microprocessore. Sono collegate tra di loro, ma solo un integrato puó aveve le uscite attive.
Arrivando al nostro PCF8574 ha un uscita tipo "totem pole" ma dove il transistore superiore ha una resistenza in serie e percui la corrente che puó dare quando l'uscita é HIGH é limitata tra 30 e 300µA (vedi dati tecnici) Questo basta per pilotare altri integrati CMOS ma non dei LED.
Il transistore inferiore é collegato a massa. Questa configurazione é molto simile a un uscita open drain.
Spero di non averti fatto piú confusione, ma chiarito alcune cose.
Grazie, ora mi è abbastanza chiaro.
Ad ogni modo, ho assemblato il circuito come suggeritomi da uccio, con le resistenze di 330 ohm.
L'expander funziona perfettamente ma se usato da solo sull'i2c, infatti se lo inserisco in una catena fatta di ds1307 e un altro pcf8574 (configurato con un address diverso logicamente), la comunicazione sull'i2c diventa confusa..al display arrivano caratteri strani e a volte nemmeno parte la funzione di lcd.clear...e credo si blocchi lo sketch.
Saranno le correnti parassite o avete altri suggerimenti ?
Grazie
Aggiungo un particolare utile.
Non ho messo nessuna resistenza di pullup sui canali poichè come segnalato in alcuni post dovrebbero bastare quelle delel porte..
FORSE QUI MI SBAGLIO...
se aggiungessi 2 r da 4,7K 1/4 w?
Ciao Whole
Come resistenza di PullUp viene usata quelle interne dei pin che sono tra 20 e 50 kOhm.
Con cavi piú lunghi aumenta la capacitá e percui servono resistenze di PullUp con un valore piú piccolo.
Se funziona senza va bene; se non funziona aggiungi 2x 4,7kOhm.
Ciao Uwe
Stasera provo grazie uwe..
cmq i cavi non sono tanto lunghi..ho aggiunto un altr abreadboard e che saranno 4 cm di cavi e aggiunto una periferica i2c..bho.
Bon stasera provo..sempre gentile Uwe :D
ciao
ahahah..
@Uwe..sai cosa?
purtroppo quando mi prende un problema..non riesco a dormire finchè non lo risolvo e stavolta erano vari giorni che mi scervellavo.
Ciao Whole