00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <avr/io.h>
00023 #include <avr/interrupt.h>
00024
00025 #include "global.h"
00026 #include "spi.h"
00027 #include "ads7870.h"
00028
00029
00030
00031
00032 u08 ads7870Init(void)
00033 {
00034
00035 spiInit();
00036
00037 cbi(SPCR, SPR0);
00038 cbi(SPCR, SPR1);
00039
00040
00041
00042 sbi(ADS7870_CS_PORT, ADS7870_CS_PIN);
00043 sbi(ADS7870_CS_DDR, ADS7870_CS_PIN);
00044
00045
00046 if(ads7870ReadReg(ADS7870_ID) != ADS7870_ID_VALUE)
00047 return 0;
00048
00049
00050 ads7870WriteReg(ADS7870_REFOSC, ADS7870_REFOSC_OSCE | ADS7870_REFOSC_REFE | ADS7870_REFOSC_BUFE);
00051
00052
00053 return 1;
00054 }
00055
00056 s16 ads7870Convert(u08 channel)
00057 {
00058
00059 channel |= ADS7870_CH_SINGLE_ENDED;
00060
00061 return ads7870ConvertRaw(channel);
00062 }
00063
00064 s16 ads7870ConvertDiff(u08 channel)
00065 {
00066
00067 channel &= ~ADS7870_CH_SINGLE_ENDED;
00068
00069 return ads7870ConvertRaw(channel);
00070 }
00071
00072 s16 ads7870ConvertRaw(u08 channel)
00073 {
00074 s16 result;
00075
00076 cbi(ADS7870_CS_PORT, ADS7870_CS_PIN);
00077
00078 spiTransferByte(ADS7870_CONVERT | channel);
00079
00080 while( ads7870ReadReg(ADS7870_GAINMUX) & ADS7870_GAINMUX_CNVBSY);
00081
00082 cbi(ADS7870_CS_PORT, ADS7870_CS_PIN);
00083
00084 spiTransferByte(ADS7870_REG_READ | ADS7870_REG_16BIT | ADS7870_RESULTHI);
00085 result = spiTransferByte(0x00)<<8;
00086 result |= spiTransferByte(0x00);
00087
00088 sbi(ADS7870_CS_PORT, ADS7870_CS_PIN);
00089
00090 return result;
00091 }
00092
00093 u08 ads7870ReadReg(u08 reg)
00094 {
00095 u08 data;
00096
00097 cbi(ADS7870_CS_PORT, ADS7870_CS_PIN);
00098
00099 spiTransferByte(ADS7870_REG_READ | reg);
00100
00101 data = spiTransferByte(0x00);
00102
00103 sbi(ADS7870_CS_PORT, ADS7870_CS_PIN);
00104
00105 return data;
00106 }
00107
00108 void ads7870WriteReg(u08 reg, u08 value)
00109 {
00110
00111 cbi(ADS7870_CS_PORT, ADS7870_CS_PIN);
00112
00113 spiTransferByte(ADS7870_REG_WRITE | reg);
00114
00115 spiTransferByte(value);
00116
00117 sbi(ADS7870_CS_PORT, ADS7870_CS_PIN);
00118 }
00119