嗨,我正在使用arduino uno来驱动一个数字锅,它反过来驱动外部脉宽调制来使用Esp8266在互联网上控制它。PWM被用来驱动我的加热器。我的加热器由一个带有TM1628驱动芯片的发光二极管显示器组成,用于显示加热器的当前温度和控制加热器的温度。
此LED显示屏由5线配置组成,我假设它是串行接口。
1. GND
2. VCC
3. Strobe
4. Data in/out
5. clock而不是有外部PWM控制,我想解码串行数据进入加热器通过LED驱动器和数据从PWM到LED显示器,使Arduino作为一个控制板的电路。这将允许微控制器根据串行反馈知道驱动器%在命令之前的位置。
但当我试图阅读数据表时,我无法清楚地理解它。
我已经用这个代码控制了led芯片:
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
发布于 2019-09-23 21:55:06
看起来您正在设置和清除发送字节中的芯片选择。然后尝试在命令0x42期间从芯片读取字节
发布于 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,高);
}
https://stackoverflow.com/questions/47725859
复制相似问题