-         

Ergebnis 1 bis 9 von 9

Thema: riesige LCD Probleme

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    14.03.2008
    Ort
    Oldenburg
    Beiträge
    84

    riesige LCD Probleme

    Anzeige

    Hi

    ich bin jetzt seit 2 tagen dabei eins von meinen 2 LCD displays anzusteuern. Nix geschafft

    ich habe (von Pollin):
    LCD-Modul POWERTIP PC1602LRS-FSO-B-Y6
    LCD-Modul HLM8070

    so ich habe es mit einem Atmel Tiny 2313 versucht. Den habe ich nach diesem Tutorial programmiert und angeschlossen (4Bit)
    Mikrokontroller.net
    das gab keine Probleme
    dann habe ich es auf einem Steckbrett alles zusammengebaut und 5V angeschlossen
    Auf dem Display war nichts zu sehen, dann habe ich alles durchgemessen ob an den erforderlichen Stellen Spannungen anliegt, was der Fall war.

    Daraufhin habe ich das andere 2te Display genommen, selber effekt ->nix

    Dann habe ich im Forum gesucht und dann jmd gefunden der meinte man muss die lcdlibary von Peter Fleury nehmen.
    Den Code (4bit) damit neu gemacht (4-Bit Ansteuerung mit Busy(I/O Mode) aus dem RN Wiki), den Tiny geflasht neu zusammengesteckt, 5V drangehauen

    aber nix passiert

    weiter google bemüht und gelesen, dass das lcd display schon was anzeigt wenn man nur Vcc und GND anschliesst
    ist aber bei mir auch nicht der Fall, da ist null/nix (bei beiden)

    ich bin jetzt echt am boden zerstörrt
    hoffe mir kann jemand helfen

    Danke

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    Du musst auch den Kontrast anschließen, mit einem Poti, wenn du daran drehst muss in der ersten Zeile ein schwarzer Balken sichtbar werden.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    14.03.2008
    Ort
    Oldenburg
    Beiträge
    84
    achso, ich dachte immer es kommt ein schwarzes kästchen, wenn der auf GND liegt

    habe es auf jedenfall mit einem 4,7Mohm Poti gemacht
    kann jetzt alle spannungen zwischen 0 und 5 V einstellen
    allerdings hilft das nichts, ich sehe kein Kästchen oder sowas ->nix

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    14.03.2008
    Ort
    Oldenburg
    Beiträge
    84
    habe gerade das zweite getestet (LCD-Modul HLM8070)
    das funktioniert jetzt, ich sehe kästchen

    so werde da jetzt mal meinem tiny anschliessen

    Danke, hast mir sehr geholfen

    werde mich melden, falls es wieder probleme gibt

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    14.03.2008
    Ort
    Oldenburg
    Beiträge
    84
    so, habe meinen Text leider immernoch nicht dargestellt

    so, eine weitere Frage

    LCD-Pin Funktion

    1 GND
    2 VDD +5V
    3 Kontrast
    4 I/OC1
    5 R/W
    6 ex
    7 DB0
    8 DB1
    9 DB2
    10 DB3
    11 DB4
    12 DB5
    13 DB6
    14 DB7
    15 I/OC2

    was macht der 15te LCD Pin? Aus dem Datenblatt habe ich, dass es ein control pin ist, er entscheidet ob auf das display geschrieben oder gelesen wird.

    Aber was braucht der jetzt zum schreiben? eine 1 oder eine 0
    und wieso gibt es I/OC 2 mal (auch pin 4)?

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Hallo,

    Du hast aber beachtet, dass das HLM8070 einen anderen Controller drauf hat, und mit dem gleichen Programm wie für den HD44780 nicht laufen wird ?!

    Bei Pollin kann man sich das DB dazu runterladen, da steht das wichtigste drin. Es ist sogar ein Beipsiel enthalten wie es gemacht wird. Sollte doch für den Anfang reichen.

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    14.03.2008
    Ort
    Oldenburg
    Beiträge
    84
    oh stimmt, habe ich nicht beachtet
    danke für den tipp
    das DB ist zwar gut beschrieben, aber ein richtiges code beispiel kann ich nicht finden

    allerdings arbeite ich gerade mit dem POWERTIP PC1602LRS-FSO-B-Y6
    2 Fragen dazu
    1. geht das überhaupt in 4 bit? kann dazu im DB nichts finden
    2. in der header datei steht

    // Hier die verwendete Taktfrequenz in Hz eintragen, wichtig!

    #define F_CPU 8000000

    // LCD Befehle

    gilt das für meinen tiny2313 auch (ist immer von mega die rede) oder muss ich bei der portierung auf tiny noch was beachten?


    achja mein code, habe den auf port B geändert

    main.cpp
    Code:
    // 
    // Anpassungen im makefile:
    //    ATMega8 => MCU=atmega8 im makefile einstellen
    //    lcd-routines.c in SRC = ... Zeile anhängen
    // 
    #include <avr/io.h>
    #include "lcd-routines.h"
    #include <util/delay.h>
     
    int main(void)
    {
        while(1)
        {
    
        lcd_init();
     
        lcd_data('T');
        lcd_data('e');
        lcd_data('s');
        lcd_data('t');
     
        set_cursor(0,2);
     
        lcd_string("Hello!");
    	_delay_ms(1000);
    	
    	lcd_clear();
        }
     
        return 0;
    }

    lcd-routines.h
    Code:
    // Ansteuerung eines HD44780 kompatiblen LCD im 4-Bit-Interfacemodus
    // http://www.mikrocontroller.net/artic...R-GCC-Tutorial
    //
    void lcd_data(unsigned char temp1);
    void lcd_string(char *data);
    void lcd_command(unsigned char temp1);
    void lcd_enable(void);
    void lcd_init(void);
    void lcd_home(void);
    void lcd_clear(void);
    void set_cursor(uint8_t x, uint8_t y);
     
    // Hier die verwendete Taktfrequenz in Hz eintragen, wichtig!
     
    #define F_CPU 8000000
     
    // LCD Befehle
     
    #define CLEAR_DISPLAY 0x01
    #define CURSOR_HOME   0x02
     
    // Pinbelegung für das LCD, an verwendete Pins anpassen
     
    #define LCD_PORT      PORTB
    #define LCD_DDR       DDRB
    #define LCD_RS        PB4
    #define LCD_EN        PB5
    // DB4 bis DB7 des LCD sind mit PD0 bis PD3 des AVR verbunden

    lcd-routines.cpp
    Code:
    // Ansteuerung eines HD44780 kompatiblen LCD im 4-Bit-Interfacemodus
    // http://www.mikrocontroller.net/artic...R-GCC-Tutorial
    //
    // Die Pinbelegung ist über defines in lcd-routines.h einstellbar
     
    #include <avr/io.h>
    #include "lcd-routines.h"
    #include <util/delay.h>
     
    // sendet ein Datenbyte an das LCD
     
    void lcd_data(unsigned char temp1)
    {
       unsigned char temp2 = temp1;
     
       LCD_PORT |= (1<<LCD_RS);        // RS auf 1 setzen
     
       temp1 = temp1 >> 4;
       temp1 = temp1 & 0x0F;
       LCD_PORT &= 0xF0;
       LCD_PORT |= temp1;               // setzen
       lcd_enable();
     
       temp2 = temp2 & 0x0F;
       LCD_PORT &= 0xF0;
       LCD_PORT |= temp2;               // setzen
       lcd_enable();
       
       _delay_us(42);
    }
     
    // sendet einen Befehl an das LCD
     
    void lcd_command(unsigned char temp1)
    {
       unsigned char temp2 = temp1;
     
       LCD_PORT &= ~(1<<LCD_RS);        // RS auf 0 setzen
     
       temp1 = temp1 >> 4;              // oberes Nibble holen
       temp1 = temp1 & 0x0F;            // maskieren
       LCD_PORT &= 0xF0;
       LCD_PORT |= temp1;               // setzen
       lcd_enable();
     
       temp2 = temp2 & 0x0F;            // unteres Nibble holen und maskieren
       LCD_PORT &= 0xF0;
       LCD_PORT |= temp2;               // setzen
       lcd_enable();
       
       _delay_us(42);
    }
     
    // erzeugt den Enable-Puls
    void lcd_enable(void)
    {
       // Bei Problemen ggf. Pause gemäß Datenblatt des LCD Controllers einfügen
       // http://www.mikrocontroller.net/topic/81974#685882
       LCD_PORT |= (1<<LCD_EN);
        _delay_us(1);                   // kurze Pause
       // Bei Problemen ggf. Pause gemäß Datenblatt des LCD Controllers verlängern
       // http://www.mikrocontroller.net/topic/80900
       LCD_PORT &= ~(1<<LCD_EN);
    }
     
    // Initialisierung: 
    // Muss ganz am Anfang des Programms aufgerufen werden.
     
    void lcd_init(void)
    {
       LCD_DDR = LCD_DDR | 0x0F | (1<<LCD_RS) | (1<<LCD_EN);   // Port auf Ausgang schalten
     
       // muss 3mal hintereinander gesendet werden zur Initialisierung
     
       _delay_ms(15);
       LCD_PORT &= 0xF0;
       LCD_PORT |= 0x03;            
       LCD_PORT &= ~(1<<LCD_RS);      // RS auf 0
       lcd_enable();
     
       _delay_ms(5);
       lcd_enable();
     
       _delay_ms(1);
       lcd_enable();
       _delay_ms(1);
     
       // 4 Bit Modus aktivieren 
       LCD_PORT &= 0xF0;
       LCD_PORT |= 0x02;
       lcd_enable();
       _delay_ms(1);
     
       // 4Bit / 2 Zeilen / 5x7
       lcd_command(0x28);
        
       // Display ein / Cursor aus / kein Blinken
       lcd_command(0x0C); 
     
       // inkrement / kein Scrollen
       lcd_command(0x06);
     
       lcd_clear();
    }
     
    // Sendet den Befehl zur Löschung des Displays
     
    void lcd_clear(void)
    {
       lcd_command(CLEAR_DISPLAY);
       _delay_ms(5);
    }
     
    // Sendet den Befehl: Cursor Home
     
    void lcd_home(void)
    {
       lcd_command(CURSOR_HOME);
       _delay_ms(5);
    }
     
    // setzt den Cursor in Zeile y (1..4) Spalte x (0..15)
     
    void set_cursor(uint8_t x, uint8_t y)
    {
      uint8_t tmp;
     
      switch (y) {
        case 1: tmp=0x80+0x00+x; break;    // 1. Zeile
        case 2: tmp=0x80+0x40+x; break;    // 2. Zeile
        case 3: tmp=0x80+0x10+x; break;    // 3. Zeile
        case 4: tmp=0x80+0x50+x; break;    // 4. Zeile
      }
      lcd_command(tmp);
    }
     
    // Schreibt einen String auf das LCD
     
    void lcd_string(char *data)
    {
        while(*data) {
            lcd_data(*data);
            data++;
        }
    }
    Danke an alle die mir helfen
    versaut einem die ganze laune, wenn sowas nicht funktioniert

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Wegen dem Codebeispiel hab ich mich verguckt, den hab ich woanders her, irgendwo von hier:
    http://www.mikrocontroller.net/topic/9903

    Tiny und Mega sind Softwaremässig kompatibel, solange genug Ports da sind, sollte es auch auf dem Tiny laufen.

    Das Powertip soll einen HD44780 haben, und der kann 4Bit, beim HLM steht auch was von 4 Bit dabei, musst nur ins DB gucken wie man den aktiviert.

    Du verwendest als Dateiendung .cpp, willst du nun in C++ proggen oder nicht ? Ansonsten nimm lieber die .c, dann kommts zu keiner Verwirrung.

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    14.03.2008
    Ort
    Oldenburg
    Beiträge
    84
    sry .c war gemeint
    schreibe nur sonst immer cpp, daher der fehler

    leider bekomme ich es nicht hin
    kann mal jemand über den code schauen? glaube da liegt der fehler

    habe gelesen, wenn ich nur in der ersten reihe schwarze balken habe (habe ich) ist die initialisierung nicht richtig

Berechtigungen

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