preliminary adt7470 support
This commit is contained in:
commit
af86e41223
1 changed files with 210 additions and 0 deletions
210
adt7470.ino
Normal file
210
adt7470.ino
Normal file
|
|
@ -0,0 +1,210 @@
|
|||
|
||||
/*
|
||||
ADT7470 address selection
|
||||
FOR 7470's PIN 11:
|
||||
High (10k to Vcc) = 010 1111 (0x5E left justified or 0x2F right justified)
|
||||
Low (10k to GND) = 010 1100 (0x58 left justified or 0x2C right justified)
|
||||
Float (none) = 010 1110 (0x5C left justified or 0x2E right justified)
|
||||
*/
|
||||
|
||||
#include <Wire.h>
|
||||
|
||||
#DEFINE ADT_ADDR 0x58
|
||||
#DEFINE ADT_ADDR_LOW 0x5E
|
||||
#DEFINE ADT_ADDR_FLOAT 0x58
|
||||
#DEFINE ADT_ADDR_HIGH 0x5C
|
||||
//#DEFINE PIN_I2C 10
|
||||
#DEFINE PIN_FULL 11
|
||||
#DEFINE START_FULL 1
|
||||
#DEFINE START_FULL_DURATION 1000
|
||||
|
||||
//how many sensors do we have?
|
||||
byte temp_numsensors = 10;
|
||||
//when was the temp taken?
|
||||
unsigned long temp_millis = 0;
|
||||
|
||||
unsigned long temp_age () {
|
||||
return millis() - temp_millis;
|
||||
}
|
||||
//start measurements
|
||||
//wait 200ms per sensor in chain
|
||||
void temp_measure(bool delay = true) {
|
||||
//set register address 0x40 Bit[7] = 1
|
||||
byte config = conf_get1();
|
||||
Wire.beginTransmission(byte(ADT_ADDR));
|
||||
Wire.write(byte(0x40));
|
||||
|
||||
if (enable) {
|
||||
bitSet(config,7);
|
||||
}
|
||||
else {
|
||||
bitClear(config,7);
|
||||
}
|
||||
Write.write(config);
|
||||
Wire.endTransmission();
|
||||
//wait for 200ms * temp_numsensors
|
||||
if (delay) {
|
||||
delay(200*temp_numsensors);
|
||||
temp_millis = millis();
|
||||
}
|
||||
else
|
||||
{
|
||||
temp_millis = millis() + 200*temp_numsensors;
|
||||
}
|
||||
//temps are ready
|
||||
}
|
||||
//get temp of specific
|
||||
byte temp_get (byte sensor) {
|
||||
//sensor 0 at 0x20
|
||||
//sensor 9 at 0x29
|
||||
if (sensor <= 9)
|
||||
{
|
||||
Wire.beginTransmission(byte(ADT_ADDR));
|
||||
Wire.write(byte(0x20)+sensor);
|
||||
Wire.endTransmission();
|
||||
Wire.requestFrom(byte(ADT_ADDR),1);
|
||||
if (1 == Wire.available())
|
||||
return Wire.read();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
void temp_getmax (void) {
|
||||
//read max TMP05 temperature
|
||||
Wire.beginTransmission(byte(ADT_ADDR));
|
||||
Wire.write(byte(0x78));
|
||||
Wire.endTransmission();
|
||||
Wire.requestFrom(byte(ADT_ADDR),1);
|
||||
if (1 == Wire.available())
|
||||
return Wire.read();
|
||||
return 0;
|
||||
}
|
||||
|
||||
void fans_full_speed (bool stuck) {
|
||||
//pull PIN_FULL low until cleared
|
||||
}
|
||||
|
||||
void fans_full_speed_time (int ms) {
|
||||
//pull PIN_FULL low for ms
|
||||
}
|
||||
int fans_rpm (byte fan) {
|
||||
//page 23+24
|
||||
//tach 0 low at 0x2A
|
||||
//tach 0 high at 0x2B
|
||||
if (fan <= 3)
|
||||
{
|
||||
Wire.beginTransmission(byte(ADT_ADDR));
|
||||
Wire.write(byte(0x2A)+(fan*2));
|
||||
Wire.endTransmission();
|
||||
Wire.requestFrom(byte(ADT_ADDR),2);
|
||||
if (2 == Wire.available())
|
||||
return ((unsigned int)Wire.read() << 8 ) + Wire.read();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
void fans_setpct (int fan, byte pct) {
|
||||
fans_set(fan,pct/0.39);
|
||||
}
|
||||
void fans_set (int fan, byte duty) {
|
||||
//page 25
|
||||
if (fan <= 3)
|
||||
{
|
||||
Wire.beginTransmission(byte(ADT_ADDR));
|
||||
Wire.write(byte(0x32) + fan);
|
||||
Wire.write(duty);
|
||||
Wire.endTransmission();
|
||||
}
|
||||
}
|
||||
//----configuration----
|
||||
//get config register 1, 0x40
|
||||
byte conf_get1 () {
|
||||
Wire.beginTransmission(byte(ADT_ADDR));
|
||||
Wire.write(byte(0x40));
|
||||
Wire.endTransmission();
|
||||
Wire.requestFrom(byte(ADT_ADDR),1);
|
||||
if (1 == Wire.available())
|
||||
return Wire.read();
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
//get config register 2, 0x74
|
||||
byte conf_get2 () {
|
||||
Wire.beginTransmission(byte(ADT_ADDR));
|
||||
Wire.write(byte(0x74));
|
||||
Wire.endTransmission();
|
||||
Wire.requestFrom(byte(ADT_ADDR),1);
|
||||
if (1 == Wire.available())
|
||||
return Wire.read();
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
//page 30 + 36
|
||||
void conf_monitor (bool enable) {
|
||||
//set 1 in bit0 of register 1 (0x40) to monitor all tachs and temps
|
||||
//typo? - set 0 in bit7??? of register 1 (0x40) to monitor all tachs and temps (pg7)
|
||||
byte config = conf_get1();
|
||||
Wire.beginTransmission(byte(ADT_ADDR));
|
||||
Wire.write(byte(0x40));
|
||||
|
||||
if (enable) {
|
||||
bitSet(config,0);
|
||||
}
|
||||
else {
|
||||
bitClear(config,0); //need verify cuz possible datasheet typo
|
||||
}
|
||||
Write.write(config);
|
||||
Wire.endTransmission();
|
||||
}
|
||||
void conf_lowspeed (){}
|
||||
void conf_measure_tach (int tach, bool enable) {
|
||||
//page 36
|
||||
}
|
||||
|
||||
//----device----
|
||||
byte device_id () {
|
||||
//get 0x3d, should be 0x70
|
||||
Wire.beginTransmission(byte(ADT_ADDR));
|
||||
Wire.write(byte(0x3d));
|
||||
Wire.endTransmission();
|
||||
Wire.requestFrom(byte(ADT_ADDR),1);
|
||||
if (1 == Wire.available())
|
||||
return Wire.read();
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
byte device_company () {
|
||||
//get 0x3e, should be 0x41
|
||||
Wire.beginTransmission(byte(ADT_ADDR));
|
||||
Wire.write(byte(0x3e));
|
||||
Wire.endTransmission();
|
||||
Wire.requestFrom(byte(ADT_ADDR),1);
|
||||
if (1 == Wire.available())
|
||||
return Wire.read();
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
byte device_revision () {
|
||||
//get 0x3f
|
||||
Wire.beginTransmission(byte(ADT_ADDR));
|
||||
Wire.write(byte(0x3f));
|
||||
Wire.endTransmission();
|
||||
Wire.requestFrom(byte(ADT_ADDR),1);
|
||||
if (1 == Wire.available())
|
||||
return Wire.read();
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
//----GPIO STUFF----
|
||||
//page 8
|
||||
//---------
|
||||
|
||||
void setup(void){
|
||||
Wire.begin(); //join i2c as master
|
||||
//if start full speed fans
|
||||
|
||||
}
|
||||
|
||||
void loop(void){
|
||||
|
||||
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue