在C#上模拟I2C协议(译文)
By robot-v1.0
本文链接 https://www.kyfws.com/emulation/simulation-of-i-c-protocol-on-csharp-data-acquisit-zh/
版权声明 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
- 16 分钟阅读 - 7563 个词 阅读量 0在C#上模拟I2C协议(译文)
原文地址:https://www.codeproject.com/Articles/501493/Simulation-of-I-C-Protocol-on-Csharp-Data-Acquisit
原文作者:Nakul Vyas
译文由本站 robot-v1.0 翻译
前言
This article presents code to emulate I2C protocol in C#, this can be useful in applications like data acquisition without microcontrollers.
本文介绍了可在C#中模拟I2C协议的代码,这在诸如无需微控制器的数据采集之类的应用中可能很有用.
介绍(Introduction)
在本文中,我们描述了(In this article, we describe how the I)2(2)可以在Visual Studio C#应用程序中模拟C协议.一世(C protocol could be simulated in a Visual Studio C# application. I)2(2)C是一种广泛使用的设备低端通信协议.各种计算机外围设备符合I(C is a widely used device low end communication protocol. Various computer peripherals comply with I)2(2)C协议,例如:内存,PDA,手机等.通常,要访问这些外围设备,计算机需要附加的微控制器/微处理器.这显着增加了设备产品的成本.本文提出了可能解决此问题的方法;它描述了在Windows®操作系统上运行的C#应用程序如何访问I(C protocols, for example: memories, PDAs, cell phones etc. Usually, to access these peripherals, computers require an additional microcontroller/microprocessor. This significantly increases the cost of the device product. This article presents a possible solution to this problem; it describes how a C# application running on a Windows® OS can access an I)2(2)C外围设备.(C peripheral.)
背景(Background)
我(The I)2(2)C外设接口是由Philips Electronics NV发明的.该协议通常用于处理器与存储设备,PDA,手机等的通信.(C peripheral interface was invented by Philips Electronics NV. This protocol is popularly used in processors’ communication with memory devices, PDAs, cell phones, etc.)
而且,C#是Microsoft Visual Studio支持的功能强大的语言. C#是一种使程序员具备从Java和C ++继承的通用功能的语言.从C#的演变开始,一直争论着它是Java的直接传言,但LINQ和向指针的安全切换等功能证明C#比其同行更先进.基于C#的应用程序在数据采集过程中的效率与MATLAB和Labview相同.在C#中,我们不需要像VB6或VC ++ 6.0中的ActiveX或mscomm对象之类的任何其他功能.的(And, C# is a horse power language supported by Microsoft Visual Studio; C# is a kind of language that equips the programmer with versatile features inherited from Java as well as C++. From the evolution of C# it has been an issue of controversy that it is a direct travesty of Java, but features like LINQ and safe switching to pointers prove C# as more advanced compared to its counterparts. Applications built on C# are equally efficient in data acquisition process as are MATLAB and Labview. In C# we don’t need any kind of extras like ActiveX or mscomm objects as in VB6 or VC++ 6.0. The) SerialPort
C#中的class足以支持各种波特率的简单硬件.(class in C# is enough to support simple hardware at a variety of baud rates.)
通常,C#应用程序与I通信(Usually, a C# application communicates with I)2(2)C采用桥式微控制器.这种通信方案如图1所示.(C using a bridge microcontroller. This type of communication scheme is shown in Fig 1.)
图1:通常遵循的通信方式(Fig 1: A usually followed scheme for communicating an)一世(I)2(2)C(C)设备通过C#应用程序.(device through a C# application.)
此方案有某些缺点,我们将在下一部分中讨论这些缺点.(There are certain disadvantages to this scheme and we are going to discuss these disadvantages in the next section.)
间接沟通的弊端(Demerits of indirect communication)
该方案(如图1所示)具有以下缺点:(The scheme (shown in figure 1) suffers with following disadvantages:)
d(D)米(m)=d(= d)1个(1)+ d(+ d)2(2)^^^^.(1)(…………………….(1))
在需要快速数据采集的应用中,这种延迟将非常重要(始终希望延迟较小). d的通常值(This delay will be significant in applications demanding quick data acquisition (it is always desirable to have less delay). The usual value of d)1个(1)=20毫秒(9600波特).(= 20ms (at 9600 baud).)
- 正如我们所看到的,涉及到两个阶段的交流.第一个应用程序与微控制器通信,然后与I(As we can observe there is a two stage communication involved; the first application communicates with a microcontroller, then it communicates with the I)2(2)C设备.让d(C device. Let d)1个(1)和d(and d)2(2)这些阶段分别涉及延迟.沟通过程中的总延迟将是:(be delays involved in these stages, respectively. The total delay in the communication process will be :)
- 其次,微控制器成本也是外围制造中不希望的因素.微控制器(具有RS232和I(Secondly, microcontroller cost is also an undesirable factor in peripheral manufacturing. Microcontrollers (having RS232 as well as I)2(2)C)的价格不等(通常从9美元到30美元不等).昂贵的微控制器会大大增加原型的最终成本.(C) are available at a variety of costs (usually ranging from $9 to $30). And a costly microcontroller can substantially increase the final cost of the prototype.) 毫无疑问,从该方案中消除微控制器(如图1所示)在处理时间短以及最终设备的成本降低方面将是有利的.(Undoubtedly, eradication of microcontrollers from the scheme (shown in figure 1) would be advantageous in terms of low processing time as well as in cost reduction of the final device.)
模拟可能的解决方案(Emulation as a possible solution)
因为在C#中,程序员配备了(Since, in C#, a programmer is equipped with the) SerialPort
类(此类包含许多用于发送和接收的方法),串行端口是使用C#内置的应用程序与外界通信的便捷接口.可以从应用程序直接访问串行端口上的这些引脚.这些引脚是:RTS,DTR和CTS(请参见图2). RTS和DTR是输出引脚,即C#软件应用程序可以使用所需的布尔值写入这些引脚.当CTS是输入引脚时,软件应用程序可以从该引脚读取布尔值.(class (this class contains lots of methods for sending and receiving ), serial port is an easy interface for applications built in C# to communicate with the outside world. These pins on the serial port could be directly accessed from the application. These pins are: RTS , DTR and CTS (Refer to figure 2). RTS and DTR are output pins, i.e., a C# software application can write these pins with a boolean value which it wants. While CTS is an input pin, a software application can read a boolean value from this pin.)
使用这些引脚,我们可以模拟I(With these pins, can we emulate the I)2(2)C协议?当然可以其实我(C protocol? Of course, yes. Actually, I)2(2)C设备通过两个引脚SCL和SDA与微控制器通信.样品我(C devices communicate with a microcontroller with two pins, SCL and SDA. A sample I)2(2)显示了C设备(在图3中).如果参考地面水平,则PC和I的RS232端口(C device is shown (in figure 3). If we reference the ground levels, the RS232 port of PC and I)2(2)C设备是相同的,我们遵循表1中的连接(C devices are the same, and we follow connections given in table 1, I)2(2)可以很容易地仿真C,使该方案的微控制器(如图1所示)成为冗余的.可能看起来很奇怪,但是应用程序可以为SDA引脚写一些位.同时,应用程序可以借助CTS从SDA读取位值.唯一的复杂性是实施整个I(C could be easily emulated, rendering the microcontroller of the scheme (shown in figure 1) as redundant. It might look strange, but the application can write a bit for the SDA pin; while, simultaneously, the application can read a bit value from SDA with the help of CTS. The only complexity is to implement the whole of the I)2(2)C#代码中的C协议准备好所需的代码库后,C#程序员可以执行以下操作:数据获取(I(C protocol in C# code. Once the required code library is ready, C# programmers can perform operations like: data acquisition (I)2(2)C传感器IC,例如DS1621),存储器访问,与手机的通讯等,都轻松自如.而且,微控制器中的固件编程不会过载.(C sensor ICs like DS1621), memory access, communication with cellphones, etc., in a hassle free manner. Moreover, there will be no overload of firmware programming in microcontrollers.)
图2:RS 232 DB9引脚排列(Fig 2: RS 232 DB9 Pinout)
图3:DS1621((Fig 3: DS1621(an)一世(I)2(2)C设备)引脚(C device) pinout)
一世(I)2(2)C协议概览(C Protocol at Glance)
图4:I2C总线时序图(请放大以正确查看)(Fig 4: Timing diagram of I2C bus (please zoom it to see properly))我(The I)2(2)C是双向2线总线.发送数据的设备被标识为发送器,接收数据的设备被标识为接收器.主设备负责生成SCL(时钟信号).通常,这些设备之间的连接(SDA和SCL线)是通过漏极开路的双向线进行的.定义了以下总线协议(请参见图4):(C is a bidirectional 2-wire bus. A device that sends data is identified as a transmitter, and a device receiving the data is identified as a receiver. It is responsibility of the master device to generate an SCL (clock signal). Usually, connections between these devices (SDA and SCL lines) are made via the open-drain bidirectional lines. The following bus protocol has been defined (see Figure 4):)
-
总线空闲时启动数据.(Data is initiated when the bus is idle.)
-
当时钟线(SCL)为高电平时,数据线(SDA)必须保持稳定.如果SCL为高电平时SDA中存在转换,则将其解释为控制信号.(The data line (SDA) must remain stable when the clock line (SCL) is HIGH. In case there is a transition in SDA while SCL is high, it would be interpreted as a control signal.) 重要的巴士状况:(Important bus conditions:)
-
当SCL和SDA都为高电平时,总线处于空闲状态.(When SCL and SDA both are high, bus is idle.)
-
当时钟为高电平时,SDA从高电平到低电平的转换定义了一个START.(Transition of SDA from high to low, while the clock is high, defines a START.)
-
当时钟为高电平时,SDA从低电平到高电平的过渡定义为STOP.(Transition of SDA from low to high, while the clock is high, defines a STOP.)
-
启动后,SDA的状态为SCL =1(高)定义数据位(1或0).数据的每一位都在一个时钟脉冲中传输.数据传输以STOP或另一个START终止(放弃先前的传输并开始新的传输).在START和STOP条件之间可以传输任意数量的字节.信息是按字节传输的,接收方有义务以第9位进行确认.主设备负责产生与该确认位相关的额外时钟脉冲.确认器件,使SDA线变为低电平,当SCL为高电平时(用于确认时钟脉冲),该器件必须保持低电平.(After START, state of SDA defines data bit (1 or 0) for SCL=1(high). Each bit of data is transmitted in one clock pulse. Data transmission is terminated with a STOP or another START (abandoning previous transmission and start of a new one). Any number of bytes could transferred between START and STOP conditions The information is transferred byte-wise, and it is an obligation for receiver to acknowledge with a ninth-bit. The master device is responsible for generation an extra clock pulse which is associated with this acknowledge bit. A device that acknowledges, makes SDA line low, and this must remain low when SCL is high (for acknowledgement clock pulse).)
-
为了结束数据传输,从机将数据线置于高电平,以便主机可以产生STOP.(To end the data transmission slave puts the data line to high, so that the master could generate the STOP.) 如果R/W位(图4中)为1,则数据从主机传输到从机.主机首先在该第一个字节中发送从机的地址,然后从机为此返回一个确认.(If R/W bit (in Figure 4) is 1, data is transferred from master to slave. In this first byte master first sends address of slave, and slave returns an acknowledgement for this.)
另一方面,如果R/W位为0,则数据流从从机到主机.同样在这里,主机首先发送从机的地址,从机返回一个确认位.此后,从机将数据字节发送给主机.主机收到所有期望最后一个字节的字节时,将返回一个确认.接收到最后一个字节时,主机将返回``不确认''.(On the other hand, if R/W bit is 0, data flow is from slave to master. Here also, master first sends the slave’s address, slave returns an acknowledge bit. After this, slave sends the data bytes to the master. Master returns an acknowledgement when it receives all the bytes expect the last one. When last byte is received , a ‘not acknowledge’ is returned by master.)
在下一节中,我们将看到此协议的C-sharp实现.应当指出的是,本节仅提到了I的一些外围细节.(In the next section we will see C-sharp implementation of this protocol. It should be noted that this section just mentioned some peripheral details of I)2(2)C协议.(C protocol.)
C#对I的仿真(C# Emulation of I)2(2)C(C)
本文以DS1621(温度传感器IC,其规格请参考[9])作为I(In this article, DS1621( a temperature sensor IC, please refer [9] for its specifications) is used as an example of an I)2(2)C设备.仿真分为以下两个部分:(C device. Emulation is divided in following two parts:)
图4:用于仿真的硬件示意图(Fig 4: Schematic of hardware used for the emulation)
- 硬件(Hardware):图5显示了用于仿真的硬件原理图.从示意图中可以看出,没有使用微控制器将RS232与DS1621接口.原理图由一对5.1 V齐纳二极管和一对470欧姆电阻组成.这些电阻和齐纳二极管用于保护电路免受高RS232电压的影响.提供带电阻的LED来指示系统中的电源.流行的电压转换器LM7805用于从9V DC电源插孔提供5V稳定DC输出.请参考图2.以获取RS232对应的引脚名称(DTR,CTS和RTS)到示意图中给出的引脚编号.我们可以看到连接是否符合本文第三部分中所述. (硬件PCB文件在本文随附的补充材料中.(: Figure 5 shows schematic of hardware used for emulation. It could be seen from schematic that no microcontroller is used, for interfacing RS232 with DS1621. Schematic consists of couple of 5.1 V zeners and couple of 470 ohm resistances. These resistances and zeners are used to protect circuitry against high RS232 voltages. A LED with resistance is provided to indicate power supply in the system. A popular voltage converter LM7805 is used to provide 5V stable DC output from a 9V DC power jack. Please refer to figure 2. for corresponding pin names (DTR, CTS and RTS) of RS232 to pin numbers given in schematic. We see can that connections are in accordance with as described in third section of this paper. (Hardware PCB files are in supplementary material provided with this paper) 点击这里(click here) ).().)
- 软件(Software):这是用于模拟I的C-sharp应用程序(: This is the C-sharp application for emulation of I)2(2)C协议.保持代码的可理解性.我已经将该应用程序作为控制台(没有GUI).表1中详细说明了此代码中使用的方法.(C protocol. To maintain understandability of code. I have made this application as console (no GUI). Methods used in this code are detailed in table 1.) 表1:代码中的函数及其简要说明.(Table 1: Functions in code and their brief descriptions.)|方法(Methods)
|描述(Description)
spinit |
|此功能会初始化一个``串行端口'‘对象.它还设置初始SCL和SDA状态(This function initializes a ‘serial port’ object. It also sets initial SCL and SDA states)
|
| sample
|每当SCL =1(高)时,此功能都会采样SDA状态.(This function samples SDA state, whenever SCL =1(High).)
|
| startcmd
|这提供了我的开始(This provides START in I)2C协议.(C protocol.)
|
| stopcmd
|这在我提供了停止(This provides STOP in I)2C协议.(C protocol.)
|
| tx_1
|该功能向我发送1(This function transmits 1 to I)2C设备.(C device.)
|
| tx_0
|该功能向我发送1(This function transmits 1 to I)2C设备.(C device.)
|
| tx_byte
|该方法将字节发送给I(This method transmits a byte to I)2C设备.(C device.)
|
| rx_bit
|通过这种方法,应用程序读取了一些来自我的信息(Through this method application reads a bit coming from I)2C设备.(C device.)
|
| rx_byte
|通过这种方法,应用程序从I读取一个字节(Through this method application reads a byte from I)2C设备.(C device.)
|
| one_shot_mode
|此方法专用于DS1621;它开始一个拍摄模式的温度对话.(This method is specific for DS1621; it starts one shot mode temperature conversation.)
|
| Start_convert_temperature
|此方法专用于DS1621;它开始温度转换序列.(This method is specific for DS1621; it starts temperature conversion sequence.)
|
| read_temperature
|此方法以2字节格式读取温度.(This method reads temperature in 2 byte format.)
|
| issue_read_temp
|此方法实现了(This method implements the) read_temperature
正确启动的方法.(method with proper initiation.)
|
| Main
|此方法是代码入口点方法.(This method is code entry point method.)
|
主要方法先调用(The main method first calls) spinit
用于" serialport"(此类在C#中提供与RS232的接口)实例的必需初始化.然后,主要电话(for required initialization of ‘serialport’ (this class provides interface with RS232 in C#) instance. Then after, main calls) issue_read_temp
.(.)
issue_read_temp
提供了使用I从DS1621读取温度的序列(provides a sequence to read temperature from DS1621 using I)2(2)C协议.(C protocol.)
该应用程序通过控制台窗口运行.它首先要求其用户提供我要使用的端口号(The application runs with a console window. It first asks its user to provide port number to which I)2(2)C设备已连接.当用户提供所需的信息(端口号)时,应用程序将花费一些时间,如果一切顺利(运行时不会出现问题),则应用程序将成功计算温度并将其传送到用户界面.(C device is connected. When user provides the required information (port number), application takes some time, and if everything goes well (no runtime trouble), application successfully calculates the temperature and delivers it to the user interface.)
验证了应用程序给出的温度值是正确的(通过将温度值与简单的水银温度计读数进行比较).(It was verified that temperature values given by application are correct (by means of comparing temperature values with simple mercury thermometer readings).)
因此,可以说,该应用程序成功模拟了(Hence, we can say, that application successfully emulates I)2(2)C协议.使用此方案,我们成功消除了处理I的C#应用程序中的微控制器(C protocol. Using this scheme we are successful in elimination of microcontroller in C# applications dealing with I)2(2)C设备.(C devices.)
/*
TITLE : I2C EMULATION IN C#
* Author : NAKUL VYAS
VERSION : 3.0
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
namespace ConsoleApplication8
{
class Program
{
public static SerialPort sp;
public static void spinit(int sn) // function for serial port initialization
{
sp =new SerialPort("COM"+sn);
Console.WriteLine("openning the port..........");
try{
sp.Open();
}
catch(Exception ex){
Console.WriteLine("Cannot open port following exception occured:" + ex.Message.ToString());
}
//making Clcok and SDA line stable
sp.RtsEnable = true;
sp.DtrEnable = true;
}
//this samples SDA pin of DS1621 by reading value of ctsHolding of RS232
public static bool sample()
{
return sp.CtsHolding;
}
// This is start condition for DS1621
public static void startcmd()
{
sp.DtrEnable= true;
sp.DtrEnable= true;
sp.RtsEnable = true;
sp.DtrEnable = false;
}
//this is stop condition for Ds1621
public static void stopcmd()
{
sp.DtrEnable =true;
sp.DtrEnable = false;
sp.RtsEnable = true;
sp.DtrEnable = true;
}
//This function transmitt 1(high) to DS1621
public static void tx_1()
{
sp.RtsEnable = false;
sp.DtrEnable=true;
sp.DtrEnable = true;
sp.RtsEnable = true;
sp.RtsEnable= false;
}
//This function transmitt 0(low) to DS1621
public static void tx_0()
{
sp.RtsEnable = false;
sp.DtrEnable= true;
sp.DtrEnable = false;
sp.RtsEnable = true;
sp.RtsEnable = false;
}
//This functions tranmitt a byte value as a binary string
public static bool tx_byte(string b)
{
foreach (char c in b)
{
if (c == '0')
tx_0();
else if (c == '1')
tx_1();
}
return rx_bit();
}
//This reads a bit value from DS1621
public static bool rx_bit()
{
bool temp;
sp.DtrEnable = true;
sp.RtsEnable = false;
sp.RtsEnable = true;
temp = sample();
sp.RtsEnable = false;
return temp;
}
//This reads a byte value from DS1621
public static int rx_byte(bool ack)
{
int i;
int retval=0;
for(i = 0;i <=7;i++)
{
retval = retval * 2;
if(rx_bit())
retval = retval + 1;
}
if(ack)
tx_0();
else
tx_1();
return retval;
}
//This Squence is for setting DS1621 for setting it in one shot mode (see data sheet)
public static void one_shot_mode()
{
startcmd(); //start command for DS1621
tx_byte("10010000");
tx_byte("10101100");
tx_byte("00000001");
//no need of stop
}
//This Squence is for setting DS1621 for starting conversion of temperature (see data sheet)
public static void Start_convert_temperature()
{
startcmd();
tx_byte("10010000"); //Bus Master sends DS1621 address; R/ W= 0.DS1621 generates acknowledge bit.
tx_byte("11101110");// Bus Master sends Start Convert T command protocol.DS1621 generates acknowledge bit.
stopcmd();
}
//This Squence is for setting DS1621 for reading 2 byte temperature format MSB and LSB (see data sheet)
public static double read_temperature()
{
int temperature_MSB;
int temperature_LSB;
startcmd();
tx_byte("10010000");
tx_byte("10101010");
startcmd();
tx_byte("10010001");
temperature_MSB = rx_byte(true); //MSB is integral value of temperature
temperature_LSB = rx_byte(false); //LSB is fraction pf temperature
stopcmd();
//to convert temperature in readable format
double temp = ((temperature_MSB * 256 + temperature_LSB))/256;
if (temperature_MSB >= 128)
temp = temp - 256;
return temp;
}
public static double issue_read_temp()
{
//an extra stop to stabalize bus
stopcmd();
//issue a one shot mode command
one_shot_mode();
return read_temperature();
}
static void Main(string[] args)
{
Console.WriteLine("Enter the COM port number where Hardware is connected :");
//serial port initialization
spinit(int.Parse(Console.ReadLine()));
Console.WriteLine("Temperature Value of DS1621 is :");
//issue a read sequence for DS1621
int i = 0;
Console.WriteLine(issue_read_temp());
while (i < 20)
i++;
Console.ReadKey();
}
}
}
图5:应用程序运行的屏幕快照.(Fig 5: A screen shot of application run.)## 结论(Conclusion)
本文提出了一种新颖的方法,用于将C#应用程序与I通信(This article presents a novel approach for communication of a C# application with an I)2(2)C设备.按照惯例,C#应用程序首先使用串行通信协议与微控制器通信,然后由微控制器负责与I(C device. Conventionally, C# applications first communicate with microcontrollers using a serial communication protocol, and then it is the microcontroller which is responsible for communication with the I)2(2)C设备.相反,本文提出了一种方案,其中不需要C#应用程序的微控制器与I通信(C device. In contrast, this paper presents a scheme in which there is no need of microcontroller for a C# application to communicate with an I)2(2)C设备.在此方案中,C#应用程序模拟了I(C device. In this scheme, the C# application emulates I)2(2)C协议直接通过RS232端口(DB9串行).由于此方案中无需微控制器,因此消除了固件开销以及与原型设计相关的最终成本.此外,还避免了微控制器进行数据处理的不必要的延迟.为了验证所提出的方案,通过对I的仿真成功地证明了该方案.(C protocol directly over the RS232 port (DB9 serial). Since there is no need of microcontroller in this scheme, it eliminates firmware overhead and the final cost associated with prototyping. Moreover, unnecessary delay of data processing by microcontroller is also avoided. To verify the proposed scheme, it was successfully demonstrated by emulation of I)2(2)通过DS1621上的C#控制台应用程序执行C(示例I(C by a C# console application over DS1621 (an example I)2(2)C设备).(C device).)
参考文献(References)
- 1 I2C总线及其使用方法(包括规格),Philips Semiconductors,1995年更新(The I2C-bus and how to use it (including specifications), Philips Semiconductors, 1995 updated)
- [2] Wylie Wong(2002).([2] Wylie Wong (2002).) “Why Microsoft’s C# isn’t”)“为什么不使用Microsoft的C#"( . CNET:CBS交互式.于2009年11月14日检索.(. CNET: CBS Interactive. Retrieved November 14, 2009.)
- 3 C#语言规范(C# Language Specification) (第四版).((4th ed.).) 埃玛国际(Ecma International) . 2006年6月.于2012年1月26日检索.(. June 2006 . Retrieved January 26, 2012.)
- [4] Vyas,Nakul; ,“务实的碳税计费制度”([4] Vyas, Nakul; , “A pragmatic carbon tax billing regime,")无线和光通信网络(WOCN),2012年第九届国际会议(Wireless and Optical Communications Networks (WOCN), 2012 Ninth International Conference on),卷,第1-7页,2012年9月20-22日(, vol., no., pp.1-7, 20-22 Sept. 2012)
- 5 Visual Basic:MSComm控件,Microsoft开发人员网络(MSDN),库(Visual Basic: MSComm Control, Microsoft Developers Network (MSDN), Library)
- 6 SerialPort类,Microsoft开发人员网络(MSDN),库(SerialPort Class, Microsoft Developers Network (MSDN), Library)
- 7**EIA标准RS-232-C:使用串行二进制数据交换的数据终端设备和数据通信设备之间的接口(EIA standard RS-232-C: Interface between Data Terminal Equipment and Data Communication Equipment Employing Serial Binary Data Interchange).华盛顿:电子工业协会.工程部1969年.(. Washington: Electronic Industries Association. Engineering Dept. 1969.)
- 8 D-sub 9连接器引脚排列(D-sub 9 Connector Pinout)
- 9 数据表:Atmel ATMega32 L(Datasheet: Atmel ATMega32 L)
- 10 数据表:Maxim DS1621(Datasheet: Maxim DS1621) 注意(Note):请使用(: Please use the) PCB文件在这里(PCB file here) (要打开此文件,您需要((to open this file you will need a)免费版本(free version)的(of) DIPTRACE软件(DIPTRACE Software) )随附于此项目,以快速开发原型.() attached with this project for quick development of the prototype.)
许可
本文以及所有相关的源代码和文件均已获得The Code Project Open License (CPOL)的许可。
C# .NET Windows SysAdmin Architect application 新闻 翻译