Forum: Mikrocontroller und Digitale Elektronik Display ansteuern


von Alex X. (behindi)


Angehängte Dateien:

Lesenswert?

Hallo

ich hab ein Display gekauft und würd jetzt gerne dazu die Funktionen zum 
Ansteuern selbst schreiben aber irgent wie bekomm ich kein Lebenszeichen 
vom Display,

Ich hab im Daten Blatt anchgeschauf wie man das Display initialisiert 
und hab dann das auch so gemacht aber der Display zeigt gar nichts an:(.

Ich wollt fragen der PIN 6 (Enable (fallende Flanke)) soll dem Display 
immer zu verstehen geben dass es jetzt den Befehl oder wert anschauen 
soll, er dient sozusagen zur synchronisation, oder?

Danke im foraus für jede Hilfe

mgf

alex

von Phil (Gast)


Lesenswert?

zeig mal deinen Code :)

Enable wird eigentlich immer zuerst auf low gezogen und am Ende wieder 
auf high gezogen.

Welche Programmiersprache verwendest du? Was für einen µC?

Da das Display hd44870 kompatibel ist und ich mal annehme du verwendest 
einen AVR und C:

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung

von Purzel (Gast)


Lesenswert?

Die Zeiten im Datenblatt wurden eingehalten ? Allenfalls muss man das 
Datenblatt des displaycontroller noch herunterladen um die letzten 
Fragen beantworten zu koennen.

von Alex X. (behindi)


Lesenswert?

Danke

Also einen Fehler hab ich Gefunden ich hab das Display in einen Sockel 
reingesteckt und da hat es nicht richtig alle Kontackte berührt,
jetzt hab ichs diereckt reingelötet und wenn ich jetzt nur die 
Betriebsspannung anschließe leuchten alle Pixel (ich hoffe ich habs noch 
nich kaputt gemacht:( )

Ja aber Enable ist auf der fallenden Flanke aktiv steht im Datenblatt,

Ich verwende den PIC18F452 mit dem MPLAP-C18 Compiler


mein Testcode ist:
1
#include <stdio.h>
2
#include <math.h>
3
#include "p18f452.h"
4
#include "delays.h"
5
6
#define RS LATEbits.LATE0
7
#define RW LATEbits.LATE1
8
#define E  LATEbits.LATE2
9
10
int init[4]={48,15,1,6};  // das sind die Beispielinitialisierund im Datash
11
int i;
12
13
void initialisierung();
14
15
void main ()
16
{    
17
  LATD = 0x00;        
18
  TRISD = 0x00;
19
  LATC=0x00;
20
  TRISC=0x00;
21
  LATE=0x00;
22
  TRISE=0x00;
23
E=1;
24
Delay10KTCYx(100);
25
Delay10KTCYx(100);
26
27
initialisierung();
28
29
while(1);
30
31
}    // Ender der main
32
33
void initialisierung()
34
{
35
for(i=0;i<4;i++)
36
{
37
38
LATD=init[i];
39
E=0;          // fallende Flanke
40
Delay10KTCYx(100);
41
E=1;
42
Delay10KTCYx(100);
43
}
44
}

von Purzel (Gast)


Lesenswert?

Wielange ist Delay10KTCYx(100);

von Alex X. (behindi)


Lesenswert?

:D so ca. eine halbe sekunde, ich weiß es ist sehr lange aber ich habs 
so damit ich auch die Zustände mit LED's kontrollieren kann, oich hoffe 
dass durch die langen Delays die funktion des Displays eingeschrenkt 
wird

von Jens (Gast)


Lesenswert?

Hi,

1) schau mal ob alle Leitungen die vom Controller weggehen dort ankommen 
wo du sie erwartest (durchklingeln) auch mal gucken ob Brücken 
entstanden sind beim Löten.

2) die Init Beispielzahlen, wie hast du sie errechnet? Im Datenblatt 
stehen doch sicher Hex Zahlen, vielleicht meintest du 0x48 etc... oder 
hast du sie in eine Dezimalzahl umgerechnet?

Tip: Für Defines ist es immer hilfreich wenn man weiß zu welcher 
Hardware sie gehören -> LCD_E oder LCD_RW wie auch immer :-) oder:

#define LCD_E=1  LCD_E_SET
#define LCD_E=0  LCD_E_RESET

Funktion dann z.B. LCD_init (void).

Tip2: Variablen nicht global machen, nimm i in die initfunktion. 
Alternativ könnte auch das gehen:

for(int i=0;i<4;i++)

Gruß,
JJ

von oog (Gast)


Lesenswert?

alex le. schrieb:
> #define RS LATEbits.LATE0
> #define RW LATEbits.LATE1
> #define E  LATEbits.LATE2

An welchen Stellen setzt Du die Signale RS und RW?

von Alex X. (behindi)


Angehängte Dateien:

Lesenswert?

Die Verbindungen sind alle ok, hab sie alle durchgetestet.

die init Beispiel zahlen hab ich aus dem Datenblatt errechnent(dort 
stehen is Binär und ich hab sie dann in dez umgerechnet)

  bin             dez
0b00110000  ->  48
0b00001111  ->  15
0b00000001  ->  1
ob00000110  ->  6

die sollten stimmen,


ich könnte schon die variable i in der funktion deklarieren aber das 
Problem liegt nich an dem Programm. Es lässt sich kompillieren und auch 
ausführen, ich habs auch mit dem oszi angeschaut und ich glaub ich hab 
jetzt dem Fehler gefunden,

Das Display ist ja auf fallender Flanke Aktiv.
ich hab mir jetzt auf dem Oszi CH1 (Enable) dargestellt und auf CH2 das 
Bit0 auf dem Data Display wo ich die Befehle schicke,

Ein fehler liegt darin dass ich immer bei der fallenden Flanke die 
Zustände auf den Datenleitung ändere, und genau zu diesen Zeitpunkt 
müssen sie ja eindeutig sein,

ich geh mal das Programm korrigieren und dann mal schaun obs dann funzt.

von Alex X. (behindi)


Lesenswert?

:( funzt immer noch nicht:(,

Wenn ich dem Display d
Spannung gebe und alle Pixel leuchten wird er wohl nicht kaputt sein 
??????

von 121212qw (Gast)


Lesenswert?

Hi

>Wenn ich dem Display d
>Spannung gebe und alle Pixel leuchten wird er wohl nicht kaputt sein
>??????

Meist nicht. Hast du schon mal am Kontrast gedreht?

MfG Spess

von Sascha W. (sascha-w)


Lesenswert?

alex le. schrieb:
> :( funzt immer noch nicht:(,
>
> Wenn ich dem Display d
> Spannung gebe und alle Pixel leuchten wird er wohl nicht kaputt sein
> ??????
ich denke nicht, aber die Kontastspannung wird zu hoch sein - eigentlich 
sollten alle Pixel aus sein.

Du hast die Frage nach den Steueranschlüssen RS und RW noch nicht 
beantwortet.
Und das nächste 8-Bit oder 4-Bit Anschluss??

Sascha

von Alex X. (behindi)


Lesenswert?

Danke

Im datenblatt steht bei Kontrastspannung in Klammer "(0V)", desshalb hab 
ich es auf Masse glegt.

RS und RW sind Low steht im Initialisierungsbeispiel, jedoch RS sollte 
eigentlich HIGH sein das es ja Befehle sind und keine Daten, bei Ersten 
mal hab ich auch das Datenblatt hochgeladen da kannst es anschauen.

ich arbeite im 8 bit modus (LATC geht zu D0-D7)(habs richtig 
angeschlossen)

Also zu beginn hab ich das Display versucht zu testen und da hat es kine 
Versorgungsspannung bekommen weil es im Sockel nicht Kontackt gemacht 
hat.
villeicht hab ich es da kaputt gemacht, oder ?:(

mgf

alex



danke für jegliche Ratschläge

von Karl H. (kbuchegg)


Lesenswert?

alex le. schrieb:
> Danke
>
> Im datenblatt steht bei Kontrastspannung in Klammer "(0V)", desshalb hab
> ich es auf Masse glegt.

da steht "Circa 0V"

normal macht man sich da mit einem 10k Poti eine einstellbare Spannung. 
Meistens landet man bei gutem Kontrast tatsächlich nahe bzw. direkt auf 
0V. Aber eben nur meistens.

> RS und RW sind Low steht im Initialisierungsbeispiel, jedoch RS sollte
> eigentlich HIGH sein das es ja Befehle sind und keine Daten,

Low ist aber richtig.
Diesen 2 Seiter würd ich maximal als 'minimalistisches Datenblatt' 
akzeptieren.

> Also zu beginn hab ich das Display versucht zu testen und da hat es kine
> Versorgungsspannung bekommen weil es im Sockel nicht Kontackt gemacht
> hat.
> villeicht hab ich es da kaputt gemacht, oder ?:(

Vergiss das mit dem 'kaputt machen'. So schnell geht das nicht.

Wenn du keine Versorgungsspannung wegen Kontaktproblemen hattest, hast 
du die anderen Leitungen durchgemessen, ob es da auch irgendwo 
Kontaktprobleme gibt?

von Alex X. (behindi)


Angehängte Dateien:

Lesenswert?

Danke

Die Kontrastspannung hab ich nun mit einem 10k Poti eingestell (0V).
und die Verbindungen hab ich alle durchgetestet und sind alle ok.
Ja das ist wirklich ein minimalistisches Datasheet abern es gibt nur 
dieses:(

von Alex X. (behindi)


Lesenswert?

Sorry jetzt hab ich die init noch mal probiert und dann hab ich den 
Kontrast neu eingestellf :),

man konnt e vorhin nur nicht erkennen dass der Kursor blinkt,

Danke jedoch für eure hilfe.

mgf

alex

von Alex X. (behindi)


Angehängte Dateien:

Lesenswert?

Eine Frage

ist das Display kaputt wenn es nur die Hälfte vom 4 und 5 ten Zeichen 
anzeigt?

von Sascha W. (sascha-w)


Lesenswert?

ich würde sagen - JA,
verändert sich was wenn du in dem Bereich vorsichtig auf das Display 
drückst?
Vermutlich ein Problem mit einem der Leitgummis - an die du bei der 
Bauform sicher schlecht rankommen wirst. Am besten umtauschen, wenn 
geht.

Sascha

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.