Rudi D. schrieb:
> schreiben möchte, so habe ich schon von peda den Rat gehört, die
> #defines für das pinning des LCD's am µC in der main.c unterzubringen.
> Enable und RS ist klar.
main.c ist aber die falsche Stelle. Wie soll denn der Code in lcd.c dann
das Pinning mitkriegen?
> Wenn nun aber das Halbbyte einmal Px0...3 und ein anderes Mal, je nach
> Printlayout, Px4...7 verwendet werden soll, so komme ich, als Anfänger,
> auf keine Lösung wie ich das machen soll,
In dem Fall geht es noch. Denn im Prinzip hast du dann deine 4
Datenleitungen immer noch nebeneinander in gleicher Reihenfolge an einem
Port liegen.
D.h. die 'Position deiner 4 Datenleitungen' ist einfach nur um einen
(konstanten) Offset verschoben. Das ist auch in C kein Problem, Die
Datenleitungen werden dann ausgegeben durch
1 | DATA_PORT &= ~( 0x0F << DATA_OFFSET ); // bewusste Pins auf 0
|
2 | DATA_PORT |= ( Daten & 0x0F ) << DATA_OFFSET; // je nach Bedarf wieder 1 einsetzen
|
Unangenehm wird es dann, wenn auch diese Annahme nicht mehr greift und
die 4 Datenleitungen wild verteilt an einem oder mehreren Ports liegen.
> ohne eine umfangreiche
> ifdef......endif in einer lcd_my.h oder lcd-my.c unterzubringen.
>
> Geht so was in C eleganter?
Kommt immer drauf an, wie universell das ganze sein muss. Wer
hardwaremässig in die Situation rutscht, dass er die 4 Datenleitungen
nicht beisammen lassen kann/will, muss dieses "Vergehen" mit Mehraufwand
im Code bezahlen. Die Frage ist, ob man diesen Mehraufwand nur für den
Fall der Fälle immer in Kauf nimmt oder ob man sagt: Lass den Scheiss
und sieh zu, dass du die Datenleitungen hardwaremässig beisammen lässt.
> ohne eine umfangreiche ifdef......endif in einer lcd_my.h oder
> lcd-my.c unterzubringen.
Na ja. So umfangreich ist es dann auch wieder nicht. Man muss sich halt
unter Umständen erst mal ein paar Makros und/oder Funktionen oder einen
sontigen Mechanismus zurechtlegen, damit die Schreiberei nicht ausartet.
Es ist nicht ungewöhnlich, dass man in C sein eigener "Werkzeugmacher"
ist, so dass man erst mal ein wenig Aufwand investiert um dafür dann an
anderen Stellen den (Tipp-)Aufwand massiv zu drücken.