Problem bei der Erweiterung einer LCD (HD44780) Library

OP #363377
Lesenswert?
• ▲
▼
Hallo,

ich habe ein Problem mit der erweiterung einer LCD library.
Die LCD lib von Peter Fleury enthält diverse Routinen für HD44780U
basierende LCDs, allerdings habe ich hier ein 4 Zeiliges Display Wintek
von pollin.de), welches intern 2 Controller (je 2 Zeilen) hat.
Die Auswahl des Controllers erfolgt dabei über 2 Enable Eingänge,
während die anderen Anschlüse für beide Controller gleich sind.

Die einzelnen Port und Pin Zuordnungen sind einer Header Datei lcd.h
definiert.
Beispiel:

#define LCD_RS_PORT      LCD_PORT     /**< port for RS line         */
#define LCD_RS_PIN       4            /**< pin  for RS line         */
#define LCD_RW_PORT      LCD_PORT     /**< port for RW line         */
#define LCD_RW_PIN       5            /**< pin  for RW line         */
#define LCD_E_PORT       LCD_PORT     /**< port for Enable line     */
#define LCD_E_PIN        6            /**< pin  for Enable line     */

Meine Idee wäre es, bei einem 2-Controller-Display während dem
Programmablauf jeweils vor einem Schreib oder Lesezugriff die Zuordnung
von LCD_E_PORT und LCD_E_PIN zu ändern um nicht alle restlichen Routinen
umschreiben zu müssen.

Ich habe folgende Änderungen gemach:

Änderungen in lcd.h:

.....
eingefügt:
#define LCD_4LINE_2CONTROLLER 1  /**< Use 0 for Displays with one
Controller, 1 for 2 Controllers */

....
// Settings only for displays with one controller
#if !LCD_4LINE_2CONTROLLER
#define LCD_E_PORT       LCD_PORT   /**< port for Enable line     */
#define LCD_E_PIN        6          /**< pin  for Enable line     */
#else //Settings for 2 controller
#define LCD_E0_PORT       LCD_PORT  /**< port for Enable line 0    */
#define LCD_E0_PIN        6         /**< pin  for Enable line 0    */
#define LCD_E1_PORT       PORTB     /**< port for Enable line 1    */
#define LCD_E1_PIN        0         /**< pin  for Enable line 1    */
#endif
....

#if LCD_4LINE_2CONTROLLER
/**
 @brief    Change the display controller (E-Pin)
 @param
 @return  none
*/
extern void lcd_changecontrol(uint8_t controller);
#endif

######################################################################## 
######################
Änderungen in lcd.c:

....

#if LCD_4LINE_2CONTROLLER
uint8_t LCD_E_PORT, LCD_E_PIN;
#endif

....

/*********************************************************************** 
**
Changes the Display-Controller (=Change of E-Pin)
Input:    controller 0 or 1
Returns:  none
************************************************************************ 
*/
#if LCD_4LINE_2CONTROLLER
void lcd_changecontrol(uint8_t controller)
{
  if (controller)
  {
    LCD_E_PORT = LCD_E1_PORT;
    LCD_E_PIN  = LCD_E1_PIN;
  }
  else
  {
    LCD_E_PORT = LCD_E0_PORT;
    LCD_E_PIN  = LCD_E0_PIN;
  }
}
#endif


######################################################################## 
######################


Im main müsste dann nur noch zum Umschalten der Displaycontroller die
zusätzliche Funktion verwendet werden

...
lcd_changecontrol(1);
lcd_init(LCD_DISP_ON_CURSOR_BLINK);
...


Leider funktioniert das nur theoretisch...
Ich denke es liegt an den Zuweisung

LCD_E_PORT = LCD_Ex_PORT;

Die Zuweisung der Pin-Nummer funktioniert im Debugger ohne Probleme
(ist ja auch nur ein Int-Wert).
Aber welchen Datentyp muss ich LCD_E_PORT verpassen? Und wie macht man
dann eine Zuweisung des Portnamens während dem Programmablauf??

Gruß
Angehängte Dateien:
OP #363379
Lesenswert?
• ▲
▼
Hallo,

danke für den link!

Mittlerweile habe ich es aber auch geschafft die LCD Library von Peter
Fleury zu erweitern um damit auch Displays mit 2 HD44... ansteuern zu
können.
Leider nicht ganz so wie ichs anfangs wollte.

Wäre trotzdem interessant gewesen wie man Ports über eine Variable
anspricht, bzw. der Variable den Portnamen zuweisen kann...

PS: Warum ist mein Nick in der Threadliste nicht sichtbar und warum
steht er im Beitrag in Klammern? (Eingeloggt war ich jedenfalls immer)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.