Toon posts:

[Delphi] LCD aansturen

Pagina: 1
Acties:
  • 166 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik heb nu in Delphi een functie die een byte naar m'n LCD kan sturen (via DlPortIO naar LPT). Dat zit dus goed. Maar ik heb even een aantal vraagjes over het weergeven van text, en later van custom characters, op m'n LCD.

Hoe zit het nou precies? Kan ik gewoon 1 voor 1 alle letters/spaties sturen en zorgt m'n LCD controller er dan automatisch voor dat cursor goed verplaatst wordt?

Ik heb tig sites/datasheets gelezen en daar stond ongeveer hetzelfde in. Hieronder staan wat selecties met bijhorende vragen, want ik kom er echt niet meer uit :'( :P

Op de Instruction Table in de datasheet staan een aantal codes, waaronder:
- Clear display
- Return Home
- Entry Mode Set
- Display On/Off control
- Bij Entry Mode Set staat: 'Assign cursor moving direction and enable the shift of entire display'

Hoe moet ik deze commando's sturen? De meeste snap ik wel, dan staat er dat ik de code 1000000 moet sturen, dat is in delphi dus $128, maar dan staat er bijvoorbeeld bij Entry Mode Set:
code:
1
2
Bit:  0   1   2   3   4   5   6   7
     SH  I/D  1   0   0   0   0   0

Hoe ik 2 t/m 7 moet sturen snap ik wel, maar er staat nergens bij uitgelegd wat SH of I/D inhoud.

Hoe clear ik display? (Er staat: 'Write "00H" to DDRAM and set DDRAM address to "00H" from AC' :? Daar wordt ik ook niet echt wijzer van...)

Alvast bedankt!

BTW: de sheet waar deze codes staan kun je hier vinden.

Verwijderd

Topicstarter
Ik ben nu al iets verder :)

Bij Cursor or Display Shift staat:
code:
1
2
Bit:  0   1   2   3   4   5   6   7
    -   -  R/L S/C  1   0   0   0

Nou, die 4 t/m 7 snap ik wel, 2 zal wel Right en Left zijn (is 0 dan right en 1 left :?) 3 zal wel Display Shift en Cursor zijn, maar wat dat inhoud: :?

Dus ik denk dat ik het als volgt moet doen als ik text wil vervangen:

- Clear Display
- Return Home
- Stuur letter
- Cursor 1 naar rechts (dmv bovenstaande zooi)
- Stuur letter
- Cursor 1 naar rechts
- Stuur letter
- Cursor 1 naar rechts
etc etc...

Maar hoe moet het dan als ik aan het einde van de regel ben? Gaat hij dan vanzelf naar volgende regel?

Verwijderd

Nah het is minder ingewikkeld dan je denkt. Je doet een set DDram adrsess waarna je met Write data to ram een karakter naar je lcd stuurd, hierna zal de cursor positie automatish 1 naar rechts opschuiven zodat als je weer een Write data to ram doet het tekentje er naast komt, enige waar je op moet letten is het schermatje op pagina 10, Aan het einde van de 1e regel zal je DDRAM adres op 0x10 staan, terwijl de 2e regel op 0x40 begint dan moet je de zelf ff het cursorte met Set DDram adres heen zetten.

Verwijderd

Topicstarter
Op maandag 19 november 2001 21:57 schreef Yarvieh het volgende:
Nah het is minder ingewikkeld dan je denkt. Je doet een set DDram adrsess waarna je met Write data to ram een karakter naar je lcd stuurd, hierna zal de cursor positie automatish 1 naar rechts opschuiven zodat als je weer een Write data to ram doet het tekentje er naast komt, enige waar je op moet letten is het schermatje op pagina 10, Aan het einde van de 1e regel zal je DDRAM adres op 0x10 staan, terwijl de 2e regel op 0x40 begint dan moet je de zelf ff het cursorte met Set DDram adres heen zetten.
Ah, het is 20x4 LCD dus dan zou dat schema er zo uitzien:
code:
1
2
3
4
00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F  11  12  13
40  41  42  43  44  45  46  47  48  49  4A  4B  4C  4D  4E  4F  21  22  23
80  81  82  83  84  85  86  87  88  89  8A  8B  8C  8D  8E  8F  91  92  93
D0  D1  D2  D3  D4  D5  D6  D7  D8  D9  DA  DB  DC  DD  DE  DF  E1  E2  E3

Dus stel dat ik op de 2e regel, op 2e karakter iets wil zetten, dan moet ik code 41 sturen. 41 = 1000001, + die 1 ervoor die aangeeft dat je DDRam address wilt setten wordt: 11000001 en dat is in delphi $193.

Vervolgens stuur ik de letter, bv de A, dat is $65 en dan staat er dus op de 2e regel op de 2e positie een A

Of niet :?

Want als het klopt wat er in deze post staat dan snap ik het :D

Verwijderd

Je snapt het, enige waar je op moet letten is dat de onderste 2 regels op een 4x40 op een andere controller hangen dus daar moet je E2 aansturen ipv E.

Verwijderd

Topicstarter
Op maandag 19 november 2001 22:18 schreef Yarvieh het volgende:
Je snapt het, enige waar je op moet letten is dat de onderste 2 regels op een 4x40 op een andere controller hangen dus daar moet je E2 aansturen ipv E.
Ok dan! Maar het is een 4*20, niet 4*40, moet ik daar dan ook op letten?

Verwijderd

Nee whehe ik mankeer serieus iets aan m'n ogen denk ik ;)

Verwijderd

Topicstarter
Op maandag 19 november 2001 22:33 schreef Yarvieh het volgende:
Nee whehe ik mankeer serieus iets aan m'n ogen denk ik ;)
:D

Dan nog ff het laatste punt van die initialisation:
code:
1
2
3
4
5
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0   0   0   0   1   1   N   F   *   *   (*1)
0   0   0   0   0   0   1   0   0   0   (*2)
0   0   0   0   0   0   0   0   0   1   (*3)
0   0   0   0   0   0   0   1  I/D  S   (*4)

*1: Function set (Interface is 8 bits long, Specify the numer of display lines and font). This can't be changed after this point
*2: Display off
*3: Display clear
*4: Entry mode set

Dus bij punt 1 moet ik lettertype selecteren en aantal lijnen doorgeven? Hoe moet ik dat doen? Bij DB2 staat een F, die zal wel van Font zijn, dus 0 of 1 lijkt me. Maar bij DB3 staat een N van Number of lines ofzo :? Maar daar kan ik niet 4 invullen, omdat dat geen binaire code is. Hoe moet ik dan duidelijk maken dat ik 4 lijnen heb?

En dan de laatste, die entry mode set. Dat staat ook in die Instruction Table. Daar staat I/D bij DB1 en SH bij DB0. Waar staan die waarden voor? Staat SH voor SHIFT? Like: Enable the Shift of entire display? Maar wat houdt dat dan weer in?

Alweer bedankt :)

Verwijderd

Beats me :) Ik gebruik zelf deze init en ben nog geen display tegen gekomen die 'm niet slikt maar 'k heb echt geen flauw idee meer waar het allemaal voor stond.
code:
1
2
3
4
5
6
7
rr
sw76543210
0000111000
0000111000
0000111000
0000000110
0000001100

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:04

Creepy

Tactical Espionage Splatterer

Die N is 1 of 2 regels. Als je em op 1 zet, wil dat zeggen 2 regels! (ja.. dit klopt...regel 3 loopt precies door na regel 1, en regel 4 loopt door na regel 2)
F is van fontkeuze 8x5 of 8x10 zo uit m'n hoofd.

edit:

I/D is de cursor move direction. Oftewel links of rechts schuiven, en als S op 1 staat schuift de regel, en niet de cursor. Dat schuiven (de regel of de cursor) gebeurt dus als je een karakter op het display hebt gezet

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Op maandag 19 november 2001 23:16 schreef Creepy het volgende:
Die N is 1 of 2 regels. Als je em op 1 zet, wil dat zeggen 2 regels! (ja.. dit klopt...regel 3 loopt precies door na regel 1, en regel 4 loopt door na regel 2)
F is van fontkeuze 8x5 of 8x10 zo uit m'n hoofd.

edit:

I/D is de cursor move direction. Oftewel links of rechts schuiven, en als S op 1 staat schuift de regel, en niet de cursor. Dat schuiven (de regel of de cursor) gebeurt dus als je een karakter op het display hebt gezet
Klopt dit dan wel?
code:
1
2
3
4
00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F  11  12  13
40  41  42  43  44  45  46  47  48  49  4A  4B  4C  4D  4E  4F  21  22  23
80  81  82  83  84  85  86  87  88  89  8A  8B  8C  8D  8E  8F  91  92  93
D0  D1  D2  D3  D4  D5  D6  D7  D8  D9  DA  DB  DC  DD  DE  DF  E1  E2  E3

Aangezien die regels achter elkaar schijnen te lopen...

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:04

Creepy

Tactical Espionage Splatterer

Op mijn LCD als ik iets op positie 21 (=hex 14) zet dan komt dat bij mij op het eerste teken van regel 3 terecht.

Regel 2 begin bij mij op positie 64 (=hex 40) en regel 4 op positie 84 (dus ook weer precies 20 positities verder)

(dit alles met een 4x20 dus)

Hmm.. misschien dat dat N bit dat instelt.. dus dat je schema wel klopt als je dat N bit (wat het aantal regels instelt) op 0 zet. Ik initialiseer em met 1.. als ik thuis ben zal ik dat es proberen

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Nou, dan initialiseer ik hem wel met 1 en dan gebruik ik dit schema wel :)
code:
1
2
3
4
5
6
      | 01  02  03  04  05  06  07  08  09  10  11  12  13  14  15  16  17  18  19  20
________|_______________________________________________________________________________
Regel 1 | 00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F  11  12  13  14
Regel 2 | 40  41  42  43  44  45  46  47  48  49  4A  4B  4C  4D  4E  4F  51  52  53  54
Regel 3 | 14  15  16  17  18  19  1A  1B  1C  1D  1E  1F  20  21  22  23  24  25  26  27
Regel 4 | 54  55  56  57  58  59  5A  5B  5C  5D  5E  5F  60  61  62  63  64  65  66  67

Klopt toch?

En stel dat ik het scherm wil wissen en opnieuw text wil laten zetten. Moet ik dan Clear Screen doen gevolgd door Return Home?

En als ik alleen een aantal waarden wil veranderen, kan ik er dan gewoon overheen schrijven?

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:04

Creepy

Tactical Espionage Splatterer

overschrijven is geen probleem, je hoeft dan niks te clearen.

Na een clearscreen gebruik ik nooit de return home, maar een setcursor op 0,0. Een return home duurt namelijk minimaal 1.64 milli.sec. en een setcursor positie maar minimaal 40 micro.sec. En elke snelheidswinst is meegenomen he ;)

Klein foutje in je schema en mijn post hierboven
21 dec = 15 hex (regel 2)
en regel 4 begint dan op 65 dec = 41
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure setpos(x,y: byte)
var row,realpos: byte;
begin
     if y=2 then
      row:=64
     else if y=3 then
        row:=20
     else if y=4 then
        row:=84
     else
       row:=0;
     realpos:=row +x;
     senddata(128 or realpos,COMMAND);
end;

pos. linksboven op je LCD is in dit geval 1,1.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Moet hij op 41 beginnen?

dus dan wordt het dit:
code:
1
2
3
4
5
6
      | 01  02  03  04  05  06  07  08  09  10  11  12  13  14  15  16  17  18  19  20
________|_______________________________________________________________________________
Regel 1 | 00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F  11  12  13  14
Regel 2 | 41  42  43  44  45  46  47  48  49  4A  4B  4C  4D  4E  4F  51  52  53  54  55
Regel 3 | 15  16  17  18  19  1A  1B  1C  1D  1E  1F  20  21  22  23  24  25  26  27  28
Regel 4 | 56  57  58  59  5A  5B  5C  5D  5E  5F  60  61  62  63  64  65  66  67  68  69

En als ik dus bij het opstarten 'Hallo' wil weergeven stuur ik dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
Binair  Byte

00111000 -> 48  
00111000 -> 48
00111000 -> 48  // Initialisatie
00000110 -> 6
00001100 -> 12

01001000 -> 71  // Letter H
01100001 -> 97  // Letter a
01101100 -> 108 // Letter l
01101100 -> 108 // Letter l
01101111 -> 111 // Letter o

Is er in Delphi trouwens een procedure om bij een letter automatisch de bijhorende byte terug te krijgen? Dat je dus bij H '71' als result krijgt etc (als 71 klopt teminste :P)

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:04

Creepy

Tactical Espionage Splatterer

gewoon de 'h' zenden, met enkele quotes dus, want dan is het een char i.p.v. een string. en een char is hetzelfde als een unsigned byte (in delphi tenminste), en dat is wat die DLPortI/O als parameter pakt.

OF als het in een string staat 1 voor 1 de karakters zenden m.b.v. stringvar[k] o.i.d., das ook meteen een char.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Ik heb deze code:
code:
1
procedure WriteToPort(Port:longint;Value:byte);stdcall;external 'DLPORTIO.DLL';

Dus dan kan ik voor de 'H' gewoon WriteToPort($378,'H'); sturen.

Maar hoe moet ik die initialisation dan uitvoeren? De eerste regel van initialisatie is 00111000 en op mijn Character set staat dat dat '(' is. Moet ik dan gewoon WriteToPort($378,'('); doen? :)

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:04

Creepy

Tactical Espionage Splatterer

00111000 -> 48
00111000 -> 48
00111000 -> 48 // Initialisatie
00000110 -> 6
00001100 -> 12
WriteToPort($378,48);
WriteToPort($378,48);
WriteToPort($378,48);
WriteToPort($378,6);
WriteToPort($378,12);
WriteToPort($378,'H');

je kan nummers (byte) en chars gewoon door elkaar gebruiken. sim-pel :)
Een byte kan je op dezelfde manier als een integer gebruiken, alleen gaan een byte van -128 tot +127 en een unsigned byte van 0 tot 255

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Op dinsdag 20 november 2001 13:34 schreef tjetta het volgende:
Is er in Delphi trouwens een procedure om bij een letter automatisch de bijhorende byte terug te krijgen? Dat je dus bij H '71' als result krijgt etc (als 71 klopt teminste :P)
Dat kan je doen met Ord (bv a:=Ord('H'); // a is dan 71 )

edit:

of je kan natuurlijk een char typecasten naar een byte.

Verwijderd

Topicstarter
Ik heb deze code, die hoogstwaarschijnlijk goed is, maar ik ben er niet helemaal zeker van, probleem staat eronder.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
var
  LPT: longint = $378;
  LCD_DATA_ADDRESS: longint = $379;
  LCD_CONTROL_ADDRESS: longint = $380;


implementation

{$R *.dfm}

procedure DlPortWritePortUchar(Port:longint;Value:byte);stdcall;external 'DLPORTIO.DLL';

procedure LCD_WriteControl(data: Byte);
begin
  DlPortWritePortUchar(LCD_CONTROL_ADDRESS,$B);  // 0 0 0 0 0 0 1 1
  DlPortWritePortUchar(LCD_DATA_ADDRESS,data);
  DlPortWritePortUchar(LCD_CONTROL_ADDRESS,$A);  // 0 0 0 0 0 0 1 0
  DlPortWritePortUchar(LCD_CONTROL_ADDRESS,$B);  // 0 0 0 0 0 0 1 1
  DlPortWritePortUchar(LCD_CONTROL_ADDRESS,$9);  // 0 0 0 0 0 0 0 1
  Sleep(10); // 10ms delay
end;

procedure LCD_WriteData(data: Byte);
begin
  DlPortWritePortUchar(LCD_CONTROL_ADDRESS,$7);  // 0 0 0 0 0 1 1 1
  DlPortWritePortUchar(LCD_DATA_ADDRESS,data);
  DlPortWritePortUchar(LCD_CONTROL_ADDRESS,$6);  // 0 0 0 0 0 1 1 0
  DlPortWritePortUchar(LCD_CONTROL_ADDRESS,$7);  // 0 0 0 0 0 1 1 1
  DlPortWritePortUchar(LCD_CONTROL_ADDRESS,$5);  // 0 0 0 0 0 1 0 1
  Sleep(1);
end;

procedure TMainForm.FormCreate(Sender: TObject); // initialisatie
begin
  LCD_WriteControl($38);                 // 0 0 1 1 1 0 0 0
  Sleep(5);
  LCD_WriteControl($38);                 // 0 0 1 1 1 0 0 0
  Sleep(1);
  LCD_WriteControl($38);                 // 0 0 1 1 1 0 0 0
  LCD_WriteControl($38);                 // 0 0 1 1 1 0 0 0
  LCD_WriteControl($6);               // 0 0 0 0 0 1 1 0
  LCD_WriteControl($c);               // 0 0 0 0 1 1 0 0
  LCD_WriteControl($1);               // 0 0 0 0 0 0 0 1
end;

Dus als de form gecreate wordt, dan initialiseert hij de LCD. Deze code heb ik van iemand anders ontvangen, in C++ en hij zei dat deze code werkte, dus daar vertrouw ik dan ook op :)

Als ik nu LCD_WriteData($41); doe, dan zou hij een 'A' op het display moeten weergeven, maar ik krijg dit te zien:
code:
1
2
3
4
5
6
7
8
9
10
11
. . . . o
. . . . o
. . . . o
. . . . o
. . . . o
. . . . o
. . . . o
. . . . o

. = pixel uit
o = pixel aan

Ook als ik iets anders dan $41 stuur krijg ik dit. Steeds als ik LCD_WriteData uitvoer, komt er eentje naast. Eerst wordt regel 1 gevuld, dan regel 3, dan regel 2, dan regel 4 (Zoals het ook zou moeten dus).

Nou is mijn vraag/probleem: wat doe ik hier fout? Ben ik echt iets cruciaals vergeten :? LCDinf en Smartie werken wel gewoon, dus aan de LCD ligt het in ieder geval niet :)

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:04

Creepy

Tactical Espionage Splatterer

die data adres (379) heb je niet nodig! Gewoon de data schrijven naar 378! (dus in je code DATA_ADRES vervangen door LPT)

En in plaats van die write($41) kan je ook write('A') doen.

En na het geven van een commando (dus ook na het schrijven van een karakter) zul je enige tijd (minimaal 40microseconden) moeten wachten om het LCD de tijd te geven het commando te verwerken.
edit:
hmm.. duh.. beter kijken.. dat wachten doe je al :)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10-2025
en hoe doen jullie dan custom chars?
gewoon zo:
code:
1
degree: cchar = (8, 20, 8, 0, 0, 0, 0, 0);

This message was sent on 100% recyclable electrons.


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:04

Creepy

Tactical Espionage Splatterer

Op donderdag 22 november 2001 18:13 schreef basiep het volgende:
en hoe doen jullie dan custom chars?
gewoon zo:
code:
1
degree: cchar = (8, 20, 8, 0, 0, 0, 0, 0);
Lees de specs, daarin staat precies hoe je je data moet verzenden om custom chars te maken.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10-2025
nog een vraagje:
ik heb ff getest met paralelle drivers, maar is het niet zo (kweet het niet hoor) dat je een seriele driver net zo (ook met dlportIO) kunt maken?
natuurlijk dan wel andere waardes invoeren enzo, maar dat het gewoon daarmee kan?

of is dat niet mogenlijk?

en nog wat:
Als ik nu wil kijken of pin 1 en pin 2 contact maken, dan moet ik natuurlijk iets naar pin 1 sturen en kijken of ik dat bij pin 2 opvang. maar dat moet 'tegelijk?'
hoe doe je dat in delphi?
want als je het na elkaar doet dan klopt het natuurlijk nooit

This message was sent on 100% recyclable electrons.


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:04

Creepy

Tactical Espionage Splatterer

met DLPortIO kan dat ja.. maar dan moet je ook je handshaking en synchronisatie gaan doen, en dat wil je echt niet! Het kan op een veel simpelere manier, zodat je niet rechtstreeks met die poorten hoeft "praten".

Ga trouwens ook eens opzoek naar (algemene) specs van LPT poorten, daarin staat ook hoe je data kan inlezen.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10-2025
okay zal ik doen, maar heb je voor data inlezen dan geen dll'etje nodig?

This message was sent on 100% recyclable electrons.


Verwijderd

Topicstarter
Het is nu gelukt! Het probleem lag inderdaad bij die LPT + 1 wat LPT moest zijn. Pics coming soon (eerst ff mooi inbouwen :P)
Op donderdag 22 november 2001 20:53 schreef basiep het volgende:
okay zal ik doen, maar heb je voor data inlezen dan geen dll'etje nodig?
Kan volgens mij ook gewoon met DlPortIO, maar daar heb ik geen ervaring mee :)
Op donderdag 22 november 2001 18:13 schreef basiep het volgende:
en hoe doen jullie dan custom chars?
gewoon zo:
code:
1
degree: cchar = (8, 20, 8, 0, 0, 0, 0, 0);
Ik wil ook custom chars maken, hoe werkt dit precies? :)

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:04

Creepy

Tactical Espionage Splatterer

Go Tjetta! Go Tjetta! :)

Hmm.. costum chars maken:

Set CGRAM address en dan op dezelfde manier als karakters schrijven naar het LCD. Dit moet 8 keer, de waarde die je dan schrijft is het bitpatroon van die regel. (een karakters is 8 bij 5 pixels)

Dus 1 keer set CGRAM address, en daarna 8 keer een byte waarde schrijven.

De eerste 8 karakters kunnen hiervoor worden gebruikt.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Op donderdag 22 november 2001 21:54 schreef Creepy het volgende:
Go Tjetta! Go Tjetta! :)

Hmm.. costum chars maken:

Set CGRAM address en dan op dezelfde manier als karakters schrijven naar het LCD. Dit moet 8 keer, de waarde die je dan schrijft is het bitpatroon van die regel. (een karakters is 8 bij 5 pixels)

Dus 1 keer set CGRAM address, en daarna 8 keer een byte waarde schrijven.

De eerste 8 karakters kunnen hiervoor worden gebruikt.
Ok, slaat hij hem dan op tot de stroom eraf is geweest? En hoe kan ik hem dan oproepen?

Verwijderd

Op zaterdag 24 november 2001 15:48 schreef tjetta het volgende:
Ok, slaat hij hem dan op tot de stroom eraf is geweest? En hoe kan ik hem dan oproepen?
Idd tot de stroom er af is geweest. en je roept ze op met chars 0-7.

Verwijderd

Topicstarter
Aha, okay

Hoe Set ik CGRam address? Ik zie al verschillende dingen staan, maar weet niet echt welke ik moet hebben.

Zo staat het in de manual:
code:
1
2
Bit:  7    6    5    4    3    2    1    0
    0    1   AC5  AC4  AC3  AC2  AC1  AC0

Waar staan die AC's voor? Zijn dat de 5 pixels op 1 regel die ik met 0/1 uit/aan kan zetten?

Verwijderd

Zelfde manier als je DDRAM eigenlijk, Je zet het SGRAM adres en de databytes die je daarna stuurd zullen in in de chargen ram geladen worden ipv op het display-ram. Als je klaar bent met je custom char, zet je weer een DDram adres en schrijf je weer blij verder op het display..

Verwijderd

Topicstarter
Dat snap ik, dus met de code uit mijn vorige post set ik het CGRam adres. Maar wat moet ik dan bij AC0-5 invullen?

Verwijderd

Meer hints altijd leuk, als ik me niet vergis heb je zo'n crystal fontz datasheet. daar heb je een stukje "Relationship between CGRAM Addresses, Character Codes (DDRAM) and Character" bekijk die nog es.

ps. Mocht je er echt niet uit komen wil ik wel 'n stukje source geven maar zelf uitzoeken is altijd leuker vind ik altijd.

Verwijderd

Topicstarter
Het lukt nu, bedankt :)

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:04

Creepy

Tactical Espionage Splatterer

Kijk.. zo hoort het! En dat zonder source te geven! >:)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Op dinsdag 27 november 2001 09:33 schreef Creepy het volgende:
Kijk.. zo hoort het! En dat zonder source te geven! >:)
:X

  • _-= Erikje =-_
  • Registratie: Maart 2000
  • Laatst online: 09-09 15:42
tjek ook eens

http://www.flakkee.net/~mnm-tm

compleet delphi component en alles wat je erbij nodig hebt (aansturing enz)

Verwijderd

Topicstarter
Op dinsdag 27 november 2001 17:32 schreef Yarvieh het volgende:

[..]

:X
sst! :P
Op dinsdag 27 november 2001 19:17 schreef _-= Erikje =-_ het volgende:
tjek ook eens

http://www.flakkee.net/~mnm-tm

compleet delphi component en alles wat je erbij nodig hebt (aansturing enz)
Bedankt, maar dat heb ik nu niet echt meer nodig :) Ik heb nu met hulp van wat dingen van Yarvieh al deze procedures zelf al kunnen maken :)

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:04

Creepy

Tactical Espionage Splatterer

Zelf maken is veel leuker dan een standaard component gebruiken :)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Op dinsdag 27 november 2001 21:20 schreef Creepy het volgende:
Zelf maken is veel leuker dan een standaard component gebruiken :)
Inderdaad, vind ik ook altijd :)

Als ik er dan echt niet uitkom is een beetje hulp wel handig, maar standaard components vind ik niet echt top :)

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:04

Creepy

Tactical Espionage Splatterer

Mooi :)
Ik ben iemand die wel wil helpen, maar liever geen complete voorbeelden weggeeft. Je moet wel moeite willen doen om het te leren en niet domweg voorbeelden gebruiken (ook al kan je daar ook wat van leren).

Wanneer kunnen we je LCD programma in actie zien ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1