Forum: Mikrocontroller und Digitale Elektronik Atmega32 LCD Ausgabe


von Boonyboon (Gast)


Angehängte Dateien:

Lesenswert?

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
}

: Verschoben durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.