首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解码TM1628/SM1628/Ht1628 LED驱动芯片串行数据

解码TM1628/SM1628/Ht1628 LED驱动芯片串行数据
EN

Stack Overflow用户
提问于 2017-12-09 14:09:11
回答 2查看 2.7K关注 0票数 1

嗨,我正在使用arduino uno来驱动一个数字锅,它反过来驱动外部脉宽调制来使用Esp8266在互联网上控制它。PWM被用来驱动我的加热器。我的加热器由一个带有TM1628驱动芯片的发光二极管显示器组成,用于显示加热器的当前温度和控制加热器的温度。

此LED显示屏由5线配置组成,我假设它是串行接口。

代码语言:javascript
复制
1. GND
2. VCC
3. Strobe
4. Data in/out
5. clock

而不是有外部PWM控制,我想解码串行数据进入加热器通过LED驱动器和数据从PWM到LED显示器,使Arduino作为一个控制板的电路。这将允许微控制器根据串行反馈知道驱动器%在命令之前的位置。

但当我试图阅读数据表时,我无法清楚地理解它。

我已经用这个代码控制了led芯片:

代码语言:javascript
复制
int datapin = 8;

int clkpin = 9;

int stbpin = 11;


void setup() {

  Serial.begin(9600);

  pinMode(datapin, INPUT);

  pinMode(clkpin, INPUT);

  pinMode(stbpin, INPUT);

}

void loop () {
button = getKeyboard()
if (button != 0){

    for(int i=0;i<8;i++){

      if((button >> i) & 0x01) {

        serial.print("No");
        serial.print(i);
        serial.print('-');
        serial.print(button);
      }
}


void getKeyboard()
{

    byte keys = 0;

    digitalWrite(stbpin, LOW);
    tm_sendByte(0x42); // command 2
    for (int i = 0; i < 5; i++)
        keys |= tm_receiveByte() << i;
    digitalWrite(stbpin, HIGH);

    return keys;
 }


// *** Basic communication

void tm_sendByte(byte data)
{

    for (int i = 0; i < 8; i++)

        {

            digitalWrite(clkpin, LOW);
            digitalWrite(datapin, data & 1 ? HIGH : LOW);
            data >>= 1;
            digitalWrite(clkpin, HIGH);
        }
}

void tm_receiveByte()
{

    byte temp = 0;

    pinMode(datapin, INPUT);
    digitalWrite(datapin, HIGH);

    for (char i = 0; i < 8; i++)
        {
            temp >>= 1;
            digitalWrite(clkpin, LOW);
            if (digitalRead(datapin))
                temp |= 0x80;
            digitalWrite(clkpin, HIGH);
        }

    pinMode(datapin, OUTPUT);
    digitalWrite(datapin, LOW);

    return temp;
}

void tm_sendCommand(byte data)

{

    digitalWrite(stbpin, LOW);

    tm_sendByte(data);

    digitalWrite(stbpin, HIGH);
}

但是当我尝试读取命令时,它显示十六进制值,而当我尝试向加热器发送相同的命令时,它没有响应。

我如何解码来自led芯片的数据和进入led chip..or的数据由于我不能通过数据表理解,我如何制作一个字节的数据用于按键?

任何帮助都将不胜感激。这是LED驱动器芯片的链接。http://aitendo3.sakura.ne.jp/aitendo_data/product_img/ic/LED-driver/TM1628english.pdf

EN

回答 2

Stack Overflow用户

发布于 2019-09-23 21:55:06

看起来您正在设置和清除发送字节中的芯片选择。然后尝试在命令0x42期间从芯片读取字节

票数 0
EN

Stack Overflow用户

发布于 2021-05-02 02:39:08

在空tm_receiveByte()中

for (char i= 0;i< 8;i++)

{

temp >>= 1;//错误

temp <<= 1;//使用此

digitalWrite(clkpin,低位);

if (digitalRead(数据输入))

临时|= 0x80;

digitalWrite(clkpin,高);

}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47725859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档