-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: LCD-Anzeige und PIC16F873

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    26.04.2005
    Beiträge
    5

    LCD-Anzeige und PIC16F873

    Anzeige

    Hallo alle zusammen,

    bräuchte mal 'nen kleinen Tip beim Ansteuern eines LCD-Displays (2x20)
    mit dem 16F873.

    Habe zum Testen mal das 1. LCD-Programmbeispiel von www.fernando-heitor.de/ kompiliert und gebrannt.
    Die Hardware habe ich auch genauso aufgebaut wie von ihm beschrieben.

    Leider erscheint bei mir auf dem Display kein Text, sondern beide Zeilen
    werden vollkommen schwarz angezeigt ( also alle 20 Stellen der beiden Zeilen werden als schwarze Blöcke angezeigt).
    Die Hardware habe ich schon min. 3-mal durchgecheckt. Scheint zu stimmen.
    Das Programm sollte ja eigentlich auch stimmen.

    Vielleicht hat ja jemand von euch das Beispiel schonmal ausprobiert.

    Ansonsten : Woran kann es liegen, das beide Zeilen vollständig schwarz
    angezeigt werden, wenn ich den Prozessor einschalte (vorher
    wird natürlich nur eine Zeile angezeigt )und nicht der
    gewünschte Texte ?

    Vielen Dank schonmal für eure Hilfe.

    MFG

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    20.06.2004
    Beiträge
    256
    Hast Du mal versucht den Kontrast einzustellen?
    BlackBox

  3. #3
    Gast
    Ja, habe ich.
    Habe ein Poti zwischen Pin3 der LCD-Schnittstelle und Ground gelegt,
    nur wenn ich am Poti drehe ändert sich nur der Kontast der beiden Zeilen
    mit den vollständig schwarzen Zeichenfeldern, aber es kommt kein Text zum vorschein.

    Habe ich irgendetwas simples übersehen ?

    MFG

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    20.06.2004
    Beiträge
    256
    Zitat Zitat von Anonymous
    Ja, habe ich.
    Habe ein Poti zwischen Pin3 der LCD-Schnittstelle und Ground gelegt,
    nur wenn ich am Poti drehe ändert sich nur der Kontast der beiden Zeilen
    mit den vollständig schwarzen Zeichenfeldern, aber es kommt kein Text zum vorschein.
    Zwischen Pin3 und GND oder wie im Schaltbild unter http://www.fernando-heitor.de/pic/pr.../schaltung.htm das Poti zwischen +5V und GND und den Schleifer auf Pin3?

    Bist Du dir sicher, dass der richtige Kontroller ( HD44780 oder kompatibler) in deinem Display steckt? Ist zwar eigentlich fast Standart aber es gibt auch andere.
    BlackBox

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.05.2004
    Ort
    Bielefeld / Paderborn
    Beiträge
    1.253
    check mal die enable-leitung.
    ausserem: ist in der software am anfang ne pause, um das display zu initialisieren? ist es überhaupt initialisiert? die dinger brauchen nen paar millisekunden, bis die die ersten daten empfangen können.

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    26.04.2005
    Beiträge
    5
    Das Display ist von datavision, ich glaube die arbeiten alle mit dem HD44780.

    Nach dem Sofware-Beispiel von Heitor sollte es nach der Initialisierungsroutine genau richtig initialisiert werden.
    Wie finde ich denn heraus, ob es initialisiert wurde ?

    MFG

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.05.2004
    Ort
    Bielefeld / Paderborn
    Beiträge
    1.253
    mmjaaa.. k.a. wenn es danach funktioniert, vermute ich! ich weiss nicht, musst mal ins datenblatt gucken, obs da irgend ne rückmeldung gibt, wenn das ding initialisiert ist

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    18.04.2005
    Beiträge
    7
    Hallo also rausfinden kannst du es nictht. Entweder zeigt es dann die Zeichen an die zum LCD schickst dann ist alles ok oder nicht!!!!
    Poste mal ein wenig Code von der INIT Routine.Nutzt du den 4 Bit oder 8 Bit Modus.Mir scheint es so als wenn das LCD nicht richtig Initialisiert ist.

    Gruß

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    26.04.2005
    Beiträge
    5
    Ich habe das Display im 4-Bit-Modus initialsiert.
    Hier ist der LCD-Initialisierungs-Code aus der LCD-Routine :
    (habe die restlichen Funktion dieses Codes zwecks Postens weggelassen,
    weil der relativ lang ist , ich hoffe das reicht):

    lcdanzeige.c :

    /*Die Pins RC4-RC7 werden zum Schreiben als Ausgänge definiert (LCD_WRITE), und zum Lesen als Eingänge (LCD_READ).*/
    struct port_b_layout const LCD_WRITE={0,0,0,0,0};
    struct port_b_layout const LCD_READ={0,0,0,0,15};

    /* Hier kann der Typ der Anzeige definiert werden
    ( 0=5x7, 1=5x10, 2=2 lines )*/
    #define lcd_type 2

    /*verschiedene Eigenschaften der LCD-Anzeige
    0x0C = Display an
    0x01 = Display löschen
    0x06 = Adresspointer inkrementieren und Displayinhalt nicht verschieben */
    byte CONST LCD_INIT_STRING[4] = {0x20 | (lcd_type << 2), 0x0C, 0x01, 6};



    /* Initialisierung des LCD-Displays. Die verschiedenen Eigenschaften der Anzeige werden hier übertragen.*/
    void lcd_init()
    {
    byte i;

    set_tris_b(LCD_WRITE);
    portb.rs = 0; // siehe 4-Bit Initialisierung (LCD-Datenblatt)
    portb.rw = 0;
    portb.enable = 0;
    delay_ms(15); // 15 ms Pause
    for (i=1;i<=3;++i)
    {
    lcd_send_nibble(3); // 3-mal 0011 mit mind. 5ms Pause
    delay_ms(5);
    }
    lcd_send_nibble(2); // 0010 = 4-Bit Interface
    for (i=0;i<=3;++i)
    lcd_send_byte(0,LCD_INIT_STRING[i]);
    }

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    18.04.2005
    Beiträge
    7
    Hallo ,

    Probiere es mal damit ist zwar mit dem CC5x erstellt aber dürtfe kein Problem sein es auf den CSS umzuschrieben.
    Deine Init Routine kann so nicht funktionieren. Es müßen schon einige Schritte mehr durchgeführt werden damit das LCD richtig Initalisiert wird.

    Siehe meine INIT Routine.


    void LCDInit(void)
    {
    int i;
    pause(100);
    // Die RS (Register-Select)-Leitung bestimmt,ob die übertragenen Daten als Zeichen in den Textpuffer (RS=1)
    // oder als Befehl in ein Steuerregister (RS=0) geschrieben werden

    lcdport&=~LCD_RS; // RS Off auf Kontrollregister umschalten jetzt können Kommandos gesendet werden Bit löschen
    PORTD=lcdport;

    lcdport&=~LCD_RW; // R/W Off to send data to display
    PORTD=lcdport;

    for(i=0; i<3; i++)
    {
    PORTD= 0b00110000; //1 - 3 8 Bit Mode anwahl
    OutPortD3=1; //Enable Leitung Daten schreiben EIN
    NOP;
    OutPortD3=0; //Enable Leitung Daten schreiben AUS
    pause(5);
    }

    // 4 Bit Mode High and Low nible transfer
    PORTD = 0b00010000; // 4 4 Bit Daten Modus EIN
    OutPortD3=1;
    NOP;
    OutPortD3=0;
    pause(10);

    LCDWriteByte(0b00000001); // LCD löschen + Home
    pause(10);

    LCDWriteByte(0b00101000); // 2 Zeilig
    pause(10);

    LCDWriteByte(0b00001000); // LCD Off
    pause(10);

    LCDWriteByte(0b00000110); // Entry Mode , Inc , Dis
    pause(10);

    LCDWriteByte(0b00000011); // Cursor Home
    pause(10);

    LCDWriteByte(0b00001111); // Display On

    lcdport|=LCD_RS; // RS On umschalten auf Datenregister Bit setzen
    PORTD=lcdport; // wieder auf Textpuffer wechseln jetzt können wieder Textzeichen gesendet werden

    }


    Gruß Roberto

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •