- Messaggi: 50
- Ringraziamenti ricevuti 0
I2C con expander PCF8574
- Ricky85
-
Autore della discussione
- Anziano Utente
-
Less
Di più
15 Anni 5 Mesi fa #6
da Ricky85
Risposta da Ricky85 al topic Re: I2C con expander PCF8574
Ciao,
Mitico Mauro!
Purtroppo ieri non sono riusito a fare altre prove perchè ero fuori casa... Sono appena tornatto da una corsetta "rigenerante" ed ora con cervello "rinfrescato" mi metto a fare qualche prova.
Posterò i risultati
Mitico Mauro!
Purtroppo ieri non sono riusito a fare altre prove perchè ero fuori casa... Sono appena tornatto da una corsetta "rigenerante" ed ora con cervello "rinfrescato" mi metto a fare qualche prova.
Posterò i risultati
Si prega Accesso o Crea un account a partecipare alla conversazione.
- Ricky85
-
Autore della discussione
- Anziano Utente
-
Less
Di più
- Messaggi: 50
- Ringraziamenti ricevuti 0
15 Anni 5 Mesi fa - 15 Anni 5 Mesi fa #7
da Ricky85
Risposta da Ricky85 al topic Re: I2C con expander PCF8574
Finalente sono riuscito a combinare qualcosa!
Ecco il codice:
Sicuramente è ottimizzabile, sopratutto la sezione dei "for" dove faccio quel calcolo astruso per spegnere il led precedente ed accendere quello successivo (ho pensato anche di gestire al contrario i led via software ed invertire via hardware lo stato di acceso/spento, il che potrebbe essere un idea per la versione definitiva anche perchè dovrò poi pilotare 5 led ad alta luminosità per ogni uscita, quindi pilotare un transistor con l'expander e a sua volta un mosfet per accendere il gruppo led)
Ecco cosa ne è uscito...
Video1
Ora preparo lo schema elettrico su Altium così illustro anche l'hardware che potrebbe tornare utile per qualcuno
Ecco il codice:
Code:
#include <p18f4550.h>
#include <PCF8574.h>
#include <delay.h>
#pragma config FOSC = HS
#pragma config WDT = OFF
#pragma config LVP = OFF
#pragma config PBADEN = OFF
int ricky (void); //Funzione di prova
char i;
unsigned char add1 = 0b01110000; //indirizzo del primo expander
unsigned char add2 = 0b01110010; //Indirizzo del secondo expander
void main (void){
// Imposto PORTA tutti ingressi
LATA = 0x00;
TRISA = 0xFF;
// Imposto PORTB tutti ingressi
LATB = 0x00;
TRISB = 0xFF;
// Imposto PORTC tutti ingressi, RC1 come output
LATC = 0x00;
TRISC = 0b11111101;
// Imposto PORTD tutte uscite
LATD = 0x00;
TRISD = 0x00;
// Imposto PORTE tutti ingressi
LATE = 0x00;
TRISE = 0xFF;
// Inizializza il modulo I2C a 100KHz @20MHz
OpenI2C(MASTER, SLEW_OFF);
SSPADD = 49;
PCF8574_write_data (add1, 0b11111111); //Spengo tutti i led sul primo expander
PCF8574_write_data (add2, 0b11111111); //Spengo tutti i led sul secondo expander
delay_ms (1000); //Pausa per vedere che si sia spento tutto
ricky ();
while (1) {
}
}
int ricky (void){
unsigned char I2C_data = 0b11111110;
unsigned char next_step = 1; //Variabile per il calcolo dei bit da spingere verso gli expander
//Cliclo "for" per la sequenza sul primo expander
for (i=0; i<8; i++){
PCF8574_write_data (add1, I2C_data);
//Calcolo per far accendere il led successivo e spegnere quello precedente
(I2C_data=I2C_data-next_step);
(next_step=next_step*2);
delay_ms (500);
}
PCF8574_write_data (add1, 0b11111111); //Spengo nuovamente tutti i led sul primo expander
I2C_data = 0b11111110; //Condizione di inizio sul secondo expander
next_step = 1;
//Cliclo "for" per la sequenza sul secondo expander
for (i=0; i<8; i++){
PCF8574_write_data (add2, I2C_data);
//Calcolo per far accendere il led successivo e spegnere quello precedente
(I2C_data=I2C_data-next_step);
(next_step=next_step*2);
delay_ms (500);
}
PCF8574_write_data (add2, 0b11111111); //Spengo nuovamente tutti i led sul secondo expander
}
Sicuramente è ottimizzabile, sopratutto la sezione dei "for" dove faccio quel calcolo astruso per spegnere il led precedente ed accendere quello successivo (ho pensato anche di gestire al contrario i led via software ed invertire via hardware lo stato di acceso/spento, il che potrebbe essere un idea per la versione definitiva anche perchè dovrò poi pilotare 5 led ad alta luminosità per ogni uscita, quindi pilotare un transistor con l'expander e a sua volta un mosfet per accendere il gruppo led)
Ecco cosa ne è uscito...
Video1
Ora preparo lo schema elettrico su Altium così illustro anche l'hardware che potrebbe tornare utile per qualcuno
Ultima Modifica 15 Anni 5 Mesi fa da Mauro Laurenti.
Si prega Accesso o Crea un account a partecipare alla conversazione.
15 Anni 5 Mesi fa - 15 Anni 5 Mesi fa #8
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: I2C con expander PCF8574
ottimo!
le foto hanno poi sempre il loro fascino!
Vedo che il tavolo e' piuttosto attrezzato!
Per pilotare MOS e transistor ci sono delle considerazioni e attenzioni di cui bisogna tener conto.
Tratterò tutto nella Brief Note BN0013.
Saluti,
Mauro
le foto hanno poi sempre il loro fascino!
Vedo che il tavolo e' piuttosto attrezzato!
Per pilotare MOS e transistor ci sono delle considerazioni e attenzioni di cui bisogna tener conto.
Tratterò tutto nella Brief Note BN0013.
Saluti,
Mauro
Ultima Modifica 15 Anni 5 Mesi fa da Mauro Laurenti.
Si prega Accesso o Crea un account a partecipare alla conversazione.
- Ricky85
-
Autore della discussione
- Anziano Utente
-
Less
Di più
- Messaggi: 50
- Ringraziamenti ricevuti 0
15 Anni 5 Mesi fa #9
da Ricky85
Oscilloscopio e tester sono d'obbligo
Ho aggiunto anche il video, ora preparo anche gli schemi elettrici
Risposta da Ricky85 al topic Re: I2C con expander PCF8574
Mauro Laurenti ha scritto: ottimo!
le foto hanno poi sempre il loro fascino!
Vedo che il tavolo e' piuttosto attrezzato!
Per pilotare MOS e transistor ci sono delle considerazioni e attenzioni che bisogna tener conto.
Tratterò tutto nella Brief Note BN0013.
Saluti,
Mauro
Oscilloscopio e tester sono d'obbligo
Ho aggiunto anche il video, ora preparo anche gli schemi elettrici
Si prega Accesso o Crea un account a partecipare alla conversazione.
15 Anni 5 Mesi fa - 15 Anni 5 Mesi fa #10
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: I2C con expander PCF8574
Ottimo!
Se hai tempo potresti testare anche la funzione per leggere i dati?
Ciao,
Mauro
Se hai tempo potresti testare anche la funzione per leggere i dati?
Ciao,
Mauro
Ultima Modifica 15 Anni 5 Mesi fa da Mauro Laurenti.
Si prega Accesso o Crea un account a partecipare alla conversazione.
Moderatori: Mauro Laurenti, Pinna, StefA, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.
