Forum: Mikrocontroller und Digitale Elektronik Xmega mit 4x40 LCD


von Johu (Gast)


Angehängte Dateien:

Lesenswert?

Hi Leute,

versuche verzweifelt ein 4x40 Display mit 2 Controllern am Xmega128 zum 
laufen zu bringen.
Das angehängeten Projekt will ich von atmega auf Xmega umschreiben, 
läuft so aber nicht.
Das Problem liegt vermutlich nur am ändern der Port config in der lcd.h 
und lcd.c
Wo gehören PORTD.IN und PORTD.DIR rein?
Kann mir jemand weiterhelfen?

Grüße Johu

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

PORTx.IN entspricht dem alten PINx, PORTx.DIR wäre DDRx. Schreiben geht 
mit PORTx.OUT oder PORTx.OUTSET oder PORTx.OUTCLR. Darüberhinaus kann 
man 4 virtuelle Ports definieren, die direktes Bitschreiben/-Lesen 
unterstützen. En wenig Lektüre der Datenblätter/Manuals zum XMega könnte 
jedoch nicht schaden.

von Sauger (Gast)


Lesenswert?

Moin,

wie Knut schon schrieb, Doku lesen. Wie ist das Display denn elektrisch 
vertütelt sprich 3,3V zu 5V

MfG

von Johu (Gast)


Lesenswert?

Moin moin,

der Unterschied in der Portdefinition beim Xmega hab ich ja soweit,
Das Display ist VCC an 5V, die Datenleitungen über 3,3V vom Xmega.

Mit diversen anderen LCD routinen läuft das Display bereits, ich möchte 
nur speziell den obigen code zum laufen bringen.

Auszug original Portdefinition in der lcd.h

#define PIN(x) (*(&x - 2))  /* address of data direction register of 
port
#define DDR(x) (*(&x - 1))  /* address of input register of port

Habe bisher PIN(x) mit PORTD.IN und DDR(x) mit PORTD.DIR ersetzt,
so läuft das aber leider noch nicht...???

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Johu schrieb:
> Habe bisher PIN(x) mit PORTD.IN und DDR(x) mit PORTD.DIR ersetzt,
> so läuft das aber leider noch nicht...???

Hast Du auch PORTx in PORTx.OUT geändert?

von Johu (Gast)


Lesenswert?

Ja, hab ich gemacht. Sowie natürlich auch die Pins an mein LCD 
angepasst.

#define LCD_PORT         PORTD.OUT        /**< port for the LCD lines 
*/
#define LCD_DATA0_PORT   LCD_PORT     /**< port for 4bit data bit 0 */
#define LCD_DATA1_PORT   LCD_PORT     /**< port for 4bit data bit 1 */
#define LCD_DATA2_PORT   LCD_PORT     /**< port for 4bit data bit 2 */
#define LCD_DATA3_PORT   LCD_PORT     /**< port for 4bit data bit 3 */
#define LCD_DATA0_PIN    PIN0            /**< pin for 4bit data bit 0 
*/
#define LCD_DATA1_PIN    PIN1            /**< pin for 4bit data bit 1 
*/
#define LCD_DATA2_PIN    PIN2            /**< pin for 4bit data bit 2 
*/
#define LCD_DATA3_PIN    PIN3            /**< pin for 4bit data bit 3 
*/
#define LCD_RS_PORT      LCD_PORT     /**< port for RS line         */
#define LCD_RS_PIN       PIN4            /**< pin  for RS line 
*/
#define LCD_RW_PORT      LCD_PORT     /**< port for RW line         */
#define LCD_RW_PIN       PIN6            /**< pin  for RW line 
*/
#define LCD_E_PORT       LCD_PORT     /**< port for Enable line     */
#define LCD_E_PIN        PIN5            /**< pin  for Enable 1     */
#define LCD_E2_PIN       PIN7            /**< pin  for Enable 2     */

Ich suche den Fehler nach wie vor in der lcd.c!
Eventuell arbeiten Funktionen die PIN(x) und DDR(x) verwenden nicht
wenn ich die definition in PORTD.IN und PORTD.DIR geändert habe.
Kann das sein?

Es stehen nur schwarze Balken in der 1. und 3. Zeile, das Display
wird also auch nicht mal intialisiert.

Danke und viele Grüße

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Hast Du einen Logikanalysator oder ein Oszi? Dann könntest Du mal 
gucken, ob überhaupt ´was rauskommt. Wie schnell ist Dein XMega 
getaktet?

von Johu (Gast)


Lesenswert?

Moin,

Hab nen 16MHz Quarz und verschiedene Taktraten getestet, aber keine 
Veränderung.

An ein Oszi kann ich erst wieder ab Montag, im Geschäft. :-)
Hab noch nen anderen code der mit dem 4x40 läuft, d.h. die Hardware 
passt.

Viele Grüße

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Johu schrieb:
> Hab noch nen anderen code der mit dem 4x40 läuft, d.h. die Hardware
> passt.

Dann bleib doch bei dem Code, der geht. Oder vergleiche mal dessen 
Inhalt mit dem, der nicht geht...

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.