Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the spice-starter-sites domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /var/www/html/noweenergie.org/wp-includes/functions.php on line 6170
Sterowanie wyświetlaczem przez USART – NoweEnergie.org

Sterowanie wyświetlaczem przez USART

⏱️ Przewidywany czas czytania: 2 min

1. Cele

Opracować moduł umożliwiający komunikację z wyświetlaczem 16×1 przez USART. By wysłać dane na wyświetlacz należy wydać instrukcję informującą o rozpoczęciu transmisji „[„. Instrukcja „]” informuje mikrokontroler o zakończeniu danych przeznaczonych dla wyświetlacza. Dodatkowa instrukcja „#” pozwala na wyczyszczenie zawartości ekranu. Ponieważ wyświetlacz 16×1 podzielony jest na dwie części (po 8 znaków) mikrokontroler dba o poprawne przejście napisu na drugą połowę ekranu. W chwili zapełnienia znakami całego ekranu i otrzymania 17 znaku ekran jest czyszczony i 17 znak pojawia się jako 1 znak na ekranie.

2. Diagram wdrożenia

2.1 Komunikacja mikrokontrolera z komputerem PC

Mikrokontroler PIC16F84A komunikuje się z komputerem PC wykorzystując w tym celu port COM. Konieczne jest użycie układu MAX232 by dostosować napięcia TTL (5V) mikrokontrolera do standardu RS232 (12V) które występują na porcie COM.

uC_PC-300x113 Sterowanie wyświetlaczem przez USART

Rys. 1 Komunikacja PIC16F84A z PC

2.2 Komunikacja mikrokontrolera z innym mikrokontrolerem

Mikrokontroler PIC16F84A komunikuje się z innym mikrokontrolerem wykorzystując do tego celu USART.

uC_uC Sterowanie wyświetlaczem przez USART

Rys. 2 Komunikacja PIC16F84A z innym uC

3. Schemat elektryczny

lcd-300x158 Sterowanie wyświetlaczem przez USART

Rys. 3 Schemat elektryczny

4. Protokół transmisji danych

Tab. 1 Instrukcje sterujące

Kod ASCII Instrukcja
[ Rozpoczęcie odbioru danych
] Zakończenie odbioru danych
# Wyczyszczenie ekranu

5. Algorytm programu

pic_lcd-213x300 Sterowanie wyświetlaczem przez USART

Rys. 4 Algorytm programu

6. Kod programu

/**
* Wyswietlanie na LCD danych pobranych
* przez USART.
*/
 
#include 
#fuses XT,NOPROTECT,NOWDT
 
#use delay(clock=4000000)
 
//RX RA2 PIN 1
//TX RA3 PIN 2
#use rs232(baud=300,parity=N,xmit=PIN_A3,rcv=PIN_A2,bits=9)
 
#include "wlcd.c"
 
main() {
   char c;
   char i=0;
 
   /*
   //Informacja o sterowaniu wyslana na rs232
   printf("\fLCD OK\n");
   printf("[ - begin\n");
   printf("] - end\n");
   printf("# - clear\n");
   */
 
   //inicjacja lcd
   lcd_init();
 
   //napis testowy na lcd
   lcd_putc("\fLCD 2.2");
 
   delay_ms(800);
   lcd_putc("\f");
 
   //glowna petla programu
   for(;;){
 
       //pobranie znaku z usart
       c = getc();
 
       //komenda - czyszczenie wyswietlacza
       if (c=='#'){
            i = 0;
            lcd_putc("\f");
       }
 
      //komenda - rozpoczecie wyswietlania
      if (c == '['){
        for(;;){
           //pobranie znaku do wyswietlenia
           c = getc();
 
           //jesli nie jest to znak konca transmisji dla wyswietlania, to znak na ekran
           if (c!=']'){
 
             //jesli koniec linii (polowa ekranu) to przejscie na 2 polowe ekranu
             if (i==8){  lcd_putc("\n"); }
             //jesli koniec ekranu to zaczynamy od nowa
             if (i==16){  lcd_putc("\f"); i=0; }
 
             //dodanie znaku do wyswietlacza
             lcd_putc(c);
             i++;
           }
           //byl znak konca transmisji na wyswietlacz
           if (c==']') {
             break;
           }
        }
     }
  }
}