PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Auf LC-Display wird nichts angezeigt



cesupa
27.02.2008, 19:24
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:


#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:


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:

#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

T.J.
27.02.2008, 21:03
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?

cesupa
28.02.2008, 19:44
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