Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

LM92 I2C problema lettura temperatura

Tipologie, strumenti di sviluppo, hardware e progetti

Moderatore: Foto UtentePaolino

0
voti

[1] LM92 I2C problema lettura temperatura

Messaggioda Foto UtenteRana » 7 dic 2011, 10:23

Buon giorno,

Mi potete aiutare alla programmazione? Uso un LM92 (sensore di temperatura) e un Stamp che ho fatto con un PIC 16F690.

Devo leggere un signal I2C della temperatura del LM92 con un oscillioscopio.
Non capisco perche quando faccio read_i2c(); e guardo sul oscillioscopio e mi da sempre una data FF, anche se disconnetto il mio print LM92.

Scusa se c'è dei commenti in francese
Codice: Seleziona tutto
//---------------------------------------------------------------------
//                          Definitions & byte                 
//---------------------------------------------------------------------
#byte OSCCON = 0x8F

#define LM92_RD    0x91     // lm92 addresse de lecture
#define LM92_WR    0x90     // lm92 addresse d'écriture
#define LM92_TEMP_PTR  0x00 //adresse du registre pointer Read
//---------------------------------------------------------------------
//                           Variable Globale                       
//---------------------------------------------------------------------
int temp_msb , temp_lsb;
int val;

//---------------------------------------------------------------------
//                           Fonction                       
//---------------------------------------------------------------------

void LM92_RD_TEMP() 
{
    i2c_start();              // debut
    i2c_write(LM92_WR);       // adresse du LM92 en écriture
    i2c_write(LM92_TEMP_PTR); // adresse du registre pointer
    //i2c_start();              // re-start
    i2c_write(LM92_RD);       // adresse du LM92 en lecture
    temp_msb = i2c_read(1);   // stockage du msb temperature +ACK
    temp_lsb = i2c_read(0);   // stockage du Lsb sans ACK
    i2c_stop();               // fin
}

//---------------------------------------------------------------------
//                           Programme principal                     
//---------------------------------------------------------------------

void main()
{
   setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_128|RTCC_8_bit);      //32.7 ms overflow
   setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard
   enable_interrupts(GLOBAL); 

   bit_set(OSCCON,4);
   bit_set(OSCCON,5);
   bit_set(OSCCON,6);

   delay_ms(100);
   
   while(TRUE)
   { 
     LM92_RD_TEMP();
     
     val = temp_msb;
     val = val<<8;//prendre les premiers 8 bits
     val = val +(temp_lsb&0b11111000);//faire un masque sans utilisé les 3 premiers bits
     val = val>>3;// enlever les 3 premiers bits
     
     val = val * 0.0625;
   
   }
}

Avatar utente
Foto UtenteRana
0 3
 
Messaggi: 36
Iscritto il: 5 dic 2011, 14:30

0
voti

[2] Re: LM92 I2C problema lettura temperatura

Messaggioda Foto UtenteAjKDAP » 7 dic 2011, 10:56

Quando scolleghi il sensore dal bus I2C è normale ricevere in lettura il valore 0xFF perché la linea dati è normalmente alta e quindi tutti i bit letti sono settati ad 1.

Rana ha scritto:Non capisco perche quando faccio read_i2c();


Intendi dire che richiami la routine read_i2c(); da sola? se è così stai commettendo un errore.

oppure stai analizzando il comportamento di read_i2c(); all'interno della funzione LM92_RD_TEMP()?
'˙˙˙·٠•● Alberto ●•٠·˙˙˙'
________________________
http://www.ajk.altervista.org
Avatar utente
Foto UtenteAjKDAP
1.255 2 6 9
Expert EY
Expert EY
 
Messaggi: 796
Iscritto il: 17 mag 2006, 0:13
Località: nella coda dei pronti

0
voti

[3] Re: LM92 I2C problema lettura temperatura

Messaggioda Foto UtenteRana » 7 dic 2011, 11:21

Sto controlando al interno della mia funzione LM92_RD_TEMP() !
Al oscilloscoppio trovo
90W address 00~A 91~A FFA FF~A

Il mio problema e la programmazione.
Non riesco a leggere la temperatura su 16 bits e fare la convezione su 13 bits
Avatar utente
Foto UtenteRana
0 3
 
Messaggi: 36
Iscritto il: 5 dic 2011, 14:30

0
voti

[4] Re: LM92 I2C problema lettura temperatura

Messaggioda Foto UtenteAjKDAP » 7 dic 2011, 13:54

la funzione sembrerebbe ok, ma ho un po' di domande:

  • che compilatore/ambiente di sviluppo usi?
  • la funzione i2c_read(); l'hai creata tu? se si, puoi riportarla qui?
  • se i2c_start(); fa parte di una libreria del tuo compilatore, non vedo nessun pezzo di codice che inizializza il modulo i2c hardware, ed inoltre i pin collegati al bus i2c non vengono inizializzati, almeno nella porzione di codice che hai postato.
  • sei sicuro che i pin dell'indirizzamento del bus I2C (pin 6 e 7) siano entrambi collegati a massa?
  • potresti provare a leggere il Manufacturer's ID all'indirizzo 0x07 durante i test così conosci esattamente il valore che devi aspettarti in lettura (0x8001)
'˙˙˙·٠•● Alberto ●•٠·˙˙˙'
________________________
http://www.ajk.altervista.org
Avatar utente
Foto UtenteAjKDAP
1.255 2 6 9
Expert EY
Expert EY
 
Messaggi: 796
Iscritto il: 17 mag 2006, 0:13
Località: nella coda dei pronti

0
voti

[5] Re: LM92 I2C problema lettura temperatura

Messaggioda Foto UtenteRana » 7 dic 2011, 14:11

Uso CCS COMPILER come compilatore,
i2c_read() e i2c_start() sono nella libreria del compilatore.
Per i pin 6 e 7 sono sicurissimo li ho messo a la massa (GND).
Avatar utente
Foto UtenteRana
0 3
 
Messaggi: 36
Iscritto il: 5 dic 2011, 14:30

0
voti

[6] Re: LM92 I2C problema lettura temperatura

Messaggioda Foto UtenteRana » 7 dic 2011, 14:16

come posso mettere un immagine della mia schema?
Avatar utente
Foto UtenteRana
0 3
 
Messaggi: 36
Iscritto il: 5 dic 2011, 14:30

0
voti

[7] Re: LM92 I2C problema lettura temperatura

Messaggioda Foto UtenteTardoFreak » 7 dic 2011, 14:19

Dovresti disegnarlo con FidoCadJ e QUI c'è scritto come fare. Eventualmente puoi caricare l' immagine come allegato dopo averla ridotta a 640x480 pixel.
"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: LM92 I2C problema lettura temperatura

Messaggioda Foto UtenteRana » 7 dic 2011, 14:45

potresti provare a leggere il Manufacturer's ID all'indirizzo 0x07 durante i test così conosci esattamente il valore che devi aspettarti in lettura (0x8001)


Non capisco troppo!

In i2c ho fatto solo i2c_write();

Per leggere ho solo capito che devo utilisare i2c_read();

Che vuole dire Manufacturer's ID ? Serve a che cosa?
Prima devo scriverlo come il POINTER REGISTER?

Codice: Seleziona tutto
void LM92_RD_TEMP() 
{
    i2c_start();             
    i2c_write(LM92_WR);       
    i2c_write(0b00000111);   // POINTER REGISTER
   //i2c_start();             
    i2c_write(LM92_RD);       
    temp_msb = i2c_read(1);   
    temp_lsb = i2c_read(0);   
    i2c_stop();               
}
Avatar utente
Foto UtenteRana
0 3
 
Messaggi: 36
Iscritto il: 5 dic 2011, 14:30

0
voti

[9] Re: LM92 I2C problema lettura temperatura

Messaggioda Foto UtenteRana » 7 dic 2011, 14:46

(0x8001)

Da dove esce quest indirizzo ?
Avatar utente
Foto UtenteRana
0 3
 
Messaggi: 36
Iscritto il: 5 dic 2011, 14:30

0
voti

[10] Re: LM92 I2C problema lettura temperatura

Messaggioda Foto UtenteAjKDAP » 7 dic 2011, 14:50

Non conosco il CCS, comunque come immaginavo, guardando un po' di esempi in rete ho notato questo:

Codice: Seleziona tutto
#use i2c(SLAVE,sda=PIN_C4,scl=PIN_C3,address=0xA0, force_hw)


ovviamente non ti sto consigliando di copiare pari pari quello che ho scritto sopra, ma di leggerti il manuale del compilatore e capire bene come funziona e come deve essere utilizzata la libreria per l'I2C.

Non conoscendo il CCS non posso aiutarti molto.

Rana ha scritto:Da dove esce quest indirizzo ?


Non e' un indirizzo, ma il numero identificativo del produttore. Leggendo l'indirizzo 0x07 dovresti leggere sempre due byte uguali: 0x80 e 0x01.

Ciao
'˙˙˙·٠•● Alberto ●•٠·˙˙˙'
________________________
http://www.ajk.altervista.org
Avatar utente
Foto UtenteAjKDAP
1.255 2 6 9
Expert EY
Expert EY
 
Messaggi: 796
Iscritto il: 17 mag 2006, 0:13
Località: nella coda dei pronti

Prossimo

Torna a Realizzazioni, interfacciamento e nozioni generali.

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti