Atmega32 LCD Ausgabe

Gast #2738293
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
}
Angehängte Dateien:

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.