Go Down

Topic: Ethernet Shield ENC28J60 - etherShield_web_tempera (Read 790 times) previous topic - next topic

trentatre

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 ;)

uwefed

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

pitusso

#2
Sep 25, 2010, 12:46 am Last Edit: Sep 25, 2010, 12:47 am by pictux Reason: 1
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...


trentatre

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 :)

uwefed

#4
Sep 25, 2010, 11:10 am Last Edit: Sep 25, 2010, 11:32 am by uwefed Reason: 1
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: [Select]

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

allora cerchi dove viene definito la variabile TEMP_PIN
In alto trovi:
Code: [Select]

#define TEMP_PIN  3

e poi in basso c' é la funzione che legge il valore dal sensore
Code: [Select]

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: [Select]

 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

trentatre

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

Go Up