Futaba M204SD02AJ Anzeige im seriellen Modus

Bild

In diesem Artikel möchte ich die Erfahrungen mit der Verwendung des FUTABA MSD204AJ-Indikators im seriellen Schnittstellenmodus teilen. Wir werden auf Arduino programmieren.

Um die Anzeige in den seriellen Modus zu versetzen, stellen Sie die Steckbrücken gemäß Datenblatt ein :

J3-ein
J4-aus
J5-ein
J6-ein
J7-aus

Bild

In diesem Modus ist die Pinbelegung wie folgt (gemäß Tabelle 11):

1 - Allgemeines
2 - 5-V-Netzteil
3 - E / A-Daten
4 - Strobe-Impuls
6 - Taktimpulse

Ein typisches Senden an den Indikator besteht aus einem Startbyte und direkt einem Byte der benötigten Informationen (ob es sich um einen Befehl oder um Daten handelt).

Das Startbyte besteht aus fünf logischen Einheiten, dem RW-Bit Read (1) / Write (0), dem Identifizierungsbit RS Commands (0) / Data (1), der logischen Null - insgesamt acht Bits. In diesem Fall werden Bits in der Anzeige entlang der Vorderflanke des Taktimpulses aufgezeichnet. Und das Lesen von Bits von der Anzeige befindet sich an der fallenden Flanke. Jeder Lese- / Schreibsendung beginnt nach der abfallenden Flanke des Strobe-Signals, endet jedoch mit der ansteigenden Flanke.

Bild

1 - In diesem Moment beginnt der Empfang / die Übertragung.
2 - in diesem Moment endet der Empfang / die Übertragung
3 - in diesem Moment wird das Bit von der Anzeige
4 gelesen - das Bit bestimmt Schreiben / Lesen

Allgemein unsere Aufgabe:

1. Setzen Sie den Strobe auf Null.
2. Setzen Sie den Taktausgang auf Null.
3. Geben Sie ein Informationsbit aus.
3a. warte ein bisschen.
4. Setzen Sie den Ausgang des Taktsignals auf eins.
4a. warte ein bisschen.
5a, Absätze 2-4 tun 8 mal. - Dies ist das erste Byte.
5b, Punkte 2-4 machen 8 weitere Male. - Dies ist das zweite Byte.
6. Stellen Sie den Blitz auf Einheit.

Also nehmen wir ein Modell von Arduinen und einer Entwicklungsumgebung.

Deklarieren Definiert:

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

Konfigurieren Sie Arduino-Ports:

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

Stellen Sie Strob und Clock auf die Log-Einheit:

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

Und fangen Sie an, Bits an den Indikator zu senden. Weil Wenn wir 2 Bytes nacheinander senden müssen, tun wir dies mit der verschachtelten for-Schleife in for.

Erstellen Sie eine Prozedur, nennen Sie sie futab. Sie wird zwei Eingabevariablen verwenden. x1 ist das erste Startbyte, x2 ist das Datenbyte.

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
}

Das ist alles, Sie können dieses Verfahren verwenden. Wie? Und so:

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

So sieht es auf dem Oszilloskopbildschirm aus.

Bild

Bild

Nun, dann werfen Sie einfach die Befehle und Daten in die Anzeige und erhalten Sie alle möglichen Beschriftungen auf der Tafel. Das Befehlssystem selbst ist den Befehlen des beliebten HD44780-Controllers sehr ähnlich, mit Ausnahme eines Paares von Steuerbits, die die Helligkeit der Anzeige steuern können.

Weil Ich sehe die Anwendung dieses Indikators nicht. Ich werde eine einfache Hallo-Welt ausgeben. Ich schreibe, was in der Stirn heißt, Rechtschreibung. Keine Bibliotheken, nur Zeichencodes, nur Hardcore.

Hier ist der Code
/* 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() {
 
}


Bild

Und zum Schluss ein Video der Arbeit:

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


All Articles