Forum: Mikrocontroller und Digitale Elektronik LCD 44780 init


von Hannes (Gast)


Lesenswert?

Hi Leute,

Ich weiß das Thema kahm schon x mal. Aber ich hab schon die diversesten 
Themen durchsucht und finde trotzdem keinen Fehler.

Versuche gerade folgendes Display zu benutzen. Aber ich hab trotzdem nur 
schwarze Balken.

http://neuhold-elektronik.at/datenblatt/N4105.jpg

Bis jetzt rufe ich nur lcd init auf.

Erkennt ihr einen Fehler.

Auschließen kann ich, dass der Controller nicht läuft. Und Pin mäßig 
passt auch alles

Hier mein Code:
1
#include  "pic.h"
2
#include  "lcd.h"
3
#include  "delay.h"
4
5
#define  LCD_RS RA4
6
#define  LCD_RW RA3
7
#define LCD_EN RA2
8
9
#define LCD_DATA  PORTC
10
11
#define  LCD_STROBE()  ((LCD_EN = 1),(LCD_EN=0))
12
13
/* write a byte to the LCD in 4 bit mode */
14
15
void
16
lcd_write(unsigned char c)
17
{
18
  DelayMs(300);
19
  LCD_DATA = ( ( c >> 4 ) & 0x0F );
20
  LCD_STROBE();
21
  DelayMs(300);
22
  LCD_DATA = ( c & 0x0F );
23
  LCD_STROBE();
24
}
25
26
/*
27
 *   Clear and home the LCD
28
 */
29
30
void
31
lcd_clear(void)
32
{
33
  LCD_RS = 0;
34
  lcd_write(0x1);
35
  DelayMs(2);
36
}
37
38
/* write a string of chars to the LCD */
39
40
void
41
lcd_puts(const char * s)
42
{
43
  LCD_RS = 1;  // write characters
44
  while(*s)
45
    lcd_write(*s++);
46
}
47
48
/* write one character to the LCD */
49
50
void
51
lcd_putch(char c)
52
{
53
  LCD_RS = 1;  // write characters
54
  lcd_write( c );
55
}
56
57
58
/*
59
 * Go to the specified position
60
 */
61
62
void
63
lcd_goto(unsigned char pos)
64
{
65
  LCD_RS = 0;
66
  lcd_write(0x80+pos);
67
}
68
  
69
/* initialise the LCD - put into 4 bit mode */
70
void
71
lcd_init()
72
{
73
  char init_value;
74
75
  ADCON1 = 0x06;  // Disable analog pins on PORTA
76
77
  init_value = 0x3;
78
  TRISA=0;
79
  TRISC=0;
80
  LCD_RS = 0;
81
  LCD_EN = 0;
82
  LCD_RW = 0;
83
  
84
  DelayMs(50);  // wait 15mSec after power applied,
85
  LCD_DATA   = init_value;
86
  LCD_STROBE();
87
  DelayMs(10);
88
  LCD_STROBE();
89
  DelayMs(10);
90
  LCD_STROBE();
91
  DelayMs(10);
92
  LCD_DATA = 2;  // Four bit mode
93
  LCD_STROBE();
94
95
  lcd_write(0x28); // Set interface length
96
  lcd_write(0xF); // Display On, Cursor On, Cursor Blink
97
  lcd_clear();  // Clear screen
98
  lcd_write(0x6); // Set entry Mode
99
}

von Stefan (Gast)


Lesenswert?

Was für ein µC ?

von holger (Gast)


Lesenswert?

>Was für ein µC ?

Steht doch hier;)

#include  "pic.h"

>Ich weiß das Thema kahm schon x mal. Aber ich hab schon die diversesten
>Themen durchsucht und finde trotzdem keinen Fehler.

Dann such halt nach Fehlern die hier noch nicht
gefunden wurden.

von Micha H. (mlh) Benutzerseite


Lesenswert?

Hannes schrieb:
> Auschließen kann ich, dass der Controller nicht läuft.

Das glaube ich nicht. Wie hast Du das überprüft?

von Hannes (Gast)


Lesenswert?

Habs schon.

Enable Leitung war gebrochen.

Jetzt habe ich allerdings das Problem, das nur die Steuerbefehle gehen.

Habs mit dem Oszi überprüft. Händisch kann ich RS auf 1 Setzen aber 
sobald ich Puts oder Putc verwenden will, wird RA4 auf 0 gezogen und 
natürlich macht das Display irgendwas.

Grüße

von Micha H. (mlh) Benutzerseite


Lesenswert?

Du betreibst hier ein lustiges Ratespiel, darauf hab ich aber keine 
Lust.

Dein Programm kann jedenfalls nicht funktionieren, schau Dir das nochmal 
genau an.

von Stefan (Gast)


Lesenswert?

Und welcher Pic ?
Zum Glück sind die ja alle gleich.

von Hannes (Gast)


Lesenswert?

Pic ist der 16f690

Kein Quarz, verwende den internen Oszillator.

Das ist nur das lcd.c

Mein Main sieht so aus:
1
#include "pic.h"
2
#include "lcd.h"
3
#include "delay.h"
4
5
__CONFIG(INTIO & WDTDIS & PWRTEN & MCLRDIS & UNPROTECT & UNPROTECT & BORDIS & IESODIS & FCMDIS); 
6
7
#define FOSC 8000000L
8
9
void main(void)
10
{
11
  DelayMs(500);
12
  lcd_init();
13
  DelayMs(300);
14
  lcd_goto(0x40);
15
  DelayMs(500);
16
  lcd_puts("12345678");
17
  for(;;);
18
}

Sonnst noch Fragen?

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.