串行模式下的Futaba M204SD02AJ指示器

图片

在本文中,我想分享在串行接口模式下使用FUTABA MSD204AJ指示器的经验。我们将在arduino上编程。

要将指示器置于串行模式,必须根据数据表设置跳线

J3-on
J4-off
J5-on
J6-on
J7-off

图片

在此模式下,引脚分配如下(根据表11):

1-常规
2-5V电源
3-I / O数据
4-选通脉冲
6-时钟脉冲

典型的向指示器发送信号包括一个开始字节和一个我们需要的信息字节(无论是命令还是数据)。

起始字节由五个逻辑单元组成,RW位读(1)/写(0),标识符位RS命令(0)/数据(1),逻辑零-总共8位。在这种情况下,沿时钟脉冲的上升沿将比特记录在指示器中。从指示器读取位在下降沿。任何读/写发送都在选通信号的下降沿之后开始,但在上升沿结束。

图片

1-此时开始接收/发送。
2-此刻接收/发送结束
3-此刻指示器读取
该位4-该位确定写/读

一般我们的任务:

1.将选通脉冲设置为零。
2.将时钟输出设置为零。
3.给出一个信息位。
3a。等一下
4.将时钟信号的输出设置为1。
4a。等一下
5a,第2-4段做了8次。-这将是第一个字节。
5b,点2-4再做8次。-这将是第二个字节。
6.将闪光灯设置为单位。

因此,我们对arduins和开发环境进行了模拟。

声明定义:

#define _STB 2
#define _SCK 3
#define _SISO 4

配置Arduino端口:

  pinMode(_STB, OUTPUT);
  pinMode(_SCK, OUTPUT);
  pinMode(_SISO, OUTPUT);

将频闪和时钟设置为日志单元:

  digitalWrite(_STB,1);
  digitalWrite(_SCK,1);

并开始向指示器发送位。因为 如果我们需要一个接一个地发送2个字节,那么我们将使用for中的嵌套for循环来执行此操作。

创建一个过程,将其称为futab。她将使用两个输入变量。x1是第一个起始字节,x2是数据字节。

void futab(int x1, int x2){
 digitalWrite(_STB,0);						        //.1
 for (j=1; j<3; j++){
  if (j==1)  {cmd = x1;} else {cmd = x2;}     			//. 5, 5
  for (i=7; i>-1; i--) {
                      digitalWrite(_SCK,0);			                //.2
                      digitalWrite(_SISO,bitRead(cmd,i));       //.3    i-   
                      delayMicroseconds(2);			     //.3  
                      digitalWrite(_SCK,1);			            //.4 
                      delayMicroseconds(2);			    //.4  
                      } 
                     }
 digitalWrite(_STB,1);						//.6
}

就是这样,您可以使用此过程。怎么了 依此类推:

futab(0b11111000,0b00000001); //    4-4-1  .
//  
futab(0b11111000,0b10010101); //    4-4-8   DDRAM = 15h, ..    3-  2- 
//   
futab(0b11111010,0b010000010); //  41h ( ).  4-4-10.

这就是在示波器屏幕上的样子

图片

图片

,然后,只需将命令和数据放入指示器中,并在板上获得各种铭文即可。该命令系统本身与流行的HD44780控制器的命令非常相似,除了一对可以控制指示器亮度的控制位。

因为 我看不到该指标的应用,我将输出一个简单的Hello World。我将在额头上写下所谓的拼写。没有库,只有字符代码,只有硬核。

这是代码
/* FUTABA */

#define _STB 2
#define _SCK 3
#define _SISO 4
int i,j,n,m;
int cmd;

void futab(int x1, int x2){
 digitalWrite(_STB,0);
 for (j=1; j<3; j++){
 // delay(1500);
  if (j==1)  {cmd = x1;} else {cmd = x2;}     
  for (i=7; i>-1; i--) {
                      digitalWrite(_SCK,0);
                      digitalWrite(_SISO,bitRead(cmd,i));
                      delayMicroseconds(2);
                      digitalWrite(_SCK,1);
                      delayMicroseconds(2);
                      }
                     }
 digitalWrite(_STB,1);
 delay(50);
}


void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);               // starts the serial monitor 

  pinMode(_STB, OUTPUT);        //  "  "
  pinMode(_SCK, OUTPUT);
  pinMode(_SISO, OUTPUT);
  
  digitalWrite(_STB,1);       //     
  digitalWrite(_SCK,1);

 futab(248,1);  //    4-4-1
 delay(2000);    //  
 futab(250,0x87);   // 
 futab(250,0x50);   // 
 futab(250,0x84);   // 
 futab(250,0x42);   // 
 futab(250,0x45);   // 
 futab(250,0x54);   // 

futab(248,0b11000011); //  4-4-8   =43h    ,  

 futab(250,0x48);   // H
 futab(250,0x61);   // a
 futab(250,0x62);   // b
 futab(250,0x72);   // r


futab(248,0b11011111); //  4-4-8   =5Fh  4- , 12 
 futab(250,0x35);   // 5
 futab(250,0x65);   // e
 futab(250,0x72);   // r
 futab(250,0x47);   // G
 futab(250,0x30);   // 0

futab(248,0b10011011); //  4-4-8   =5Dh  3- , 10 
 futab(250,0x30);   // 0
 futab(250,0x37);   // 7
 futab(250,0x2E);   // .
 futab(250,0x30);   // 0
 futab(250,0x34);   // 4
 futab(250,0x2E);   // .
 futab(250,0x32);   // 2
 futab(250,0x30);   // 0
 futab(250,0x31);   // 1
 futab(250,0x36);   // 6


 

for (m=1; m<5; m++){
 for (n=1; n<4; n++){
   futab(248,0b00011100);   // 4-4-5    
   delay(100);
                  }
 for (n=1;n<4;n++){
   futab(248,0b00011000);    // 4-4-5    
   delay(100);
                  }
                   } 
 
 delay(1500);
 for (n=1;n<5;n++){
   futab(248,0b00001000);   // 4-4-4  
   delay(100);
   futab(248,0b00001100);   // 4-4-4  
   delay(100);
                  }

 delay(1500);
                  
 for (n=1;n<5;n++){
 
 futab(248,0b00111101);  // 4-4-6    75%
 delay(100);
 futab(248,0b00111110);  // 4-4-6    50%
 delay(100);
 futab(248,0b00111111);  // 4-4-6    25%
 delay(100);
 futab(248,0b00111110);  // 4-4-6    50%
 delay(100);
 futab(248,0b00111101);  // 4-4-6    75%
 delay(100);
 futab(248,0b00111100);  // 4-4-6    100%
 delay(100);
 }
 delay(1000);

//    
 
 futab(248,0b01001000);  // 4-4-7   CGRAM=8
 futab(250,0b00001110); 
 futab(250,0b00010001); 
 futab(250,0b00010001); 
 futab(250,0b00010011); //
 futab(250,0b00010111); 
 futab(250,0b00011111); 
 futab(250,0b00011111); 
 futab(250,0b00011111); 

 futab(248,0b01010000);  // 4-4-7   CGRAM=16
 futab(250,0b00000000); 
 futab(250,0b00000001); 
 futab(250,0b00000110); 
 futab(250,0b00001100);  //- 
 futab(250,0b00010001); 
 futab(250,0b00000110); 
 futab(250,0b00001100); 
 futab(250,0b00010000); 
 
//     

 futab(248,0b10010011); //    1*20
 futab(250,0b00000001);  //    CGRAM c  1

 futab(248,0b11010011); //    2*20
 futab(250,0b00000010);  //    CGRAM c  2

}
void loop() {
 
}


图片

最后,一段工作视频:

Source: https://habr.com/ru/post/zh-CN392757/


All Articles