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ß
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
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)
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.