-         

Ergebnis 1 bis 8 von 8

Thema: LCD Display zeigt nur Japanische Zeichen

  1. #1
    Erfahrener Benutzer Begeisterter Techniker Avatar von µautonom
    Registriert seit
    04.04.2007
    Ort
    Paderborn
    Beiträge
    222

    LCD Display zeigt nur Japanische Zeichen

    Anzeige

    Hallo, ich werd wahnsinning... versuche schon seit paar Tagen mein Display zum laufen zu bringen.

    Ich verwende einen ATmega16 interner Takt=1Mhz und dieses Display -> Reichelt : Artikel-Nr.: LCD 082 DIP

    Das ganze wird 4-Bit angesteuert

    Beim ersten Mal hat er mir nur japanische Zeichen angezeigt, da hatte ich PORTB benutzt ,R/W war nicht auf Masse gelegt und D0-D3 hatte ich offen gelassen (also nicht mit Masse verbunden)

    Ach und da hatte ich das nach dem Beispiel aus dem Wiki nach Peter Fluery programmiert , statt Hello World hat er mir eben diese japanischen Zeichen angezeigt , siehe Vid -> http://www.youtube.com/watch?v=W7P7eR_lpX0.

    EDIT//: Hatt enoch was vergessen zu erwähnne, udn zwar sieht man im Video wie sich die Zeichen ändert das kommt daher das ich das Beispiel Prog aus dem Wiki etwas geändert hatte, hab da ne kleine Schleife eingebaut in der nach jedem Zähldurchgang ein Zeichen ausgegeben wird, was eh nicht geklappt hat , kam nur Müll raus, wie in dem Video zu sehen.

    Danach hab ich alles umgelötet. Statt PortB mal den PORTA benutzt.
    D4-D7 an PORTA PA0-PA3, sowie RS=PA4 und E=PA5 , R/W und D0-D3 hab ich diesmal auf Masse gelegt.
    Hab auch nicht die Dateien von Peter Fluery benutzt, bin nach dem GCC_Tutorial (LCD) auf Mikroconroller.net vorgegangen. In der lcd-routines.h hab ich nur die Port definition geändert sowie die Portpins . Hello World wird gar nicht angeziegt bzw. ich sehe 0 auf dem Display....

    Hab dann nochmal die Anschlussbelegung swoie die gelöteten Pins überprüft, stimmt alles.

    Ich weiß es ist schwer mir so zu helfen, aber vielleicht hat jemand eine Idee oder weiß was ich falsch mache.

    Mfg

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.11.2007
    Beiträge
    100
    ich würde wild drauflosraten: pinbelegung falsch? 1-7 stimmte scheinbar - aber 8-14 evtl. in gegenläufiger reihenfolge? schau noch mal genau im datenblatt ob das nicht evtl. andersrum gehört..

    http://www.reichelt.de/?;ACTION=7;LA...82%2523EAS.pdf

  3. #3
    Erfahrener Benutzer Begeisterter Techniker Avatar von µautonom
    Registriert seit
    04.04.2007
    Ort
    Paderborn
    Beiträge
    222
    Hi, hm auf einmal gehts hab nur den R/W Pin mal auf einen Portpin gelegt und nochmals das Programm von Fluery getestet und es klappt....

    Es klappt aber nicht mit dem Code aus dme mikrocontroller.net Tutorial.

    Code:
    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      PORTA
    #define LCD_DDR       DDRA
    #define LCD_RS        PA4
    #define LCD_EN        PA5
    Hab nur was in der lcd-routines.h geändert alles andere hab ich so übernommen wie im Tut.

    Code:
    #include <avr/io.h>
    #include "lcd-routines.h"
    #include "lcd-routines.c"
     
    int main(void)
    {
        lcd_init();
     
        lcd_data('T');
        lcd_data('e');
        lcd_data('s');
        lcd_data('t');
     
        set_cursor(0,2);
     
        lcd_string("Hello World!");
     
    
        while(1)
        {
        }
     
        return 0;
    }
    Da zeigt er mir nix an, am LCD liegt es ja nicht habs ja mir der FLuery Code getestet muss am Code liegen.

    Kann das sein das, wiel ich jetzt ja R/W am Portpin hab, noch abfragen muss wenn ich was auf dem Display schreibe? Habs ja jetzt nicht auf Masse wie im Tut steht.

    Mfg

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    Die Lib von Fleury funktioniert ohne R/W oder R/W auf GND nicht. Wenn du auf R/W verzichten willst musst du anstelle der Busy-Abfrage ein delay einbauen.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  5. #5
    Erfahrener Benutzer Begeisterter Techniker Avatar von µautonom
    Registriert seit
    04.04.2007
    Ort
    Paderborn
    Beiträge
    222
    Hi Hubert siehe Edit.
    habs ja für den Fluery Code auf den PORTA PA6 gelegt.

    Da ging ja alles wunderbar.

    Jetz tmit dem neuen Code aus mikrocontroller.net siehe Code oben, klappts nicht wahrscheinlich liegts daran das ich R/W nicht auf Masse hab oder?
    Es sind ja delays in der lcd.c eingebaut sowie wie im Tutorial.

    EDIT:// Im Microcontroller.net cod emusste man das mit dem Busy Flag doch anpassen, habs nochmal auf Masse gelegt udn der Code ging.

    Nun klappt alles

    Aber trotzdem ein dankeschön

    Mfg

  6. #6
    Erfahrener Benutzer Begeisterter Techniker Avatar von µautonom
    Registriert seit
    04.04.2007
    Ort
    Paderborn
    Beiträge
    222
    Ein paar Fragen hab ich doch noch. Was genau wird in deisem Code gemacht, also der teil nachdem RS gesetzt wird?

    Code:
    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);
    }
    Mfg

  7. #7
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    Ich kenne den Codeteil nicht genau, aber es dürfte das Nibble-schieben sein. Also die 4 höherwertigen Bit zuerst und dann die 4 niederwertigen zum LCD.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  8. #8
    Erfahrener Benutzer Begeisterter Techniker Avatar von µautonom
    Registriert seit
    04.04.2007
    Ort
    Paderborn
    Beiträge
    222
    Hi Hubert, du hast Recht. Danke

    Code:
    temp1 = temp1 >> 4;
    was für ein Wert hat den temp1 ? in dem Befehl wird ja der Wert in temp1 um 4 stellen nach Rechts verschoben und dann wieder temp1 übergeben.

    Was soll das bringen? Versteh ich irgendwie nicht.

    Mfg

Berechtigungen

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