-         

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

Thema: Serielles LCD schreibt keinen Text !

  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    67
    Beiträge
    1.118
    Blog-Einträge
    1

    Serielles LCD schreibt keinen Text !

    Anzeige

    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 15: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
    67
    Beiträge
    1.118
    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
    67
    Beiträge
    1.118
    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 Roboter Genie
    Registriert seit
    07.03.2011
    Beiträge
    1.397
    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 !

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    67
    Beiträge
    1.118
    Blog-Einträge
    1
    Ja einrücken hin , einrücken her...:
    ich erstelle ein neues Projekt mit dem AVR-Studio..übernehme das dann als Projekt ins PSPad, weil ich da besser mit dem Lesen/Schreiben hinkomme, wegen der schlechten Augen. wenn ich das Projekt im AVR Studio wieder aufrufe ist oftmals die Formatierung hinnüber, wer weiss warum.. ebenso wird im PSPad die Formbearbeitung im AVR Studio anders angezeigt. Ansonsten mache ich mir schon die Mühe übersichtlich zu schreiben.

    Das mit dem Debugger muss ich noch lernen, weissnoch nicht wie das geht.

    Gruss Gerhard
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  8. #8
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von oderlachs Beitrag anzeigen
    übernehme das dann als Projekt ins PSPad, weil ich da besser mit dem Lesen/Schreiben hinkomme, wegen der schlechten Augen.
    ???

    Auch im Studio kannst du natürlich Art und Größe des Fonts beliebig einstellen.
    MfG
    Stefan

  9. #9
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    67
    Beiträge
    1.118
    Blog-Einträge
    1
    Zitat Zitat von sternst Beitrag anzeigen
    ???

    Auch im Studio kannst du natürlich Art und Größe des Fonts beliebig einstellen.
    Das weiss ich, aber ich habe trotzdem Probleme, darum meine "eigene Methode" und ich fahre damit eigentlich ganz gut.
    Aber daran scheitert das ser. LCD proj bestimmt nicht.

    Gerhard
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.03.2011
    Beiträge
    1.397
    Zitat Zitat von oderlachs Beitrag anzeigen
    Ja einrücken hin , einrücken her...:
    .
    .
    Ansonsten mache ich mir schon die Mühe übersichtlich zu schreiben.
    Übersichtlich ist nicht der Punkt:
    Code:
    void puts( char *s )
    {
     while( *s )
          putchar( *s);
          s++;
    }
    Diesen Code in der IDE formatieren lassen:

    Klicke auf die Grafik für eine größere Ansicht

Name:	Selection_007.png
Hits:	7
Größe:	8,6 KB
ID:	25994

    Dann fällt einem auf, daß die IDE anders einrückt, und die fehlenden Klammern könnte man selbst finden.

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

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

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

Berechtigungen

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