- 3D-Druck Einstieg und Tipps         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: LCD Display (KS0073) in 4 Bit-Modus initialisieren und ansteuern

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.699
    ... LCD Display (KS0073... 4 Bit-Modus ... auf gefallen ... Peter Fleury ... Display 3 mal einen Reset unterzogen ...
    Tja - war mir nie aufgefallen, ich nutzte vor Jahren die Bibliothek von PFleury. Du musst den Code aber richtig lesen: der dreimalige Reset ist nicht für die nibbelweise Übertragung, da steht (in meiner jahrealten) Bibliothek von PFleury ein #if ... #else ... #endif davor. Für den 4bittigen IO sah ich nie einen Mehrfachreset. Und in Deinem ersten Codefenster steht ja auch mehrfach:
    Code:
    /* function set: 8bit interface */
    Versuchs die Bibliothek noch mal aufmerksamen durchzulesen.
    Ciao sagt der JoeamBerg

  2. #2
    Erfahrener Benutzer Roboter-Spezialist Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    48
    Beiträge
    456
    Ich have vor zwei Wochen einen Ks0073 in Betrieb genommen... Über i2c. Ohne irgendwelche Libs. Ich kann dir in ein paar Stunden dann die Initialisierungsroutine , bzw. Die Sequenz zeigen.
    Gruß Georg

  3. #3
    Erfahrener Benutzer Roboter-Spezialist Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    48
    Beiträge
    456
    Code:
     // bis in the display state. see PCF8574 in schematic
    // 0: Power
    // 1: RS
    // 2: RW
    // 3: CS (enable)
    // 4: D4
    // 5: D5
    // 6: D6
    // 7: D7
    
           // function set 4 bit
            // this needs to be done without the add_command function
            g_buffer[0] = 0x21;
            g_buffer[1] = 0x21 | (1<<3);
            g_buffer[2] = 0x21;
            twi.write_to_slave(avr::display_address, g_buffer, 3);
            state++;
        case 7:
            return check_twi(state);
        case 8:
            curr_pos = 0;
            add_command(0,0,0x24); // function set line (enable ext. F);
            add_command(0,0,0x09); // set 4 line mode
            add_command(0,0,0x20); // disable extended function again
    
            twi.write_to_slave(avr::display_address, g_buffer, curr_pos);
            state++;
            return false;
        case 9:
            return check_twi(state);
        case 10:
            // init done
            curr_pos = 0;
            add_command(0,0,0x0F); // display on
            add_command(0,0,0x01); // clear display
            add_command(0,0,0x06); // entry mode set
            twi.write_to_slave(avr::display_address, g_buffer, curr_pos);
            state++;
            return false;
    So hab ich mein Display angeschlossen:
    https://www.roboternetz.de/community...l=1#post604859

    add_command macht:
    Code:
    void
    add_command(unsigned char rs, unsigned char rw, unsigned char value)
    {
        unsigned char out = 0x01; // always power
    
        // high nibble
        out |= (value & 0xF0);
    
        // rs and rw flags
        if (rs) out |= (1<<1);
        if (rw) out |= (1<<2);
    
        // toggle e
        out |= (1<<3);
        g_buffer[curr_pos++] = out;
    
        out &= ~(1<<3);
        g_buffer[curr_pos++] = out;
    
        // low nibble
        out &= 0x0F;
        out |= ((value & 0x0F) << 4);
    
        // toggle e
        out |= (1<<3);
        g_buffer[curr_pos++] = out;
    
        out &= ~(1<<3);
        g_buffer[curr_pos++] = out;
    }
    Das bedeutet für dich:
    RS = low / RW = low

    // function set
    - Display D5 hochnehmen
    - E high
    - E low

    // add_command(0,0,0x24) // function set line (enable ext. F);
    - out nibble=2
    - E high
    - E low
    - out nibble=4
    - E high
    - E low

    Du siehst also wie du das umsetzen kannst...

    Das hier ist der Kern meiner Displayroutine.

    Gruß
    Georg

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.09.2009
    Ort
    Berlin (Mariendorf)
    Beiträge
    1.023
    Zitat Zitat von oberallgeier Beitrag anzeigen
    Für den 4bittigen IO sah ich nie einen Mehrfachreset.
    4-bitiger I/O und Mehrfach-Reset haben auch nichts miteinander zu tun. In der Reset- bzw. frühen Init-Phase der HD44780 gibt es noch keine 4-/8-Bit-Unterscheidung. Die drei gleichen Resetbefehle ist innerhalb ihrer Abfolge unterschiedlicher Zeitbedarf spezifiziert. Da scheint intern verschiedenes zu passieren, was auch die Norwendigkeit des Dreifachresets plausibel macht.
    Sorry, wenn ich jetzt zu ausschweifend gewesen sein sollte.

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.04.2010
    Ort
    Im Städtedreieck Köln-Bonn-Aachen
    Alter
    37
    Beiträge
    106
    @ RoboHolIC und oberallgeier:
    der KS0073 ist fast identisch mit dem HD44780, der Unterschied macht sich in der anderen 4-Bit-Inititialisierung bemerkbar.
    Feury hat dies bezüglich seine Bib. angepasst, so dass man es auch für den KS0073 verwenden kann.

    Werde mir heute Abend nochmal den Code von Feury zu gemüte führen...

    @ schorsch: Danke für deinen Code. Werde dann mir auch mal anschauen.

    Ich werde jetzt erstmal euer Input verarbeiten. Danke für euere schnellen Antworten.

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.04.2010
    Ort
    Im Städtedreieck Köln-Bonn-Aachen
    Alter
    37
    Beiträge
    106
    Nachdem es immer noch nicht funktionieren will, bin ich immer noch kein schritt weiter.

    Also habe ich mir gedacht: Alles auf dem Steckbrett platt machen, neu verdrahten und die Bib. von Fleury benutzen....... Ja..... Funktioniert auch nicht. Noch nicht mal das erstellen der Hex File.

    Fehlermeldung:
    3 ld returned 1 exit status
    1 undefined reference to 'lcd_init'
    2 undefined reference to 'lcd_puts'
    hier mein überschaubarer Code:

    Code:
    /*
     * BMA020_LCD.c
     *
     * Created: 10.10.2014 16:26:27
     *  Author: Jimmy
     *
     * - Port B:
     * + PB0: LED grün
     *
     * - Port C:
     * + PC4: SDA
     * + PC5: SCL
     *
     * Pin Konfiguration:
     * - Port D
     * + PD0: Data0
     * + PD1: Data1
     * + PD2: Data2
     * + PD3: Data3
     * + PD4: RS Pin
     * + PD5: RW Pin
     * + PD6: E Pin
     * + PD7: NC
     */ 
    
    
    #include <avr/io.h>
    #include "Bib/lcd.h"
    #define F_CPU 8000000UL
    #include <util/delay.h>
    
    
    
    int main(void)
    {
        // Portrichtung konfigurieren
        DDRB=0x01;
        
        // Initialisierung
        lcd_init(LCD_DISP_ON);
        
        // Begrüßungstext
        lcd_puts("Hallo Unbekannter");
        
        while(1)
        {
            // Den Controller beschäftigen
            PORTB|=(1<<PB0);
        }
    }
    Bin ich so unfähig, oder habe ich einfach nur ein riesen Brett vor meinen Kopf?

  7. #7
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Du solltest doch zuerst die Lib. von Fleury zum laufen bringen, dann weist du das die Hardware funktioniert.
    Aber offensichtlich hast du schon ein Problem beim Compilieren.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  8. #8
    Erfahrener Benutzer Roboter-Spezialist Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    48
    Beiträge
    456
    Du must das C File der Lib von Fleury in dein Makefile einbinden.

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.04.2010
    Ort
    Im Städtedreieck Köln-Bonn-Aachen
    Alter
    37
    Beiträge
    106
    Ich habe den Fehler gefunden.


    Ich habe bei der Initialisierung das Bit für den Decrement/Increment Mode falsch gesetzt.
    Wenn er bei der ersten Position bereits abwärts zählt, kann nur mist raus kommen.


    Danke für die Unterstützung.

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.04.2010
    Ort
    Im Städtedreieck Köln-Bonn-Aachen
    Alter
    37
    Beiträge
    106
    Zitat Zitat von Hubert.G Beitrag anzeigen
    Du solltest doch zuerst die Lib. von Fleury zum laufen bringen, dann weist du das die Hardware funktioniert.
    [...]
    Genau das habe ich nun vor.

    Zitat Zitat von schorsch_76
    Du must das C File der Lib von Fleury in dein Makefile einbinden.
    Wie mache ich das? Habe bis her noch nie eine Bib. eingebunden.


    Danke für die schnellen Antworten.

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. EADIP204 (KS0073) Display und ° (Grad) Zeichen
    Von cni im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 08.02.2009, 15:42
  2. LCD-Display; 4Bit-Modus immer möglich?
    Von brutzler im Forum AVR Hardwarethemen
    Antworten: 3
    Letzter Beitrag: 29.03.2008, 11:03
  3. Problem 4-zeiliges Display im 4-bit modus!! gelöst!!
    Von zumgwadrad im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 22.11.2006, 16:24
  4. LCD im 8-Bit Modus ansteuern.
    Von michi73 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 18.11.2005, 19:22
  5. LCD - initialisieren im 4-Bit Modus
    Von henne im Forum AVR Hardwarethemen
    Antworten: 2
    Letzter Beitrag: 12.03.2005, 00:26

Berechtigungen

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

LiFePO4 Speicher Test