Hallo zusammen, ich weiß es ist ein leidiges thema...aber auch ich habe
probleme mein lcd zum laufen zu bekommen! habe das tutorial schon
betrachtet! denkmal ich seh den wald vor lauter bäumen einfach nicht!
1 | #include <util/delay.h>
|
2 | #include <avr/io.h>
|
3 | #include "LCD.h"
|
4 |
|
5 | #define LCD_PORT PORTC
|
6 | #define LCD_DDR DDRC
|
7 | #define LCD_RW PD1
|
8 | #define LCD_EN PD2
|
9 | #define LCD_IO1 PD0
|
10 | #define LCD_IO2 PD3
|
11 |
|
12 | #define CLEAR 0x01
|
13 | #define HOME 0x02
|
14 |
|
15 | // PORTC = DB0-7
|
16 | // PORTD0 = I/OC1
|
17 | // PORTD1 = RW
|
18 | // PORTD2 = E
|
19 | // PORTD3 = I/OC2
|
20 |
|
21 | void lcd_init(void)
|
22 | {
|
23 | LCD_DDR = 0xff;
|
24 | DDRD |= (1<<DDD0) | (1<<DDD1) |(1<<DDD2) |(1<<DDD3);
|
25 |
|
26 | _delay_ms(1000); //LCD Zeit für den eigenen Reset geben
|
27 |
|
28 | write_command(0b11111000);//Set funktion mode instruction[SF] 8bit modus, font 5x8 dot, 4lines x 64words
|
29 | write_command(0b01010000);//Set entry mode[SE] curser is incr after writing data
|
30 | lcd_clear();
|
31 | write_command(0b00111000);//Set display mode instruction[SD] all Display on, curser display on
|
32 | }
|
33 |
|
34 | void lcd_enable(void)
|
35 | {
|
36 | PORTD |= (1<<LCD_EN);
|
37 | _delay_us(1); // kurze Pause
|
38 | PORTD &= ~(1<<LCD_EN);
|
39 | }
|
40 | void write_data(unsigned char data)
|
41 | {
|
42 | // Write RAM data[WD]
|
43 |
|
44 | PORTD &= ~(1<<LCD_IO1) & ~(1<<LCD_RW);
|
45 | PORTD |= (1<<LCD_IO2);
|
46 | LCD_PORT = data;
|
47 | lcd_enable();
|
48 | _delay_us(20);
|
49 | }
|
50 |
|
51 | void write_command(unsigned char command)
|
52 | {
|
53 | PORTD &= ~(1<<LCD_IO1) & ~(1<<LCD_IO2) & ~(1<<LCD_RW);
|
54 | LCD_PORT = command;
|
55 | lcd_enable();
|
56 | _delay_us(20);
|
57 | }
|
58 |
|
59 | void lcd_clear(void)
|
60 | {
|
61 | write_command(CLEAR);
|
62 | _delay_ms(2);
|
63 | }
|
64 |
|
65 |
|
66 | void lcd_home(void)
|
67 | {
|
68 | write_command(HOME);
|
69 | _delay_ms(5);
|
70 | }
|
timings sind alle eingehalten, hardware hab auch auch überprüft :(
Benutze einen Atmega32, int.8mhz ! lcd50530 von pollin!
was hab ich falsch gemacht !?