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