LCD Erstversuch

#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...
#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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren