Indicateur Futaba M204SD02AJ en mode série

image

Dans cet article, je souhaite partager l'expérience de l'utilisation de l'indicateur FUTABA MSD204AJ en mode interface série. Nous programmerons sur arduino.

Pour mettre l'indicateur en mode série, réglez les cavaliers conformément à la fiche technique :

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

image

Dans ce mode, l'affectation des broches est la suivante (conformément au tableau 11):

1 - Général
2 - Alimentation 5V
3 - Données d'E / S
4 - Impulsion stroboscopique
6 - Impulsions d' horloge

Un envoi typique à l'indicateur consiste en un octet de départ et directement un octet des informations dont nous avons besoin (qu'il s'agisse d'une commande ou de données).

L'octet de départ se compose de cinq unités logiques, le bit RW Lecture (1) / Écriture (0), le bit identifiant RS Commands (0) / Data (1), zéro logique - un total de huit bits. Dans ce cas, des bits sont enregistrés dans l'indicateur le long du front avant de l'impulsion d'horloge. Et la lecture des bits de l'indicateur est sur le front descendant. Tout envoi en lecture / écriture commence après le front descendant du signal Strobe, mais se termine sur le front montant.

image

1 - à ce moment la réception / transmission commence.
2 - à ce moment la réception / transmission se termine
3 - Ă  ce moment le bit est lu par l'indicateur
4 - le bit détermine Write / Read

Généralement notre tâche:

1. mettre le stroboscope à zéro.
2. Réglez la sortie d'horloge sur zéro.
3. distribuer un bit d'information.
3a. attendez un peu.
4. RĂ©glez la sortie du signal d'horloge sur un.
4a. attendez un peu.
5a, les paragraphes 2 Ă  4 font 8 fois. - ce sera le premier octet.
5b, les points 2-4 font 8 fois de plus. - ce sera le deuxième octet.
6. Réglez le stroboscope sur l'unité.

Donc, nous prenons une maquette d'arduins et un environnement de développement.

Déclarer définit:

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

Configurer les ports Arduino:

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

Réglez le stroboscope et l'horloge sur l'unité de journal:

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

Et commencez à envoyer des bits à l'indicateur. Parce que si nous devons envoyer 2 octets l'un après l'autre, nous le ferons en utilisant la boucle imbriquée for pour.

Créez une procédure, appelez-la futab. Elle utilisera deux variables d'entrée. x1 est le premier octet de début, x2 est l'octet de données.

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
}

C'est tout, vous pouvez utiliser cette procédure. Comment? Et donc:

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

Voici Ă  quoi cela ressemble sur l'Ă©cran de l'oscilloscope.

image

image

Eh bien, il suffit de lancer les commandes et les données dans l'indicateur et d'obtenir toutes sortes d'inscriptions sur la carte. Le système de commande lui-même est très similaire aux commandes du contrôleur populaire HD44780, à l'exception d'une paire de bits de contrôle qui peuvent contrôler la luminosité de l'indicateur.

Parce que Je ne vois pas l'application de cet indicateur, je vais sortir un simple Hello, world. J'écrirai ce qu'on appelle sur le front, l'orthographe. Pas de bibliothèques, seulement des codes de caractères, seulement du hardcore.

Voici le 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() {
 
}


image

Et en conclusion, une vidéo de travail:

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


All Articles