Futaba M204SD02AJ Anzeige im sequentiellen Modus

Published on April 08, 2016

Futaba M204SD02AJ Anzeige im sequentiellen Modus

Bild

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

Um den Indikator in den seriellen Modus zu versetzen, müssen die Jumper gemäß Datenblatt gesetzt werden :

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

Bild

In diesem Modus ist die Pin-Belegung wie folgt (gemäß Tabelle 11):

1 - Common
2 - 5V Power
3 - E / A-Daten
4 - Strobe-Impuls
6 - Taktimpulse

Ein typisches Paket für den Indikator besteht aus einem Startbyte und dem Byte der Informationen, die wir direkt benötigen (sei es ein Befehl oder Daten).

Das Startbyte besteht aus fünf logischen Einheiten, dem RW-Lese- (1) / Schreibbit (0), dem RS-Identifizierungsbit, den Befehlen (0) / Daten (1) und der logischen Null - insgesamt acht Bits. In diesem Fall erfolgt die Aufzeichnung von Bits in der Anzeige an der Vorderflanke des Taktimpulses. Das Lesen von Bits von der Anzeige erfolgt an der fallenden Flanke. Jede Lese- / Schreibübertragung beginnt nach der fallenden Flanke des Strobe-Signals und endet mit der Vorderflanke.

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 vom Indikator gelesen.
4-Bit definiert das Aufzeichnen / Lesen.

Im Allgemeinen ist unsere Aufgabe:

1. Setzen Sie den Strobe auf Null.
2. Setzen Sie den Taktausgang auf Null.
3. Setzen Sie ein Informationsbit ab.
3a ein bisschen zu warten.
4. Stellen Sie den Taktausgang auf Eins.
4a. ein bisschen zu warten.
5a Punkte 2-4 machen 8 mal. - Dies wird das erste Byte sein.
5b Punkte 2-4 machen noch 8 mal. - Es wird das zweite Byte sein.
6. Bauen Sie das Tor in das Gerät ein.

Also nehmen wir das Arduin-Modell und die Entwicklungsumgebung.

Lassen Sie uns defajny erklären:

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

Richten Sie Arduin-Ports ein:

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

Installieren Sie Strob und Uhr in der Log-Einheit:

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

Und starten Sie das Senden von Bits an den Indikator. Weil Wir müssen 2 Bytes nacheinander senden, dann verwenden wir eine verschachtelte for-Schleife für.

Erstellen Sie eine Prozedur, nennen Sie es futab. Es werden zwei eingehende Variablen verwendet. 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
}

Nun und alles, es ist möglich, dieses Verfahren anzuwenden. 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 Bildschirm des Oszilloskops aus:

Bild

Bild

Geben Sie einfach die Befehle und Daten in die Anzeige ein und lassen Sie alle möglichen Beschriftungen auf dem Display anzeigen. Das Befehlssystem selbst ist den Befehlen des beliebten HD44780-Controllers sehr ähnlich, mit Ausnahme von zwei Steuerbits, mit denen die Helligkeit der Anzeige gesteuert werden kann.

Weil Ich sehe die Verwendung dieses Indikators nicht. Ich zeige eine einfache Hallo-Welt. Ich werde schreiben, was in der Stirn genannt wird, Zauber. 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 Abschluss der Videoarbeit: