Hi ich befasse mich nun seit einigen Wochen mit der
Mikroprozessorprogramierung und bin noch ein echter Newbie. Ich habe um
mich mit LCDs vertaut zu machen Mr. LCDs tutorial durchgemacht und dabei
diesen Code hier entdeckt. Ich habe das Programm daraufhin als Hex. in
ISIS geladen und die Schaltung digital im Simulator nachgebaut. Problem
ist, dass das LCD in ISIS nix ausgibt außer das der Cursor in der ersten
Zeile im ersten Feld vorhanden ist und blinkt, obwohl das Lcd doch eig.
Newbiehack... ausgeben sollte.
Jemand nen Plan was hier schief läuft?
1 | /*
|
2 | * MrLCDs.c
|
3 | *
|
4 | * Created: 01.07.2012 23:09:04
|
5 | * Author: FastSSD
|
6 | */
|
7 |
|
8 |
|
9 | #include <avr/io.h>
|
10 | #include <util/delay.h>
|
11 |
|
12 | #define MrLCDsCrib PORTB
|
13 | #define DataDir_MrLCDsCrib DDRB
|
14 | #define MrLCDsControl PORTD
|
15 | #define DataDir_MrLCDsControl DDRD
|
16 | #define LightSwitch 5
|
17 | #define ReadWrite 7
|
18 | #define BiPolarMood 2
|
19 | void Check_IF_MrLCD_isBusy(void);
|
20 | void Peek_A_Boo(void);
|
21 | void Send_A_Command(unsigned char command);
|
22 | void Send_A_Character(unsigned char character);
|
23 | void Send_A_String(char *StringOfCharacters);
|
24 |
|
25 | int main(void)
|
26 | {
|
27 | DataDir_MrLCDsControl |= 1<<LightSwitch | 1<<ReadWrite | 1<<BiPolarMood;
|
28 | _delay_ms(15);
|
29 |
|
30 | Send_A_Command(0x01); //Clear Screen 0x01 = 00000001
|
31 | _delay_ms(2);
|
32 | Send_A_Command(0x38);
|
33 | _delay_us(50);
|
34 | Send_A_Command(0b00001111);
|
35 | _delay_us(50);
|
36 |
|
37 | Send_A_String("NewbieHack.com");
|
38 |
|
39 | while(1)
|
40 | {
|
41 | }
|
42 | }
|
43 |
|
44 | void Check_IF_MrLCD_isBusy()
|
45 | {
|
46 | DataDir_MrLCDsCrib = 0;
|
47 | MrLCDsControl |= 1<<ReadWrite;
|
48 | MrLCDsControl &= ~1<<BiPolarMood;
|
49 |
|
50 | while (MrLCDsCrib >= 0x80)
|
51 | {
|
52 | Peek_A_Boo();
|
53 | }
|
54 |
|
55 | DataDir_MrLCDsCrib = 0xFF; //0xFF means 0b11111111
|
56 | }
|
57 | void Peek_A_Boo()
|
58 | {
|
59 | MrLCDsControl |= 1<<LightSwitch;
|
60 | asm volatile ("nop");
|
61 | asm volatile ("nop");
|
62 | MrLCDsControl &= ~1<<LightSwitch;
|
63 | }
|
64 |
|
65 | void Send_A_Command(unsigned char command)
|
66 | {
|
67 | Check_IF_MrLCD_isBusy();
|
68 | MrLCDsCrib = command;
|
69 | MrLCDsControl &= ~ ((1<<ReadWrite)|(1<<BiPolarMood));
|
70 | Peek_A_Boo();
|
71 | MrLCDsCrib = 0;
|
72 | }
|
73 |
|
74 | void Send_A_Character(unsigned char character)
|
75 | {
|
76 | Check_IF_MrLCD_isBusy();
|
77 | MrLCDsCrib = character;
|
78 | MrLCDsControl &= ~ (1<<ReadWrite);
|
79 | MrLCDsControl |= 1<<BiPolarMood;
|
80 | Peek_A_Boo();
|
81 | MrLCDsCrib = 0;
|
82 | }
|
83 |
|
84 | void Send_A_String(char *StringOfCharacters)
|
85 | {
|
86 | while(*StringOfCharacters > 0)
|
87 | {
|
88 | Send_A_Character(*StringOfCharacters++);
|
89 | }
|
90 | }
|