成为订阅者(免费)

加入29,000名其他订阅者以获得用户销售折扣和 其他免费资源。
:
:
大学教师'担心 - 您的邮件地址完全是 安全的。我保证使用它 只要 到 send you MicroZine.

使用ADS1115.


ADS1115.是一个精确的16位ADC,具有四个多路复用输入 - 您 可以使用自己的每个输入,也可以成对用于差分测量。它 具有高精度的内部校准参考。


此ADS1115教程向您展示如何设置图书馆以驱动器 芯片,并使用不同的PGA增益设置读取读数。它也是 涵盖设备如何能够 措施 负电压 even though it 只能使用单个电源进行操作。这使得它可用作当前宿/源测量装置。

关于芯片的重要事项:

  • 有16位分辨率(实际上是±15位 - 见 这里)。
  • 根据PGA设置,可以检测0.187mV至7.8UV。
  • 可以从8到860个SP样本。
  • 内部电压参考。
  • 具有内部PGA(可编程增益放大器)。

该设备具有典型的典型 精度为0.01% (but it has 最大精度为0.15%)。这种准确性包括所有来源 错误(电压参考,增益错误,偏移和噪声)。

ADS1115.突破板
ADS1115.突破板

ADS1115.数据表

这里's a copy of the ADS1115.数据表 (修订2018年 - ADS1115. PDF.)

ADS1115.详细信息

ADS1115.规范

  Parameter
价值
  Voltage Supply (VDD.)
2v0〜5v5
  Abs.Max VDD.
-0.3V〜7v0.
  Measurement range
-300mv〜Vdd + 300mv
  Interface
I2C
  I2C rate
100khz,400khz,3.4mhz
  Resolution 16位(±15位)
  Data rate
8〜860 sps
  多路复用输入数量 4
  Active current
〜150ua(200ua max)
  Power down current
0.5ua(2ua max)
  Offset error [1]
±3 LSB
  积分非线性(INL)[1]
1 LSB
  增益错误[1],[2],@ 25°C
0.01%(典型值)0.15%(最大)
  I2C地址(可选)
0x48,0x49,0x4a,0x4b
  工作温度
-40°C〜125°C
[1] FSR±2.048V
[2]包括来自电压参考和PGA的所有误差。

ADS1115.框图

ADS1115. BlockDiagram.

Image from data sheet [http://www.ti.com/lit/ds/symlink/ads1115.pdf]

ADS1115.引脚声

ADS1115.引脚声

ADS1115.准确性

显示设备的真实能力的有趣图是图19中的数据表:

总误差VS输入信号
ADS115总误差VS输入信号

请注意,系统的准确性如何包含所有错误源:

  • 获得错误,
  • 差分输入错误,
  • 偏移错误,
  • 和噪音。

ADS1115. I2C寻址

您可以使用四个地址之一设置ADS1115,因此您可以在单个I2C总线上放置4个ADS1115芯片:

    0x48,0x49,0x4a,0x4b。

寻址控制是不必要的,因为您只需要使用 一个输入引脚 作为 地址控制 pin .

通常,您需要两个输入来在4个地址之间切换 ADS1115 16位ADC使用巧妙的方案。单个地址输入连续采样 如果将其连接到GND,VDD,SDA或SCL,则可以设置地址 从0x48,0x49,0x4a,0x4b。

ADS1115.省电

连续模式

ADS1115.令人印象深刻的静态电流为150UA 连续转换模式。在此模式下,您可以让ADS1115样本 从8Hz和860Hz之间。

警告: 在连续模式下。配置寄存器的更改( 主要设置控制元素)仅不会影响当前读数 the next one.

单次模式

ADS1115.的默认模式是单次拍摄模式 设备醒来,采取测量,然后重新睡觉。尽管 睡着了,芯片只汲取0.5ua的典型电流。自设备以来 在上电时进入此模式会有启动不会发生 current.

笔记: 命令界面在断电模式下保持活动状态,因此您仍然可以将数据从芯片中置于芯片中!

该芯片和模式是电池供电设备的理想选择 需要精确度。它对空间受限设计也很有用 由于超小包装(X2QFN)仅为2毫米x 1.5 mm x 0.4 mm

性能和噪音权衡

低速平均

如果您以低速运行ADS1115,则内部采样率不是 降低,因为这是Delta Sigma转换器如何运行的 过度采样。内部振荡器设置为1MHz,并为ADC时钟减少到250kHz。

在活动模式下,样品被连续收集。这些 样品在内部平均,从而提高了噪声性能。它 还节省了你处理时间我。你赢了'必须执行 在微控制器中平均。

所以,如果你想要最好的噪音 性能,在8Hz(采样率最低)运行采样率。

提示: 对于最佳噪声性能,请在8SPS下运行芯片。

较低采样率的唯一缺点是设备 必须持续使用,因此始终使用权力。如果你更多 关心节约能力,并不太担心噪音 性能,可以实现突发模式操作。

高速速度突发模式

在微控制器控制下,您可以实现突发模式以保存 力量。数据表表明您将使用1/100所使用的功率 在连续模式下。所以你可以获得1.5ua平均使用。

这是一个类似的想法,对巨头小偷电路 存储在电感器中的能量脉冲长时间的LED。你得到 足够的使用光,但平均力量降低。

要模拟8SPS速率,您将使ADS1115拍摄 单次拍摄每125ms(1/125E-3 = 8)8 Hz(你会设置这个 从微控制器代码中的计时器重复率)。

你还会设置 ADS1115到860Hz的SPS率为高速捕获。当然你可以改变 捕获到每隔一秒或每小时之间的时间 power savings.

单次拍摄只需要1.2ms离开其余的 ADS1115在低电流模式下的时段。这是ADS1115 转换延迟并在数据表中说明。

笔记: ADS1115.大约需要25us来启动 - 相当不错!

使用警报/就绪引脚

警报/就绪引脚有两种用途。第一是"comparator threshold"警报(默认模式)。第二是"ADC reading ready" alert. You 必须设置一些寄存器来操作ADC就绪警报模式。

阈值检测

ADS1115.具有一个内部比较器,输出信号 警报引脚(默认模式)。你可以用这个 自动检测范围条件的功能(设置为 阈值寄存器)。 Comp_que寄存器允许您指定如何 在警报之前,许多转化率超过了上限或下限 asserted.

警报引脚需要上拉电阻,因为它是一个开漏引脚。

比较器有两个阈值(高低)。当输入时 信号是阈值之间的警报信号设置为高(窗口 比较模式)。您可以使用COMP_POL反转警报输出信号。

ADC就绪中断信号

该引脚的替代使用是ADC就绪信号。如果你设置了 将引脚作为ADC就绪信号,然后您可以将其送入其中 外部中断引脚在微控制器上,以便它可以获取ADC reading.

检测ADC是否已完成的另一种方法是读取a 寄存器值(Config Reguit Bit 15)但当然这需要更多的时间,因为 必须进行I2C交易。

笔记: 转换就绪信号是8US宽(高)脉冲,表示转换在下降沿可用。

要将芯片设置为转换就绪模式设置以下寄存器:

将高阈值寄存器的MSB设置为1
    [例如。 hi_thresh = 0x8000]。
将低阈值寄存器的MSB设置为0
    [例如。 lo_thresh = 0x0000]。
将比较器队列控制位设置为00(除0x11中的任何东西)
    [例如。 comp_que [1:0] = 0]。
    Config Reg  &= Config Reg 0x0003; //清除B0,B1。

笔记: 您仍将在警报/就绪引脚上需要一个上拉电阻。

输入多路复用器

您使用输入多路复用器在4个单端输入之间进行选择 0〜FSR或两个差分输入±FSR。然而,还有另一个笨蛋 使用AIN3作为AIN0,AIN1和AIN2的参考的模式 该参考的差分输入。

您可以在下图左侧看到mux:ADS1115. BlockDiagram.

它不是从图中清除,但mux有3种模式:

引用的输入信号(所有4个输入可选)
    AIN0(+) ~ GND(-),
    AIN1(+) ~ GND(-),
    AIN2(+) ~ GND(-).
    AIN3(+) ~ GND(-).
两个差分输入:
    AIN0(+) ~ AIN1(-),
    AIN2(+) ~ AIN3(-).
三个引用的输入:
    AIN0(+) ~ AIN3(-),
    AIN1(+) ~ AIN3(-),
    AIN2(+) ~ AIN3(-).

查看数据表"Config Register"控制此操作。

PGA获得设置

ADS1115.中的增益设置寄存器确实有标准 值尤。 x2 x4等(2/3的最高)除外,更容易想到分辨率和分辨率 全尺度读数的范围能力。这是数据表的方式 被安排 - 因为设备使用内部固定电压 reference.

您只需选择靠近测量信号的最佳范围(或在前面添加放大器以设置范围)。

您无法通过添加外部参考来更改FSR值 与其他ADC一样电压。显示了范围和分辨率 in the table below.

全规模范围FSR
重新加油(1 LSB)
  ±6411mV
187.5UV.
  ±4096mV
125uV
  ±2048mV
62.5uV
  ±1024mV
31.25UV.
  ±512mV
15.625uv.
  ±256mV
7.8125UV.

全规模解析

虽然ADS1115具有16位分辨率功能,但它使用TWOS complement to 表示值(MSB表示符号位)。这真的是一个 15位分辨率ADC能够负极和正电压 测量(在GND到V内DD. 供应限制!

这使您有15位分辨率的来自GND的输入信号 对于正常的全尺度电压和15位分辨率,用于GND为负 全尺寸电压。但是,ADS1115只能测量-300mV下面 ground.

实际使用±15位分辨率是当您使用差异时 模式和级别移位opamp将输入信号移动到GDN中 VDD. 范围。这有一个例外:

为了获得±FSR,您可以使用256mv范围(参见 以下)或者使用输入opamp来级别换档并缩放输入,或使用差分输入(另请参阅 差动操作 以下)。或者,使用一个输入作为其他两个输入的引用(参见 输入多路复用器 section).

笔记: 15位分辨率仍然是一个非常准确的分辨率 你可以从上表中看到。

如上所述,可测量的输入电压下降至负300mV。

在最低的PGA增益值,您可以使用满量程 该装置的分辨率(±256mV),这也适合-300mV ADS1115的测量能力。

因此,您可以制作一个能够的电流测量设备 测量水槽和源电流,即使只有此单个电源芯片。要做这件事你会使用 适当的测量电阻并进行差分测量 穿过它。负电压能力测试结果是 这里.

选择更高的PGA增益仍然允许您测量负值,即在较低的分辨率下。

关于PGA设置的注释

可编程增益设置寄存器(PGA)允许8个值但是 最后3个值都提供相同的增益,导致FSR为256mV 对于5,6和7的PGA值。

因此,有6个可用设置允许FSR为±6.144V,±4.096V, ±2.048V,±1.024V,±0.512V,±0.256V。

输入电压范围

绝对最大电压输入是:

     -0.3V ~ 7V

测量电压范围是:

    GND - 0.3V〜VDD + 0.3V。

请记住,测量范围是固定的,因此最大可测量的输入电压为±6.144V。

测试负电压输入

我曾是 特别是可以测量负电压,尤其是 使用ADS1115的单一供应。数据表确实如此 表明它能够从-256mv衡量而不是吹出 电压高于-300mV。

事实证明,这是真的,因为我仔细测试了输入 将-5V源连接到10k锅中并调节刮水器(确保 它没有低于-300mv)对于值-100mv,-260mv 

这是-260mv输入的结果:

A1: -260.437mV	 PGA: 6144 mv acc: 187.5uV
A1: -260.375mV	 PGA: 4096 mv acc: 125uV
A1: -260.375mV	 PGA: 2048 mv acc: 62.5uV
A1: -259.969mV	 PGA: 1024 mv acc: 31.25uV
A1: -259.234mV	 PGA:  512 mv acc: 15.625uV
A1: -256.016mV	 PGA:  256 mv acc: 7.8125uV
Alert/RDY 0

这是-100mv(约)输入的结果:

A1: -104.625mV	 PGA: 6144 mv acc: 187.5uV
A1: -104.500mV	 PGA: 4096 mv acc: 125uV
A1: -104.500mV	 PGA: 2048 mv acc: 62.5uV
A1: -104.531mV	 PGA: 1024 mv acc: 31.25uV
A1: -104.484mV	 PGA:  512 mv acc: 15.625uV
A1: -104.499mV	 PGA:  256 mv acc: 7.8125uV
Alert/RDY 0

对于-260mV测量,您可以看到达到满量程 对于256mv的FSR,这是你的期望 - 这是为了PGA 增益设置为256mV(由于260mV高于范围能力 of 256mV).

你也可以看到 所有PGA收益都可以正确测量-100mV读数。

因此,这证实了ADS1115可以读取负电压 它的最小测量能力为-256mv,没有单独的功率 supply.

注意:此输出的ADS1115 Arduino代码可以进一步下载页面。

ADS1115. ADC FSR.

正输出的全规模值将是:

        0x7FFF

负输出的全规模值将是:

        0x8000

加上一个ADC值为0x0001,减号为0​​xFFFF(减号2为0xFFFE)。

警告: 对于单个结束的测量,您仍然可以由于设备偏移而仍然可以获得否定ADC值,在测量0V时。

什么'对差异的交易?

A 差分测量使用两个输入的低侧和 一个用于高侧电压,因此您可以测量电压差 电路中的任何点。正常的单一结束测量(ARDIUNO ADC) 只能测量接地的电压。

您可以有一组差分输入或两个(如下):

两个差分输入:
    AIN0(+) ~ AIN1(-),
    AIN2(+) ~ AIN3(-).

其他配置是 这里.

你通常测量一个小的, 准确,电阻确定电流。 ADS1115可以测量 正负电压。

笔记: 使用差分测量来消除噪音。

差分测量是实现瞬时测量 通过在设备内使用差分放大器(Opamp)。最棒的 这种测量的优点是它消除了自显现的共模噪声错误 跨越测量元素的噪声信号将是相同的。所以噪音 is subtracted out.

使用差分测量的另一个原因是您可能希望测量不受电压 参考为地面。电流检测电阻未连接 一边是地面,但你的电路中的其他地方。这是一个 所谓的高侧测量即,在两个测量电压都是如此 nowhere near zero.

笔记: 只使用差异模式,您可以获得满量程 ADC。即,在单次拍摄模式下,您只能实现输出代码0 〜32767但具有差异,您可以实现输出代码±32767。

软件

arduino. IDE:1.8.9+版

I2CDEV库

i2cdevlib具有ADS1115库代码以及许多其他设备的代码。

//github.com/jrowberg/i2cdevlib

此库具有许多功能,支持芯片,并可以操作 在多个处理器上,但它有点涉及安装和 您无法使用自动Arduino Zip文件安装程序。

ADS1115. Arduino图书馆

解压缩文件(ic2devlib-master)然后导航到arduino IC2devlib-master中的目录。复制目录ADS1115和 i2cdev到arduino图书馆目录,通常在这里找到(开 windows):

    C:\Users\<User name>\ documents \ arduino \图书馆

图书馆代码警告

256MV范围的常数已设置为舍入值。

导航到ADC1115.h并更改以下行:

    #define ADS1115_MV_0P256 0.007813
    #define ADS1115_MV_0P256B 0.007813
    #define ADS1115_MV_0P256C 0.007813

到    

    #define ADS1115_MV_0P256 0.0078125
    #define ADS1115_MV_0P256B 0.0078125
    #define ADS1115_MV_0P256C 0.0078125

见部分"9.3.3全尺度范围(FSR)和LSB大小" of the datasheet.

硬件

成分

  • arduino. Uno R3。
  • ADS1115.突破板。
  • 连接线。
  • 100nf电容器。
  • 10k锅。

连接

用于测试使用Arduino Uno并将其连接如下:

arduino. ADS1115.
  5V
VDD.
  GND
GND.
  A5
SCL.
  A4
SDA.
  GND
addr.
  2
ALRT.
  Wiper of 10k pot. A1
注意:将10K电位器的末端连接到5V和GND。
在5V和GND上连接100NF电容。 

ADS1115.面包板布局

ADS1115.连接到Arduino Uno面包板布局

arduino.示例使用ADS1115

示例素描1

您可以使用以下程序轮询它来测试ADS1115:

要查看注册状态信息,请编辑ADS1115.h以允许通过未注释以下行来允许调试输出:

    //#define ads1115_serial_debug

在串行监视器中键入字母S以查看寄存器状态。

注意:我更改了pollalertreadypin()代码,以便如果它失败,那么 已重新初始化ADS1115(参见下面的代码)。打开和关闭PC时 寄存器被重置,队列寄存器设置为11:禁用 警报就绪针。现在,如果发生此错误,则芯片重新启动。

// I2C device class (I2Cdev) demonstration Arduino sketch for ADS1115 class
// Example of reading two differential inputs of the ADS1115 and showing the value in mV
// 2016-03-22 by Eadf (//github.com/eadf)
// Updates should (hopefully) always be available at //github.com/jrowberg/i2cdevlib
//
// Changelog:
//     2016-03-22 - initial release
//
//     2019-4-30
// JFM modified for re-initialising and output of multiple PGA resolutions for 
// comparison of readings. Also when debug is active serial receiving 's' 
// outputs register values. 



/* ============================================
I2Cdev device library code is placed under the MIT license
Copyright (c) 2011 Jeff Rowberg

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
在 the Software without restriction, including without limitation the rights
到 use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
===============================================


Wiring the ADS1115 Module to an Arduino UNO

ADS1115. -->  UNO
  VDD        5V
  GND        GND
  SCL        A5 (or SCL)
  SDA        A4 (or SDA)
  ALRT       2


*/

#include "ADS1115.h"

ADS1115. adc0(ADS1115._DEFAULT_ADDRESS);

// Wire ADS1115 ALERT/RDY pin to Arduino pin 2
const 在t alertReadyPin = 2;

void 在it_ads1115() {
  Serial.println("Testing device connections...");
    Serial.println(adc0.testConnection() ? "ADS1115 connection successful" : "ADS1115 connection failed");
    
    adc0.在itialize(); // initialize ADS1115 16 bit A/D chip

    // We're going to do single shot sampling
    adc0.setMode(ADS1115._MODE_SINGLESHOT);
    
    // Slow things down so that we can see that the "poll for conversion" code works
    adc0.setRate(ADS1115._RATE_8);
      
    // Set the gain (PGA) +/- 6.144v
    // Note that any analog input must be higher than â¬0.3V and less than VDD +0.3
    adc0.setGain(ADS1115._PGA_6P144);
    // ALERT/RDY pin will indicate when conversion is ready
    
    pinMode(alertReadyPin,INPUT_PULLUP);
    adc0.setConversionReadyPinMode();

    // To get output from this method, you'll need to turn on the 
    //#define ads1115_serial_debug // in the ADS1115.h file
    #ifdef ADS1115._SERIAL_DEBUG
    adc0.showConfigRegister();
    Serial.print("HighThreshold="); Serial.println(adc0.getHighThreshold(),BIN);
    Serial.print("LowThreshold="); Serial.println(adc0.getLowThreshold(),BIN);
    #endif
}

void setup() {    
    //I2Cdev::begin();  // join I2C bus
    Wire.begin();
    Serial.begin(115200); // initialize serial communication 
    
    在it_ads1115();
}

/** Poll the assigned pin for conversion status 
 */
void pollAlertReadyPin() {
  for (uint32_t i = 0; i<100000; i++)
    if (!digitalRead(alertReadyPin)) return;
   Serial.println("Failed to wait for AlertReadyPin, it's stuck high!");
   // If gets stuck do -something = init.
   在it_ads1115();
}

void loop() {

    adc0.setMultiplexer(ADS1115._MUX_P1_NG);
       
    adc0.setGain(ADS1115._PGA_6P144);        
    adc0.triggerConversion();
    pollAlertReadyPin();
    Serial.print("A1: "); Serial.print(adc0.getMilliVolts(false),3); Serial.print("mV\t");
    Serial.println(" PGA: 6144 mv acc: 187.5uV");
    
    adc0.setGain(ADS1115._PGA_4P096);
    adc0.triggerConversion();
    pollAlertReadyPin();
    Serial.print("A1: "); Serial.print(adc0.getMilliVolts(false),3); Serial.print("mV\t");
    Serial.println(" PGA: 4096 mv acc: 125uV");

    adc0.setGain(ADS1115._PGA_2P048);
    adc0.triggerConversion();
    pollAlertReadyPin();
    Serial.print("A1: "); Serial.print(adc0.getMilliVolts(false),3); Serial.print("mV\t");
    Serial.println(" PGA: 2048 mv acc: 62.5uV");

    adc0.setGain(ADS1115._PGA_1P024);
    adc0.triggerConversion();
    pollAlertReadyPin();
    Serial.print("A1: "); Serial.print(adc0.getMilliVolts(false),3); Serial.print("mV\t");
    Serial.println(" PGA: 1024 mv acc: 31.25uV");

    adc0.setGain(ADS1115._PGA_0P512);
    adc0.triggerConversion();
    pollAlertReadyPin();
    Serial.print("A1: "); Serial.print(adc0.getMilliVolts(false),3); Serial.print("mV\t");
    Serial.println(" PGA:  512 mv acc: 15.625uV");

    adc0.setGain(ADS1115._PGA_0P256);
    adc0.triggerConversion();
    pollAlertReadyPin();
    Serial.print("A1: "); Serial.print(adc0.getMilliVolts(false),3); Serial.print("mV\t");
    Serial.println(" PGA:  256 mv acc: 7.8125uV");

    Serial.print("Alert/RDY "); Serial.println(digitalRead(alertReadyPin));
    Serial.println();

    if (Serial.available()) {
        char chr = Serial.read();
        //Serial.print("Serial received"); Serial.print(chr);Serial.println("<<");
        switch (chr) {
           case 's' :  adc0.showConfigRegister(); break;
           //default: Serial.println(">>");Serial.print(chr);Serial.println("<<");
        }
    }
    
    delay(500);
}
  


新的! Comments

让你说到你刚刚阅读的东西!留下下面的框中的评论。




隐私政策 | 接触 | 关于我

网站地图 | 使用条款


ezoic.报告此广告

访问我们的Facebook页面:

   点击这里



最近的文章

  1. 如何使用ADS1115

    使用ADS1115精度16位ADC进行教程进行低功耗。

    阅读更多

  2. arduino.模拟输出...易模拟输出生成

    arduino.模拟输出:如何创建最精确的PWM模拟输出以及如何创建模拟PWM正弦波。

    阅读更多

  3. 数号和等效的快速宏。加快代码!

    了解DigitalWrite()的工作原理......现在使用17倍宏宏!

    阅读更多

  4. TCS230颜色传感芯片:如何运作以及如何使用它。

    如何使用TCS230(/ TCS3200)彩色检测器芯片并轻松将其添加到您的任何项目中。

    阅读更多

  5. 如何使用ADXL345进行运动感测等。

    使用ADXL345 Acellerometer,您可以检测到16G!您还可以了解如何使用它来点击检测等。

    阅读更多

  6. HMC5883L 3轴数字MAGENTOMTER如何运作

    HMC5883L - 如何制作数字罗盘,了解HMC5883L和QMC5883L之间的差异以及它们是否兼容。

    阅读更多



读者 Comments

"I wanted to thank
你这么好
对于所有信息
你已经提供了
你的网站's

高超极好的."

- 逃亡Potthath.

"This site really is
最好的和我最喜欢的。
我发现这里有很多很有用
项目和提示。"

- 米兰

Bursach.<at>gmail.com<

"Awesome site,
非常,非常容易和好
导航!"


-
镭_tr.<at>
wolf359.cjb.net.


学习微控制器

"Interested in
微控制器?"

注册
免费7天指南:

自由 GUIDE : CLICK HERE


"I am a newbie to PIC
我想说
 how great your
网站一直在为我。"


- 戴夫

de_scott.<at>bellsouth.net

"Your site is a great
和完美的工作。
恭喜。"


- SURESH.

IntegratedInfosys.<at>
Yahoo.com.

"I couldn't find the correct
要定义的词语
你的网页。

非常有用,揭开,
诚实明确。

非常感谢
你的时间和作品。
问候。"


- Anon.

回到顶部