EA DIPS082 2x8 Display ansteuern?

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Schönen guten Tag,

    momentan habe ich ein Projekt, wo ich zunächst mit 2 Tastern, per Interrupt eine Zeit messen soll. Diese soll dann mit paar weiteren Daten auf dem EA DIPS082 2x8 Display ausgegeben werden.
    Gerade bin ich dabei, überhaupt erstmal was auszugeben und es zu verstehen. Allerdings klappt es nicht so wirklich .:X Ich benutze dabei Python.

    Deshalb wollte ich hier mal fragen, ob hier einer ist der mit diesem Display schon etwas Erfahrung hat oder allgemein in diesem Thema???

    Hier mal der Code den ich ausprobiert habe...


    Vielen Dank schonmal für eure Hilfe :)

  • Hallo.

    ich kenne speziell dieses display nicht, aber ich habe ähnliche mit 2x20 oder 4x40 in einsatz.
    ich prinzip sind die alle gleich.

    wenn ich deine init() routine anschaue, scheint die schon mal falsch zu sein.
    du schreibst 1x ne 0x33 raus.
    das ist denke ich falsch.... die 0x33 brauch er 3 mal
    dabei ist wichtig !
    nach der ersten 0x33 müssen 15 ms gewartet werden.
    danach die anderen beiden 0x33 jeweils mit 1 ms wartezeit.

    offensichtlich willst du das teil mit 4 bit's ansteuern.
    das muß bei der initialisierung mit dabei sein.

    die dinger stehen nach dem einschalten auf 8 bit-breite.
    das 4. und 5. byte bei init sag ihm das.
    man kann ihn trotzdem mit 4 bit initialisieren, da er bei den ersten 5 bytes die oberen 4 bit ausgeblendet, bzw als "don't care" behandelt werden

    dann kannst du ,wenn du nen string ausgeben willst, die bytes nicht einfach der reihe nach "rausklopfen"
    du muß bei jedem byte vorher das busy-flag abfragen, oder einen sicherheits-timeout einbauen.
    weiterhin mußt du vor jedem byte die ddra (display-data-ram-adresse) rausschreiben ,erst dann das byte

    d.h. zb "x" rausschreiben:

    busy free ?.. nein ? ...warten und erneut abfragen, oder 20us warten
    schreibe ddra adresse ins steuerregister
    schreibe "x" ins dataregister

    ........ usw


    denke, du hast ein datasheet von dem ding.

    les mal die init-routine in ruhe durch

    gruß root

    Einmal editiert, zuletzt von root (6. Februar 2014 um 01:28)

  • Hallo dreamshader

    das ist ein argument.
    wenn's ne library gibt, kann er sich viel arbeit ersparen.

    nur frage ich mich.
    wie soll das mit wiringPi funktionieren

    das ding will 4 oder 8 bits pro befehl......

  • Tach auch ;) ...

    wiringPi hat eine LCD-Lib dabei:

    Spoiler anzeigen


    /*
    define from wiringPi.h define from Board DVK511
    3.3V | | 5V -> 3.3V | | 5V
    8/SDA | | 5V -> SDA | | 5V
    9/SCL | | GND -> SCL | | GND
    7 | | 14/TX -> IO7 | | TX
    GND | | 15/RX -> GND | | RX
    0 | | 18 -> IO0 | | IO1
    2 | | GND -> IO2 | | GND
    3 | | 23 -> IO3 | | IO4
    VCC | | 24 -> VCC | | IO5
    MOSI/12 | | GND -> MOSI | | GND
    MISO/13 | | 25 -> MISO | | IO6
    SCK/14 | | 8/CE0 -> SCK | | CE0
    GND | | 9/CE19 -> GND | | CE1
    */


    #include <stdio.h>
    #include <string.h>
    #include <errno.h>

    #include<wiringPi.h>
    #include<lcd.h>

    const int RS = 3; //
    const int EN = 14; //
    const int D0 = 4; //
    const int D1 = 12; //
    const int D2 = 13; //
    const int D3 = 6; //


    int main(){
    if (wiringPiSetup() < 0)
    {
    fprintf (stderr, "Unable to open serial device: %s\n", strerror (errno)) ;
    return 1 ;
    }

    int lcdFD;
    lcdFD = lcdInit(2, 16, 4, RS, EN, D0, D1, D2, D3, D0, D1, D2, D3);
    lcdPosition(lcdFD, 0,0);
    lcdPrintf(lcdFD,"Waveshare");

    lcdPosition(lcdFD, 0,1);
    lcdPrintf(lcdFD, "Pi");

    }

    Bis denne dann,
    -ds-

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!