Ethernet Shield ENC28J60 - etherShield_web_tempera

Buonasera,
nel codice in oggetto non riesco a trovare indicazioni sul circuito da usare per misurare la temperatura.
Qualcuno lo ha già realizzato?
Grazie e un saluto :wink:

Descrivi per favore meglio il Tuo progetto e inviaci anche i riferimenti e schemi ecc.
Ciao Uwe

ciao,
io personalmente devo ancora provare eth shield con ENC28J60, ho utilizzato esclusivamente shield basati sul chip WIZnet W5100..

In ogni caso, parli di codice in oggetto, ma forse è il caso di postare qualche link / esempio / prototipo.
Se il problema invece è l'hw, più che di circuito, parlerei di sensore vero e proprio.

In questo caso, trovi moltissimi post in merito nel forum - cercando "temperatura" qui nel forum, tra i primi risultati vedo citati:

  • Sonda NTC o PTC
  • LM35dt
    ...

Buona lettura

EDIT: uwe mi hai preceduto di qualche minuto...

il link dove si trova l'hardware e il codice (in fondo alla pagina) è questo.
http://www.nuelectronics.com/estore/index.php?main_page=project_eth

Ho capito che la sonda e One-wire DS1820

Questo il codice che inizializza il pi, ma quale e come deve essere connesso?

// initialize DS18B20 datapin
digitalWrite(TEMP_PIN, LOW);
pinMode(TEMP_PIN, INPUT); // sets the digital pin as input (logic 1)

Tenete presente che le mie conoscenze attuali del C sono modestissime.

Grazie a tutti.
un saluto :slight_smile:

Ciao trentatre

dopo un po di ricerca ho trovato l'esempio a cui Ti riferivi.
Si trova sulla pagina da Te indicata in basso nel paccchetto della libreria sotto esempi. http://www.nuelectronics.com/download/projects/etherShield.zip

hai trovato questo:

// initialize DS18B20 datapin
digitalWrite(TEMP_PIN, LOW);
pinMode(TEMP_PIN, INPUT);

allora cerchi dove viene definito la variabile TEMP_PIN
In alto trovi:

#define TEMP_PIN  3

e poi in basso c' é la funzione che legge il valore dal sensore

void getCurrentTemp(char *temp)
{  
  int HighByte, LowByte, TReading, Tc_100, sign, whole, fract;

  OneWireReset(TEMP_PIN);
  OneWireOutByte(TEMP_PIN, 0xcc);
  OneWireOutByte(TEMP_PIN, 0x44); // perform temperature conversion, strong pullup for one sec

  OneWireReset(TEMP_PIN);
  OneWireOutByte(TEMP_PIN, 0xcc);
  OneWireOutByte(TEMP_PIN, 0xbe);

  LowByte = OneWireInByte(TEMP_PIN);
  HighByte = OneWireInByte(TEMP_PIN);

poi elabora i dati letti per ricavare un valore numerico dccimale con il segno + o -

  TReading = (HighByte << 8) + LowByte;
  sign = TReading & 0x8000;  // test most sig bit
  if (sign) // negative
  {
    TReading = (TReading ^ 0xffff) + 1; // 2's comp
  }
  Tc_100 = (6 * TReading) + TReading / 4;    // multiply by (100 * 0.0625) or 6.25

  whole = Tc_100 / 100;  // separate off the whole and fractional portions
  fract = Tc_100 % 100;

      if(sign) 
            temp[0]='-';
      else
            temp[0]='+';
      
        if(whole/100==0)
           temp[1] =' ';
        else
           temp[1]= whole/100+'0';
      
        temp[2]= (whole-(whole/100)*100)/10 +'0' ;
      temp[3]= whole-(whole/10)*10 +'0';
      temp[4]='.';
      temp[5]=fract/10 +'0';
      temp[6]=fract-(fract/10)*10 +'0';
      temp[7] = '\0';
}

Comunque non sono tanto d' accordo col stile di programmazione.
Non ha senso scrivere qualcosa su un pin e solo dopo definirlo come entrata.
Se vuoi attivare la resistenza di pullup interna lo fai dipo che hai definito il pin come entrata scrivendo un HIGH.

Altra cosa un po inaspettata per chi non conosce un po meglio il C é che la funzione non da valore di ritorno ma riceve come valore di entata un puntatore a una stringa che nella funzione modifica il la stringa e poi il programma chiamante userá la stringa perché prenderá i dati a cui punta il puntatore.

Per capirne di piú dovresti leggerti un po una spiegazione del C dove spiegnao i puntatori.

ritornando al sensore:
é collegato al pin 3 e come collegamento guarda pag 6 di MilesBurton.com
MilesBurton.com
e Arduino Playground - OneWire

Spero di averti potuto fare capire come funziona il codice.

Ciao Uwe

Sei stato veramente cortese e chiarissimo.
Grazie infinitamente. :slight_smile: