mikrocontroller.net

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


Autor: __ __ (unrouted)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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ß

Autor: Elektrikser (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: __ __ (unrouted)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.htm...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.