Nu het vakantie is vond ik dat ik toch maar een beetje moet gaan hobbyen. Ik heb een 2 x 20 regel LCD aangesloten op een ATMEL M32. Ik krijg em alleen niet goed aan de praat en kan niet vinden waar de fout zit.
Ik programeer in IAR. en het LCD is goed aangeloten. Dus het zit em in de code, maar ik zie niet waar.
(edit) ook wel handig om te weten ik gebruik de 4bit mode.
(edit 2) ik zie trouwens wel dat men LCD wel een clear command krijgt. Maar ik krijg geen tekst.
Ik programeer in IAR. en het LCD is goed aangeloten. Dus het zit em in de code, maar ik zie niet waar.
(edit) ook wel handig om te weten ik gebruik de 4bit mode.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
| // Aanslutingen
// PB7 PB6 PB5 PB4 PB3 PB2 PB1 PB0
// E R/W REG x D7 D6 D5 D4
#define LCD PORTB
void LCDE(void)
{
LCD = LCD | 0x80;
__delay_cycles(50000);
LCD = LCD & ~0x80;
};
void LCDRSON(void)
{
LCD = LCD | 0x20;
__delay_cycles(500);
};
void LCDRSOFF(void)
{
LCD = LCD & ~0x20;
__delay_cycles(500);
};
void LCDRON(void)
{
LCD = LCD | 0x40;
};
void LCDWON(void)
{
LCD = LCD & ~0x40;
};
void LCDWRITE(char b)
{
char a = LCD;
char c;
c = (a & 0xF0) | (b & 0x0F);
LCD = c;
LCDE();
b = __swap_nibbles(b); //Swaps bit 0-3 with bit 4-7
c = (a & 0xF0) | (b & 0x0F);
LCD = c;
LCDE();
};
void LCDLETTER(char b)
{
char a = LCD;
char c;
c = (a & 0xF0) | (b & 0x0F);
LCD = c;
LCDRSON();
LCDE();
LCDRSOFF();
b = __swap_nibbles(b); //Swaps bit 0-3 with bit 4-7
c = (a & 0xF0) | (b & 0x0F);
LCD = c;
LCDRSON();
LCDE();
LCDRSOFF();
};
int LCDINIT(void)
{
// Aanslutingen
// PB7 PB6 PB5 PB4 PB3 PB2 PB1 PB0
// E R/W REG x D7 D6 D5 D4
// 8 4 2 1 8 4 2 1
DDRB = 0xFF;
LCD = 0x00;
LCDWON();
LCD = LCD | 0x03; //8bit
LCDE();
LCD = LCD | 0x03; //8bit
LCDE();
LCD = LCD | 0x03; //8bit
LCDE();
LCD = LCD | 0x02; //4bit
LCDE();
LCDWRITE(0x28);
LCDWRITE(0x08);
LCDWRITE(0x0c);
LCDWRITE(0x01);
LCDWRITE(0x06);
__delay_cycles(30000);
LCDLETTER('A');
LCDLETTER('B');
LCDLETTER('C');
return 0;
}; |
(edit 2) ik zie trouwens wel dat men LCD wel een clear command krijgt. Maar ik krijg geen tekst.
[ Voor 17% gewijzigd door kippy op 12-07-2006 19:16 ]