[C++] KS0066 LCD Module aansturen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Bloemstukje
  • Registratie: December 2008
  • Laatst online: 19-09 14:02
Hallo Tweakerts :)

Ik heb een vraagje, ik ben druk bezig met het aansturen van een LCD module in C++, met een uC.
De microcontroller is Atmega328P. Goed eerst even wat info;

Datasheet LCD Module

Alles is als volgt aangesloten;

Poort, Function
B6, E (Enable LCD)
B5, RS (Slect tussen data of commando's)
B4, R/W (Altijd 0 want we blijven lekker schrijven)
B3, D7
B2, D6
B1, D5
B0, D4

En zoals te zien gaat het dus via 4 Bits.

Dan de code :

C++:
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
#include <io.h>

void Delay(int timer)
{
    for (int i=0;i<timer;i++)
    {
        for (int j=0;j<78;j++)
        {
            for (int k=0;k<254;k++)
            { 
            int l=0;
            l++;
            }
        }
    }
}   
    
int main()
{
    DDRB=0xFF;
    Delay(5);                       // power up 50 mSec wait
    PORTB=0x03;
    Delay(5);
    PORTB=0x03;
    Delay(5);
    PORTB=0x03;
    Delay(5);
    PORTB=0x02;
    Delay(5);
    PORTB=0x02;

    PORTB=0x00;

    PORTB=0x04;

    PORTB=0x00;

    PORTB=0x10;

    PORTB=0x00;

    PORTB=0x07;
}


Wat ik doe, of in elk geval wat ik denk dat ik doe is het display initializeren volgens de datasheet.
Dit is dus puur het initializeren, de rest komt daarna wel :).

Alleen; het werkt dus niet. Aan het einde geef ik "Clear DIsplay" maar het display gaat niet leeg, er verandert helemaal niets !

Heeft iemand ervaring met het initializeren van een KS0066 aangestuurd display ? Het liefst via C++ maar Assembler mag evt. ook :)

Thnx

EDIT: in eerst instantie lijkt het nu te werken ! Ik vergat enable LCD hoog te zetten :) voor nu iig gered :)

[ Voor 3% gewijzigd door Bloemstukje op 26-01-2011 20:41 ]

gewoon nee.


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Als je code post, gebruik dan code tags a.u.b. i.p.v. quote tags.
SanderPS3 schreef op woensdag 26 januari 2011 @ 20:36:
EDIT: in eerst instantie lijkt het nu te werken ! Ik vergat enable LCD hoog te zetten :) voor nu iig gered :)
Mooi :Y)

Overigens:
SanderPS3 schreef op woensdag 26 januari 2011 @ 20:36:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <io.h>
void Delay(int timer)
{
    for (int i=0;i<timer;i++)
    {
        for (int j=0;j<78;j++)
        {
            for (int k=0;k<254;k++)
            { 
            int l=0;
            l++;
            }
        }
    }
}   
Ik ben maar oppervlakkig bekend met microcontrollers maar WTF is dit voor vage constructie? Waar komen 78 en 254 vandaan? Wat heeft de int l=0 en l++ constructie voor nut (behalve dat de for-loop niet weggeoptimized wordt misschien...?)? Het lijken me nogal arbitraire danwel empirisch bepaalde waarden die je niet echt moet willen hebben in je code lijkt me?

[ Voor 88% gewijzigd door RobIII op 26-01-2011 20:45 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Bloemstukje
  • Registratie: December 2008
  • Laatst online: 19-09 14:02
RobIII schreef op woensdag 26 januari 2011 @ 20:41:
Als je code post, gebruik dan code tags a.u.b. i.p.v. quote tags.


[...]

Mooi :Y)

Overigens:

[...]
Ik ben maar oppervlakkig bekend met microcontrollers maar WTF is dit voor vage constructie? Waar komen 78 en 254 vandaan? Wat heeft de int l=0 en l++ constructie voor nut (behalve dat de for-loop niet weggeoptimized wordt misschien...?)? Het lijken me nogal arbitraire danwel empirisch bepaalde waarden die je niet echt moet willen hebben in je code lijkt me?
Klopt dat laatste ! Het is een crappy geschreven delay functie die niks anders doet dan wachten op een vrij inefficiente manier. Maar wel makkelijk te schrijven ! De compiler moet in elk geval zijn Optmizattion uitgeschakeld hebben anders werkt het niet :P. 78 en 254 heb ik gekozen omdat die keer elkaar ongeveer 20000 is. 20000 stapjes wachten bij 20Mhz (mijn uC) is ongeveer 1 ms, als ik alles goed heb uitgerekend iig :)

gewoon nee.


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 15:26
- Je zou om een commando te geven met B5 moeten toggelen.
- Timing
- Jouw delays zijn kapot
- Contrast pin

Wordt wel een beetje verdrietig van je code trouwens :|

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.