Forum: Mikrocontroller und Digitale Elektronik RE bit beim KS0073


von KS0073 RE-Bit (Gast)


Lesenswert?

Hallo!

kann mir jemanden vielleicht erklären wie man beim KS0073 Controller den 
RE  Bit verstehen muss? Ich kann das Display initialisieren, 
addressieren und mit Text versehen oder nicht.
Ich schicke alle Commands folgendermassen rein:
RS, RW und RE sind 3 pins vom uC.
1
void write_cmd(unsigned char c)
2
{
3
DATA = c;         
4
RS = 0; 
5
RW = 0;            
6
DelayPORXLCD();
7
RE = 1;                     // Clock the command in
8
DelayPORXLCD();
9
RE = 0;
10
DelayPORXLCD();
11
12
return;
13
}


dann kommt:
write_cmd(0b000011101); //je nach dem was ich will

So kenne ich es von dem HD controller:
Der RE-Bit ist der Bit der zum Reinschieben der Befehle benutzt wird.

Jetzt: Im Datenblatt ist eine "Instructions Set" Tabelle wo die 
beliebiege Einstellungen beschrieben werden. Was dort RE=1 oder RE=0 
bedeutet ist mir rätselhaft. Ich dachte am Anfgan das hätte was mit dem 
Flankenwechsel beim Clocken zu tun... es passiert aber nichts wenn ich 
meine Befehle mit aufsteigender Flanke zum display reinschiebe.

Vielen Dank im Voraus,

Juan

von Juan (wieder ich) (Gast)


Lesenswert?

ergänzung:

Ich kann dann die Hälfte der Einstellungen nicht machen, weil ich nix 
mit den RE = 1 - Befehle anfangen kann.

Das ist mein Hauptproblem.

:)

danke,

Juan

von Johannes M. (johnny-m)


Lesenswert?

Ich verstehe jetzt nicht ganz, was da unklar ist, aber das Enable (das 
hier offensichtlich RE heißt, bei HD44780 heißt es einfach E) wird 
gesetzt, wenn die Daten an den Eingängen anliegen und muss dann für eine 
kurze Zeit (minimale Enable-Pulsbreite) auf High bleiben und wird dann 
wieder zurückgesetzt.

von Juan (wieder ich) (Gast)


Lesenswert?

RE = Enable beim KS0073.

Die Daten/Befehle die am Port DATA liegen, werden erst beim 
Flankenwechsel vom 0 auf 1 in den Controller geschoben. Oder verstehe 
ich das falsch?

Daher weiss ich nicht was die Info ENABLE = 0 oder ENABLE = 1 im 
Instruction Set bedeutet.

gruß,

J

von Johannes M. (johnny-m)


Lesenswert?

Juan (wieder ich) wrote:
> RE = Enable beim KS0073.
>
> Die Daten/Befehle die am Port DATA liegen, werden erst beim
> Flankenwechsel vom 0 auf 1 in den Controller geschoben. Oder verstehe
> ich das falsch?
Das verstehst Du im Prinzip richtig. Die Daten müssen aber schon am Port 
anliegen, wenn RE auf High geht. Und RE muss für eine gewisse Zeit High 
bleiben.

von holger (Gast)


Lesenswert?

RE ist kein Pin am Display, sondern ein Bit das man
mit dem Function Set Befehl setzen oder löschen kann.

von spess53 (Gast)


Lesenswert?

Hi

Ich glaube du bringst da etwas durcheinander. Es gibt das Pin E (nicht 
RE)
und es gibt das Bit RE (Extended function registers enable bit).

E hat die gleiche Funktion, wie bei anderen Text-LCDs. RE ermöglicht den 
Zugriff auf den erweiterten Registersatz.

MfG Spess

von Juan (wieder ich) (Gast)


Lesenswert?

Hallo Johannes,

Das heisst,

wenn ich meine Funktion so schreibe:
1
void write_cmd_re1(unsigned char c)
2
{
3
DATA = c;         
4
RS = 0; 
5
RW = 0;            
6
DelayPORXLCD();
7
RE = 0;                     // Clock the command in
8
DelayPORXLCD();
9
RE = 1;
10
DelayPORXLCD();
11
12
13
return;
14
}

sollte es funktionieren?

Da liegt mein Befehl schon am Port bevor ich von 0 auf 1 mit RE gehe. 
(Natürlich mit den entsprechenden Delays für die Zeiteinhaltung)

gruß,

von Juan (wieder ich) (Gast)


Lesenswert?

AAAACCCHHHSOO...

Das kann natürlich ganz richtig sein!

Vielen dank Speess!

von Johannes M. (johnny-m)


Lesenswert?

holger wrote:
> RE ist kein Pin am Display, sondern ein Bit das man
> mit dem Function Set Befehl setzen oder löschen kann.
Das sehe ich jetzt auch... Hab grad mal das Datenblatt durchgeblättert.

von Juan (wieder ich) (Gast)


Lesenswert?

Jetzt:

wie spreche ich mein RE bit an? Irgendwo muss es definiert werden.
Wenn es kein PIN am Display oder uC ist, dann was ist es? (RW und RS 
sind auch pins am uC)

gruß,

Juan

von Juan (wieder ich) (Gast)


Lesenswert?

Das ist was Holger geschrieben hatte...
ich habs überlesen!

Danke Holger!

Juan

von Matthias (Gast)


Angehängte Dateien:

Lesenswert?

RE Bit ist ein Bit der "Function Set". Dein Bsp. kann so nicht 
funktionieren, um aber dabei zu bleiben musst Du bei DATA = c; bereits 
das RE-Bit in die c-Variable integriert haben. (vor der Ausgabe!)

Durch das RE-Bit werden mehr Funktionen, die der KS0073 hat, erst 
möglich.

Anlage Datenblatt, das solltest Du erst mal lesen...

von Juan (wieder ich) (Gast)


Lesenswert?

Matthias,

Das Datenblatt habe ich gelesen. Ich glaube, RE mit einem Pin des 
Displays zu verwechseln ist nicht schwer wenn der direkt neben den 
anderen 2 wichtige pins des displays steht. RE und E für enable können 
auch verwechselt werden. Daher mein thread.

"Datenblatt, das solltest Du erst mal lesen..." hättest du dir sparen 
können.


Jetzt an den Rest:

vielen Dank,

wie kann ich jetzt meine Wörter Blinken lassen.

ich habe mein RE bit im Function Set enablet, dann mit RE = 1 habe ich 
im function set  BE = 1 gesetzt. Die Data die danach zum display schicke 
blinkt aber nicht.

Geht das so?

gruß.

Juan

von Matthias (Gast)


Lesenswert?

Bsp. für DIP204 (4x20Zeichen)
1
// ***********************************************************************
2
// Blinkposition auf dem LCD-Displays setzen / Blinken ein/ausschalten
3
// Übergabe: lcd_x : Spalte (0...SPALTEN_MAX-1)
4
//           lcd_y : Zeile  (0...ZEILEN_MAX-1)
5
//           lcd_blink :   0 - Blinken/Cursor aus
6
//                         1 - Blinken an
7
//                         2 - Cursor  an
8
// ***********************************************************************
9
void blink_lcd(uchar lcd_x, uchar lcd_y, uchar lcd_blink) {
10
uchar lcd_offset;
11
  if (lcd_x > (SPALTEN_MAX - 1)) lcd_x = 0;
12
  if (lcd_y > (ZEILEN_MAX  - 1)) lcd_y = 0;
13
  switch (lcd_y) {
14
    case 0:  lcd_offset = 0x80; break;   // Zeile 1
15
    case 1:  lcd_offset = 0xA0; break;   // Zeile 2 
16
    case 2:  lcd_offset = 0xC0; break;   // Zeile 3
17
    case 3:  lcd_offset = 0xE0; break;   // Zeile 4 
18
    default: lcd_offset = 0x80;          // Zeile>4
19
  };
20
  write_lcd(lcd_x +l cd_offset,1);       // Blinkposition setzen
21
  if (lcd_blink == 1) write_lcd(0x0D,1); // Blinken ein
22
  if (lcd_blink == 2) write_lcd(0x0E,1); // Cursor ein
23
}

von spess53 (Gast)


Lesenswert?

Hi

@ Matthias: Es geht um TEXT Blinken, nicht um CURSOR Blinken

>Ich glaube, RE mit einem Pin des Displays zu verwechseln ist nicht schwer >wenn 
der direkt neben den...

Doch, wenn man weiß, das RW von Read/Write und RS von Register Select 
kommt und die Funktion kennt.

>ich habe mein RE bit im Function Set enablet, dann mit RE = 1 habe ich
>im function set  BE = 1 gesetzt.

???????. Kann es sein, das du etwas chaotisch veranlagt bist?

MfG Spess

von Juan (wieder ich) (Gast)


Lesenswert?

Ne... ich bin eigentlich ganz ordentlich.
Bin ein bisschen im stress nur...

Ich mache den text über eine clear-and-write Schleife mit einfachen 
Delays blinken. Ich weiss man kann einzelne ASCII Chars entweder 
blinkend oder fest darstellen... ich weiss aber nicht ob das mit ganzen 
Strings, über einen einfachen Displaybefehl geht.

gruß,

Juan

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.