- Messaggi: 50
- Ringraziamenti ricevuti 0
I2C con expander PCF8574
- Ricky85
- Autore della discussione
- Anziano Utente
Per provarli ho messo su un circuitono sulla breadboard comprendente un PIC18F4550, due PCF8574 e 16 led collegati alle rispettive uscite degli 8 expander con opportuna resistenza.
Ho dato i seguenti indirizzi ai due expander
0b000 al primo (tutti e 3 i pin a GND)
0b001 al secondo (pin A0 a +5V e gli altri due a GND)
dopo di che ho cominciato a giocare con il codice cercando di capire come "parlargli" ed ho scritto questo:
Leggendo sul datasheet mi pare di aver capito che il primo messaggio che riceve serve per "vedere" se è lui il destinatario... quindi ho scritto 0b01110000 dove partendo da destra 0111 sta per selezionare il PCF8574A, 000 è l'indirizzo e l'ultimo 0 è fisso (Write), e nel secondo messaggio immagino sia il dato da inviare per attivare le uscite.
S 0 1 0 0 A2 A1 A0 0 A A 8bit "data1" A 8bit "data2" ecc
Dove S sta per start condition ed A per acknowledge
Risultato... non riesco ad accendere nulla...
Mi sta sfuggendo qualcosa dal datasheet (sicuramente come indicare se selezionare le varie porte come In o come Out)...
Si prega Accesso o Crea un account a partecipare alla conversazione.
alcune osservazioni:
1) Attento all'indirizzo. Esiste il PCF8574 e PCF8574A la loro differenza è nell'indirizzo (controlla il datasheet)
In particolare l'indirizzo che hai usato tu è del PCF8574A e non dell'PCF8574.
2) Non controlli gli ACK (Acknowledgment)
3) Non hai la condizione StopI2C
Ho dei PCF8574 sotto mano. Visto le richieste di altre librerie credo che ne scriverò una anche per questo integrato.
...forse una bozza nelle prossime ore!
Saluti,
Mauro
Si prega Accesso o Crea un account a partecipare alla conversazione.
- Ricky85
- Autore della discussione
- Anziano Utente
- Messaggi: 50
- Ringraziamenti ricevuti 0
Mauro Laurenti ha scritto: Ciao,
alcune osservazioni:
1) Attento all'indirizzo. Esiste il PCF8574 e PCF8574A la loro differenza è nell'indirizzo (controlla il datasheet)
In particolare l'indirizzo che hai usato tu è del PCF8574A e non dell'PCF8574.
2) Non controlli gli ACK (Acknowledgment)
3) Non hai la condizione StopI2C
Ho dei PCF8574 sotto mano. Visto le richieste di altre librerie credo che ne scriverò una anche per questo integrato.
...forse una bozza nelle prossime ore!
Saluti,
Mauro
Ciao Mauro,
ho editato il post sopra proprio mentre mi rispondevi... per gli Ack me ne sono reso conto stamattina che non li gestivo... ieri sera ero ormai decisamente troppo fuso ><
Per quanto riguarda l'integratino, uso effettivamente il PCF8574A e non il PCF8574 (mi ci stavo gia fregando all'inizio con questo discorso degli indirizzi)
Al post precedente ho inserito il codice che sto provando questa mattina (preso dal sito Microchip e opportunamente pacioccato), ma sono ancora al "pian dei babi" come si dice dalle mie parti...
Si prega Accesso o Crea un account a partecipare alla conversazione.
ho appena finito di testare la libreria.
Funziona sia per scrivere dati che per leggere. Prima di pubblicarla vorrei ritoccare alcune cose, inoltre vorrei scrivere una Brief Note poiché ritengo l'argomento interessante.
In ogni modo per la tua libreria tieni conto che il PCF8574 lavora a 100KHz e non a 400KHz.
Usando 400KHz non riesci a trasmettere i dati.
I diodi LED devono essere collegati con il catodo all'uscita del PCF8574 e l'anodo ad una resistenza che va a Vcc.
Questo significa che il LED si accenderà quando scrivi uno 0 e non 1.
Questo e' richiesto poiché solo quando hai l'uscita a 0 riesci a pilotare correttamente il diodo LED.
Vedi se riesci ad aggiustare la tua libreria, altrimenti domani usi quella che ho scritto.
saluti,
Mauro
Si prega Accesso o Crea un account a partecipare alla conversazione.
scrivere la brief note mi richiederà del tempo. Per cui includo le librerie ed un esempio.
Quelle ufficiali che includerò nelle librerie C18 LaurTec potrebbero differire di poco.
Per utilizzare la libreria includi semplicemente il file .h e .c nel tuo progetto.
Il file .h potrebbe anche essere includo semplicemente con la direttiva #include (vedi esempio).
I prototipi delle funzioni sono :
Come utilizzarle e' descritto nel file h. In ogni modo la variabile control deve essere il byte che contiene l'indirizzo dell'integrato e il valore dell'indirizzo dei pin. L'ultimo bit (quello meno significativo e' relativo a alla scrittura e lettura).
Sia che si faccia uso della funzione di scrittura che quella di lettura deve essere poso a 0. La funzione a seconda dei casi lo porrà ad 1 se richiesto.
Per esempio facendo uso del PCF8574 con indirizzo IC 0100 A2 A1 A0 R/'W
Ponendo A2 A1 A0 a massa, sia ha che il bit di controllo (sia che si utilizzi la funzione in scrittura che lettura) deve essere 01000000 ovvero 0x40. Ponendo A0 a Vcc, si avrebbe 010000010 ovvero 0x42, e via dicendo...
Come detto questa non e' la versione ufficiale che sarà inclusa in:
Librerie LaurTec per microcontrollori PIC18
...ora perché non la testi anche tu!
Saluti,
Mauro
Si prega Accesso o Crea un account a partecipare alla conversazione.
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.
Forum - Ultimi messaggi
-
- MODULO GSM SIM900A
- da FABRIZIO
-
- LTerminal - nuove funzioni
- da Mauro Laurenti
-
- Aggiornamento sito completato
- da Mauro Laurenti
-
- registro a scorrimento PIPO in cascata
- da Mauro Laurenti
-
- FORMULA PER LINEARIZZARE TERMOCOPIA
- da Mauro Laurenti