indirizzo slave per i2c

7 Anni 11 Mesi fa #6 da storti
Risposta da storti al topic indirizzo slave per i2c
ANALISI MANCATA ESECUZIONE

Dopo aver patito il crash del SO ho perso molto tempo a riattivare la macchina.
Vedo che l'argomento ha diversi lettori ma solo Mauro replica; forse pochi hanno affrontato senza difficoltà l'uso della seriale I2C, personalmente ho sempre usato SPI ,lo trovo più semplice.
L'indirizzo dello slave per scrittura è, essendo A2,A1,A0 a massa nella schedina:
0b01000000 cioè 0x40.
Il programma 01_Esempio-Master di M Laurenti è stato privato delle righe di sorgente relative ai pulsanti ed in particolare dopo While(1) si è sostituito switch e seguenti con :
for (i0, i<=100; i+5) { //ciclo di 20 a passi di 5
data = i;
write_data(data); //scrittura su LCD
}
sono stati inclusi i file i2c.h, Ltlib e PCF8574.h, dichiarate le variabili in precedenza, e al''inizio si è scritto:
#define SLAVE_ADDRESS 0x40
#define WRITE 0x00
Il processo funziona se commento la riga write_data, con //, per cui sembra essere questa la ragione del mancato funzionamento.
Analizzando il sorgente nella riga suddetta e andando a leggere la funzione write_data si osserva che nella riga write_I2C( SLAVE_ADDRESS | WRITE)) {
la variabile è composta da SLAVE_ADDRESS e da WRITE. Il secondo è definito in 0x00 ed il primo, indirizzo, è anch'esso definito in 0x40. Se detta istruzione avesse la variabile errata o mancante in uno dei suoi membri non sarebbe eseguita come accade. Ma ci sono.
Può essere questa la ragione della mancata esecuzione o è altra ? Se sì perchè ?
Se il tutto non funziona dovrei dedurre che la schedina I2C è difettosa dato che il Sw sembra 'girare' se comnento la riga 'write_data( )' .
Come provare PDF8674 ? Con un programmino di test della porta B e l'oscilloscopio in SDA e SCL si nota attività, cioè vanno alti e bassi, mentre con il progetto no. Sembra PCF8574 non risponda, perchè la MCU invia i comandi,; sembra perciò essere la schedina che non risponde,
Come provare se funziona ? penso che ci dovrebbe essere un modo di provare ma non ho esperien-za al riguardo.
Qualcuno ha lavorato con la seriale i2c e quali risultati ha ottenuto ?
Ringrazio chi mi vorrà fornire commenti o soluzioni sull'argomento.
Gianni

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

  • storti
  • Visitatori
  • Visitatori
7 Anni 11 Mesi fa #7 da storti
Risposta da storti al topic indirizzo slave per i2c
salve,
reinvio la nuova comunicazione perchè non la vedo in coda.
Devo aggiungere che i segnali su SDA e SCL che vedo sono dovuti ad alcune righe di test dela portaB, mentre si
arresta il flusso alla azione di writw_data per cui rimane assodato che è questo comando che non funziona o la
routine chiamata. Ho provato con una seconda schedina ed il risultato non cambia.
ualcuno mmi sà spiegare perchè writw_data(data) on va. Ho provato a cambiare la vcaribile in dato o kk ma non
cambia la situazione. Ecco il testo già inviato.
ANALISI MANCATA ESECUZIONE

Dopo aver patito il crash del SO ho perso molto tempo a riattivare la macchina.Riprendo ora.
Vedo che l'argomento ha diversi lettori ma solo Mauro replica; forse pochi hanno affrontato senza difficoltà l'uso della seriale I2C, personalmente ho sempre usato SPI ,lo trovo più semplice.
L'indirizzo dello slave per scrittura è, essendo A2,A1,A0 a massa nella schedina:
0b01000000 cioè 0x40.
Il programma 01_Esempio-Master di M Laurenti è stato privato delle righe di sorgente relative ai pulsanti ed in particolare dopo While(1) si è sostituito switch e seguenti con :
for (i0, i<=100; i+5) { //ciclo di 20 a passi di 5
data = i;
write_data(data); //scrittura su LCD
}
sono stati inclusi i file i2c.h, Ltlib e PCF8574.h, dichiarate le variabili in precedenza, e al''inizio si è scritto:
#define SLAVE_ADDRESS 0x40
#define WRITE 0x00
Il processo funziona se commento la riga write_data, con //, per cui sembra essere questa la ragione del mancato funzionamento.
Analizzando il sorgente nella riga suddetta e andando a leggere la funzione write_data si osserva che nella riga write_I2C( SLAVE_ADDRESS | WRITE)) {
la variabile è composta da SLAVE_ADDRESS e da WRITE. Il secondo è definito in 0x00 ed il primo, indirizzo, è anch'esso definito in 0x40. Se detta istruzione avesse la variabile errata o mancante in uno dei suoi membri non sarebbe eseguita come accade. Ma ci sono.
Può essere questa la ragione della mancata esecuzione o è altra ? Se sì perchè ?
Se il tutto non funziona dovrei dedurre che la schedina I2C è difettosa dato che il Sw sembra 'girare' se comnento la riga 'write_data( )' .
Come provare PDF8674 ? Con un programmino di test della porta B e l'oscilloscopio in SDA e SCL si nota attività, cioè vanno alti e bassi, mentre con il progetto no. Sembra PCF8574 non risponda, perchè la MCU invia i comandi,; sembra perciò essere la schedina che non risponde,
Come provare se funziona ? penso che ci dovrebbe essere un modo di provare ma non ho esperien-za al riguardo.
Qualcuno ha lavorato con la seriale i2c e quali risultati ha ottenuto ?
Ringrazio chi mi vorrà fornire commenti o soluzioni sull'argomento.
Gianni

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

  • storti
  • Visitatori
  • Visitatori
7 Anni 11 Mesi fa #8 da Mauro Laurenti
Risposta da Mauro Laurenti al topic indirizzo slave per i2c
Magari prima di procedere facciamo il riassunto della situazione e fornisci i dati mancanti.

Ambiente di sviluppo : MPLAB X o MPLAB IDE?
Versione IDE: xxx
Compilatore: XC8 o C18?
Versione Compilatore: xxx
Versione Libreria LaurTec: xxx

PIC utilizzato: PIC18F4550?
Scheda di sviluppo: Freedom II
IO Extender: PCF8574 o PCF8574A?

Se non vedi attività sulle linea di clock c'è qualche problema di inizializzazione o collegamento.
Se viene trasmesso solo un byte sulla linea dati vuol dire che i pin e l'inizializzazione è ok ma il PCF non risponde, ovvero l'indirizzo è errato.

Se fai uso della scheda Freedom II come hai collegato i Jumper JP10, JP8 e JP7 o dimmi semplicemente la posizione dei primi quattro partendo dall'alto.

scrivi:

==-- per jumper a sinistra
--== per jumper a destra

dovrebbero essere, per il PIC18F4550:

==-- JP11
--== JP10
--== JP8
--== JP7
==-- tutti gli altri

Su che pin stai monitorando il bus?

Hai il link ebay del modello esatto del modulo che stai usando?

Fatto funzionare il write sarà poi meglio usare la libreria LCD per bus I2C che ho scritto.

Saluti,

Mauro

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

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
7 Anni 10 Mesi fa - 7 Anni 10 Mesi fa #9 da Mauro Laurenti
Risposta da Mauro Laurenti al topic indirizzo slave per i2c

Rendering Error in layout Message/Item: array_keys(): Argument #1 ($array) must be of type array, null given. Please enable debug mode for more information.

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

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
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.

Login