- Messaggi: 376
- Ringraziamenti ricevuti 38
I2c
11 Anni 11 Mesi fa #1
da odessos
I2c è stato creato da odessos
Salve, mi sto cimentando con un PIC 16F88 a sperimentare questa benedetta interfaccia I2c
Ora con uno master che trasmentte correttamente sto cercando di inviare un dato al 16F88 configurato come slave, ma niente da fare sembra igniorare completamente la comunicazione del master.
Premetto che elettricamente è tutto a posto e le impostazioni del PIC altrettanto.
In pratica non da il consenso ACK di dato ricevuto e non attiva alcun interrupt sul registro SSPIF
Qualcuno ha esperienza con questo PIC in configurazione I2c slave?
Il modulo SSP è stato attivato come anche gli interrupt globali e sulle periferiche.
Ora con uno master che trasmentte correttamente sto cercando di inviare un dato al 16F88 configurato come slave, ma niente da fare sembra igniorare completamente la comunicazione del master.
Premetto che elettricamente è tutto a posto e le impostazioni del PIC altrettanto.
In pratica non da il consenso ACK di dato ricevuto e non attiva alcun interrupt sul registro SSPIF
Qualcuno ha esperienza con questo PIC in configurazione I2c slave?
Il modulo SSP è stato attivato come anche gli interrupt globali e sulle periferiche.
Si prega Accedi o Crea un account a partecipare alla conversazione.
- odessos
- Autore della discussione
- Visitatori
11 Anni 11 Mesi fa #2
da Matteo Garia
Risposta da Matteo Garia al topic Re: I2c
Ciao,
Se sono i tuoi primi esperimenti con l'i2c ti consiglio di cominciare con uno slave "sicuramente funzionante" e di dedicarti a programmare solo il master.
Sarà più facile poi realizzarsi anche lo slave.
Puoi per esempio prendere un I/O extender
Matteo
ps. i pullup sulle linee ci sono?
Se sono i tuoi primi esperimenti con l'i2c ti consiglio di cominciare con uno slave "sicuramente funzionante" e di dedicarti a programmare solo il master.
Sarà più facile poi realizzarsi anche lo slave.
Puoi per esempio prendere un I/O extender
Matteo
ps. i pullup sulle linee ci sono?
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Matteo Garia
- Moderator
Riduci
Di più
11 Anni 11 Mesi fa - 11 Anni 11 Mesi fa #3
da odessos
Risposta da odessos al topic Re: I2c
Ciao, Matteo. Con periferiche funzionanti in I2c ho già lavorato senza problemi (display LCD, sensori, RTC, memorie ecc.) ho anche sperimentato con due processori uguali come il 16F877A uno montato su basetta freedomII e l'altro su basetta fatta da me, uno master e l'altro slave.
Ma questa volta, con questo PIC non riesco.
Non capisco dove sbaglio, i settaggi sono relativamente elementari:
ingressi RB in entrata
resistenze di pullup presenti sul master
INCON settato con interrupt globale e su periferiche
PE1 settato con modulo SSP ON
SSPCON settato con modulo SSP ON e I2c slave 7-bit address
SSPADD settato con indirizzo 7 bit
controllo sull'interrupt SSPIE
cos'altro c'è
Se setto su SSPCON I2c slave e abilito l'interrupt su start e stop all'invio di un qualsiadi dato questo fa scattare la routine di interrupt ma comunque non riconosce lìindirizzo che invio e il dato, in pratica non invia il segnale di ACK.
Ma questa volta, con questo PIC non riesco.
Non capisco dove sbaglio, i settaggi sono relativamente elementari:
ingressi RB in entrata
resistenze di pullup presenti sul master
INCON settato con interrupt globale e su periferiche
PE1 settato con modulo SSP ON
SSPCON settato con modulo SSP ON e I2c slave 7-bit address
SSPADD settato con indirizzo 7 bit
controllo sull'interrupt SSPIE
cos'altro c'è
Se setto su SSPCON I2c slave e abilito l'interrupt su start e stop all'invio di un qualsiadi dato questo fa scattare la routine di interrupt ma comunque non riconosce lìindirizzo che invio e il dato, in pratica non invia il segnale di ACK.
Ultima Modifica 11 Anni 11 Mesi fa da odessos.
Si prega Accedi o Crea un account a partecipare alla conversazione.
- odessos
- Autore della discussione
- Visitatori
11 Anni 11 Mesi fa #4
da Matteo Garia
Risposta da Matteo Garia al topic Re: I2c
Ciao,
sul datasheet ho trovato questo:
ww1.microchip.com/downloads/en/devicedoc/30487c.pdf pagna 95 del pdf
prova a vedere se è il tuo caso
Matteo
sul datasheet ho trovato questo:
Either or both of the following conditions will cause the
SSP module not to give this ACK pulse:
a) The Buffer Full bit, BF (SSPSTAT<0>), was set
before the transfer was received.
b) The Overflow bit, SSPOV (SSPCON<6>), was
set before the transfer was received.
ww1.microchip.com/downloads/en/devicedoc/30487c.pdf pagna 95 del pdf
prova a vedere se è il tuo caso
Matteo
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Matteo Garia
- Moderator
Riduci
Di più
- Messaggi: 376
- Ringraziamenti ricevuti 38
11 Anni 11 Mesi fa #5
da odessos
Risposta da odessos al topic Re: I2c
Ciao, ammiro la tua paziena, ho letto anche io questo trafiletto dul data. Che dice " se si verificano queste o solo una di queste condizioni lo slave non fornisce il consenso con ACK.
Ho quindi provato a forzare questi due registri portandoli a 0 primandi inviare un dato, ma nulla da fare. Ho provato a monitorare il PIC con il PicKit3 un configuraz. Demo sull' mplab dove posso monitorare i registri anchenin tempo reale ma non mi danno valori strani.
Non può essere per caso un problema di sincronizzazione che lo slave non riesce a leggere il clock generato dall master?
Nei parametri del PIC 16F877A mi ricordo che c'è un registro che si chiama SSPCON2 dove sul bit 0 si può settare il clock stratching come slave mode e ricordo che per comunicare con un master dovetti impostare questo bit 1 altrimenti non comunicava.
Ma sul 16f88 non c'è il registro SSPCON2.
Ho quindi provato a forzare questi due registri portandoli a 0 primandi inviare un dato, ma nulla da fare. Ho provato a monitorare il PIC con il PicKit3 un configuraz. Demo sull' mplab dove posso monitorare i registri anchenin tempo reale ma non mi danno valori strani.
Non può essere per caso un problema di sincronizzazione che lo slave non riesce a leggere il clock generato dall master?
Nei parametri del PIC 16F877A mi ricordo che c'è un registro che si chiama SSPCON2 dove sul bit 0 si può settare il clock stratching come slave mode e ricordo che per comunicare con un master dovetti impostare questo bit 1 altrimenti non comunicava.
Ma sul 16f88 non c'è il registro SSPCON2.
Si prega Accedi o Crea un account a partecipare alla conversazione.
- odessos
- Autore della discussione
- Visitatori
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.