Pages: [1]   Go Down
Author Topic: Ethernet Shield ENC28J60 - etherShield_web_tempera  (Read 770 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 9
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-wink
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 271
Posts: 21936
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

0
Offline Offline
Edison Member
*
Karma: 24
Posts: 2319
Have you mooed today?
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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...

« Last Edit: September 24, 2010, 05:47:17 pm by pictux » Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 9
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 271
Posts: 21936
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
Code:
// initialize DS18B20 datapin
digitalWrite(TEMP_PIN, LOW);
pinMode(TEMP_PIN, INPUT);  
allora cerchi dove viene definito la variabile TEMP_PIN
In alto trovi:
Code:
#define TEMP_PIN  3
e poi in basso c' é la funzione che legge il valore dal sensore
Code:
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 -
Code:
 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 http://milesburton.com/wiki/index.php?title=Dallas_Temperature_Control_Library
http://milesburton.com/wiki/index.php?title=Dallas_Temperature_Control_Library
e http://www.arduino.cc/playground/Learning/OneWire

Spero di averti potuto fare capire come funziona il codice.

Ciao Uwe
« Last Edit: September 25, 2010, 04:32:09 am by uwefed » Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 9
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sei stato veramente cortese e chiarissimo.
Grazie infinitamente.  smiley
Logged

Pages: [1]   Go Up
Jump to: