I2C con expander PCF8574

  • Ricky85
  • Autore della discussione
  • Anziano Utente
  • Anziano Utente
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

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Ricky85
  • Autore della discussione
  • Anziano Utente
  • Anziano Utente
Di più
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:
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.

  • Mauro Laurenti
  • Moderatore
  • Moderatore
Di più
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
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
  • Anziano Utente
Di più
15 Anni 5 Mesi fa #9 da Ricky85
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 :p

Ho aggiunto anche il video, ora preparo anche gli schemi elettrici

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Moderatore
  • Moderatore
Di più
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
Ultima Modifica 15 Anni 5 Mesi fa da Mauro Laurenti.

Si prega Accesso o Crea un account a partecipare alla conversazione.

Moderatori: Mauro LaurentiPinnaStefAMatteo Garia

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.