مؤشر فوتابا M204SD02AJ في الوضع التسلسلي

الصورة

في هذه المقالة ، أريد مشاركة تجربة استخدام مؤشر FUTABA MSD204AJ في وضع الواجهة التسلسلية. سنبرمج على اردوينو.

لوضع المؤشر في الوضع التسلسلي ، يجب عليك تعيين وصلات العبور وفقًا لورقة البيانات :

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

الصورة

في هذا الوضع ، يكون تعيين الدبوس على النحو التالي (وفقًا للجدول 11):

1 - عام
2 - 5V
3 - بيانات الإدخال / الإخراج
4 - نبضة ستروب
6 - نبضات الساعة

يتكون الإرسال النموذجي للمؤشر من بايت بداية ومباشرة من المعلومات التي نحتاجها (سواء كانت أمرًا أو بيانات).

تتكون البايتة البادئة من خمس وحدات منطقية ، قراءة RW بت (1) / كتابة (0) ، بتات RS المعرّف (0) / البيانات (1) ، صفر منطقي - ما مجموعه ثمانية بتات. في هذه الحالة ، يتم تسجيل البتات في المؤشر على طول الحافة الأمامية لنبض الساعة. وقراءات البت من المؤشر على حافة السقوط. يبدأ أي إرسال للقراءة / الكتابة بعد الحافة المتساقطة لإشارة ستروب ، ولكنه ينتهي عند الحافة الصاعدة.

الصورة

1 - في هذه اللحظة يبدأ الاستقبال / الإرسال.
2 - في هذه اللحظة ينتهي الاستقبال / الإرسال
3 - في هذه اللحظة تتم قراءة البت بواسطة المؤشر
4 - يحدد البت الكتابة / القراءة

بشكل عام مهمتنا:

1. اضبط ستروب على صفر.
2. تعيين إخراج الساعة إلى الصفر.
3. إعطاء بت المعلومات.
3 أ. انتظر قليلا.
4. تعيين إخراج إشارة الساعة إلى واحدة.
4 أ. انتظر قليلا.
5 أ ، الفقرات 2-4 تفعل 8 مرات. - سيكون هذا البايت الأول.
5 ب ، النقاط 2-4 تفعل 8 مرات أخرى. - ستكون هذه البايتة الثانية.
6. تعيين القوية إلى وحدة.

لذا ، فإننا نأخذ نموذجًا من الأردوين وبيئة التطوير.

تعلن تعريف:

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

تكوين منافذ اردوينو:

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

اضبط الوميض والساعة على وحدة السجل:

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

وابدأ بإرسال بتات إلى المؤشر. لأن إذا كنا بحاجة إلى إرسال 2 بايت واحدًا تلو الآخر ، فسنقوم بذلك باستخدام التداخل المتداخل للحلقة.

إنشاء إجراء ، نسميها فوتاب. ستستخدم متغيرين للإدخال. 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 الشائعة ، باستثناء زوج من بتات التحكم التي يمكنها التحكم في سطوع المؤشر.

لأن لا أرى تطبيق هذا المؤشر ، سأخرج مرحبًا يا عالم. سأكتب ما يسمى في الجبين ، هجاء. لا مكتبات ، رموز الأحرف فقط ، المتشددين فقط.

هذا هو الرمز
/* 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/ar392757/


All Articles