Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

MikroC e libreria I2C

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] MikroC e libreria I2C

Messaggioda Foto Utentec1b8 » 14 feb 2014, 13:23

Salve a tutti,
ho deciso di provare le librerie I2C (hardware non software) di MikroC per realizzare un piccolo master I2C con un PIC18, mannaggia a me...
Ho riscontrato un problema di blocco del software sulla I2C1_Rd() quando non è connesso un dispositvo slave.
Cercando nel forum della Mikroe trovo che lo stesso problema è già stato segnalato alla Mikroe stessa già nel 2004.
La domanda è: vi risulta che questo problema sia ancora presente o sono io a sbagliare?
Se è ancora presente, dal 2004 ad oggi, senza che l'abbiano corretto, direi che butto subito nel cesso MikroC e le sue librerie... :mrgreen:
Fabio
Avatar utente
Foto Utentec1b8
3.595 3 8 13
G.Master EY
G.Master EY
 
Messaggi: 1770
Iscritto il: 15 gen 2009, 15:23

1
voti

[2] Re: MikroC e libreria I2C

Messaggioda Foto UtentePaolino » 14 feb 2014, 13:27

Ciao Foto Utentec1b8.
Ho impiegato le routine che indichi (MikroC PRO) 4 anni fa, ma onestamente non ho riscontrato il malfunzionamento. Forse perché l'esperimento prevedeva una connessione sempre presente tra master e slave.

Grazie per la segnalazione! Da tenere presente (= non userò MikroC PRO per I2C)

Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[3] Re: MikroC e libreria I2C

Messaggioda Foto UtenteTardoFreak » 14 feb 2014, 13:39

c1b8 ha scritto:... butto subito nel cesso MikroC e le sue librerie... :mrgreen:

Io l' ho fatto 3 anni fa quando dopo tre passaggi innestati di un puntatore come argomento di funzione il puntatore scompariva.
Era il MikroC per DsPic
Da allora non l' ho mai più utilizzato se non per programmini delle balle.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[4] Re: MikroC e libreria I2C

Messaggioda Foto Utentec1b8 » 14 feb 2014, 13:53

TardoFreak ha scritto:Io l' ho fatto 3 anni fa ...

Bene! Allora procedo anch'io :ok:
Fabio
Avatar utente
Foto Utentec1b8
3.595 3 8 13
G.Master EY
G.Master EY
 
Messaggi: 1770
Iscritto il: 15 gen 2009, 15:23

0
voti

[5] Re: MikroC e libreria I2C

Messaggioda Foto UtenteTardoFreak » 14 feb 2014, 14:14

Per correttezza riporto la situazione (più o meno era questa)
Codice: Seleziona tutto
void func_a(int *pippo)
{
  // Cucu', pippo non punta piu'
}

void func_b(int *pluto)
{
  // Fa qualcosa
  func_a(pluto);
}

void func_c(int *paperino)
{
  // Fa qualcosa
  func_b(paperino);
}

void clarabella(int a, int b)
{
  a++;
  func_c(&a);
}
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

1
voti

[6] Re: MikroC e libreria I2C

Messaggioda Foto Utentegiovannispina » 4 mar 2014, 0:49

TardoFreak ha scritto:Per correttezza riporto la situazione (più o meno era questa)
Codice: Seleziona tutto
void func_a(int *pippo)
{
  // Cucu', pippo non punta piu'
}

void func_b(int *pluto)
{
  // Fa qualcosa
  func_a(pluto);
}

void func_c(int *paperino)
{
  // Fa qualcosa
  func_b(paperino);
}

void clarabella(int a, int b)
{
  a++;
  func_c(&a);
}


è normale che perde il puntatore.

c1b8 ha scritto:Salve a tutti,
ho deciso di provare le librerie I2C (hardware non software) di MikroC per realizzare un piccolo master I2C con un PIC18, mannaggia a me...
Ho riscontrato un problema di blocco del software sulla I2C1_Rd() quando non è connesso un dispositvo slave.
Cercando nel forum della Mikroe trovo che lo stesso problema è già stato segnalato alla Mikroe stessa già nel 2004.
La domanda è: vi risulta che questo problema sia ancora presente o sono io a sbagliare?
Se è ancora presente, dal 2004 ad oggi, senza che l'abbiano corretto, direi che butto subito nel cesso MikroC e le sue librerie... :mrgreen:


I2C_Rd aspetta finché non viene letto il messaggio per questo non ha molto senso leggere da una periferica non connessa. Altrimenti se proprio vuoi che il programma non si blocchi puoi fare una tua implementazione con timeout.

Codice: Seleziona tutto
unsigned int count;
bit rd_flag;

void interrupt()
{
  if (INTCON.T0IF && rd_flag)
  {
    count++;
      
    INTCON.TMR0IE = 1;
    INTCON.T0IF   = 0;
    TMR0L = valore;
  }
}

unsigned short I2C1_MyRead(unsigned short ack)
{
  unsigned short tmp;

  rd_flag = 1;                       
  PIR1.SSPIF = 0;                 
  SSPCON2.RCEN = 1;           
  while (!PIR1.SSPIF && count < 5000/*ms*/) ;

  tmp = SSPBUF;
  if (ack == 0)
    SSPCON2.ACKDT = 1;
  else
    SSPCON2.ACKDT = 0;
   
  PIR1.SSPIF = 0;                 
  SSPCON2.ACKEN = 1;         
  while (!PIR1.SSPIF && count < 5000/*ms*/) ;

  rd_flag = 0;
  return tmp;
}


Spero di esserti stato utile :)
Avatar utente
Foto Utentegiovannispina
126 1 3
 
Messaggi: 43
Iscritto il: 27 lug 2013, 12:31

0
voti

[7] Re: MikroC e libreria I2C

Messaggioda Foto UtenteTardoFreak » 4 mar 2014, 1:03

Normale? :-M
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[8] Re: MikroC e libreria I2C

Messaggioda Foto Utentec1b8 » 4 mar 2014, 1:04

giovannispina ha scritto:è normale che perde il puntatore.

A me non sembra molto normale... perche affermi questo?

giovannispina ha scritto:I2C_Rd aspetta finché non viene letto il messaggio per questo non ha molto senso leggere da una periferica non connessa.
Il punto del mio messaggio non è questo, ma il fatto che a distanza di ormai 9 anni da quando più utenti hanno segnalato il desiderio di avere una funzione di read non bloccante, non sia anocra stata implementata. Questo mi sa di poca affidabilità.

giovannispina ha scritto:Altrimenti se proprio vuoi che il programma non si blocchi puoi fare una tua implementazione con timeout.
Ed allora a cosa mi serve avere delle librerie pronte se devo riscrivermi le funzioni?
Sul forum della Mikroe, nel lontano 2004, ad una richiesta simile alla mia veniva risposto dalla Mikroe, postando il codice della read così come presente nella libreria, dicendo che commentando una sola riga il problema si risolveva... perché non hanno fatto la modifica da loro suggerita in una versione successiva?

Edit: vedo che Foto UtenteTardoFreak ha i miei stessi dubbi....
Fabio
Avatar utente
Foto Utentec1b8
3.595 3 8 13
G.Master EY
G.Master EY
 
Messaggi: 1770
Iscritto il: 15 gen 2009, 15:23

0
voti

[9] Re: MikroC e libreria I2C

Messaggioda Foto Utentegiovannispina » 4 mar 2014, 1:19

TardoFreak ha scritto:Normale? :-M


Sì, in mC, in assenza di uno stack riservato, lo spazio delle variabili locali (parametri compresi) viene riutilizzato da funzione a funzione, per questo non è consigliabile passare un puntatore ad una variabile locale. Per far funzionare il tuo codice su mC dovresti specificare le variabili locali come statiche.
Avatar utente
Foto Utentegiovannispina
126 1 3
 
Messaggi: 43
Iscritto il: 27 lug 2013, 12:31

0
voti

[10] Re: MikroC e libreria I2C

Messaggioda Foto UtenteTardoFreak » 4 mar 2014, 1:23

Quindi confermi che è una cag ... ehm ... un compilatore , diciamo, migliorabile. :roll:
Alla faccia della compatibilità con ANSI C.
Con il C18 lo fai senza problemi. -:-
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

Prossimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 5 ospiti