Lcd - näyttö ja picaxe?

Noni…
Uusi projekti työn alla (stereovahvistin).

Tarkoituksena olisi tunkea värkkiin lcd - näyttö:

kouluelektroniikka.fi/cgi-bi … 3461%20625

Onnistuuko tuon ohjaaminen picaxe mikrokontrollerilla? Onko kellään kokemuksia? :question:

Picaxen oma lcd - moduli hirvittää hinnallaan:

kouluelektroniikka.fi/cgi-bi … 4560%20331

Noita tavallisia 16x2 lcd näyttöjä on varsin helppo ohjata picaxella. Vaatii 6 pinniä ja valmiita koodeja on olemassa. Jos haluaa säästää pinnejä niin voi ostaa halvalla ebaysta i2c väylää (kaksi pinniä) käyttävän ohjaimen. maksaa alle 4 dollaria. Olen kehitellyt niihin koodin picaxelle, tuossa yhdessä artikelissani on kuva sellaisen kytkennästä. voin auttaa projektissa jos sellaisen päädyt hommaamaan.

Luultavasti toteutan homman suoraan, ilman mitään välihärpäkkeitä, kun kontrollerissa on ihan riittävästi koipia. Apu saattaa silti olla tarpeen.
Projekti tuskin edistyy aivan lähiaikoina, koska se on vielä suunnitteluasteella.

picace-standard-lcd.jpg

Toimiiko, jos kytken näytön tämän kuvan mukasesti?

Mä ottaisin myös R/W:n käyttöön.

Tässä olen juuri viritellyt samanlaista näyttöä forthilla pyöriin. Se on kesken vielä, mutta mutta.

: lcd_send ( n -- )
    \ Uncomment if in lower part of port.
    \ swap_nibles
    dup
    \ Comment out next line if pins spread around MCU
    lcd_data pin!
    \ lcd_data!
    lcd_en 0 pulse \ start high nibble process in display
    4 lshift
    \ Comment out next line if pins spread around MCU
    lcd_data pin!
    \ lcd_data!
    lcd_en 0 pulse \ start low nibble process in display
    \ Prepare read busy.
    \ Comment out next line if pins spread around MCU
    lcd_data pin_pullup_off
    \ lcd_data_input
    lcd_rw high lcd_rs low
    begin
        lcd_en high
        \ Comment out next line if pins spread around MCU
        lcd_data pin@ \ read data. (Busy)(address 6..4)
        \ lcd_data@
        
        \ Uncomment if lower port case
        \ swap_nibbles
        dup $80 and swap $70 and ( BF address_high )
        lcd_en low
        lcd_en high
        \ Comment out next line if pins spread around MCU
        lcd_data pin@ ( BF high low )
        \ lcd_data@
        
        \ Uncomment if lower port case
        \ swap_nibbles
        lcd_en low
        4 rshift or dup ( BF address address )
        6 rshift lcd_line ! ( BF address )
        \ Line 0: 0x40 not set
        \ Line 1: 0x40 set....
        $3F and
        \ 4-line calculation.
        \ dup $13 > if 2 lcd_line +! then
        lcd_column ! ( BF )
        $80 <>
    until
    \ Comment out next line if pins spread around MCU
    lcd_data pin_output
    \ lcd_data_output
    lcd_rw low
    \ lcd_rs is set by send_cmd or lcd_send_char
;

Tuo koodi nyt on normaalia epäymmärrettävää koodia, mutta se toimii niin, että kirjoittaa tavun neljällä johdolla kiinni olevaan näyttöön. antaa sysäyksen E:lle, siirtää 4 bittiä vasemmalle ja pulssittaa E:tä. Nyt on tavu lähetetty.

Sen jälkeen datalinjat muutetaan sisääntuloiksi ja R/W ylös, R/S alas. Luetaan osoitteen toinen osa nostamalla ja laskemalla E. Korkein bitti on busy flagi. Luetaan loput ja toistetaan, kunnes busy flagi on poissa. pin! kirjoittaa ja pin@ lukee porttia.

Tuo on voittoisa, koska nopea näyttö luetaan heti ja hidasta näyttöä odotellaan. Ei ole kiveen hakattuja viiveitä.

Hyvät ohjeet löytyvät:
http://www.8051projects.net/lcd-interfacing/ Jos siis kirjoitat itse ohjauksen.
Itsehän teen jotain infernaalista pahuutta ja käytän väärin tuota näyttöä. Jos otat jonkun valmiin tuotoksen, niin katso sitäkin huolella. Maailmassa on tämäkin asia tehty niin monella tavalla hassusti.

Kannattaa myös varmistaa jännitetasot, että ovat kohillaan. Ilmeisesti kyseinen kontrolleri toimii 5 voltin jännitteellä? Tällöin tästä ei tietenkään tarvitse huolehtia, mutta 3.3 voltin kontrollerilla tarvitaan signaalimuuntimia että ohjaus sujuu varmasti oikein.

Tason muuntimena voi käyttää npn-transistoria, jonka kantaa 3.3 voltin kontrolleri ohjaa. NPN-transistorin kollektorin ja 5 voltin käyttöjännitteen väliin kytketään vastus esim. 10 k jonka jälkeen kollektorilta otetaan karva näytön DB/E/RS -pinniin. Emitteri tietenkin maahan. Ohjaus on tällöin invertoitu, eli nolla on näytölle ykkönen ja toisinpäin. Saman voi toteuttaa myös N-tyypin mosfeteilla, kytkentä on tosin eri silloin. Lisämiinuksena diskreettimuuntimelle on että ohjaukset tapahtuvat vain yhteen suuntaan, eli ei voi lukea mutta voi kirjoittaa.

Hienostuneempi tapa on kuitenkin käyttää tasonmuuntimia ja samalla voi saada vähän esd-suojaustakin jos komponentissa sellaista on.

Kysymys voi olla tyhmä, mutta mitäs tuolla sitten tehtäisiin?
En oo vielä kertaakaan käyttänyt lcd- näyttöä, joten tiedot on ihan nolissa.

Säästetään aikaa. Olen nähnyt useimpien LCD ratkaisujen istuvan ja miettivän persiillään, kun tuon voisi haistella, milloin näyttö on valmis seuraavalle kirjaimelle.

Hienoin tilanne on itsellä ollut, että vakiokirjastolla kesti 0,1s kirjoitta 2x20 nättö täyteen ja tuolla tavalla selvisin alle 1ms. sata kertaa nopeammin. Data oli siis moduulin muistissa.