Ovládání ST7920

Vždyť schéma sem dával Matyáš.Je to psaný na to schéma zapojení.
Případně:
download.php?id=2957
download.php?id=2956
Edit: Doplnil jsem popis zapojení

Škoda.Ten program funguje přesně s tímto displejem.
Trafopájkou rozhodně není dobře pájet tuto elektroniku.Jeden nový displej ,nikdy nepoužitý,ale nefunkční mám na stole.Stát se to asi může (že nefunguje jako nový,nebo se lehce odpálí).

Ještě jako další možnost můžeš zkusit s tímto zapojením:
Rs RB0
RW RB1
E RB2
Psb RB3
Rst RB5
Dataport:
DB7 RD7
DB6 RD6
DB5 RD5
DB4 RD4
DB3 RD3
DB2 RD2
DB1 RD1
DB0 RD0

Jestli ani tohle ,tak snad začít od začátku podle datasheetu.
ST7920-12864-ENGLISH.hex (1.73 KB)

Mohl bych poprosit o kontrolu:

Send_Command(0b00000110);  // Cursor moves right, no display shift.

Nějak mi ta binární hodnota nekoresponduje s datasheetem.
Díky.

Podle datasheetu by mělo být pro posun kurzoru S=H. Je-li to pravda ,mělo by bejt poslední číslo v pravo log. 1.
Pletu se ?

Já si právě nejsem jist, o kterou funkci se má jednat - jestli o “Entry mode set” (Datasheet str. 13), nebo “Cursor/Display Shift Control” (Datasheet str. 14). V obou se totiž pracuje s kurzorem.
Chápu to tak, že “Entry mode set” nastavuje, co se má stát po zapsání znaku na GLCD (to znamená že to se nastavuje 1x) a “Cursor/Display Shift Control” prostě hýbe s kurzorem.
Chápu to správně? Nevím totiž, jak přesně bylo myšleno “Cursor moves right, no display shift.”
Děkuji!

Pro ten můj dislej platí:
write_com(0x30); //set 8 bit operation and basic instruction set
write_com(0x0c); //display on cursor off and char blink off
write_com(0x06); //entry mode set
write_com(0x01); //display clear

tj 0x06 = 0B0000110
Takhle mám řešenou inicializaci displeje pro textový mód.

To Sender:
Mohl by jste mi poslat celý Váš kód (pokud ho máte v C)?
Děkuji.

Posláno v SZ.
Ještě mě napadlo,jestli není na tvém displeji naopak třeba reset (L->H nebo naopak)

Bohužel ne :frowning:

Pokud máš na RA0 stále log. 0, pak máš buď špatně nastavené pojistky v procesoru a RA0 je použit na nějakou systémovou periferii (u některých ATmega se například musí zakázat JTAG, aby byly přístupné všechny piny) nebo máš zkrat proti zemi na desce …

Log. 0 tam stále není.

Zapomněl jsem dodat, že pokud tam nahraji program, který má v main() pouze RA0 = 1; tak tam opravdu fyzicky 1 je (napětí RA0 - GND = 5V).
Podle datasheetu PIC16F877A je na portu RA0 ještě analogový vstup 1, ale to by nemělo vadit.
Nastavení TRIS registru je také v pořádku:

TRISD = 0x00; TRISA = 0x00;
Chyba bude někde v softwaru.

tak si ten DS procti jeste jednou

Kdyby lidi četli pořádně katalogové listy, 90% problémů by nebylo. Lenost je hrozná nemoc… :slight_smile: Tak abych jen nekritizoval - zaměř se na ADCON0 a ADCON1, schválně co se dozvíš…

Matyáš> Zkoušel jsi ten displej zapojit na port B a použít ten kód ,co jsem ti poslal ?
Jinak -na potru A vše zakázat a nastavit jako výstupní.
tady dávám foto,že mi opravdu funguje:

To je v podstatě to, na co jsem se snažil nasměrovat ve svém příspěvku výše. Jen jsem myslel, že by to mohlo být v nastavení pojistek …

Balů @ Jasný, rozumíme si. Přesto, že už léta s picama nedělám, tak tuhle past si pamatuju :wink: Naštěstí takhle zásadní věc ve FUSE u PIC není.

Radius : Já jsem s PICama nikdy nedělal. Při přechodu z x51 na něco novějšího to proti AVRkům úplně projeli a to hned z několika důvodů. Proto jsem de-facto jenom tipoval, kde by mohl být ještě problém. Teď jsem hlavně zvědavý, jestli se to Matyášovi podaří rozběhnout.

staci si stahnout cesky preklad treba od PIC16F87xA a pak porovnavat s originalem danyho picu, tyhle starsi typy sou stejny, a cist cesky fora se zamerenim na mcu, resi se to tam porad do kola (naposled prosinec 14, 2015 8:24), a v prvi rade google

Děkuji za odpověď.
Problém byl vyřešen :blush: . Myslel jsem, že porty jsou implicitně nastaveny jako digitální. Tzn. bylo potřeba nastavit registr ADCON1.
Bez vašich rad bych na to asi jen tak nepřišel.
Zanedlouho sem přidám kód, ve kterém zredukuji zbytečně dlouhé _delay().