Forum: Compiler & IDEs Problem bei der Erweiterung einer LCD (HD44780) Library


von __ _. (unrouted)


Angehängte Dateien:

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ß

von Elektrikser (Gast)


Lesenswert?

Schau mal da:
http://www.mikrocontroller.net/forum/read-4-169473.html#new

Stefan Seegel hat auch schon dieses Display angesteuert. Vielleicht
hilft es ja weiter.

Gruß Elektrikser

von __ _. (unrouted)


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)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

> Wäre trotzdem interessant gewesen wie man Ports über eine Variable
> anspricht, ...

Im Prinzip so hier:

http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_port_pass

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
Noch kein Account? Hier anmelden.