-         

Ergebnis 1 bis 3 von 3

Thema: Auf LC-Display wird nichts angezeigt

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    01.07.2005
    Beiträge
    64

    Auf LC-Display wird nichts angezeigt

    Anzeige

    Hallo,

    ich versuche grad mit Hilfe des Tutorials von mikrocontroller.net ein LCD anzusprechen, leider funktioniert das nicht so sehr. Als LCD benutze ich das LCD-Modul POWERTIP PC1602LRS-FSO-B-Y6 von Pollin. Wenn ich 5V anlege sehe ich auch auf der oberen Zeile kleine dunkle Kästchen, aber wenn ich jetzt versuche mit einem Atmega8 einen Text anzuzeigen, dann passiert einfach nichts:

    main.c:

    Code:
    #include <avr/io.h>
    #include "../LCD01.h"
    
    int main()
    {
    
    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;
    }
    Klasse:
    Code:
    void lcd_data(unsigned char tmp);
    void lcd_string(char* str);
    void lcd_command(unsigned char tmp);
    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);
    
    #define CLR 0x01
    #define CURSOR_HOME 0x02
    
    #define LCD_P PORTD
    #define LCD_DDR DDRD
    #define LCD_RS PD4
    #define LCD_EN PD5



    Klassenfunktionen:
    Code:
    #include <avr/io.h>
    #include "LCD01.h"
    #include <util/delay.h>
    
    void lcd_data(unsigned char tmp)
    {
    	unsigned char tmp2=tmp;
    
    	LCD_P|=(1<<LCD_RS);
    	
    	tmp=tmp>>4;
    	tmp=tmp & 0x0F;
    
    	LCD_P&=0xF0;
    	LCD_P|=tmp;
    	lcd_enable();
    
    	tmp2=tmp2 & 0x0F;
    	LCD_P&=0xF0;
    	LCD_P|=tmp2;
    	lcd_enable();
    
    	_delay_us(42);
    
    }
    
    void lcd_command(unsigned char tmp)
    {
    	unsigned char tmp2=tmp;
    
    	LCD_P&=~(1<<LCD_RS);
    	
    	tmp=tmp>>4;
    	tmp=tmp & 0x0F;
    
    	LCD_P&=0xF0;
    	LCD_P|=tmp;
    	lcd_enable();
    
    	tmp2=tmp2 & 0x0F;
    	LCD_P&=0xF0;
    	LCD_P|=tmp2;
    	lcd_enable();
    
    	_delay_us(42);
    
    }
    
    void lcd_enable(void)
    {
    	LCD_P|=(1<<LCD_EN);
    	_delay_us(1);
    	LCD_P&=~(1<<LCD_EN);
    }
    
    void lcd_init(void)
    {
    	LCD_DDR=LCD_DDR | 0x0F | (1<<LCD_RS) | (1<<LCD_EN);
    
    	_delay_ms(15);
    	LCD_P&=0xF0;
    	LCD_P|=0x03;
    	LCD_P&=~(1<<LCD_RS);
    	lcd_enable();
    
    	_delay_ms(5);
    	lcd_enable();
    
    	_delay_ms(1);
    	lcd_enable();
    	_delay_ms(1);
    
    	LCD_P&=0xF0;
    	LCD_P|=0x02;
    	lcd_enable();
    	_delay_ms(1);
    
    	lcd_command(0x28);
    	lcd_command(0x0C);
    	lcd_command(0x06);
    
    	lcd_clear();
    
    }
    
    void lcd_clear(void)
    {
    	lcd_command(CLR);
    	_delay_ms(5);
    }
    
    void lcd_home(void)
    {
    	lcd_command(CURSOR_HOME);
    	_delay_ms(5);
    }
    
    void set_cursor(uint8_t x, uint8_t y)
    {
      uint8_t tmp=0;
     
      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);
    }
    
    void lcd_string(char* str)
    {
    	while(*str)
    	{
    		lcd_data(*str);
    		str++;
    	}
    }
    Den Code hab ich größtenteils 1 zu 1 übernommen. Vielleicht steckt da ja schon ein Fehler drin, den ich nicht sehe. Ansonsten muss ich nochmal die Elektronik testen, apropo: Was ist eigentlich los, wenn ich beim Pollin-Board den Strom anschalte und aufeinmal der Pieper losgeht und beide LEDs aufleuchten???

    Gruß
    cesupa

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.03.2006
    Ort
    WOB
    Beiträge
    630
    Also wenn das Display Strom bekommt, zeigt es in der 1. Zeile schwarze Balken, soweit korrekt. Meistens ist eine schlechte Verbindung der Datenleitungen der Fehler. RS, R/W und Enable sind korrekt angeschlossen?
    Gruß Thomas \/

    Alles über AVR, PIC und CAN
    blog.cc-robotics.de

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    01.07.2005
    Beiträge
    64
    Hi,

    also es waren tatsächlich die Anschlüsse. Ich hab mich in der Bedienungsanleitung des Pollin-Boards in der Spalte geirrt^^
    Vielen Dank für den Tip

    Gruß
    cesupa

Berechtigungen

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