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.
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!
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
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!
Wenn du dir eine Funktion lcdSendNibble schreibst, und diese konsequent, auch bei der Initialisierung, in deinem Code verwenden, dann brauchst du, sollten sich die Pins mal ändern nicht den gesamten Code anpassen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.