Comunicazione I2C tra PIC
13 Anni 8 Mesi fa - 13 Anni 8 Mesi fa #1
da gcupini
Comunicazione I2C tra PIC è stato creato da gcupini
Ciao Tutti
Propongo il programma in C HITEC della comunicazione Master – Slave tra due PIC.
Il Master è un PIC18F4550 e Lo Slave un PIC16F88.
In rete si trovano Librerie e Routine I2C di comunicazione tra Un Master e una EEPRON o Un Orologio ma non tra due o più PIC.
Non è tutta farina del mio sacco!.
Per quanto riguarda le routine SLAVE
1. Ho acquisito la routine Slave di VinncenzoV.net e le indicazioni di DallaVal da questo forum (programmate in PIC C18).
2. Ho inserito una inizializzazione per lo Slave direttamente nel main Slave_pic_300.c che come si vede NON fa uso di librerie I2c.
Per quanto riguarda le Routine Master, le più corpose devo dire quanto segue:
1. Le routine I2c.c e I2c.h, disponibili come esempio, della HI TECH non Funzionavano nel mio caso. Nonostante il tempo perso per modificarle non sono approdato a nulla.
2. Quindi le routine che ho adottato con qualche modifica sono di Giovanni Bernardo ( le modifiche riguardano una correzione alla routine di lettura I2cMasterOpenRead(), l'inserimento di un ritardo nella I2ReadMaster(); e la scrittura di due nuove funzioni:
I2cReadStrMaster(), I2cWriteStrMaster(), utili per scrivere/ leggere una stringa,)
3. Rispetto alla versione di Giovanni Bernardo ho modificato anche il file I2c.h
4. I file si chiamano I2c_mssp_cup.c ed I2c_mssp_cup.h
5. Il main del Master si chiama Master_pic_300.c.
NOTA: Se si effettua una prova, per il corretto funzionamento, è necessario Resettare sempre entrambi i PIC. Oppure modificare Lo Slave in modo opportuno per far ripartire le variabile da Zero.
Evidentemente ho fatto uso di un LCD (scheda Freedom II di Laurenti) per verificare il corretto funzionamento dello scambio dati.
Nel software allegato ci sono i file essenziali:
Master_pic_300.c, Slave_pic_300.c, I2c_mssp_cup.c, I2c_mssp_cup.h. Ma anche le mie lcd1.c lcd1.h (per il Display) e le mie attesa16.h e attesa18.h, che per ragioni di rapidità ho usato per inserire il ritardo nelle I2C.
Saluti Giovanni
Propongo il programma in C HITEC della comunicazione Master – Slave tra due PIC.
Il Master è un PIC18F4550 e Lo Slave un PIC16F88.
In rete si trovano Librerie e Routine I2C di comunicazione tra Un Master e una EEPRON o Un Orologio ma non tra due o più PIC.
Non è tutta farina del mio sacco!.
Per quanto riguarda le routine SLAVE
1. Ho acquisito la routine Slave di VinncenzoV.net e le indicazioni di DallaVal da questo forum (programmate in PIC C18).
2. Ho inserito una inizializzazione per lo Slave direttamente nel main Slave_pic_300.c che come si vede NON fa uso di librerie I2c.
Per quanto riguarda le Routine Master, le più corpose devo dire quanto segue:
1. Le routine I2c.c e I2c.h, disponibili come esempio, della HI TECH non Funzionavano nel mio caso. Nonostante il tempo perso per modificarle non sono approdato a nulla.
2. Quindi le routine che ho adottato con qualche modifica sono di Giovanni Bernardo ( le modifiche riguardano una correzione alla routine di lettura I2cMasterOpenRead(), l'inserimento di un ritardo nella I2ReadMaster(); e la scrittura di due nuove funzioni:
I2cReadStrMaster(), I2cWriteStrMaster(), utili per scrivere/ leggere una stringa,)
3. Rispetto alla versione di Giovanni Bernardo ho modificato anche il file I2c.h
4. I file si chiamano I2c_mssp_cup.c ed I2c_mssp_cup.h
5. Il main del Master si chiama Master_pic_300.c.
NOTA: Se si effettua una prova, per il corretto funzionamento, è necessario Resettare sempre entrambi i PIC. Oppure modificare Lo Slave in modo opportuno per far ripartire le variabile da Zero.
Evidentemente ho fatto uso di un LCD (scheda Freedom II di Laurenti) per verificare il corretto funzionamento dello scambio dati.
Nel software allegato ci sono i file essenziali:
Master_pic_300.c, Slave_pic_300.c, I2c_mssp_cup.c, I2c_mssp_cup.h. Ma anche le mie lcd1.c lcd1.h (per il Display) e le mie attesa16.h e attesa18.h, che per ragioni di rapidità ho usato per inserire il ritardo nelle I2C.
Saluti Giovanni
Ultima Modifica 13 Anni 8 Mesi fa da gcupini.
Si prega Accedi o Crea un account a partecipare alla conversazione.
- gcupini
- Autore della discussione
- Visitatori
13 Anni 8 Mesi fa #2
da Gianni
Sono tutti bravi ad essere "open" con il "source" degli altri.
Un amico è colui che ti dice sempre quando stai sbagliando. Il mio miglior amico è il parser.
SettoreZero
Risposta da Gianni al topic Re: Comunicazione I2C tra PIC
Sono le librerie che ho curato io ultimamente e che ho reso disponibili sul mio sito... non era proprio vero che in giro non si trovava niente... no?
in modalità slave ti funzionavano già com'erano o è li che hai fatto le modifiche?
in modalità slave ti funzionavano già com'erano o è li che hai fatto le modifiche?
Sono tutti bravi ad essere "open" con il "source" degli altri.
Un amico è colui che ti dice sempre quando stai sbagliando. Il mio miglior amico è il parser.
SettoreZero
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Gianni
- Elite Member
Riduci
Di più
13 Anni 8 Mesi fa - 13 Anni 8 Mesi fa #3
da gcupini
Risposta da gcupini al topic Re: Comunicazione I2C tra PIC
Ciao Gianni,
Prima di tutto grazie. Avevo usato altre due librerie, tra le queli, quella di esempio del C HITECH ma non sincronizzavano i due PIC. La tua dal lato Master in scrittura su Slave ha funzionato subito. Poi, non so se te ne sei accorto, nella funzione I2cMasterOpenRead() c'era un errore nell'invio di ADDR. Mi ha fatto tribolare per qualche ora. Infine come ho scritto ho aggiunto un ritardo nella I2cWriteMaster(). Alla terza scrittura non era più sincronizzata. Ma forse dipende da anomalie del PIC16F88 (Slave).
In modalità Slave non ho usato alcuna Libreria. Ma ho costruito un piccola funzione di inizializzazione e ho gestito con interrupt sia i comandi di scrittura che di lettura.
Salutoni
Prima di tutto grazie. Avevo usato altre due librerie, tra le queli, quella di esempio del C HITECH ma non sincronizzavano i due PIC. La tua dal lato Master in scrittura su Slave ha funzionato subito. Poi, non so se te ne sei accorto, nella funzione I2cMasterOpenRead() c'era un errore nell'invio di ADDR. Mi ha fatto tribolare per qualche ora. Infine come ho scritto ho aggiunto un ritardo nella I2cWriteMaster(). Alla terza scrittura non era più sincronizzata. Ma forse dipende da anomalie del PIC16F88 (Slave).
In modalità Slave non ho usato alcuna Libreria. Ma ho costruito un piccola funzione di inizializzazione e ho gestito con interrupt sia i comandi di scrittura che di lettura.
Salutoni
Ultima Modifica 13 Anni 8 Mesi fa da gcupini.
Si prega Accedi o Crea un account a partecipare alla conversazione.
- gcupini
- Autore della discussione
- Visitatori
13 Anni 8 Mesi fa #4
da Gianni
Sono tutti bravi ad essere "open" con il "source" degli altri.
Un amico è colui che ti dice sempre quando stai sbagliando. Il mio miglior amico è il parser.
SettoreZero
Risposta da Gianni al topic Re: Comunicazione I2C tra PIC
Mi pare strano perchè io le funzioni le utilizzo con vari integrati I2C (memorie di tutti i tipi, DS1307) e non mi hanno mai dato nessun problema. Le stanno usando pure altri utenti e nemmeno hanno problemi.
Puoi farmi un favore? Puoi scrivere queste cose nei commenti della pagina da cui hai scaricato la libreria?
Almeno se altre persone hanno lo stesso problema e lo hanno risolto possono dire come hanno fatto.
Puoi farmi un favore? Puoi scrivere queste cose nei commenti della pagina da cui hai scaricato la libreria?
Almeno se altre persone hanno lo stesso problema e lo hanno risolto possono dire come hanno fatto.
Sono tutti bravi ad essere "open" con il "source" degli altri.
Un amico è colui che ti dice sempre quando stai sbagliando. Il mio miglior amico è il parser.
SettoreZero
Si prega Accedi o Crea un account a partecipare alla conversazione.
13 Anni 8 Mesi fa #5
da gcupini
Risposta da gcupini al topic Re: Comunicazione I2C tra PIC
Cia Gianni
ho fatto una verifica ma le librerie I2C che ho scaricato io non coincidono con quelle del tuo sito. Per farti capire da dove vengono ti trascrivo l'intestazione:
/*
Modulo: i2c.c
Descrizione: Funzioni i2c, modalità master e slave, pic serie16 con doppio modulo MSSP
Usato il solo modulo MSSP1
Non sono supportati i picmicro con modulo SSP
Compilatore: Hitec-C
Autori:
Lavoro originale a cura di:
Michael Alon - Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
Littleman - Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
Riadattamenti curati da:
Nicola Sellitto - Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
Bernardo Giovanni - www.settorezero.com
*/
Grazie ancora in ogni caso
ho fatto una verifica ma le librerie I2C che ho scaricato io non coincidono con quelle del tuo sito. Per farti capire da dove vengono ti trascrivo l'intestazione:
/*
Modulo: i2c.c
Descrizione: Funzioni i2c, modalità master e slave, pic serie16 con doppio modulo MSSP
Usato il solo modulo MSSP1
Non sono supportati i picmicro con modulo SSP
Compilatore: Hitec-C
Autori:
Lavoro originale a cura di:
Michael Alon - Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
Littleman - Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
Riadattamenti curati da:
Nicola Sellitto - Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
Bernardo Giovanni - www.settorezero.com
*/
Grazie ancora in ogni caso
Si prega Accedi o Crea un account a partecipare alla conversazione.
- gcupini
- 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.