Indikator Futaba M204SD02AJ dalam mode serial

gambar

Pada artikel ini saya ingin berbagi pengalaman menggunakan indikator FUTABA MSD204AJ dalam mode antarmuka serial. Kami akan memprogram arduino.

Untuk menempatkan indikator ke mode serial, setel jumper sesuai dengan datasheet :

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

gambar

Dalam mode ini, penugasan pin adalah sebagai berikut (sesuai dengan tabel 11):

1 - Umum
2 - catu daya 5V
3 - Data I / O
4 - Pulsa strobo
6 - Pulsa jam Biasanya

pengiriman ke indikator terdiri dari byte awal dan langsung satu byte informasi yang kita butuhkan (apakah itu perintah atau data).

Byte mulai terdiri dari lima unit logis, RW bit Baca (1) / Tulis (0), bit pengidentifikasi Perintah RS (0) / Data (1), logis nol - total delapan bit. Dalam hal ini, bit direkam dalam indikator di sepanjang tepi depan dari pulsa jam. Dan membaca bit dari indikator berada di ujung. Setiap pengiriman baca / tulis dimulai setelah tepi jatuh sinyal Strobe, tetapi berakhir di tepi naik.

gambar

1 - saat ini penerimaan / transmisi dimulai.
2 - pada saat ini penerimaan / transmisi berakhir
3 - pada saat ini bit dibaca oleh indikator
4 - bit menentukan Tulis / Baca

Umumnya tugas kita:

1. setel strobo ke nol.
2. Atur output jam ke nol.
3. berikan sedikit informasi.
3a. tunggu sebentar.
4. Atur output dari sinyal jam ke satu.
4a. tunggu sebentar.
5a, paragraf 2-4 lakukan 8 kali. - ini akan menjadi byte pertama.
5b, poin 2-4 lakukan 8 kali lebih banyak. - ini akan menjadi byte kedua.
6. Atur strobo ke unit.

Jadi, kami mengambil model arduins dan lingkungan pengembangan.

Deklarasikan Mendefinisikan:

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

Konfigurasikan port Arduino:

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

Atur strob dan jam ke unit log:

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

Dan mulai mengirim bit ke indikator. Karena jika kita perlu mengirim 2 byte satu demi satu, maka kita akan melakukan ini menggunakan nested for loop in for.

Buat prosedur, sebut itu futab. Dia akan menggunakan dua variabel input. x1 adalah byte awal pertama, x2 adalah byte data.

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
}

Itu saja, Anda dapat menggunakan prosedur ini. Bagaimana? Jadi:

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

Beginilah tampilannya di layar osiloskop.

gambar

gambar

Nah, maka lontarkan saja perintah dan data ke dalam indikator dan dapatkan semua jenis tulisan di papan tulis. Sistem perintah itu sendiri sangat mirip dengan perintah-perintah pengontrol HD44780 yang populer, dengan perkecualian sepasang bit kontrol yang dapat mengontrol kecerahan indikator.

Karena Saya tidak melihat aplikasi indikator ini, saya akan menampilkan Halo yang sederhana, dunia. Saya akan menulis apa yang disebut di dahi, ejaan. Tidak ada perpustakaan, hanya kode karakter, hanya hardcore.

Ini kodenya
/* 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() {
 
}


gambar

Dan sebagai kesimpulan, sebuah video karya:

Source: https://habr.com/ru/post/id392757/


All Articles