Chiarimenti parametri per I2C

11 Anni 8 Mesi fa #16 da StefA
Risposta da StefA al topic Ciarimenti parametri per I2C
mi era sfuggito che utilizzi cont sia per scrivere che per leggere..non va bene, perché se in lettura hai qualche problema, dentro cont c'è già l'informazione che ti aspetti e quindi non sai se il tutto funziona.
Per fare delle prove potresti dichiarare un'altra variabile, leggere da memoria e mettere il dato in questa variabile e poi porre i led uguali a questa variabile, ripetendo il tutto, così puoi vedere se effettivamente legge la memoria, poi cambiando dati puoi vedere se scrive valori diversi..
una cosa del tipo:

unsigned char cont[5] = {12,45,7,10};
unsigned char dato;


write_I2C_EEPROM (0xA4, 0, cont[0]);
write_I2C_EEPROM (0xA4, 1, cont[1]);
write_I2C_EEPROM (0xA4, 2, cont[2]);
write_I2C_EEPROM (0xA4, 3, cont[3]);
write_I2C_EEPROM (0xA4, 4, cont[4]);

while (1)
{
read_I2C_EEPROM (0xA4,0, &dato);
LATD = dato;
__delay_ms (500);

read_I2C_EEPROM (0xA4,1, &dato);
LATD = dato;
__delay_ms (500);

read_I2C_EEPROM (0xA4,2, &dato);
LATD = dato;
__delay_ms (500);

read_I2C_EEPROM (0xA4,3, &dato);
LATD = dato;
__delay_ms (500);

read_I2C_EEPROM (0xA4,4, &dato);
LATD = dato;
__delay_ms (500);
}

Ste

..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]

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

  • StefA
  • Avatar di StefA
  • Moderator
  • Moderator
Di più
11 Anni 8 Mesi fa #17 da Guido
Risposta da Guido al topic Ciarimenti parametri 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.

  • Guido
  • Platinum Member
  • Platinum Member
Di più
11 Anni 8 Mesi fa #18 da StefA
Risposta da StefA al topic Ciarimenti parametri per I2C
avevo messo il ritardo a 500ms così cambiava stato ogni mezzo secondo, se imposti 50ms..o ti chiami Clark Kant..o comincia ad essere difficile! ;)

Al di là di questo, riattiva le scritture, la memoria una volta scritta mantiene il suo valore fino a quando la cancelli o la sovrascrivi, quindi anche disabilitando le scritture, se le hai eseguite almeno una volta i dati sono scritti.

Veniamo al led..sospetto che tu abbia un solo led..ma da quello che vorresti fare te ne servirebbero 8, ti spiego:
la variabile dato è stata definita come "unsigned char", che è da 8bit, la porta D ha 8 pin, quindi quando scrivi...LATD = dato;..i led della porta d (se ne colleghi uno ogni pin) si accenderanno a seconda della variabile dato; prendendo il valore della variabile dato e trasformandolo in binario, dove ci sono gli 1 il led risulta acceso, dove ci sono gli 0, risulta spento.

Esempio: se dato vale 12 (come nel tuo primo valore), avrai il corrispettivo in binario che vale, 00001100 e gli 8 led della porta d risulteranno, SSSSAASS (dove S= spento ed A= acceso).

Esempio 2: dato = 45 = 00101101 = SSASAASA.

Se prendi valori di dato piccoli puoi anche usare meno led, vedi tu.

La parte di codice che ti ho scritto prima scrive all'inizio i 5 valori di dato in memoria, poi ciclicamente li rilegge uno ad uno e li visualizza in binario attraverso i led.

Se non era questo che volevi fare, ho capito male io.

Ste

..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]

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

  • StefA
  • Avatar di StefA
  • Moderator
  • Moderator
Di più
11 Anni 8 Mesi fa #19 da Guido
Risposta da Guido al topic Ciarimenti parametri per I2C
Ciao, all' inizio ho messo il valore che hai scritto 500 ms, solo che xc8 lo segnala come errore, riguardo ai led vorrei solo scrivere uno ho due stringhe di array in memoria e poi leggerle, l'accensione del led mi dice solo che la lettura è avvenuta.
Comunque ho appreso un altro pò su come si programma in C.
Grazie

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

  • Guido
  • Platinum Member
  • Platinum Member
Di più
11 Anni 8 Mesi fa #20 da StefA
Risposta da StefA al topic Ciarimenti parametri per I2C

all' inizio ho messo il valore che hai scritto 500 ms, solo che xc8 lo segnala come errore

probabilmente quella funzione non "supporta" valori così alti di ritardo, magari prova a scendere gradualmente...400..300..250...

Comunque ho appreso un altro pò su come si programma in C

Hai letto il libro di Mauro?

riguardo ai led vorrei solo scrivere uno ho due stringhe di array in memoria e poi leggerle, l'accensione del led mi dice solo che la lettura è avvenuta

con un solo led non puoi sapere che valore hai dentro le variabili, al massimo puoi distinguere tra 1 e 0..o tra pari e dispari.
Se vuoi solo sapere se la riga di codice è stata eseguita, ti basta mettere l'accensione del led dopo la funzione read. Altrimenti, visto che la funzione read ti ritorna un parametro (signed char), puoi porre ad esempio..

signed char controllo;
...
...
controllo = read_I2C_EEPROM (0xA4,0, &dato);
if(controllo == 1)
PORTDbits.RD0 = 1;
else
PORTDbits.RD0 = 0;

Comunque sia siamo abboddantemente OT...spero almeno che ti sia d'aiuto.

Ste

..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]

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

  • StefA
  • Avatar di StefA
  • 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