projekty/Source/example1/src/AnalogDevices.c

Go to the documentation of this file.
00001 /*
00002  * $Id: AnalogDevices.c,v 1 2005/07/04 12:00:00 BorisK Exp $
00003  *
00004  * Copyright (C) 2005 ONTRACK s.r.o.
00005  *
00006  * This program is free software; you can redistribute it and/or
00007  * modify it under the terms of the GNU General Public License
00008  * as published by the Free Software Foundation; either version 2
00009  * of the License, or (at your option) any later version.
00010  *
00011  * This program is distributed in the hope that it will be useful,
00012  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014  * GNU General Public License for more details.
00015  *
00016  * You should have received a copy of the GNU General Public License
00017  * along with this program; if not, write to the Free Software
00018  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA    
00019  * 02111-1307, USA.
00020  *
00021  * [1] ARM-based Microcontroller LPC2119/2129/2194/2292/9994, "Preliminary User Manual", February 03, 2004, Philips
00022  * [2] AD7414 - SMBus/I2C Digital Temperature Sensor in 6-Pin SOT with SMBus Alert and Over     Temperature Pin, 2003, AnalogDevices, http://www.analog.com/UploadedFiles/Data_Sheets/723837220AD7414_5_e.pdf
00023  * [3] Prelimiulary Technical Data, AD5382, Analog Devices, http://www.analog.com/UploadedFiles/Data_Sheets/176040271AD5382_a.pdf
00024  * Written by Boris Kralik <kralikbo@yahoo.com>, 2005
00025  * [4] 8-/16-Channel, 3 V/5 V, Serial Input, Single-Supply, 12-/14-Bit Voltage Output AD5390/AD5391/AD5392
00026  *
00027  */
00028 #include "AnalogDevices.h"
00029 /*
00030 *
00031 *       AD5391_SetGain
00032 *       !!!! NNNNNNNNNN EEEEEEEEEEEEE FFFFFFFFFFFFFFF UUUUUUUUUUUUUU NNNNNNNNNNNN GGGGGGGGGG UUUUUUUUU JJJJJJJJJJJJ EEEEEEEEEEE
00033 *
00034 *
00035 *
00036 */
00037 short AD5391_SetGain(short channell,uint16_t uiGain){
00038         uint8_t inpH=0,inpL=0;
00039         if (SendSlaveAdress(I2C_AD5391_W) != 0 )
00040                 {printf("\n\rError Set slave address, I2STAT=0x%X",I2C_I2STAT);return -1;} 
00041                         else    {
00042                                 #if 0
00043                                         printf("\n\rSTA:0x%X",I2C_I2STAT);
00044                                 #endif
00045                                 WD_Reset();
00046                                 }
00047         WriteOnI2C(channell);
00048         #if 0
00049                 printf("\n\rWriteOnI2C(0x%X)=0x%x",0x40,WriteOnI2C(0x40));      //0x40
00050         #else
00051                 WriteOnI2C(0x40);       // Write REG1 and REG0
00052         #endif
00053         inpH = ((uiGain & 0xFF00) >> 8);
00054         inpL =  (uiGain & 0x00FF);
00055         
00056         #if 0
00057                 printf("\n\rWriteOnI2C(0x%X)=0x%x",0x0F,WriteOnI2C((inpH)|(1 << 6)));   //Gain
00058         #else
00059                 WriteOnI2C((inpH)|(1 << 6));
00060         #endif
00061         //for(i=0;i<1000;i++);
00062         #if 0
00063                 printf("\n\rWriteOnI2C(0x%X)=0x%x",0x0F,WriteOnI2C(inpL));      //Gain
00064         #else
00065                 WriteOnI2C(inpL);
00066         #endif
00067         //for(i=0;i<1000;i++);
00068         I2C_SetSTO();
00069         return 0;
00070 }
00071 /*
00072 *
00073 *       AD5391_SetOffset
00074 *       !!!! NNNNNNNNNN EEEEEEEEEEEEE FFFFFFFFFFFFFFF UUUUUUUUUUUUUU NNNNNNNNNNNN GGGGGGGGGG UUUUUUUUU JJJJJJJJJJJJ EEEEEEEEEEE
00075 *
00076 *
00077 *
00078 */
00079 short AD5391_SetOffset(short channell,uint16_t uiOffset){
00080         uint8_t inpH=0,inpL=0;
00081         if (SendSlaveAdress(I2C_AD5391_W) != 0 )
00082                 {printf("\n\rError Set slave address, I2STAT=0x%X",I2C_I2STAT);return -1;} 
00083                         else    ;       //printf("\n\rSTA:0x%X",I2C_I2STAT);
00084         WriteOnI2C(channell);
00085         #if 0
00086                 printf("\n\rWriteOnI2C(0x%X)=0x%x",0x80,WriteOnI2C(0x80));      //0x80
00087         #else
00088                 WriteOnI2C(0x80);
00089         #endif
00090         inpH = ((uiOffset & 0xFF00) >> 8);
00091         inpL =  (uiOffset & 0x00FF);
00092         #if 0
00093                 printf("\n\rWriteOnI2C(0x%X)=0x%x",0x0F,WriteOnI2C((inpH)|(1 << 7)));   //Offset
00094         #else
00095                 WriteOnI2C((inpH)|(1 << 7));
00096         #endif
00097         #if 0
00098                 printf("\n\rWriteOnI2C(0x%X)=0x%x",0x0F,WriteOnI2C(inpL));      //Offset
00099         #else
00100                 WriteOnI2C(inpL);
00101         #endif
00102         I2C_SetSTO();
00103         return 0;
00104 }
00105 /*
00106 *
00107 *
00108 *
00109 *
00110 *
00111 *
00112 */
00113 void AD5391_SoftReset(void){
00114         if (SendSlaveAdress(I2C_AD5391_W) != 0 )
00115                 {printf("\n\rError Set slave address, I2STAT=0x%X",I2C_I2STAT);return;} 
00116                         else    ; //printf("\n\rSTA:0x%X",I2C_I2STAT);
00117         WriteOnI2C(0x0F);
00118         WriteOnI2C(0x00);
00119         WriteOnI2C(0x00);
00120         I2C_SetSTO();
00121 }
00122 
00123 /*
00124 *
00125 *
00126 *
00127 *
00128 *
00129 *
00130 */
00131 void AD5391_SoftClr(void){
00132         if (SendSlaveAdress(I2C_AD5391_W) != 0 )
00133                 {printf("\n\rError Set slave address, I2STAT=0x%X",I2C_I2STAT);return;} 
00134                         else    ;//pvoidrintf("\n\rSTA:0x%X",I2C_I2STAT);
00135         WriteOnI2C(0x02);
00136         WriteOnI2C(0x00);
00137 
00138         WriteOnI2C(0x00);
00139         I2C_SetSTO();
00140 }
00141 /*
00142 *       REG1=0, REG0=0, A3=1, A2=A1=A0=0
00143 *               0000 1000
00144 *               00xxxxxx
00145 *
00146 *
00147 *
00148 */
00149 void AD5391_SoftPowerDown(void){
00150         I2C_SetSTO();
00151         #if 0
00152                 printf("\n\r\tPowerDown");
00153         #endif
00154         if (SendSlaveAdress(I2C_AD5391_W) != 0 )
00155                 {printf("\n\rError Set slave address, I2STAT=0x%X",I2C_I2STAT);return;} 
00156                         else    ;//printf("\n\rSTA:0x%X",I2C_I2STAT);
00157         WriteOnI2C(0x08);
00158         WriteOnI2C(0x00);
00159         WriteOnI2C(0x00);
00160         I2C_SetSTO();
00161 }
00162 /*
00163 *       REG1=0=REG0=0, A3=1, A2=0, A1=0, A0=1
00164 *         0000       1001
00165 *         00xxxxxx
00166 *
00167 *
00168 *
00169 */
00170 void AD5391_SoftPowerUp(void){
00171         I2C_SetSTO();
00172         if (SendSlaveAdress(I2C_AD5391_W) != 0 )
00173                 {printf("\n\rError Set slave address, I2STAT=0x%X",I2C_I2STAT);return;} 
00174                         else    ;//printf("\n\rSTA:0x%X",I2C_I2STAT);
00175         #if 0
00176                 printf("\n\rWriteOnI2C(0x%X)=0x%X",0x09,WriteOnI2C(0x09));      //0000 1001
00177                 printf("\n\rWriteOnI2C(0x%X)=0x%X",0x00,WriteOnI2C(0x00));      //0000 0000
00178                 printf("\n\rWriteOnI2C(0x%X)=0x%X",0x00,WriteOnI2C(0x00));      //0000 0000
00179         #else
00180                 WriteOnI2C(0x09);
00181                 WriteOnI2C(0x00);
00182                 WriteOnI2C(0x00);
00183         #endif
00184         I2C_SetSTO();
00185 }
00186 /*              SFR Tab. 22 in [4], page 30; figure 33 page 27, EREG1=0 REG0=0, table 27/28, page 33
00187 *               Power Down = GND, REF=2.5V, Boost=ON, Internal refernecies, Channel Monitor = OFF, ThermalMonitor=ON, Group 0-7
00188 *                                     CR=011101xxxx01
00189 *                                A3210 Reg10
00190 *               R 1010 1100 0000 1100 0000 0111 0100 0001
00191 *                  A    C    0    C    0     7    4    1
00192 *
00193 */
00194 short AD5391_ControlRegisterWrite(void){
00195         I2C_SetSTO();
00196         if ((SendSlaveAdress(I2C_AD5391_W) != 0) || (I2C_I2STAT == 0x20))       //0xAC
00197                 {
00198                         #if 0
00199                                 printf("\n\rError Set slave address, I2STAT=0x%X",I2C_I2STAT);
00200                         #endif
00201                         WD_Reset();
00202                         return -1;
00203                         } 
00204                         else {  
00205                         #if 0
00206                                 printf("\n\rAD5391_ControlRegisterWrite() - OK - STA:0x%X",I2C_I2STAT);
00207                         #endif
00208                                 WD_Reset();
00209                         }
00210         #if 0
00211                 printf("\n\rWriteOnI2C(0x%X)=0x%x",0x0C,WriteOnI2C(0x0C));
00212                 printf("\n\rWriteOnI2C(0x%X)=0x%x",(0x07),WriteOnI2C(0x07));
00213                 printf("\n\rWriteOnI2C(0x%X)=0x%x",0x41,WriteOnI2C(0x41));
00214         #else
00215                 WriteOnI2C(0x0C);       //Control register Write (A3-A0)
00216                 WriteOnI2C(0x14);       //
00217                 WriteOnI2C(0x0C);
00218 
00219 /*              WriteOnI2C(0x07);       
00220                 WriteOnI2C(0x41);*/
00221         #endif
00222         I2C_SetSTO();
00223         return 0;
00224 }
00225 /*
00226 */
00227 short AD5391_ControlRegisterRead(void){
00228         I2C_SetSTO();
00229         if (SendSlaveAdress(I2C_AD5391_W) != 0 )        //0xAC
00230                 {printf("\n\r(1)Error Set slave address, I2STAT=0x%X",I2C_I2STAT);return -1;} 
00231                 else {  
00232                         #if 0
00233                                 printf("\n\rSTA:0x%X",I2C_I2STAT);
00234                         #else
00235                                 ;
00236                         #endif
00237                         }
00238         /*    ToDo      */
00239         #if 0
00240                 printf("\n\rWriteOnI2C(0x%X)=0x%x",0x0C,WriteOnI2C(0x0C));      //Write A3-A0
00241                 printf("\n\rWriteOnI2C(0x%X)=0x%x",0x0C,WriteOnI2C(0x00));      //Write Reg1, Reg0
00242         #else
00243                 WriteOnI2C(0x0C);       //Write A3-A0
00244                 WriteOnI2C(0x00);       //Write Reg1, Reg0
00245         #endif
00246         I2C_SetSTO();
00247         if (SendSlaveAdress(I2C_AD5391_R) != 0 )
00248                 {printf("\n\r(2)Error Set slave address, I2STAT=0x%X",I2C_I2STAT);return -1;} 
00249                         else {  
00250                         #if 0
00251                                 printf("\n\rSTA:0x%X",I2C_I2STAT);
00252                         #else
00253                                 ;
00254                         #endif
00255                         ;
00256                         }       
00257         printf("\n\rRead0:0x%X",ReadOnI2C());
00258         printf("\n\rRead0:0x%X",ReadOnI2C());   
00259         I2C_SetSTO();
00260         return 0;
00261 }
00262 /*
00263 *
00264 *
00265 *
00266 *
00267 *
00268 *
00269 */
00270 int16_t AD5391Write(short channel,uint16_t inp){
00271         int16_t  ret=-1;
00272         unsigned char inpH=0,inpL=0;
00273         #if 1
00274                 printf("\n\r************\n\rAD5391Write(0x%X,0x%X)",channel,inp);
00275         #endif
00276         I2C_I2DAT       =       0;
00277         disableIRQ();
00278         WD_Reset();
00279         if ((ret = SendSlaveAdress(I2C_AD5391_W)) != 0 )
00280                 {printf("\n\rError Set slave address = %d,I2STAT=0x%X",ret,I2C_I2STAT);
00281                         WD_Reset();
00282                         return ret;} 
00283                         else    ;//printf("\n\rSTA:0x%X",I2C_I2STAT);
00284         WD_Reset();
00285         ret = WriteOnI2C(channel);      //printf("\n\rWriteOnI2C(0x%X)=0x%x",(channel),ret);//Channel
00286         WD_Reset();
00287         inpH = ((inp & 0xFF00) >> 8);
00288         WD_Reset();
00289         inpL =   (inp & 0x00FF);
00290         #if 0
00291                 printf("\n\rinp=0x%X,inpH=0x%X,inpL=0x%X",inp,inpH,inpL); 
00292         #endif
00293         WD_Reset();
00294         ret = WriteOnI2C((inpH |(1 << 7) | (1 << 6)));//printf("\n\rWriteOnI2C(0x%X)=0x%x",inp,ret);
00295         WD_Reset();
00296         ret = WriteOnI2C(inpL);//printf("\n\rWriteOnI2C(0x%X)=0x %x",inp,ret);
00297         WD_Reset();
00298         I2C_SetSTO();
00299         WD_Reset();
00300         enableIRQ();
00301         return 0;
00302 }
00303 short AD5391_Init(void){
00304         if (SendSlaveAdress(I2C_AD5391_W) != 0 )
00305                 {
00306                 #if 1
00307                         printf("\n\rError Set slave address, I2STAT=0x%X",I2C_I2STAT);
00308                 #endif
00309                         WD_Reset();
00310                         I2C_SetSTO();
00311                         return 0xFF;
00312                 } 
00313                         else    {
00314                                 #if 0
00315                                         printf("\n\rSTA:0x%X",I2C_I2STAT);
00316                                 #endif
00317                                 I2C_SetSTO();
00318                                 WD_Reset();
00319                                 return 0;
00320                                 }
00321         return 0;
00322 }
00323 /********************************************************************************************************************************
00324         SetOffset
00325         [3] page 18, Table V, SFR Register Functions (REG1=1, REG0=0)
00326                 REG1=0 REG0=1, A4-A0=00000 - ???
00327                   [0    1] [0 0 A4 A3 A2 A1 A0] = don't care
00328                    0    1
00329                 [REG1 REG0 DB13 DB12 DB11 DB10 DB9 DB8 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0] =       0x00 0x00
00330                   gain   
00331 */
00332 short AD5382_SetGain(short channell,uint16_t uiGain){
00333         uint8_t inpH=0,inpL=0;
00334         WD_Reset();
00335         if (SendSlaveAdress(I2C_AD5382_W) != 0 )
00336                 {
00337                 #if 0
00338                         printf("\n\rError Set slave address, I2STAT=0x%X",I2C_I2STAT);WD_Reset();
00339                 #else
00340                         WD_Reset();
00341                 #endif
00342                         return -1;} 
00343                         else 
00344                         #if 0
00345                                 printf("\n\rSG:STA:0x%X",I2C_I2STAT);
00346                         #else
00347                                 ;
00348                         #endif
00349         #if 0
00350                 printf("\n\rWrite PointerByte - WriteOnI2C(0x%X)=0x%X",channell,WriteOnI2C(channell));
00351                 printf("\n\rWriteOnI2C(0x%X)=0x%x",0x40,WriteOnI2C(0x40));      //0x40 - Gain register selected
00352         #else
00353                 WD_Reset();
00354                 WriteOnI2C(channell);
00355                 WD_Reset();
00356                 WriteOnI2C(0x40);       //0x40 - Gain register selected
00357         #endif
00358         WD_Reset();
00359         inpH = ((uiGain & 0xFF00) >> 8);
00360         WD_Reset();
00361         inpL =  (uiGain & 0x00FF);
00362         #if 0
00363                 printf("\n\rWriteOnI2C(0x%X)=0x%x",0x0F,WriteOnI2C((inpH)|(1 << 6)));   //Gain
00364                 printf("\n\rWriteOnI2C(0x%X)=0x%x",0x0F,WriteOnI2C(inpL));      //Gain
00365         #else
00366                 WriteOnI2C((inpH)|(1 << 6));WD_Reset(); //Gain
00367                 WriteOnI2C(inpL);WD_Reset();            //Gain
00368         #endif
00369         WD_Reset();
00370         I2C_SetSTO();
00371         return 0;
00372 }
00373 /*
00374         SetOffset
00375         [3] page 18, Table V, SFR Register Functions (REG1=1, REG0=0)
00376                 REG1=1 REG0=0,   A4-A0=00000 - ???
00377                      1      0,  [A4 A3 A2 A1 A0]        =       don't care
00378                 [REG1 REG0 DB13 DB12 DB11 DB10 DB9 DB8 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0] =       0x00 0x00
00379                   offset   
00380 */
00381 short AD5382_SetOffset(short channell,uint16_t uiOffset){
00382         uint8_t inpH=0,inpL=0;
00383         if (SendSlaveAdress(I2C_AD5382_W) != 0 )
00384                 {printf("\n\rError Set slave address, I2STAT=0x%X",I2C_I2STAT);return -1;} 
00385                         else    
00386                                 #if 0
00387                                         printf("\n\rSTA:0x%X",I2C_I2STAT);
00388                                 #else
00389                                         ;
00390                                 #endif
00391         #if 0
00392                 printf("\n\rWrite PointerByte - WriteOnI2C(0x%X)=0x%X",channell,WriteOnI2C(channell));          
00393                 printf("\n\rWriteOnI2C(0x%X)=0x%x",0x80,WriteOnI2C(0x80));      //0x80 - Offset register selected
00394         #else
00395                 WD_Reset();
00396                 WriteOnI2C(channell);           
00397                 WD_Reset();
00398                 WriteOnI2C(0x80);       //0x80 - Offset register selected
00399         #endif
00400         inpH = ((uiOffset & 0xFF00) >> 8);WD_Reset();
00401         inpL =  (uiOffset & 0x00FF);WD_Reset();
00402         #if 0
00403                 printf("\n\rWriteOnI2C(0x%X)=0x%x",0x0F,WriteOnI2C((inpH)|(1 << 7)));   //Offset
00404                 printf("\n\rWriteOnI2C(0x%X)=0x%x",0x0F,WriteOnI2C(inpL));      //Offset
00405         #else
00406                 WD_Reset();
00407                 WriteOnI2C((inpH)|(1 << 7));    //Offset
00408                 WD_Reset();
00409                 WriteOnI2C(inpL);       //Offset
00410         #endif
00411         WD_Reset();
00412         I2C_SetSTO();
00413         return 0;
00414 }
00415 /*
00416         Soft Reset
00417         [3] page 18, Table V, SFR Register Functions (REG1=0, REG0=0), Soft Reset
00418                 REG1=REG0=0, A4-A0=01000, DB13-DB0=Don't Care
00419                 [0 0 0 A4] [A3 A2 A1 A0]        =       0x0F
00420                  0 0 0 0    1  1  1  1
00421                 [REG1 REG0 DB13 DB12 DB11 DB10 DB9 DB8 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0] =       0x00 0x00
00422                   0    0     0    0    0    0   0   0   0   0   0   0   0   0   0   0
00423 */
00424 short AD5382_SoftReset(void){
00425         #if 0
00426                 printf("\n\rAD5382_SoftReset");
00427         #else
00428                 ;
00429         #endif
00430         if (SendSlaveAdress(I2C_AD5382_W) != 0 )
00431                 {printf("\n\rError Set slave address AD5382_SoftReset, I2STAT=0x%X",I2C_I2STAT);WD_Reset();
00432                         I2C_SetSTO();return 0xFF;} 
00433                         else    
00434                         #if 0
00435                                 printf("\n\rSTA:0x%X",I2C_I2STAT);
00436                         #else
00437                                 ;WD_Reset();
00438                         #endif
00439         #if 0
00440                 printf("\n\rWriteOnI2C(0x%X)=0x%x",0x02,WriteOnI2C(0x0F));      //0000 1111
00441                 printf("\n\rWriteOnI2C(0x%X)=0x%x",0x00,WriteOnI2C(0x00));      //0000 0000
00442                 printf("\n\rWriteOnI2C(0x%X)=0x%x",0x00,WriteOnI2C(0x00));      //0000 0000
00443         #else
00444                 WriteOnI2C(0x0F);       //0000 1111
00445                 WriteOnI2C(0x00);       //0000 0000
00446                 WriteOnI2C(0x00);       //0000 0000
00447         #endif
00448         WD_Reset();
00449         I2C_SetSTO();
00450         return 0;
00451 }
00452 /*
00453         SoftClr
00454         [3] page 18, Table V, SFR Register Functions (REG1=0, REG0=0), Soft power Up
00455                 REG1=REG0=0, A4-A0=01000, DB13-DB0=Don't Care
00456                 [0 0 0 A4] [A3 A2 A1 A0]        =       0x02
00457                  0 0 0 0    0  0  1  0
00458                 [REG1 REG0 DB13 DB12 DB11 DB10 DB9 DB8 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0] =       0x00 0x00
00459                   0    0     0    0    0    0   0   0   0   0   0   0   0   0   0   0
00460 */
00461 void AD5382_SoftClr(void){
00462         if (SendSlaveAdress(I2C_AD5382_W) != 0 )
00463                 {printf("\n\rError Set slave address, I2STAT=0x%X",I2C_I2STAT);return;} 
00464                         else ;//        printf("\n\rSTA:0x%X",I2C_I2STAT);
00465         #if 0
00466                 printf("\n\rWriteOnI2C(0x%X)=0x%x",0x02,WriteOnI2C(0x02));      //0000 0010
00467                 printf("\n\rWriteOnI2C(0x%X)=0x%x",0x00,WriteOnI2C(0x00));      //0000 0000
00468                 printf("\n\rWriteOnI2C(0x%X)=0x%x",0x00,WriteOnI2C(0x00));      //0000 0000
00469         #else
00470                 WriteOnI2C(0x02);       //0000 0010
00471                 WriteOnI2C(0x00);       //0000 0000
00472                 WriteOnI2C(0x00);       //0000 0000
00473         #endif
00474         I2C_SetSTO();
00475 }
00476 /*
00477         Executing this instruction preforms a global power-down feature that puts all channels into a low power mode
00478         [3] page 18, Table V, SFR Register Functions (REG1=0, REG0=0), Soft power Up
00479                 REG1=REG0=0, A4-A0=01000, DB13-DB0=Don't Care
00480                 [0 0 0 A4] [A3 A2 A1 A0]        =       0x08
00481                  0 0 0 0    1  0  0  0
00482                 [REG1 REG0 DB13 DB12 DB11 DB10 DB9 DB8 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0] =       0x00 0x00
00483                   0    0     0    0    0    0   0   0   0   0   0   0   0   0   0   0
00484 */
00485 short AD5382_SoftPowerDown(void){
00486         if (SendSlaveAdress(I2C_AD5382_W) != 0 )
00487                 {printf("\n\rError Set slave address, I2STAT=0x%X",I2C_I2STAT);return -1;} 
00488                         else ;
00489         #if 0
00490                 printf("\n\rWriteOnI2C(0x%X)=0x%x",0x08,WriteOnI2C(0x08));      //0000 1000
00491                 printf("\n\rWriteOnI2C(0x%X)=0x%x",0x00,WriteOnI2C(0x00));      //0000 0000
00492                 printf("\n\rWriteOnI2C(0x%X)=0x%x",0x00,WriteOnI2C(0x00));      //0000 0000
00493         #else
00494                 WriteOnI2C(0x08);       //0000 1000
00495                 WriteOnI2C(0x00);       //0000 0000
00496                 WriteOnI2C(0x00);       //0000 0000
00497         #endif
00498         I2C_SetSTO();
00499         return 0;
00500 }
00501 /*
00502         This instruction is used to power up the output amplifiers and internal reference.
00503         
00504         [3] page 18, Table V, SFR Register Functions (REG1=0, REG0=0), Soft power Up
00505                 REG1=REG0=0, A4-A0=01001, DB13-DB0=Don't Care
00506                 [0 0 0 A4] [A3 A2 A1 A0]        =       0x09
00507                  0 0 0 0    1  0  0  1
00508                 [REG1 REG0 DB13 DB12 DB11 DB10 DB9 DB8 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0] =       0x00 0x00
00509                   0    0     0    0    0    0   0   0   0   0   0   0   0   0   0   0
00510 */
00511 short AD5382_SoftPowerUp(void){
00512         if (SendSlaveAdress(I2C_AD5382_W) != 0 )
00513                 {printf("\n\rError Set slave address, I2STAT=0x%X",I2C_I2STAT);return -1;} 
00514                         else ;
00515         #if 0
00516                 printf("\n\rWriteOnI2C(0x%X)=0x%x",0x09,WriteOnI2C(0x09));      //0000 1001
00517                 printf("\n\rWriteOnI2C(0x%X)=0x%x",0x00,WriteOnI2C(0x00));      //0000 0000
00518                 printf("\n\rWriteOnI2C(0x%X)=0x%x",0x00,WriteOnI2C(0x00));      //0000 0000
00519         #else
00520                 WriteOnI2C(0x09);       //0000 1001
00521                 WriteOnI2C(0x00);       //0000 0000
00522                 WriteOnI2C(0x00);       //0000 0000
00523         #endif
00524         I2C_SetSTO();
00525         return 0;
00526 }
00527 /*
00528         This instruction is used for control registers
00529         A4 A3 A2 A1 A0
00530          0  1  1  0  0 = 0xC
00531         REG0 REG1 CR13 CR12 CR11 CR10 CR9 CR8 | CR7 CR6 CR5 CR4 CR3 CR2 CR1 CR0
00532          0    0    0   1     0    1   0   0   |  0   0   0   0   0   1   0   0  =       0x14 | 0x04
00533 */
00534 short AD5382_ControlRegister(void){
00535         I2C_SetSTO();
00536         if ((SendSlaveAdress(I2C_AD5382_W) != 0 ) || (I2C_I2STAT == 0x20))
00537                 {printf("\n\rError Set slave address AD5382_ControlRegister '0x%X', I2STAT=0x%X",I2C_AD5382_W,I2C_I2STAT);return -1;} 
00538                         else {  
00539                         #if 0   //OK
00540                                 printf("\n\rSTA:0x%X",I2C_I2STAT);
00541                         #endif
00542                         WD_Reset();
00543                         }
00544         #if 0
00545                 printf("\n\rA:D(0x%X)=0x%X",0x0C,WriteOnI2C(0x0C));
00546                 printf("\n\rA:D1(0x%X)=0x%X",(0x14 | (1 << 3)),WriteOnI2C((0x14)|(1 << 3)));    //
00547                 printf("\n\rA:D2(0x%X)=0x%X",0x04,WriteOnI2C(0x01));
00548         #else
00549                 WriteOnI2C(0x0C);
00550                 WriteOnI2C((0x14)|(1 << 3));    //
00551                 WriteOnI2C(0x01);       
00552         #endif
00553         WD_Reset();
00554         I2C_SetSTO();
00555         return 0;
00556 }
00557 int16_t AD5382Write(short channel,uint16_t inp){
00558         int16_t  ret=-1;
00559         unsigned char inpH=0,inpL=0;
00560 //      printf("\n\r************\n\rAD5382Write(0x%X,0x%X)",channel,inp);
00561         I2C_I2DAT       =       0;
00562 //      disableIRQ();
00563         I2C_SetSTO();
00564         if ((ret = SendSlaveAdress(I2C_AD5382_W)) != 0 )
00565                 {printf("\n\rError Set slave address = %d,I2STAT=0x%X",ret,I2C_I2STAT);return ret;} 
00566                         else    ;//printf("\n\rSTA:0x%X",I2C_I2STAT);
00567         ret = WriteOnI2C((0x00 + channel) );    //printf("\n\rWriteOnI2C(0x%X)=0x%x",(0x00),ret);//Channel
00568         inpH = ((inp & 0xFF00) >> 8);
00569         inpL =   (inp & 0x00FF);
00570         #if 0
00571                 printf("\n\rinp=0x%X,inpH=0x%X,inpL=0x%X",inp,inpH,inpL); 
00572         #endif
00573         ret = WriteOnI2C(inpH |(1 << 7) | (1 << 6));//printf("\n\rWriteOnI2C(0x%X)=0x%x",inp,ret);
00574         ret = WriteOnI2C(inpL);//printf("\n\rWriteOnI2C(0x%X)=0x%x",inp,ret);
00575         I2C_SetSTO();
00576         enableIRQ();
00577         return 0;
00578 }
00579 int16_t AD7414_5Read(uint8_t what){
00580         uint16_t        ret=0,oT2,T2;
00581         uint8_t         T1,oT1,pom=0;
00582         switch(what)    {
00583                 case 0:
00584                         I2C_I2DAT = 0;
00585                         #if 0
00586                                 printf("\n\rAD7114Read->SendSlaveAdress00");
00587                         #endif
00588                         disableIRQ();
00589                         if(((pom=SendSlaveAdress(I2C_AD7414_0_W_GND)) != 0) || (I2C_I2STAT != 0x20)) {enableIRQ();return -1;}//Set slave address
00590                         #if 0
00591                                 printf("\n\rAD7114Read->SendSlaveAdress01");
00592                         #endif
00593                         enableIRQ();
00594                         //ret = WriteOnI2C(0x00);//printf("WriteOnI2C(0x%X)=0x%X",0,ret);
00595                         I2C_SetSTO();//end of FRAME 1, Figure 1
00596                         if (SendSlaveAdress(I2C_AD7414_0_R_GND) != 0) return -1;
00597                         oT2=T2=ReadOnI2C();
00598                         T2=(T2 << 2);
00599                         I2C_I2CONSET    |=      I2C_FLAG_AA;//ACK by master
00600 
00601                         oT1=T1=ReadOnI2C();     //frame 3, Figure 8
00602                         //printf("\n\r\toT1=0x%X, oT2=0x%X",oT1,oT2);
00603                         T1 &= 0xC0; T1 = (T1 >> 6);
00604                         T2 = (T2 | T1); //DB9 - DB0
00605                         if ((T2 & 0x300) == 1)
00606                                 ret = (((T2&0x1FF)/512)/4);// Negative Temperature=(ADC-512)/4
00607                                 else ret = (T2/4);      // Positive Temperature = ADC/4
00608                         #if 0
00609                                 printf("\n\r0:Temp=%d",ret);
00610                         #endif
00611                         I2C_SetSTO();//end of FRAME 3, Figure 8
00612                         break;
00613                 case 1:
00614                         I2C_I2DAT = 0;
00615                         //printf("\n\rAD7114Read->SendSlaveAdress10");
00616                         if(((pom=SendSlaveAdress(I2C_AD7415_0_W_VDD)) != 0) || (I2C_I2STAT != 0x20)){enableIRQ();return -1;}//Set slave address
00617                         //printf("\n\rAD7114Read->SendSlaveAdress11");
00618                         enableIRQ();
00619                         //WriteOnI2C(0x00);
00620                         I2C_SetSTO();//end of FRAME 1, Figure 1
00621                         SendSlaveAdress(I2C_AD7415_0_R_VDD);
00622                         T2=ReadOnI2C();//printf("\n\rT2=0x%X",T2);
00623                         T2=(T2 << 2);
00624                         I2C_I2CONSET    |=      I2C_FLAG_AA;//ACK by master
00625 
00626                         T1=ReadOnI2C(); //frame 3, Figure 8
00627                         T1 &= 0xC0; //printf("\n\rT1=0x%X",T1);
00628                         T1 = (T1 >> 6);
00629                         T2 = (T2 | T1); //DB9 - DB0
00630                         if ((T2 & 0x300) == 1)
00631                                 ret = (((T2&0x1FF)/512)/4);// Negative Temperature=(ADC-512)/4
00632                                 else ret = (T2/4);      // Positive Temperature = ADC/4
00633                         I2C_SetSTO();//end of FRAME 3, Figure 8
00634                         //printf("\n\r1:Temp=%d",ret);
00635                         break;
00636                 case 2:
00637                         I2C_I2DAT = 0;
00638                         //printf("\n\rAD7114Read->SendSlaveAdress2");
00639                         if(((pom=SendSlaveAdress(I2C_AD7414_1_W_GND)) != 0) || (I2C_I2STAT != 0x20)){enableIRQ();return -1;}//Set slave address
00640                         //printf("\n\rAD7114Read->SendSlaveAdress3");
00641                         enableIRQ();
00642                         //WriteOnI2C(0x00);
00643                         I2C_SetSTO();//end of FRAME 1, Figure 1
00644                         SendSlaveAdress(I2C_AD7414_1_R_GND);
00645                         T2=ReadOnI2C();//printf("\n\rT2=0x%X",T2);
00646                         T2=(T2 << 2);
00647                         I2C_I2CONSET    |=      I2C_FLAG_AA;//ACK by master
00648                         T1=ReadOnI2C(); //frame 3, Figure 8
00649                         T1 &= 0xC0; //printf("\n\rT1=0x%X",T1);
00650                         T1 = (T1 >> 6);
00651                         T2 = (T2 | T1); //DB9 - DB0
00652                         if ((T2 & 0x300) == 1)
00653                                 ret = (((T2&0x1FF)/512)/4);// Negative Temperature=(ADC-512)/4
00654                                 else ret = (T2/4);      // Positive Temperature = ADC/4
00655                         I2C_SetSTO();//end of FRAME 3, Figure 8
00656                         //printf("\n\r2:Temp=%d",ret);
00657                         break;
00658                 case 3:
00659                         I2C_I2DAT = 0;
00660                         if(((pom=SendSlaveAdress(I2C_AD7414_1_W_VDD)) != 0) || (I2C_I2STAT != 0x20)){enableIRQ();return -1;}//Set slave address
00661                         enableIRQ();
00662                         I2C_SetSTO();//end of FRAME 1, Figure 1
00663                         SendSlaveAdress(I2C_AD7414_1_R_VDD);
00664                         T2=ReadOnI2C();//printf("\n\rT2=0x%X",T2);
00665                         T2=(T2 << 2);
00666                         I2C_I2CONSET    |=      I2C_FLAG_AA;//ACK by master
00667                         T1=ReadOnI2C(); //frame 3, Figure 8
00668                         T1 &= 0xC0; //printf("\n\rT1=0x%X",T1);
00669                         T1 = (T1 >> 6);
00670                         T2 = (T2 | T1); //DB9 - DB0
00671                         if ((T2 & 0x300) == 1)
00672                                 ret = (((T2&0x1FF)/512)/4);// Negative Temperature=(ADC-512)/4
00673                                 else ret = (T2/4);      // Positive Temperature = ADC/4
00674                         I2C_SetSTO();//end of FRAME 3, Figure 8
00675                         //printf("\n\r3:Temp=%d",ret);
00676                         break;
00677                 case 4:
00678                         I2C_I2DAT = 0;
00679                         if(((pom=SendSlaveAdress(I2C_AD7414_2_W)) != 0) || (I2C_I2STAT != 0x20)){enableIRQ();return -1;}//Set slave address
00680                         enableIRQ();
00681                         I2C_SetSTO();//end of FRAME 1, Figure 1
00682                         SendSlaveAdress(I2C_AD7414_2_R);
00683                         T2=ReadOnI2C();//printf("\n\rT2=0x%X",T2);
00684                         T2=(T2 << 2);
00685                         I2C_I2CONSET    |=      I2C_FLAG_AA;//ACK by master
00686                         T1=ReadOnI2C(); //frame 3, Figure 8
00687                         T1 &= 0xC0; //printf("\n\rT1=0x%X",T1);
00688                         T1 = (T1 >> 6);
00689                         T2 = (T2 | T1); //DB9 - DB0
00690                         if ((T2 & 0x300) == 1)
00691                                 ret = (((T2&0x1FF)/512)/4);// Negative Temperature=(ADC-512)/4
00692                                 else ret = (T2/4);      // Positive Temperature = ADC/4
00693                         I2C_SetSTO();//end of FRAME 3, Figure 8
00694                         //printf("\n\r4:Temp=%d",ret);
00695                         break;
00696                 case 5:
00697                         I2C_I2DAT = 0;
00698                         //printf("\n\rAD7114Read->SendSlaveAdress2");
00699                         SendSlaveAdress(I2C_AD7414_3_W);
00700                         //printf("\n\rAD7114Read->SendSlaveAdress3");
00701                         enableIRQ();
00702                         //WriteOnI2C(0x00);
00703                         I2C_SetSTO();//end of FRAME 1, Figure 1
00704                         SendSlaveAdress(I2C_AD7414_3_R);
00705                         T2=ReadOnI2C();//printf("\n\rT2=0x%X",T2);
00706                         T2=(T2 << 2);
00707                         I2C_I2CONSET    |=      I2C_FLAG_AA;//ACK by master
00708                         T1=ReadOnI2C(); //frame 3, Figure 8
00709                         T1 &= 0xC0; //printf("\n\rT1=0x%X",T1);
00710                         T1 = (T1 >> 6);
00711                         T2 = (T2 | T1); //DB9 - DB0
00712                         if ((T2 & 0x300) == 1)
00713                                 ret = (((T2&0x1FF)/512)/4);// Negative Temperature=(ADC-512)/4
00714                                 else ret = (T2/4);      // Positive Temperature = ADC/4
00715                         I2C_SetSTO();//end of FRAME 3, Figure 8
00716                         //printf("\n\r5:Temp=%d",ret);
00717                         break;
00718                 case 6:
00719                         I2C_I2DAT = 0;
00720                         #if 0
00721                                 printf("\n\rAD7114Read->SendSlaveAdress2");
00722                         #endif
00723                         SendSlaveAdress(I2C_AD7414_0_W_F);
00724                         if (I2C_I2STAT == 0x20)
00725                         {
00726                                 I2C_SetSTO();
00727                                 return -1;
00728                         }
00729                         #if 0
00730                                 printf("\n\rAD7114Read->SendSlaveAdress3");
00731                         #endif
00732                         enableIRQ();
00733                         //WriteOnI2C(0x00);
00734                         I2C_SetSTO();//end of FRAME 1, Figure 1
00735                         SendSlaveAdress(I2C_AD7414_0_R_F);
00736                         T2=ReadOnI2C();//printf("\n\rT2=0x%X",T2);
00737                         T2=(T2 << 2);
00738                         I2C_I2CONSET    |=      I2C_FLAG_AA;//ACK by master
00739                         T1=ReadOnI2C(); //frame 3, Figure 8
00740                         T1 &= 0xC0; //printf("\n\rT1=0x%X",T1);
00741                         T1 = (T1 >> 6);
00742                         T2 = (T2 | T1); //DB9 - DB0
00743                         if ((T2 & 0x300) == 1)
00744                                 ret = (((T2&0x1FF)/512)/4);// Negative Temperature=(ADC-512)/4
00745                                 else ret = (T2/4);      // Positive Temperature = ADC/4
00746                         I2C_SetSTO();//end of FRAME 3, Figure 8
00747                         //printf("\n\r5:Temp=%d",ret);
00748                         break;          default: break;
00749         }
00750         return ret;
00751 }
00752 int16_t AD7997_ReadAnalogValue(short sChannel){
00753         int16_t ret=0;
00754         int8_t  H=0,L=0;
00755         uint16_t sFirstRead=0,sSecondRead=0;
00756         AD7997_ConfigRegister(sChannel);//Control register to Channel
00757         short sReadChannel=0;
00758         if (SendSlaveAdress(I2C_AD7997BRU_1_H_W) != 0 )
00759                 {
00760                         #if 1
00761                                 printf("\n\rError Set slave address, 2STAT=0x%X",I2C_I2STAT);
00762                         #endif
00763                         return I2C_I2STAT;
00764                 }
00765         else {  
00766                 #if 0
00767                         printf("\n\rSTA:0x%X",I2C_I2STAT);
00768                 #else
00769                 ;
00770                 #endif
00771                 }
00772         WriteOnI2C(AD7997_RES_REG);     //AD7997_RES_REG Chcem citat
00773         I2C_SetSTO();
00774         if (SendSlaveAdress(I2C_AD7997BRU_1_H_R) != 0 )
00775         {
00776                 #if 1
00777                         printf("\n\rError Set slave address, 2STAT=0x%X",I2C_I2STAT);
00778                         return -1;
00779                 #else
00780                         return -1;
00781                 #endif
00782                 }
00783         else {  
00784                 #if 0
00785                         printf("\n\rSTA:0x%X",I2C_I2STAT);
00786                 #else
00787                                 WD_Reset();
00788                 #endif
00789                 }
00790         sFirstRead = ReadOnI2C();       //First read
00791         sSecondRead = ReadOnI2C();
00792         sReadChannel = (((sFirstRead & 0xF0) >> 4)+1);
00793         #if 0
00794                 printf("\n\rRead[%d]=0x%X%X, sReadChannel=%d",(((sFirstRead & 0x70) >> 4)+1),\
00795                         (sFirstRead),sSecondRead,sReadChannel);
00796         #endif
00797         H = (sFirstRead << 8);
00798         L = (sSecondRead);
00799         ret=((H + L) & 0x0FFF);
00800         I2C_SetSTO();
00801         return ret;
00802 }
00803 short AD7997_SetCycleTimeRegister(short sMode){
00804         #if 1
00805                 printf("\n\r\tAD7997_STR_REG.WriteOnI2C(0x%X)=0x%X",(AD7997_STR_REG),WriteOnI2C(AD7997_STR_REG));
00806                 printf("\n\r\tSelect CycleTime.WriteOnI2C(0x%X)=0x%X",sMode,WriteOnI2C(sMode));
00807         #else
00808                 WriteOnI2C(AD7997_STR_REG);
00809                 WriteOnI2C(sMode);
00810         #endif
00811         I2C_SetSTO();   
00812 }
00813 void AD7997_ConfigRegister(short sChannel){//   Write Config register, 2-Byte Write Sequence page 25 Figure 28 [4]
00814         if (SendSlaveAdress(I2C_AD7997BRU_1_H_W) != 0 ) {printf("\n\rError Set slave address, I2STAT=0x%X",I2C_I2STAT);return;}
00815         //Select Configuration register
00816         #if 0
00817                 printf("\n\r\tSelect ConfReg.WriteOnI2C(0x%X)=0x%X",(AD7997_CONF_REG),WriteOnI2C(AD7997_CONF_REG));
00818         #else
00819                 WriteOnI2C(AD7997_CONF_REG);
00820         #endif
00821         if (sChannel > 4)
00822         {
00823                 #if 0
00824                         printf("\n\r\t>4\n\r\tH:WriteOnI2C(0x%X)=0x%X",(1 << (sChannel-5)),WriteOnI2C((1 << (sChannel-5))) );//Write H
00825                         printf("\n\r\tL:WriteOnI2C(0x%X)=0x%X",(1<<3),WriteOnI2C((1<<3)) );     //Write L, FILT ON
00826                 #else
00827                         WriteOnI2C((1 << (sChannel-5)));
00828                         WriteOnI2C((1<<3));     //Write L
00829                 #endif
00830         }else
00831                 {
00832                 #if 0
00833                         printf("\n\r\t<4\n\rH:WriteOnI2C(0x%X)=0x%X",0,WriteOnI2C(0) );//Write H
00834                         printf("\n\r\tL:WriteOnI2C(0x%X)=0x%X",(1<< (sChannel+3)),WriteOnI2C((1 << (sChannel + 3))) );//Write L
00835                 #else
00836                         WriteOnI2C(0);
00837                         WriteOnI2C((1 << (sChannel + 3)));
00838                 #endif
00839                 }
00840         I2C_SetSTO();   //Figure 28 page 25 [4]
00841 }

Generated on Fri Sep 21 13:41:54 2007 for example1 by  doxygen 1.4.7