Forum: Mikrocontroller und Digitale Elektronik [AVR] LCD an veränderten Pins ansteuern


von Patrick L. (crashdemon)


Lesenswert?

Hallo,

ich benutze die LCD-Routine aus dem AVR-GCC Tutorial, da ist der Code 
aber für die Datenpins PD0-PD3 angepasst, jetzt habe ich aber das 
problem das ich auch den USART benötige und somit die PINS PD0 und PD1 
schon belegt sind, also habe ich ich jetzt die Datenpins auf PD4-PD7 
verlegt, was natürlich eine Änderung veränderung im bestehenden Code 
benötigt, jetzt habe ich die zuweisungen nach LCD_PORT &= 0x0F; 
geändert, funktionieren tut es aber nicht, es kommen nur kryptische 
zahlen am LCD an, vllt. kann mir jemand einen Tipp gegeben was ich 
falsch mache.

von Klaus R. (klaus2)


Lesenswert?

Pins vertauscht? Adressierung korrekt? Aufschluss "kann" die 
Zeichentabelle des Datenblattes bieten, da kann man ablesen, was man 
vertauscht hat :)

Reagiert es denn überhaupt sauber auf die Commands, also Steuerbefehle 
wie CURSOR HOME etc???

Klaus.

von Dennis (Gast)


Lesenswert?

> jetzt habe ich die zuweisungen nach LCD_PORT &= 0x0F; geändert

Aha...... schön

Aber mit C allgemein hast du nicht so deine Probleme oder??

von Peter D. (peda)


Lesenswert?

LCD an völlig beliebigen Pins:

http://www.mikrocontroller.net/attachment/30300/lcd_drv.zip


Peter

von Patrick L. (crashdemon)


Lesenswert?

Klaus R. wrote:
> Pins vertauscht? Adressierung korrekt? Aufschluss "kann" die
> Zeichentabelle des Datenblattes bieten, da kann man ablesen, was man
> vertauscht hat :)
>
> Reagiert es denn überhaupt sauber auf die Commands, also Steuerbefehle
> wie CURSOR HOME etc???
>
> Klaus.

Ne, reagiert im mom. nur mit kryptischen Zeichen, als ich die datenpins 
des LCD noch wie im tutorial beschrieben an PD0-PD3 angeschlossen hatte 
funktionierte alles wunderbar, ich denke eher ich hab da einen 
denkfehler bei der anpassung der bestehenden lcd-routine, habe ja bis 
jetzt nur alle zeilen mit :LCD_PORT &= 0xF0 in LCD_PORT &= 0x0F 
umgeändert, weiß nicht ob das reicht.

Pinbelegung ist im moment:

RS PD2
EN PD3
DB4 PD4
DB5 PD5
DB6 PD6
DB7 PD7

von Patrick L. (crashdemon)


Lesenswert?

Peter Dannegger wrote:
> LCD an völlig beliebigen Pins:
>
> http://www.mikrocontroller.net/attachment/30300/lcd_drv.zip
>
>
> Peter

Wollte eigentlich die bestehende Routine verwenden, es muss doch mit 
einer kleinen Änderung möglich sein, die Datenpins anzupassen?

von Klaus R. (klaus2)


Lesenswert?

...weiß nicht ob das reicht.

-> Rate mal...

Du musst erstmal den Port initialisieren, also ob die Pins ein oder 
ausgänge sind, dann ob mit oder ohne pullup und ob, falls ausgang, hi 
oder low.

woher soll der uC wissen, welche daten/commandleitung überhaupt an 
welchen pin angeschlossen ist???

also, tasse tee kochen, hinsetzen und NOCHMAL alles lesen im avr 
tutorial - denn verstanden hast du es scheinbar noch nicht, oder?!

Klaus.

von Patrick L. (crashdemon)


Lesenswert?

Klaus R. wrote:
> ...weiß nicht ob das reicht.
>
> -> Rate mal...
>
> Du musst erstmal den Port initialisieren, also ob die Pins ein oder
> ausgänge sind, dann ob mit oder ohne pullup und ob, falls ausgang, hi
> oder low.
>
> woher soll der uC wissen, welche daten/commandleitung überhaupt an
> welchen pin angeschlossen ist???
>
> also, tasse tee kochen, hinsetzen und NOCHMAL alles lesen im avr
> tutorial - denn verstanden hast du es scheinbar noch nicht, oder?!
>
> Klaus.

Ne so ganz habe ich das noch nicht verstanden, kann mir denn mal jemand 
diese Zeile erläutern:
LCD_DDR = LCD_DDR | 0x0F | (1 << LCD_RS) | (1 << LCD_EN);

1 << LCD_RS und 1 << LCD_EN ist klar, also die Pins PD2 und PD3 als 
Ausgang initialisieren, aber was wird mit dem 0x0F gemacht, ein 
bestimmter bereich ausmaskiert?

von Patrick L. (crashdemon)


Lesenswert?

Habe es jetzt selbst geschafft, den bestehende code so umzuändern das er 
für meine pinbelegung passt, man lernt so warscheinlich viel mehr als 
wenn man einfach die lösung serviert bekommt, das habt ihr euch wohl 
auch gedacht, deshalb ein dank an alle die mir geholfen haben.

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.