Ugrás a kezdőlapra

© Mohos Pál

Segédpanel

Utolsó módosítás: 2014. november 13. csütörtök   11:23

1.      T-Bird HW

1.1        Részletes dokuk:

·         T-Bird panel és kapcsolási rajza a 2. verziónak.

·         Expansion Board és a kapcsolási rajza.

·         LCD diplay

·          

1.2        Panel fotók magyarázattal:

·         Alap panel.          

·         Expansion Board

1.3        T-Bird adatok programkészítéshez:

·         Led 3-0 = PORTB 7-4

·         Led 7-4 = PORTD 7-4

·         Gomb4-0 = PORTG 4-0
(G port a memória címtartományban van.         
STS kell OUT helyett és LDS az IN helyett)

2.      T-Bird – Expansion Board:

2.1        Hét szegmenses kijelző:

2.1.1          Portbitek::

·         PORTA vezérli.  Ezért DDRA=0xFF-el kell az A port bitjeit kifelé irányítani.
PORTA7    =  1 akkor a megcímzett (0…4) kijelzőt bekapcsoltuk. (vilgítás engedélyezése)
PORTA6..4=  3 bites címe a kijelző szegmenseknek. Értéke 0..4 lehet. (0..3 a szegmens, 4 a kettőspont)
PORTA3..0=   kijelzett érték 4 biten. Értéke 0..9 lehet.

2.1.2          Adatok:

·         Jobb szélső szegmens:   0. cím

·         Bal   szélső szegmens:   3. cím

·         Kettőspont:                   4. cím

·         Kijelezhető érték:          0…9

2.1.3          Működtetés:

·         Egy időben a 4 db hétszegmenses +1 db kettőspont kijelző közül csak 1 db világíthat. Ezért a kijelzést egymás után kell megvalósítani, 10-20 msec-on belül 1 teljes ciklust, hogy a szemünknek ne villóddzanak a számjegyek

2.2        Színes LED:

2.2.1          Portbitek:

·         PORTC7=Piros  --> ZÖLD az én panelemnél,

·         PORTE2=Kék   -->  Kék

·         PORTE3=Zöld  -->  PIROS az én panelemnél

2.2.2          Programozása:

·         Pulzus szélesség (PWM) változtatással a szín és a fényerő változtatható.

2.3        Billentyű mátrix (3x4):

2.3.1          Portbitek:

·         PORTC0= bill 0 oszlop input     bal    

·         PORTC1= bill 1 oszlop input     közép

·         PORTC2= bill 2 oszlop input     jobb  

·         PORTC3= bill 0. sor     output   123

·         PORTC4= bill 1. sor     output   456

·         PORTC5= bill 2. sor     output   789

·         PORTC6= bill 3. sor     output   *0#

2.3.2          Lekérdezés:

·         A lekérdezés ismétlése, amíg nincs lenyomott billentyű. while(1) {… if(x) break;….}

·         A sorokra sor= 0..3 egymás után kiadom az aktív jelet.   PORTC=(1<<(sor+3))

·         Minden sor esetében beolvasom mindhárom oszlopot.     x=(~PINC &7). ( a lenyomás ad 0-t. Ha ez nem 0, akkor: jobbra shifelek 0-ig. a Shiftek számából megvan az oszlop érték, ami 0..2.

·         A teljes ciklusban 1 helyen lehet a beolvasott érték aktív. Ezért a Nem 0 esetben (x>0) kilépek a ciklusból.

·         Az aktív jelhez tartozó sor és oszlopszám adja a billentyűzet scan kódját.

·         A scan kódokhoz rendelhetjük a billentyű ASCII kódját.        
A 12 db ASCII kódot egy 12 elemű tömbbe tehetjük. A tömb indexe i=3*sor + oszlop.

2.3.3           Algoritmus c-ben:  © MOHOS

 

sor=0;

while(1)

       {PORTC=(1<<(sor+3));//Aktív sor=1 szint. PORTC6..3 biteken.

        //A kiadott jel szintbeállásaihoz kell egy kis idő…a beolvasás előtt.

        //A tranzisztor kikapcsolása lassú. A következő sor vizsgálat csak ezután jöhet.

        x=(~PINC)&7;       //A lenyomott=0 szint, ezért negálok ~-el.

        if (x) break;      //Találtam 1 db lenyomott billentyűt

        sor++;

        if (sor==4) sor=0; //vagy sor%=4; néggyel osztás maradéka.

       }

oszlop=0; while((x=x>>1)) oszlop++; //x=1,2,4  -->Oszlop=0,1,2

ascii =t[3*sor+oszlop];  //Ahol t[] a szükséges ASCII (vagy más) kódokkal feltöltött tömb.

 

2.4        LCD panel

Meghajtója: EW16400YMY chip

2.4.1          Portbitek:

·         PORTE7..4= 2x4 bites Adat/ Parancs  (I/O) átvitel.

·         PORTF3    = Enable (Output)  Író jelkor latch enable, Olvasó jelként a 3 állapotú meghajtó engedélyezője
Lefutó élre veszi be az adatot.
Tehát, ha az adat felső és alsó 4 bitje azonos, akkor itt két lefutó él kell, hogy a 2x4 bitnyi adatot átvigyük.

·         PORTF2    = R/-W (Output)    Olvasás=1; Irás=0;

·         PORTF1    = RS (Output)        Parancs=0; Karakter=1

2.4.2          Működés:

·         A laborunkban levő LCD panel vezérlője az EW16400YMY chip. kompatibilis (tehát csak hasonló!) a Hitachi HD44780 vezérlőjével.

·         Az EW16400YMY chip 2 sor *40 karakteres displayt tud vezérelni.

·         A mi LDC panelünk 4*16 karaktert tud megjeleníteni

·         A vezérlő első        sora az LCD 1. és 3. sorához van bekötve

·         A vezérlő második sora az LCD 2. és 4. sorához van bekötve.

·         A vezérlő a szabványos LCD vezérlők parancsait hajtja végre,

2.4.2.1           IR =  utasításregiszter

·         A kijelző vezérlőjét az IR utasításregiszterbe írt bájtokkal utasítjuk.

·         A vezérlő minden utasítást azonnal végrehajt.

·         Ha befejezte a végrehajtást, csak utána szabad adnunk a következő utasítást, vagy adatot.
Parancs például: display törlése, kurzormozgatás, vagy memóriacím (AC) írása stb.

2.4.2.2           RAM  =  DDRAM

·         A RAM (DDRAM)-ba írjuk a megjelenítendő karakterek kódjait.
A RAM tartalmát egy karaktertáblázat alapján jeleníti meg a kijelző. Minden 1 bájtos adathoz a karaktergenerátor rendel egy 5x7 pixeles képet.

2.4.2.3           AC = címszámláló regiszter

·         A RAM aktuális beírási címét az AC (címszámláló regiszter) jelöli ki.
AC értéke adatbeírás után automatikusan inkrementálódik. (dekrementálódik a jobbról balra ításhoz), parancstól függően.
AC értéke parancs módban írható.
Clear display parancsra AC=0 is történik.
AC értéke a CURSOR pozícióját (is) meghatározza.

·         Display sorok kezdőcímei:

#define EGY   0x80 //LCD 1. sor címe

#define KETTO 0xC0 //LCD 2. sor címe

#define HAROM 0x90 //LCD 3. sor címe

#define NEGY  0xD0 //LCD 4. sor címe

 

2.4.2.4           DR = adatregiszter

·         DR adatregiszterbe írás után DR tartalma automatikusan az AC regiszter által címzett RAM regiszterbe kerül, majd AC automatikusan nő 1-el.
DR olvasásakor az AC által címzett RAM tartalmat olvassuk, majd AC 1-el nő..

2.4.2.5           BF = busy flag

·         BF (busy flag). Ha 1-ben van, akkor a következő utasítás-adat nem írható, a belső működésnek még nincs vége.
A display inicializálás elején a BF még nem figyelhető, ilyenkor időzítés kell, mely értéke a kijelzőt működtető órafrekvenviától és a parancs típusától függ! (nézd az eredeti katalógust, ne a mások által ajánlott tuti módokat!)

2.4.3          Karakterek kódjai:

2.4.3.1           Beépített karakterképek kódjai:

   

·         A kódtáblát tanulmányozva vegyük észre:
Ha magyarítani akarunk, csak 8 kód áll rendelkezésre. (A szürke címterületen). Ez jó az áéíóú űő –nek.  Az ékezetes nagybetűk ebben az esetben sem mennek.

·         Az LCD-nk kódtáblájában megvan az
ö=0xEF kóddal, és az
ü=0xF5 kóddal.
áéíóöőúüű 9 ékezetes magyar betű van. Kettő az ö és az ü megtalálható a gyári karaktergenerátorban. 9-2=7 ékezetes betű képét nekünk kell definiálnunk.

·         Tehát 1 karakterkép szabadon állítható a CGRA-ban akkor is ha az összes magyar kis ékezetes betűt meg akarjuk jeleníteni.

·         Az olvashatóság érdekében, ha magyarítunk: Az ékezetes nagy betűk kódjait is, a kis ékezetes betűk kódjaival (0..7) jelenítsük meg.

2.4.3.2           CGRAM-ba írandó magyar ékezetes karakterek:

typedef unsigned char u8;

u8 cgram[] = {0x02,0x04,0x0E,0x01,0x0F,0x11,0x0F,0x00,    //á

              0x02,0x04,0x0E,0x11,0x1F,0x10,0x0E,0x00,    //é

              0x02,0x04,0x0C,0x04,0x04,0x04,0x0E,0x00,    //í

              0x02,0x04,0x0E,0x11,0x11,0x11,0x0E,0x00,    //ó

              0x02,0x04,0x11,0x11,0x11,0x13,0x0D,0x00,    //ú

              0x0A,0x00,0x11,0x11,0x11,0x13,0x0D,0x00,    //ü

              0x05,0x0A,0x11,0x11,0x11,0x13,0x0D,0x00,    //ű

              0x05,0x0A,0x0E,0x11,0x11,0x11,0x0E,0x00};   //ő

·          

2.4.4          Programozás idődiagramja 4 bites adatátvitelnél:

·         Ez  a diagram nem a valós, de ezt találtam a NET-en. :-(  Persze nem a gyártó forrása.
Sajna nem jellemző, hogy a pontos idődiagramokat publikálják.

·         A T-Birtd expansion board LCD HD44780 meghajtója a EW16400YMY chip. Ha szétszedjük, a chip azonosítója csak akkor látható, rá van írva, alul.

·         Visszatételnél ügyeljünk, hogy a csatlakozóba pontosan dugjuk be az összes tüskét.  Sajnos lehetőség van 1-2 sorral eltolva bedugni a tüskéket, mely hatása feszültség ráhelyezés után jobb esetben, csak a biztosíték cseréjével jár… :-)

2.4.5          Parancskészlet:

·        

·          

·        

2.4.6          Négysoros kijelzés RAM kezdőcímek:

2.4.6.1           LCD sor szerinti címkiosztás:

Oszlop:  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16

Sor 1    80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F

Sor 2    C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF

Sor 3    90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F

Sor 4    D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF

2.4.6.2           Folyamatos (csak AC=0 parancs utáni) adat beírás esetén a címek

Oszlop:  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16

Sor 1    80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F

Sor 3    90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F

Rejtett: A0 A1 A2 A3 A4 A5 A6 A7

Sor 2    C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF

Sor 4    D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF

Rejtett: E0 E1 E2 E3 E4 E5 E6 E7

·         A táblázat alapján látható AC automatikus inkrementálódásának módja:

//AC RAM címregiszter automatikus inkrementálódása:

AC++;

if (AC==0xA8) AC=0xC0; //40 karakter után

   //1. és 3. sor folyamatos írása (40 karakter) után

   //a 2. sor elején folytatódik az adatbeírás

if (AC==0xE8) AC=0x80; //40 karakter után

   //2. és 4. sor folyamatos írása (40 karakter) után

   //az 1. sor elején folytatódik az adatbeírás

2.4.6.3           RAM címek táblázatosan:

LCD SOR

EGY

HAROM

Rejtett

 

KETTO

NEGY

Rejtett

 

 

8

9

A

B

C

D

E

F

 

1000

1001

1010

1011

1100

1101

1110

1111

0

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

 

4

 

 

 

 

 

 

 

 

5

 

 

 

 

 

 

 

 

6

 

 

 

 

 

 

 

 

7

 

 

 

 

 

 

 

 

8

 

 

 

 

 

 

 

 

9

 

 

 

 

 

 

 

 

A

 

 

 

 

 

 

 

 

B

 

 

 

 

 

 

 

 

C

 

 

 

 

 

 

 

 

D

 

 

 

 

 

 

 

 

E

 

 

 

 

 

 

 

 

F

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SÁRGA: az első 40 karakterkód RAM címe

 

ZÖLD: a második 40 karakterkód RAM címe

Folyamatos beírás esetén

a 0xA7 címet a 0xC0 követi

 

 

 

 

 

 

a 0xE7 címet a 0x80 követi

 

 

 

 

2.4.6.4           Képernyőshiftelés:

·         Az LCD vezérlője a EW14600 chip.

·         Kétsoros 2*40 karakteres megjelenítést támogat.

·         AZ első 40 karaktert az LCD 1. és 3. sorában, a másogik 40 karaktert az LCD 2. és 4. sorában jeleníti meg.

·         Shiftelésnél a vezérlő a 40 karakternyi „sorokat” shifteli körbe. Tehát az 1. és 3. sor betüi a 2.  és 4. sorba nem kerülhetnek.

2.4.7          Inicializálás 4 bites adatátviteli módnál:

Parancs

Hatása