叶帆工作室

嵌入式开发爱好者(十年开发经验,精通C/C++/VC/VB/C#...)

用户操作
[即时聊天] [发私信] [加为好友]
刘洪峰ID:yefanqiu
534477次访问,排名79(-1)好友0人,关注者217
微软MVP / CSDN 2008十大MVB/MSDN中文技术论坛版主
yefanqiu的文章
原创 218 篇
翻译 0 篇
转载 3 篇
评论 1099 篇
叶帆的公告
本博客原创文章,作者保留一切权利,需经作者同意后方可转载,转载时 请注明[叶帆工作室]及文章链接。yefan@vip.sina.com
【简介】叶帆[微软MVP]
【文章】叶帆文章列表
【软件】叶帆共享软件列表
最近评论
BinYu:我用的是vista home basic sp1,但vs2005强行装不上去,请帮忙分析一下,qq:811344767,先谢谢了
wjh6877:算法想好了吗?

没有就是空话
一生好人:其实我也想来正版,但生活逼人,没办法啊
fox23:something like java card;-)
wwqqha:不错不错
文章分类
收藏
    相册
    叶帆照片
    【叶帆软件】
    [01]VB源码之友(V2.1.548)
    [02]API浏览器.net(V5.0)
    [03]叶帆成语词典(V2.0.8)
    [04]叶帆密码库(V1.2.8)
    【叶帆资源】
    DAO 2.0引擎
    叶帆快速通道
    MSDN-MVP
    Windows Embedded 专题
    中文MSDN
    叶帆圈子--工业自动化
    叶帆工作室(博客园)
    叶帆工控--工业自动化
    叶帆群组--工业应用开发
    微软中文技术论坛
    微软硬件创新中心(HIC)
    瑞康社区论坛
    叶帆友情链接
    张欣
    枕善居
    莫依
    葛涵涛
    郑建
    陈辉
    马宁
    马骐
    魏涛序
    黎波
    存档
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 .Net Micro Framework研究—带AD的模拟器收藏

    新一篇: .Net Micro Framework研究—带I2C总线的模拟器 | 旧一篇: .Net Micro Framework研究—带IO的模拟器

     
    继昨天的研究,希望再接再厉把AD模入模出在模拟器上也实现出来,本以为挺简单,其实AD相关功能,与GPIO不同,在模拟器中前者通过GpioPort实现,后者通过SpiDevice实现。幸好有Temperature(温度采集)示例可以参考,否则一时真无法下手。不知道为什么,很简单的代码他们总写的很复杂,让你很难看懂,幸好有以前的相关的经验做底子,用了大半天的时间模入模出都搞定了。
    下面就是模拟器中的AD输入输出的相关代码。
        public class SpiADComponent : SpiDevice
        {
            public Int16 AW0 = 0;
            public Int16 QW0 = 0;
            protected override byte[] Write(byte[] data)
            {
                //------------
                try
                {
                    QW0 = (Int16)((data[0] << 8) + data[1]);
                }
                catch { }
                //------------
                byte[] bytes = new byte[2];
                bytes[0] = (byte)(AW0 >> 8);
                bytes[1] = (byte)(AW0 & 0xff);
                return bytes;
            }
        }
     注:由于受西门子PLC200的影响比较大,所以把模拟量入和出,定义为AW0和QW0,并且用两个字节的整数表示,根据需要可以进行折算。
    我们把昨天的GPIO代码稍加改进,把AD部分测试代码添加进去,代码如下:
    static SPI _spi;
        public static void Main()
        {
            OutputPort[] output = new OutputPort[8];
            InputPort[] input = new InputPort[8]; 
           
            //叶帆模拟器GPIO的pin定义
            Cpu.Pin[] pin_I = new Cpu.Pin[8] { (Cpu.Pin)10, (Cpu.Pin)11, (Cpu.Pin)12, (Cpu.Pin)13, (Cpu.Pin)14,(Cpu.Pin)15, (Cpu.Pin)16, (Cpu.Pin)17 };
            Cpu.Pin[] pin_Q = new Cpu.Pin[8] { (Cpu.Pin)20, (Cpu.Pin)21, (Cpu.Pin)22, (Cpu.Pin)23, (Cpu.Pin)24, (Cpu.Pin)25, (Cpu.Pin)26, (Cpu.Pin)27 };
     
            //SPI的pin定义
            _spi=new SPI(new SPI.Configuration((Cpu.Pin)30, true, 0, 0, false, false, 4000, SPI.SPI_module.SPI1));
     
            for (int i = 0; i < 8; i++)
            {
                input[i] = new InputPort(pin_I[i], false, Port.ResistorMode.PullDown);
                output[i] = new OutputPort(pin_Q[i], false);
            }
     
            int intNum = 0;
            while (true)
            {
                output[intNum].Write(!output[intNum].Read());
                Debug.Print(input[0].Read().ToString() + " " + input[1].Read().ToString() + " " + input[2].Read().ToString() + " " + input[3].Read().ToString() + " " + input[4].Read().ToString()+ " " + input[5].Read().ToString() + " " + input[6].Read().ToString() + " " + input[7].Read().ToString());
                Debug.Print(ReadWriteAD((Int16)intNum).ToString() + " " + intNum.ToString());
                if (++intNum > 7) intNum = 0;
                Thread.Sleep(1000);
            }
        }
        public static Int16 ReadWriteAD(Int16 value)
        {
            byte[] bout = new byte[2];
            byte[] bin = new byte[2];
            bout[0] = (byte)(value >> 8);
            bout[1] = (byte)(value & 0xff);
            _spi.WriteRead(bout, bin);
            Int16 aw0=(Int16)((bin[0] << 8) + bin[1]);
            return aw0;
        }
     } 
    运行后的界面如下:
    从上图可以看出,模拟器已经和测试程序进行交互了,即可以设置AW0的值,也可以获取QW0的值。
     
    我又把模拟器改进了一下,可以支持多种IO模拟功能,目前已经完成了GPIO和AD,I2C应该也不难,但是Serial(串口)估计有问题,因为模拟器支持库没有相关函数。
     

    发表于 @ 2007年12月31日 13:19:00|评论(loading...)|编辑

    新一篇: .Net Micro Framework研究—带I2C总线的模拟器 | 旧一篇: .Net Micro Framework研究—带IO的模拟器

    评论:没有评论。

    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © 叶帆