Renfer schrieb:
> zu
>
> #define LCD_A_PORT PORTA
> #define LCD_A_DDR DDRA
> #define LCD_RS PA1
> #define LCD_EN PA0
>
> #define LCD_DATA_PORT PORTD
> #define LCD_DATA_DDR DDRD
> #define LCD_DATA_DB PD0
>
> Ist dies gut so?
Ich hätte das jetzt nicht
LCD_A_PORT
genannt.
Denn dieses #define soll ja letzten Endes regeln, an welchem Port die
Control-Leitungen (RS und E) liegen. Das das am A Port ist, ist ein
nettes Detail, sollte sich aber IMHO nicht im Namen des #define
wiederspiegeln. Genauso wie sich ja in LCD_DATA_PORT auch nicht der
konkrete Name des Ports wiederfindet.
Was spricht gegen
1 | #define LCD_CTRL_PORT PORTA
|
2 | #define LCD_CTRL_DDR DDRA
|
denn im Code selber, steht dann ja beispielsweise
1 | LCD_CTRL_PORT |= ( 1 << LCD_RS );
|
da steht also im Code, dass am Port an dem die Control Leitungen hängen,
die RS Leitung auf 1 geschaltet werden soll. Und das ist ok so. Das sich
das alles am Port A abspielt und welches Bit sich hinter RS verbirgt,
das soll und will ich an dieser Stelle im Code ja gar nicht wissen.
Aber grundsätzlich:
Ja, das ist der Anfang der MOdifikation. Jetzt jeißt es den Code
durchgehen und die Ausgabeanweisungen entsprechend modifizieren bzw. in
Daten und Control Anweisungen zu zerteilen.
Denn beispielsweise das hier
1 | void lcd_init( void )
|
2 | {
|
3 | // verwendete Pins auf Ausgang schalten
|
4 | uint8_t pins = (0x0F << LCD_DB) | // 4 Datenleitungen
|
5 | (1<<LCD_RS) | // R/S Leitung
|
6 | (1<<LCD_EN); // Enable Leitung
|
7 | LCD_DDR |= pins;
|
kann ja nicht so bleiben. Die Datenleitungen sind ja nicht mehr am
selben Port wie die Controlleitungen. Also wird es da auch 2 Zuweisungen
an das jeweils richtige DDR Register geben müssen. usw. usw.