- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 11

Thema: Serielles LCD schreibt keinen Text !

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    73
    Beiträge
    1.175
    Blog-Einträge
    1

    Serielles LCD schreibt keinen Text !

    Hallo !
    Viielleicht ist es ja wieder mein "berühmtes Brett vorm Ko..", aber ich komme mit einem ser. LCD einfach nicht dazu ,dass es Zeichen ausgibt.
    Hier die Angaben des Herstellers der seriellen Ansteuerung:
    Code:
    /* ========================================================================== */
    /*                                                                            */
    /*           Vom Hersteller 'Grove' vorgegebene Kommandovariablen             */
    /*                                                                            */
    /*                                                                            */
    /* ========================================================================== */
    /*                                                                            */
    /*           Initialisations Commands or Responses                             */
    /*                                                                            */
    /*                                                                            */
    /* ========================================================================== */
    
    #define UART_READY              0xA3
    #define SLCD_INIT_ACK            0xA5
    #define SLCD_INIT_DONE          0xAA
    #define SLCD_INVALIDCOMMAND    0x46
    
    /* ========================================================================== */
    /*                                                                            */
    /*            WorkingMode Commands or Responses                               */
    /*                                                                            */
    /*                                                                            */
    /* ========================================================================== */
    //
    #define SLCD_CONTROL_HEADER    0x9F
    #define SLCD_CHAR_HEADER      0xFE
    #define SLCD_CURSOR_HEADER    0xFF
    #define SLCD_CURSOR_ACK          0x5A
    #define SLCD_RETURN_HOME      0x61
    #define SLCD_DISPLAY_OFF      0x63
    #define SLCD_DISPLAY_ON          0x64
    #define SLCD_CLEAR_DISPLAY    0x65
    #define SLCD_CURSOR_OFF          0x66
    #define SLCD_CURSOR_ON          0x67
    #define SLCD_BLINK_OFF          0x68
    #define SLCD_BLINK_ON            0x69
    #define SLCD_SCROLL_LEFT      0x6C
    #define SLCD_SCROLL_RIGHT      0x72
    #define SLCD_NO_AUTO_SCROLL 0x6A
    #define SLCD_AUTO_SCROLL      0x6D
    #define SLCD_LEFT_TO_RIGHT    0x70
    #define SLCD_RIGHT_TO_LEFT    0x71
    
    /* ========================================================================== */
    /*                                                                            */
    /*                 ab Firmware 1.0b und höher benutzbar                       */
    /*                                                                            */
    /*                                                                            */
    /* ========================================================================== */
     
    #define SLCD_BACKLIGHT_ON      0x81
    #define SLCD_BACKLIGHT_OFF    0x80
    #define SLCD_POWER_ON          0x83
    #define SLCD_POWER_OFF        0x82
    
    /* ========================================================================== */
    /*                                                                            */
    /*                                                                            */
    /*                                                                            */
    /*                                                                            */
    /* ========================================================================== */
    Ich habe nun Funktionen geschrieben die damit arbeiten sollten:

    Code:
    /* ========================================================================== */
    /*                                                                            */
    /*                            initialisierung des LCD                         */
    /*                                                                            */
    /* ========================================================================== */
    void lcd_begin(void)
    {
    usart_init();
    wait_lcd(2000);
    putchar(0x9F);    // send CMD-Header
    putchar(0x82);    // send Power OFF
    wait_lcd(1000);  //1000ms
    putchar(0x9F);    // send CMD-Header
    putchar(0x81);    // send Backlight ON
    wait_lcd(1000);
    putchar(0x9F);    // send CMD-Header
    putchar(0xA3);    // send LCD Init
    wait_lcd(2000);
    
    //wait_lcd(500);
    }
    /* ========================================================================== */
    LCD lässt sich ein und ausschalten auch die Beleuchtung, gar kein Thema nun die Schreibfunktion:
    Code:
    /* ========================================================================== */
    /*                                                                            */
    /*                       schreibe Text auf Display                         */
    /*                                                                            */
    /*                                                                            */
    /* ========================================================================== */
    void write_display(char *str)
    {
        putchar(0xFE);    // send Char-Header
        while(*str)
        {
            puts(*str);    // sende Stringzeichen
            str++;
        }
        
    
    }
    //****************************************************************************
    //puts funktion hier:
    //****************************************************************************
    /* ========================================================================== */
    /*                                                                            */
    /*                      Sende String   ohne CR/LF                             */
    /*                                                                            */
    /*                                                                            */
    /* ========================================================================== */
    
    void puts( char *s )
    {
      while( *s )
      putchar( *s);
      s++;
    }
    //******************************************************************************
    putchar hier:
    //******************************************************************************
    /* ========================================================================== */
    /*                                                                            */
    /*                      Sende Char  ohne CR/LF                                */
    /*                                                                            */
    /*                                                                            */
    /* ========================================================================== */
    void putchar( char c )
    {
      while( (UCSRA & 1<<UDRE) == 0 );
      UDR = c;
    }
    
    //******************************************************************************
    Hier das Testprogr ohne Headerdetails
    Code:
    int main (void)
    {
    lcd_begin();
    write_display("Test");
    wait_lcd(2000);
    SerialLCD_noBacklight();
    }
    Ich weiss nicht mehr wie ich dem Teil beibiegen soll endlich Zeichen auszugeben, es ist nicht defekt !! // Mit Arduino-Example getestet = OK!!
    Hat wer bitte eine Idee ???
    Gruss

    Gerhard
    Geändert von oderlachs (12.07.2013 um 14:44 Uhr)
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  2. #2
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Code:
    void write_display(char *str)
    {
        putchar(0xFE);    // send Char-Header
        while(*str)
        {
            puts(*str);    // sende Stringzeichen
            str++;
        }
    
    }
    
    
    void puts( char *s )
    {
      while( *s )
      putchar( *s);
      s++;
    }
    1) puts() enthält wegen einer fehlenden Klammerung eine Endlosschleife.

    2) Wenn puts() einen String ausgeben soll, warum rufst du die Funktion dann in write_display() in einer Schleife mit einzelnen Zeichen auf?


    Und ganz grundsätzlich: Niemals die Warnungen des Compilers ignorieren!
    MfG
    Stefan

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    73
    Beiträge
    1.175
    Blog-Einträge
    1
    Danke !

    zu 1. wüßte ich gern welche Klammer fehlen soll..

    zu 2. solch ein mist ist ein schreibfehler soll natürlich putchar anstatt puts dort heissen.. Danke für den Hinweis !
    Gerhard
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  4. #4
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von oderlachs Beitrag anzeigen
    zu 1. wüßte ich gern welche Klammer fehlen soll..
    Du hast doch im Prinzip den gleichen Code auch in write_display. Vergleiche das doch mal. Außerdem wäre eine vernünftige Einrückung auch dabei hilfreich, das Problem in der Funktion zu erkennen.
    MfG
    Stefan

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    73
    Beiträge
    1.175
    Blog-Einträge
    1
    Hallo schon erkannt die while {}...
    Danke
    Gerhard
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Auch wenn ich mich wiederhole: im Debugger wäre das Problem schnell erkannt worden.

    Ja, einrücken im Code ist sehr hilfreich. Das erledigen aber die meisten IDEs mit einem Mausclick.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

Ähnliche Themen

  1. LCD schreibt keine zeichen sondern wechselt die zeile
    Von erfolgstyp im Forum Assembler-Programmierung
    Antworten: 2
    Letzter Beitrag: 02.09.2009, 23:48
  2. Text-LCD an Mega 32
    Von Nikolaus188 im Forum Elektronik
    Antworten: 4
    Letzter Beitrag: 10.08.2006, 18:21
  3. LCD-Text einlesen
    Von blue shadow im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 7
    Letzter Beitrag: 18.12.2005, 20:35
  4. Serielles LCD mit AVR selberbauen
    Von artools im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 23.10.2005, 21:15
  5. Grundlagen Serielles LCD-Display
    Von LuK-AS im Forum Artikel / Testberichte / Produktvorstellungen /Grundlagen
    Antworten: 0
    Letzter Beitrag: 26.02.2004, 04:41

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad