0,00 €

V košarici ni izdelkov.

0,00 €

V košarici ni izdelkov.

More
    DomovDownloadC programiSTM32F4-Discovery – Od začetnika do poznavalca (4)

    STM32F4-Discovery – Od začetnika do poznavalca (4)

    V prejšnji številki revije Svet Elektronike smo predstavili bolj teoretični del uporabe 3,3 V STN LCD zaslona. V članku objavljenem v prejšnji številki smo na razvojni plošči STM32F4-Discovery omogočili strojne izhodne linije, ki so povezane na kontrolne in podatkovne linije LCD zaslona. Prav tako smo si iz podatkovnega lista izpisali vse pomembnejše komande potrebne za uporabo LCD zaslona.

    Znakovni STN LCD zaslon 2. del

    Ta članek predstavlja nadaljevanje spoznavanja LCD zaslona, ker bomo pretvorili teorijo prejšnjega članka tudi v praksi ter prikazali različne režime delovanja zaslona. Tako bomo pokazali, kako se lahko izpišejo določene stvari na zaslon, doda dodatne znake, ki niso zajeti v ROM pomnilniku, kako se da premikati tekst, itd.

    Slike ni
    KLIK

    Programski del

    Pošiljanje komand in podatkov

    Najprej je potrebno implementirati pošiljanje komand, saj brez tega ne moremo niti pravilno konfigurirati LCD zaslona. Pri pošiljanju komand se moramo držati smernic, ki so podane v podatkovnem listu, in sicer moramo preveriti časovni potek signalov na kontrolnih in podatkovnih linijah (slika 6.5.6 v podatkovnem listu) [1]. Potek signalov smo podali že v prejšnjem članku, v tem pa si le osvežimo spomin s časovnim diagramom signalov. Slika 1 je povzetek časovnega diagrama, ki ga najdemo v podatkovnem listu proizvajalca LCD zaslona.

    V nadaljevanju podajamo implementacijo funkcije pošiljanja komand in podatkov, kjer je razlika med pošiljanjem komand in podatkov le v začetni postavitvi logične vrednosti na RS liniji. Torej, ne glede na to, kaj bomo pošiljali, se pri pošiljanju komande postavi RS linija na logično nizki nivo in se kliče funkcijo pošiljanja podatkov, ki si jo podrobneje oglejmo.

    // Sends a data byte to LCD (byte ‘cmd’).
    void LCD_SendByte(uint8_t cmd)
    {
    SET_RW_WRITE_MODE();
    GPIO_ResetBits(LCD_DATA_PORT,
    LCD_DATA_ALL);
    DelayMicroSeconds(COMMAND_DELAY_US);
    SET_EN();
    #ifdef USE_4BIT_INTERFACE
    // Send upper nibble
    LCD_SendNibble(cmd >> 4);
    CLEAR_EN();
    DelayMicroSeconds(COMMAND_DELAY_US);
    GPIO_ResetBits(LCD_DATA_PORT, LCD_
    DATA_ALL);
    SET_EN();
    // Send lower nibble
    LCD_SendNibble(cmd & 0x0F);
    #else
    GPIO_Write(LCD_DATA_PORT, (uint16_t)cmd << LCD_DATA_START_INDEX);
    #endif
    CLEAR_EN();
    SET_RS_COMMAND();
    // Wait until busy flag is set
    while (LCD_ReadByte() & BUSY_FLAG);
    }
    Slike ni
    KLIK

    Če malce pokomentiramo kodo, je prva stvar brisanje stanja na RW liniji, kar pomeni, da bo komanda nekaj zapisala v register inštrukcij. Naslednja vrstica postavi vse vrednosti pinov na logično nič, kar je dobra praksa, saj želimo ponastaviti vrednosti prejšnjih podatkov in uporabiti hitre bitne operacije. Kot smo ugotovili v prejšnjem odstavku, je potrebna majhna zakasnitev med RS + RW in E signalno linijo, zato pred postavitvijo signalne linije E vnesemo zakasnitev 1 µs. Med pred-procesorskim ukazom imamo na voljo dva načina pošiljanja, in sicer je prvi 4-bitni prenosni kanal. Iz podatkovnega lista [1] smo izvedeli, da se pri tej metodi najprej pošljejo zgornji štirje biti, katerim sledijo preostali spodnji štirje biti.

    Celotni članek

    STM32F4-Discovery – Od začetnika do poznavalca (4)

    2013_SE213_28