LCD Erstversuch

OP #3100877
Lesenswert?
• ▲
▼
Guten Nabend Liebe Gemeinde ich versuch nun in C ein LCD 2x16 
anzusteuern was aber irgendwie nicht hinn haut ...... unter ASM hatte 
das damals Funktioniert nun hab ich fast den selben Code in C 
geschrieben aber das Zeichen T wird nicht auf dem LCD ausgegeben.

LCD ist wie folgt angeschlossen

PORTD 7-0 an DB 7 - 0
PORTB 0 E und 1 an RS
RW auf Masse


1
#include <avr/io.h>
2
#ifndef F_CPU
3
#warning "F_CPU war noch nicht definiert, wird nun mit 3686400 definiert"
4
#define F_CPU 1000000
5
#endif
6
#include <util/delay.h>
7

8
void enns(void) // Einstellungen Senden
9
{
10
  PORTB = 0b00000001;
11
  _delay_us(5);
12
  PORTB = 0b00000000;
13
}
14

15
void ennt(void) // Text Senden
16
{
17
  PORTB = 0b00000011;
18
  _delay_us(5);
19
  PORTB = 0b00000000;
20
}
21

22
int main(void)
23
{
24
    DDRB = 0xff;
25
  DDRD = 0xff;
26
    {
27
         _delay_ms(15);
28
     PORTD = 0b00110000; //1
29
     enns();
30
     PORTD = 0b00000000;
31
     
32
     _delay_ms(5);
33
     PORTD = 0b00110000; //2
34
     enns();
35
     PORTD = 0b00000000;
36
     
37
     _delay_us(120);
38
     PORTD = 0b00110000; //3
39
     enns();
40
     PORTD = 0b00000000;
41
     
42
     _delay_us(120);
43
     PORTD = 0b00110000; //4
44
     enns();
45
     PORTD = 0b00000000;
46
     
47
     _delay_us(120);
48
     PORTD = 0b00111000; //5
49
     enns();
50
     PORTD = 0b00000000;
51
     
52
     _delay_us(120);
53
     PORTD = 0b00001000; //6
54
     enns();
55
     PORTD = 0b00000000;
56
     
57
     _delay_us(120);
58
     PORTD = 0b00000001; //7
59
     enns();
60
     PORTD = 0b00000000;
61
     
62
     _delay_us(120);
63
     PORTD = 0b00000110; //8
64
     enns();
65
     PORTD = 0b00000000;
66
     
67
     _delay_us(120);
68
     PORTD = 0b00001100; //9
69
     enns();
70
     PORTD = 0b00000000;
71
     
72
     _delay_us(120);
73
     PORTD = 'T';
74
     ennt();
75
     PORTD = 0x00;
76
     
77
     
78
  }
79
  
80
  while(1);
81
}
Gast #3100911
Lesenswert?
• ▲
▼
Pierre Gnauck schrieb:
> dachte ich wenn ich mit 1Mhz arbeiten will schreib ich einfach 1000000 ?
Jain. Diese Angabe ist für den Compiler damit die Wartezeiten stimmen. 
Den AVR interessiert das nicht, da zählen die Fuses bzw. der 
angeschlossene Quarz. Und wenn du in der Warnung 3,irgendwas schreibst 
und F_CPU dann aber mit 1MHz definierst ist das irgendwie naja...
OP #3100994
Lesenswert?
• ▲
▼
So sieht nun der Code aus
1
#include <avr/io.h>
2
#ifndef F_CPU
3
#warning "F_CPU war noch nicht definiert, wird nun mit 1000000 definiert"
4
#define F_CPU 1000000UL
5
#endif
6
#include <util/delay.h>
7
#define DatenPort PORTD
8
#define SteuerPort PORTB
9

10
void Setup(void)
11
{
12
  SteuerPort |= (1 << 0);
13
  _delay_us(5);
14
  SteuerPort &= ~(1 << 0);
15
}
16

17
void Text(void)
18
{
19
  SteuerPort |= (1 << 1);
20
  SteuerPort |= (1 << 0);
21
  _delay_us(5);
22
  SteuerPort &= ~((1 << 0) | (1 << 1));
23
}
24

25
int main(void)
26
{
27
    DDRB = 0xff;
28
  DDRD = 0xff;
29
    {
30
         _delay_ms(15);
31
     DatenPort = 0b00110000; //Interface auf 8-Bit setzen
32
     Setup();
33
     DatenPort = 0b00000000;
34
     
35
     _delay_ms(5);
36
     DatenPort = 0b00110000; //Interface auf 8-Bit setzen
37
     Setup();
38
     DatenPort = 0b00000000;
39
     
40
     _delay_us(120);
41
     DatenPort = 0b00110000; //Interface auf 8-Bit setzen
42
     Setup();
43
     DatenPort = 0b00000000;
44
     
45
     _delay_us(120);
46
     DatenPort = 0b00110000; //Interface auf 8-Bit setzen
47
     Setup();
48
     DatenPort = 0b00000000;
49
     
50
     _delay_us(120);
51
     DatenPort = 0b00111000; //2-zeilig, 5x8-Punkt-Matrix 
52
     Setup();
53
     DatenPort = 0b00000000;
54
     
55
     _delay_us(120);
56
     DatenPort = 0b00001000; //Display aus
57
     Setup();
58
     DatenPort = 0b00000000;
59
     
60
     _delay_us(120);
61
     DatenPort = 0b00000001; //Display löschen
62
     Setup();
63
     DatenPort = 0b00000000;
64
     
65
     _delay_us(120);
66
     DatenPort = 0b00000110; //Kursor nach rechts wandernd, kein Display shift 
67
     Setup();
68
     DatenPort = 0b00000000;
69
     
70
     _delay_us(120);
71
     DatenPort = 0b00001100; //Display ein
72
     Setup();
73
     DatenPort = 0b00000000;
74
     
75
     _delay_us(120);
76
     DatenPort = 'T';    // T Senden
77
     Text();
78
     DatenPort = 0x00;
79
     
80
     
81
  }
82
  
83
  while(1);
84
}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.