გალერეა

LCD მართვა მიკროკონტროლერით.

თხევად კრისტალიანი დისპლეების უმრავლესობას წარმოადგენენ ტექსტური ინფორმაციის გამოყვანისათვის განკუთვნილი დისპლეები, რომლებიც თავისთავში შეიცავენ HD44780 ტიპის, ან სხვა, მასთან თავსებად მიკროკონტროლერს (KS0066, SED1278, ST7066).  დისპლეები განსხვავდებიან ერთმანეთისაგან სიმბოლოების რაოდენობით ერთ სტრიქონში და  სტრიქონების რაოდენობით  (8×1, 8×2, 16×1, 16×2, 20×2, 20×4 და ა.შ).  ამ პუბლიკაციაში განხილული ალგორითმები გამოდგება 1 და 2 სტრიქონიანი დისპლეებისთვის.

ცხრილში მოყვანილია ამ ტიპის დისპლეების გამომყვანების ნუმერაცია და მათი დანიშნულება, ხოლო ნახაზზე ნაჩვენებია მიკროკონტროლერთან მიერთების ტიპიური სქემა.

სქემაზე ნაჩვენები R2 რეზისტორი უზრუნველყოფს დისპლეიზე გამოსახულების სიმკვეთრეს.  A(15) და  K(16) გამომყვანები განკუთვნილია დისპლეის შიდა განათებისათვის (თუ ეს არის გათვალისიწინებული მოცემულ დისპლეიში). შიდა განათება უნდა ხორციელდებოდეს შუქდიოდების საშუალებით (და არა ლუმინისცენტური წყაროს მეშვეობით), განათების ძაბვა შეადგენს დაახლოებით 4 ვოლტს.
ბრძანებებისა (ინსტრუქციების)  და მონაცემების (სიმბოლოების) დისპლეიში ჩაწერის დროით დიაგრამას აქვს სახე:

ამ დიაგრამაზე ნაჩვენებია, რომ მიკროკონტროლერი დისპლეის აძლევს ინსტრუქციას „დააყენე კურსორი ზედა სტრიქონის პირველ პოზიციაში“ – კოდი თექვსმეტობითი 80 (0x80), რისთვისაც RS გადაყავს „0“–ში,  DB0-DB7 –ზე აყენებს 0x80–ს და E–ზე იძლევა იმპულსს. ამის შემდეგ მიკროკონტროლერს გამოყავს ეკრანზე ციფრი „4“ – კოდი თექვსმეტობითი 34, რისთვისაც RS გადაყავს „1“–ში. მონაცემის გამოყვანის შემდეგ კურსორი ავტომატურად გადაინაცვლებს მარჯვნივ – ახალი ინსტრუქცია საჭირო არ არის.
რა თქმა უნდა 8 თანრიგიანი სიტყვებით – ბაიტებით ოპერირება მოსახერხებელია, მაგრამ მიკროკონტროლერის 8 გამომყვანის ამაზე მოცდენა დიდი ფუფუნებაა.  ნახაზიდან ჩანს, რომ მარტო დისპლეის მომსახურება მიკროკონტროლერის 1.5 პორტს იკავებს. საბედნიეროდ, დისპლეის აქვს საშუალება იმუშაოს 4–ბიტიან რეჟიმშიც, როდესაც მონაცემები და ინსტრუქციები ბაიტის სახით კი არა, არამედ 4–თანრიგიანი ნიბლების, ანუ, ტეტრადების სახით მიეწოდება.

ამ რეჟიმში გადართვისათვის დისპლეის უნდა მიეწოდოს შესაბამისი კოდი – 0x20 ან 0x28. ყველაზე ფართოდ გავრცელებული ინსტრუქციები, მათი კოდები და ამ ინსტრუქციების შესასრლულებლად საჭირო მინიმალური დროები მოცემულია ცხრილში.

საიტის განყოფილებიდან „Files“ ჩამოტვირთეთ არქივი  “LCD_control.rar”, რომელიც შეიცავს  Algorithm Builder –ის პროექტს „LCD_control.alp“ , დაყოვნებების ალგორითმს  „Waitings.alg“ ( რომელიც იმით არის გასაკუთრებული, რომ დაყოვნებების დრო არ არის დამოკიდებული მიკროკონტროლერის სატაქტო სიხშირეზე)  და Proteus –ის  DSN პროექტს.
მიაქციეთ ყურადღება იმას, რომ Algorithm Builder –ის პროექტი „LCD_control.alp“ იწყება ინსტრუქციით „Include: Waitings“, რაც მიუთითებს იმაზე, რომ Algorithm Builder–მა უნდა მოახდინოს „Waitings.alg“ ფაილის ჩართვა პროექტში და ყველაფრის ერთობლივი კომპილაცია. „LCD_control.alp“ ფაილის ტექსტის ბოლოს მოყვანილია დაწვრილებითი კომენტარები.

ქვემოთ მოყვანილია დისპლეის ტესტის პროგრამა С – ზე 8 ბიტიანი რეჟიმისათვის (დისპლეი ჩართულია ზემოთ მოყვანილი 8 ბიტიანი შეერთების სქმის მიხედვით).

01./****სატესტო პროგრამა LCD****/
02.
03.#include <avr/io.h>
04.#include <util/delay.h>
05.
06.#define RS PC0
07.#define EN PC2
08.
09.
10.
11.void lcd_com(unsigned char p)
12.{
13.PORTC &= ~(1 << RS);   // RS = 0
14.PORTC |= (1 << EN);    // EN = 1
15.PORTD = p;
16._delay_us(100);        // EN
17.PORTC &= ~(1 << EN);   // EN = 0
18._delay_us(100);        // პაუზა
19.}
20.
21.
22.
23.void lcd_dat(unsigned char p)
24.{
25.PORTC |= (1 << RS)|(1 << EN);  //RS = 1, EN = 1
26.PORTD = p;
27._delay_us(100);                // EN
28.PORTC &= ~(1 << EN);           // EN = 0
29._delay_us(100);                // პაუზა
30.}
31.
32.
33.
34.void lcd_init(void)
35.{
36.lcd_com(0x08);          // დისპლეის გამორთვა
37.lcd_com(0x38);           // 8 ბიტი 2 სტრიქონი
38._delay_us(100);
39.lcd_com(0x38);           // 8 ბიტი 2 სტრიქონი
40._delay_us(100);
41.lcd_com(0x38);           // 8 ბიტი 2 სტრიქონი
42.lcd_com(0x38);
43.lcd_com(0x01);           // წაშლა
44._delay_us(100);
45.lcd_com(0x06);           // კურსორი მარჯვნივ
46.lcd_com(0x0D);           // დისპლეის ჩართვა. კურსორი ციმციმებს
47.}
48.
49./***ძირითადი პროგრამა***/
50.
51.int main (void)
52.{
53.DDRC |= (1 << PC2)|(1 << PC1)|(1 << PC0); // PC0-3
54.PORTC = 0x00;
55.DDRD = 0xFF;                       // PD0-7
56.PORTB = 0x00;
57.
58.lcd_init();
59.lcd_dat(‘H’);    // გამოგვყავს სიმბოლოები
60.lcd_dat(‘e’);
61.lcd_dat(‘l’);
62.lcd_dat(‘l’);
63.lcd_dat(‘o’);
64.lcd_dat(‘ ‘);
65.lcd_dat(‘w’);
66.lcd_dat(‘o’);
67.lcd_dat(‘r’);
68.lcd_dat(‘l’);
69.lcd_dat(‘d’);
70.lcd_dat(‘!’);
71.}

4 responses to “LCD მართვა მიკროკონტროლერით.

  1. პირველ რიგში ძალიან კარგი წამოწყებაა და წარმატებებს გისურვებთ,
    მეორე : საინტერესოა algorithm bilder-ში მუშაობა რა მასალის მიხედვით არის შესაძლებელი , თუ არის რაიმე წიგნი ან სტატიები და თუ შეგიძლიათ რო მოგვაწოდოთ, ინტერნეტში ძალიან მწირი მასალაა და რაც არის უკომენტაროდაა გაკეთებული.

    • მეც ბევრი ვეძებე და კარგი ვერაფერი ვნახე. დამწყებთათვის 9 გაკვეთილი გამოვაქვეყნე უკვე (იხ . ამ საიტზე – “მიკროკონტროლერები, დღე 1 – დღე 9”) და კიდევ ვაპირებ. საერთოდ Algorithm Builder -ში მუშაობა კარგი არჩევანი არ არის. მე ის ავირჩიე იმიტომ, რომ მეჩვენებინა, რომ პროგრამირება – ეს ალგორითმის შედგენაა, მისი რეალიზაცია ამა თუ იმ ენაზე კი უბრალოდ ტრანსლირების მექანიკური პროცესი, და არა შემოქმედება. რთული პროგრამებისთვის ის სისტემა უნდა აირჩიოთ, რომელიც მიკროკონტროლერის დამამზადებელი ფირმის მიერ არის რეკომენდებული.

  2. დაყოვნებების ქვრპროგრამებში ტაიმერის გამოყენება მოითხოვს კოდის ცვლილებას მიკროკონტროლერის სატაქტო სიხშირის ცვლილების კვალდაკვალ, რაც მოუხერხებელია.
    თუ თქვენ მუშაობთ Algorithm Builder –ში, მაშინ ჩამოტვირთეთ არქივი “LCD_control.rar” საიტის განყოფილებიდან „Files“ . ეს არქივი შეიცავს Algorithm Builder –ის პროექტს „LCD_control.alp“ , რომელშიც მოცემულია დაყოვნებების ალგორითმი „Waitings.alg“ , რომელიც იმით არის გასაკუთრებული, რომ დაყოვნებების დრო არ არის დამოკიდებული მიკროკონტროლერის სატაქტო სიხშირეზე. ამრიგად, თქვენ შეგიძლიათ აირჩიოთ ნებისმიერი სატაქტო სიხშირე – LCD გამართულად იმუშავებს სატაქტო სიხშირის მნიშვნელობის მიუხედავად.

  3. ძალიან კარგი წამოწყებაა და წარმატებებს გისურვებთ,

დატოვეთ კომენტარი