preliminary adt7470 support

This commit is contained in:
ProjectPatatoe 2020-05-27 16:01:58 -07:00
commit af86e41223

210
adt7470.ino Normal file
View 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){
}