4-Bit LCD-Ansteuerung splitten

Gast #4183024
Lesenswert?

Hallo zusammen,

ich betreibe erfolgreich ein LCD "DISPLAYTECH 162" an verschiedenen 
Controllern im 4-Bit-Mode.

Die verwendeten Steuer- und Datenleitungen waren immer

RS = pin 2
EN = pin 3
D4 = pin 4
D5 = pin 5
D6 = pin 6
D7 = pin 7

Es war also einfach durch "geschickte Positionierung" der Datenleitungen
vom LCD mit einem Port vom Controller die Daten zu senden.
Siehe Code-Ausschnitt.

Jetzt habe ich ein Projekt wo ich die Pins 4, 5, 6, und 7 eines Ports 
nicht zur Verfügung habe. Ich muss also andere, nicht "zusammenhängende" 
Pins eines Ports nehmen (z.B. die Pins 1, 2, 12, 13)

Wie kann ich nun die Daten so an die Pins "verteilen" das alles klappt?
Ich finde keine Lösung.

Ps. Ich schreibe in C, kenne aber von BASCOM die Möglichkeit
mit Config LCD die Pinnummern frei zu vergeben.
Kennt jemand den C-Code dazu?

Ich hoffe ihr versteht mein Problem ;-)

Vielen Dank für eure Tipps!
M.S.
Angehängte Dateien:
#4183043
Lesenswert?

Martin Schulz schrieb:
> Wie kann ich nun die Daten so an die Pins "verteilen" das alles klappt?
Ich würde mit eine Funktion lcdSendNibble machen und diese dann 
verwenden um die Daten zu senden:
1
void lcdSendNibble(uint8_t nibble, uint8_t register_select) 
2
{
3
  RS_PIN = !!register_select;
4
  D7_PIN = !!(nibble & 1 << 3);
5
  D6_PIN = !!(nibble & 1 << 2);
6
  D5_PIN = !!(nibble & 1 << 1);
7
  D4_PIN = !!(nibble & 1 << 0);
8
  EN_HIGH();
9
  wait_us(2);
10
  EN_LOW;
11
}
P.S:
Du kannst den Code auch per Copy'n'Paste einfügen

>> Forum: Projekte & Code
>> Hier könnt ihr eure Projekte, Schaltungen oder Codeschnipsel
>> vorstellen und diskutieren. Bitte hier keine Fragen posten!
#4183048
Lesenswert?

Du kannst jedes Bit händisch maskieren:
1
lcd_writechar ( uint8_t c )
2
{
3
  Deine 4 Portpins "low" setzen
4
  // oberes Nibble
5
  if ( c & 0x10 ) PortPin1 "high";
6
  if ( c & 0x20 ) PortPin2 "high";
7
  if ( c & 0x40 ) PortPin3 "high";
8
  if ( c & 0x80 ) PortPin4 "high";
9
 
10
  Enable wackeln();
11

12
  // unteres Nibble
13
  Deine 4 Portpins "low" setzen
14
  if ( c & 0x01 ) PortPin1 "high";
15
  if ( c & 0x02 ) PortPin2 "high";
16
  if ( c & 0x04 ) PortPin3 "high";
17
  if ( c & 0x08 ) PortPin4 "high";
18

19
  Enable wackeln();
20
}

Ist natürlich Pseudocode
Gast #4183060
Lesenswert?

Max H. schrieb:
> P.S:
> Du kannst den Code auch per Copy'n'Paste einfügen

Jup, danke.

Max H. schrieb:
>>> Forum: Projekte & Code
>>> Hier könnt ihr eure Projekte, Schaltungen oder Codeschnipsel
>>> vorstellen und diskutieren. Bitte hier keine Fragen posten!

Sorry..

Ingo L. schrieb:
> Du kannst jedes Bit händisch maskieren:

Das sieht ganz gut aus.. Ich teste das mal. Mist das ich auf solche
Lösungen nicht selber komme :-(

Danke euch beiden!

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