无为 发表于 2013-12-15 16:21:40

【求助】如何读取图片中的数据

手头上有一块数显百分表,想用Ardunio将其数据读取出来,但研究了半天,不知道该怎么去写读取程序,也试下了,发现读取不了,现将数据格式和时顺图发出来给各位看看。这是我的程序,个人觉得不对,但不知道如何修改。

int data = 0;
int ck = 3;
int req = 4;
void setup() {
pinMode (2,INPUT);
pinMode (ck,OUTPUT);
pinMode (req,OUTPUT);
Serial.begin(9600);
digitalWrite(ck,HIGH);
}

void loop() {
digitalWrite(req,LOW);
delay(10);
for(int x = 0;x<52;x++){
    digitalWrite(req,HIGH);
    digitalWrite(ck,LOW);
   data = +digitalRead(2);
      digitalWrite(ck,HIGH);
      }      
   Serial.print("DATA=");
   Serial.println (data,BIN);
delay(1000);
}

个人理解:是否需要用SPI或I2C总线方式读取?另外就是一个位一个位地读取并转换,如先读取d1并转换存入data,再读取d2并转换,存入data+,依次类推,是否可行,该如何做?

无为 发表于 2013-12-15 16:26:51

这是图片

pathletboy 发表于 2013-12-15 17:32:10

他CK是output的,你要在他时钟信号上升沿的时候读data,然后移位进自己的变量里,而不是你给他时钟信号。

pathletboy 发表于 2013-12-15 17:33:55

用spi的话,你的spi要作为slave模式。

无为 发表于 2013-12-16 08:40:41

pathletboy 发表于 2013-12-15 17:33 static/image/common/back.gif
用spi的话,你的spi要作为slave模式。

哦,这样啊,我还以为是需要我给时钟信号,我再试试,非常感谢!

无为 发表于 2013-12-16 10:06:44

pathletboy 发表于 2013-12-15 17:33 static/image/common/back.gif
用spi的话,你的spi要作为slave模式。

经您这一提,我发现其输入输出口还不能直接连接Arduino板子,需要用CMOS和中间电路转换,唉,看来很麻烦,手头上也没这样的东西,看来得找到东西才能再试了。

林定祥 发表于 2013-12-16 14:27:28

coms无关,只要两边工作电压一致就可以了。从图上看这个设备是数据输出,单片可以做被动输入,也即在收到req后每次时钟变化一次读一位数,连续4个字节全1为数据包开始,第五字节为符号位,6-11字节为数值,第12字节为小数数值,13字节显示单位

无为 发表于 2013-12-16 15:31:33

林定祥 发表于 2013-12-16 14:27 static/image/common/back.gif
coms无关,只要两边工作电压一致就可以了。从图上看这个设备是数据输出,单片可以做被动输入,也即在收到re ...

在接口定义边上有INPUT和OUTPUT的输入输出电路方式,INPUT为一个跟随器加1.55V和55K-22K的电阻,OUTPUT端为-0.3-+7V外加一个CMOS管组成的,其中DATA和CK为OUTPUT,REQ非为INPUT,从这情况来看,电压基本上还在Ardunio板之内,但我试着接了线和修改程序后还是无法读出。另数据格式这里:D1为四位二进制即0000-1111,其他也一样,即为一个十六进制数,而我们能读取出来的数应该是二进制一个一个地读取的,直接读取一个十六进制数应该是不行的,除非用串口或SPI和I2C总线方式。试过用串口RX和TX读取,也无法读出。而SPI和I2C现在我还不知道怎么用,没试过,正在研究中……

林定祥 发表于 2013-12-16 17:50:16

建议clk接中断脚,req给出低电平后,开启终端,clk下降触发中断,然后读数,再次中断再读数,以此循环。

qptimus 发表于 2013-12-16 20:57:56

这是iic通信

无为 发表于 2013-12-17 20:45:39

准备哪天去找个逻辑分析仪来测下波形再来弄了。
页: [1]
查看完整版本: 【求助】如何读取图片中的数据