Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: Chromatograph_Mobile
ads1248.cpp
00001 #include "ads1248.h" 00002 00003 unsigned char ADS1248SleepCommand( void ) 00004 { 00005 DS1248_CS = 0; 00006 SPI1MasterTransferByte(DS1248_SLEEP_COMMAND); 00007 DS1248_CS=1; 00008 DS1248_START = 0; 00009 return 0; 00010 } 00011 00012 unsigned char ADS1248WakeupCommand( void ) 00013 { 00014 DS1248_CS = 0; 00015 DS1248_START = 1; 00016 SPI1MasterTransferByte(DS1248_WAKEUP_COMMAND); 00017 DS1248_CS = 1; 00018 return 0; 00019 } 00020 00021 unsigned char ADS1248ReadRegister( unsigned char reg, unsigned char num ) 00022 { 00023 char res[num]; 00024 DS1248_CS = 0; 00025 SPI1MasterTransferByte(DS1248_RREG_COMMAND | ( reg & 0x0F )); 00026 SPI1MasterTransferByte(num - 1); 00027 while (num--) 00028 { 00029 res[num]=SPI1MasterTransferByte(DS1248_NOP_COMMAND); 00030 } 00031 DS1248_CS = 1; 00032 return res[0]; 00033 } 00034 00035 unsigned char ADS1248WriteRegister( unsigned char reg, unsigned char num, uint8_t data) 00036 { 00037 DS1248_CS = 0; 00038 SPI1MasterTransferByte(DS1248_WREG_COMMAND | ( reg & 0x0F )); 00039 SPI1MasterTransferByte(num - 1); 00040 SPI1MasterTransferByte(data); 00041 SPI1MasterTransferByte(DS1248_NOP_COMMAND); 00042 DS1248_CS = 1; 00043 return 0; 00044 } 00045 00046 unsigned char ADS1248StartConversion( void ) 00047 { 00048 DS1248_START = 1; 00049 00050 //delay_us ( 5 ); 00051 00052 DS1248_START = 0; 00053 return 0; 00054 } 00055 00056 unsigned long ADS1248ReadData( ADS1248_t * ads ) 00057 { 00058 00059 union{ 00060 struct{ 00061 uint8_t 00062 b1,b2,b3; 00063 }; 00064 uint32_t all; 00065 }data; 00066 data.all=0; 00067 00068 DS1248_CS = 0; 00069 wait_us(1); 00070 SPI1MasterTransferByte(DS1248_RDATA_COMMAND); 00071 data.b3=SPI1MasterTransferByte(DS1248_NOP_COMMAND); 00072 data.b2=SPI1MasterTransferByte(DS1248_NOP_COMMAND); 00073 data.b1=SPI1MasterTransferByte(DS1248_NOP_COMMAND); 00074 wait_us(1); 00075 DS1248_CS = 1; 00076 00077 return data.all; 00078 } 00079 00080 unsigned char ADS1248SettingReg ( ADS1248_t * ads ) 00081 { 00082 DS1248_START = 1; 00083 DS1248_CS = 0; 00084 wait_us(1); 00085 SPI1MasterTransferByte(DS1248_RESET_COMMAND); 00086 wait_us(600); 00087 SPI1MasterTransferByte(DS1248_SDATAC_COMMAND); 00088 00089 ADS1248WriteRegister ( DS1248_REGISTER_MUX0, 1, ads->MUX0.all ); 00090 ADS1248WriteRegister ( DS1248_REGISTER_VBIAS, 1,ads->VBIAS.all); 00091 ADS1248WriteRegister ( DS1248_REGISTER_MUX1, 1, ads->MUX1.all ); 00092 ADS1248WriteRegister ( DS1248_REGISTER_SYS0, 1, ads->SYS0.all ); 00093 ADS1248WriteRegister ( DS1248_REGISTER_IDAC0,1, ads->IDAC0.all); 00094 ADS1248WriteRegister ( DS1248_REGISTER_IDAC1,1, ads->IDAC1.all); 00095 ADS1248WriteRegister ( DS1248_REGISTER_FSC0,1, ads->FSC.FSC0); 00096 ADS1248WriteRegister ( DS1248_REGISTER_FSC1,1, ads->FSC.FSC1); 00097 ADS1248WriteRegister ( DS1248_REGISTER_FSC2,1, ads->FSC.FSC2); 00098 00099 DS1248_CS = 0; 00100 SPI1MasterTransferByte(DS1248_SYNC_COMMAND); 00101 wait_us(1); 00102 DS1248_CS = 1; 00103 return 0; 00104 00105 } 00106 00107 //вызывать вместо простого чтения АЦП 00108 unsigned long ADS1248ReadCalibratedData(ADS1248_t * ads) 00109 { 00110 unsigned long result=0; 00111 //проверка адекватности коэффициентов (не доделана) 00112 if ((ads->Calibr.k>0)&&(ads->Calibr.b<0x8000000)) 00113 result = ads->Calibr.k*ADS1248ReadData(ads)+ads->Calibr.b; 00114 else return (0); 00115 if (result & 0xFF000000) 00116 /*Если результат переполнен из-за коэффициентов то данные испорчены. 00117 Наверное можно просто отбросить старший байт или лучше приравнять максимальному 0x00FFFFFF*/ 00118 return 0; 00119 } 00120 00121 //программная калибровка через терминал, без использования регистров микросхемы 00122 void ADS1248CalibrateSoft(ADS1248_t * ads, /*костыль костылей*/float (*btf)(unsigned char*)) 00123 { 00124 //тут остановить все управляющие воздействия и считывание. Или перед использованием функции. 00125 /* 00126 00127 */ 00128 UART.printf("ADS CALIBRATE:\r\n"); 00129 __disable_irq (); 00130 UART_gets(16); 00131 UART.printf("%s\r\n",str); 00132 if(str[0]=='k'){ 00133 float result = btf(str); 00134 UART.printf("%f\r\n",result); 00135 } 00136 __enable_irq (); 00137 }
Generated on Tue Aug 2 2022 18:53:33 by
1.7.2