📄 ads8364.c
字号:
/*------------------------------------------------------------------------
This software includes some function about operating ADS8364.
Copyright 2002-2003,Xiaoquan Tang
File : ADS8364.c
by Xiaoquan Tang
E-mail:xqtang@vip.sina.com
History:
Date Version Author Description
3-5-03 1.0 initial version Xiaoquan Tang
---------------------------------------------------------------------- */
#include "mb90540.h"
#include "ads8364.h"
unsigned int TONUM; // define total samples
int CHS[6][400]; //CHS[ch,n] continue sample array
// ch:channel number,n:n sample
// initialize ADS8364
void InitADS8364(void)
{
// Set P1 and P2 to Output
DDR1 = 0x00;
DDR2 = 0x00;
// Set P00,P01 to input,and P02~P07 to Output
DDR0 = 0xfc;
// Set P3 to Output
DDR3 = 0xf7;
// Set PA0 to Output
DDRA = 0x01;
// Set P90 to Input;
DDR9 = 0x00;
// Set WR and RD to Invalid
WR = 1;
RD = 1;
// Set CS to Invalid
CS = 1;
// Reset ADS8364
RST = 1;
RST = 0;
RST = 1;
// Select Cycle Mode
A0 = 0;
A1 = 1;
A2 = 1;
// Select 16-bit mode
BYTE = 0;
ADD = 0;
}
// start ADS8364 convert
void StartADS8364(void)
{
CS = 1;
RD = 1;
WR = 1;
RST = 1;
RST = 0;
RST = 1;
HOLDA = 1;
HOLDB = 1;
HOLDC = 1;
HOLDA = 0;
HOLDB = 0;
HOLDC = 0;
HOLDA = 1;
HOLDB = 1;
HOLDC = 1;
}
int CH[6];
// read ADS8364 data
void ReadADS8364(void)
{
unsigned char i;
unsigned int k;
unsigned char HI; // define ADS8364 High Byte
unsigned char LO; // define ADS8364 Low Byte
CS = 1;
CS = 0;
for(i = 0; i < 6; i++)
{
RD = 0;
HI = PDR2;
LO = PDR1;
RD = 1;
// composed of high byte and low byte
CH[i] = (HI * 256 +LO);
// 14 bit precision
//CH[i] = CH[i] + 0x01;
//CH[i] = CH[i] >> 2;
}
CS = 1;
}
// short delay
void shortdelay()
{
unsigned char i;
for(i = 0; i < 50; i++);
}
// hex converter to ASCII
unsigned char ASCII[5];
void HextoASCII(unsigned int hexs)
{
unsigned int va;
unsigned char i;
va = 10000;
for (i = 4; i ; i--)
{
ASCII [i] = 0;
while (( hexs >= va )&&( va > 9 ))
{
hexs -= va;
ASCII[i]++;
}
va /= 10;
}
ASCII[0]=hexs;
for(i = 0; i < 5; i++)
ASCII[i] = ASCII[i] +0x30;
}
// read one time AD converter result and send it to PC
void OneADResult(void)
{
unsigned i,j;
ReadADS8364 ();
for(i = 0; i < 6; i++)
{
if(CH[i] < 0)
{
CH[i] = -CH[i];
Putch (0x2d);
}
else
Putch (0x20);
HextoASCII (CH[i]);
for(j = 0; j < 5 ; j++)
Putch (ASCII[4-j]);
Putch (0x20);
}
NewLine();
}
// Single conversion
void SingleConversion(void)
{
unsigned char ch;
NewLine();
Puts ("Press space key to start or other key to exit");
Puts (" CH0 CH1 CH2 CH3 CH4 CH5");
do
{
LED = ON;
ch = Getch ();
LED = OFF;
StartADS8364 ();
shortdelay ();
OneADResult ();
}while (ch == 0x20);
}
// send continue sample to PC
void sendConuRsult (void)
{
unsigned char k,j,l;
unsigned int i;
for(k = 0; k < 6; k++)
{
NewLine();
Putch (0x43); // send C to PC
Putch (0x48); // send H to PC
Putch (0x30+k);
NewLine();
l = 0;
for(i = 0; i < TONUM; i++)
{
LED = ON;
// convert A/D result to ASCII
if(CHS[k][i] < 0)
{
CHS[k][i] = -CHS[k][i];
Putch (0x2d);
}
else
Putch (0x20);
HextoASCII (CHS[k][i]);
LED = OFF;
for(j = 0; j < 5 ; j++)
Putch (ASCII[4-j]);
// adjust output data format for display
// composing 9 data a line
l = l + 1;
if(l < 10 )
{
Putch (0x20);
}
else
{
l = 0x00;
NewLine();
}
}
NewLine();
}
}
// convert input char to total samples
void InputSamplesNum(unsigned char ch)
{
switch(ch)
{
case 0x31 :
TONUM = 50;
break;
case 0x32 :
TONUM = 100;
break;
case 0x33 :
TONUM = 150;
break;
case 0x34 :
TONUM = 200;
break;
case 0x35 :
TONUM = 250;
break;
case 0x36 :
TONUM = 300;
break;
case 0x37 :
TONUM = 350;
break;
case 0x38 :
TONUM = 400;
break;
default:
TONUM = 0;
}
}
// Continue samples
void ContinueConversion (void)
{
unsigned char ch;
unsigned int i,j;
do
{
// select samples number
NewLine();
Puts("Select sample number:");
NewLine();
Puts("1 -- 050 samples");
Puts("2 -- 100 samples");
Puts("3 -- 150 samples");
Puts("4 -- 200 samples");
Puts("5 -- 250 samples");
Puts("6 -- 300 samples");
Puts("7 -- 350 samples");
Puts("8 -- 400 samples");
NewLine();
ch = Getch();
InputSamplesNum(ch);
for(i = 0; i < TONUM; i++)
{
StartADS8364 ();
LED = ON;
shortdelay ();
ReadADS8364();
for(j = 0; j < 6; j++)
CHS[j][i] = CH[j];
}
sendConuRsult ();
NewLine();
Puts ("Press space key to start or other key to exit");
ch = Getch();
}while(ch == 0x20);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -