Forum: Mikrocontroller und Digitale Elektronik LCD-Routine aus dem AVR-Tutorial anpassen


von Robin T. (rotoe) Benutzerseite


Lesenswert?

Hallo Leute,

Ich versuche mich gerade vom bequemen BASCOM zum Assembler zu bewegen. 
Jetzt habe ich versucht ein LCD anzusteuern allerdings ist die 
Pinbelegung anders als im Beispiel. Ich habe alles geändert was ich 
dachte dass es das sein könnte aber kein Erfolg. Ich habe mal die Datei 
angehängt. Darin ist alles orginal aus dem Tutorial bis auf der 
Kommentar ganz oben und die .equ Anweisungen die ich bereits auf meine 
Belegung umgeschrieben habe. Aber ich finde nicht heraus wo ich von 
PORTD.0 - PORTD.3 nach PORTD.3 - PORTD.6 umstellen kann.


Danke für jedgliche Hilfe.

von Robin T. (rotoe) Benutzerseite


Angehängte Dateien:

Lesenswert?

Anhang vergessen

von Otto (Gast)


Lesenswert?

Hallo Robin,

das kann aber nicht Dein ganzes Programm sein.....

Gruss Otto

von Robin T. (rotoe) Benutzerseite


Lesenswert?

Nein das ist nur die Routine zum initialisieren des LCD's das Programm 
selbst ist wesentlich kürzer und es sollte auch funktionieren. Nur das 
Anpassen auf meine Pinbelegung ist nicht so einfach (für mich).

von Falk B. (falk)


Lesenswert?

@ Robin Tönniges (rotoe)

>Anpassen auf meine Pinbelegung ist nicht so einfach (für mich).

So einfach ist das nicht. Die Daten sollte man auf 0..3 lassen, nur E 
und RS sind frei auf 4..7 verteilbar. Sonst wird die Änderung zu gross. 
Wenn du eine vollkommen freie Pinzuordnung machen willst, nimm den 
vielzitierten Code von Peter Fleury.

MFG
Falk

von Robin T. (rotoe) Benutzerseite


Lesenswert?

Falk Brunner wrote:
> Wenn du eine vollkommen freie Pinzuordnung machen willst, nimm den
> vielzitierten Code von Peter Fleury.

Ok dann mach ich das, weil ich nämlich ein eigenes Testboard entwickelt 
habe und da kann ich die Pinbelegung nicht mehr ändern.

von Robin T. (rotoe) Benutzerseite


Lesenswert?

Hab gerade gesehen dass dieses Beispiel von Peter Fleury in C 
geschrieben ist. Nützt mir also leider nicht viel.

von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

@ Robin Tönniges (rotoe)

>Hab gerade gesehen dass dieses Beispiel von Peter Fleury in C
>geschrieben ist. Nützt mir also leider nicht viel.

Dann musst du wohl in den sauren Apfel beissen und die Grundfunktionen 
init, data und command überarbeiten. Im Prizip müssen "nur" ein paar 
Shifts eingebaut werden. im Original liegen die Daten auf PD0..3, du 
willst sie auf PD3..6 haben. Also müssen drei lsl rein, an die richtige 
Stelle.

Siehe Anhang, sollte klappen.

MfG
Falk

von Robin T. (rotoe) Benutzerseite


Lesenswert?

Klappt leider nicht :(

Ich hatte es schonmal so ähnlich versucht aber nicht mit einem Befehl 
sonder am Anfang habe ich 3 Nullen weggenommen und am Ende wieder 
angehängt. Aber Da scheinen noch mehr Befehle zu sein die man ändern 
muss wo das aber leider nicht so einfach zu sein scheint.

von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

UUps, kleiner Fehler. Jetzt aber.

MfG
Falk

von Robin T. (rotoe) Benutzerseite


Lesenswert?

JUHU! Es funktioniert.

Vielen Dank.


Jetzt analysiere ich mal was du da nu gemacht hast :)

von Karl H. (kbuchegg)


Lesenswert?

Robin Tönniges wrote:

> PORTD.0 - PORTD.3 nach PORTD.3 - PORTD.6 umstellen kann.

Wer macht den sowas?
Ein Datennibble legt man nicht so saublöd in einen Port hinein.
Das bedeutet immer unnötige und blödsinne Shift Operationen.

> Ok dann mach ich das, weil ich nämlich ein eigenes Testboard entwickelt
> habe und da kann ich die Pinbelegung nicht mehr ändern.

Das solltest du dir noch mal gründlich überlegen.

von Robin T. (rotoe) Benutzerseite


Lesenswert?

Layout kann ich ändern aber es ist schon geätzt, bestückt und 
funktionsbereit :)

von Falk B. (falk)


Lesenswert?

@ Karl heinz Buchegger (kbuchegg) (Moderator)

>Ein Datennibble legt man nicht so saublöd in einen Port hinein.
>Das bedeutet immer unnötige und blödsinne Shift Operationen.

Sei froh dass er das Datennibble nicht wild zerplückt auf mehrere Ports 
verteilt hat ;-)

MfG
Falk

von Karl H. (kbuchegg)


Lesenswert?

Falk Brunner wrote:
> @ Karl heinz Buchegger (kbuchegg) (Moderator)
>
>>Ein Datennibble legt man nicht so saublöd in einen Port hinein.
>>Das bedeutet immer unnötige und blödsinne Shift Operationen.
>
> Sei froh dass er das Datennibble nicht wild zerplückt auf mehrere Ports
> verteilt hat ;-)

Auch wieder wahr.

von Karl H. (kbuchegg)


Lesenswert?

Robin Tönniges wrote:
> Layout kann ich ändern aber es ist schon geätzt, bestückt und
> funktionsbereit :)

Beim nächsten mal auf solche Dinge achten.

von Robin T. (rotoe) Benutzerseite


Lesenswert?

Ok mache ich.

von Werner B. (Gast)


Lesenswert?

Dafür ist Software auch da. Damit kann man mit "weichen" Mitteln "harte" 
Fehler umgehen. Ist nicht das erste Mal dass jemand im Programm Fehler 
im Layout/in der Hardware ausbügeln muss. Und sicher nicht das letzte 
mal :'o

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Robin Tönniges wrote:
> Hallo Leute,
>
> Ich versuche mich gerade vom bequemen BASCOM zum Assembler zu bewegen.

Bewege Dich lieber zu C...

Michael

von Robin T. (rotoe) Benutzerseite


Lesenswert?

Aber ich habe gelesen und gehört dass das Verständniss eines µC bei 
Assembler viel deutlicher rüberkommt als bei irgendeiner anderen 
Programmiersprache weil
Assembler DIE µC Programmiersprache ist.

Korrigier mich wenn ich falsch liege.

von Karl H. (kbuchegg)


Lesenswert?

Robin Tönniges wrote:
> Aber ich habe gelesen und gehört dass das Verständniss eines µC bei
> Assembler viel deutlicher rüberkommt als bei irgendeiner anderen
> Programmiersprache weil
> Assembler DIE µC Programmiersprache ist.
>

Da ist schon was dran.
Auf der anderen Seite musst du in C die Hardware genauso gut
durchschauen wie du es in Assembler müsstest (zumindest mit dem gcc).

Ich schreib zwar ab und an am Assembler Tutorial, aber Hand aufs
Herz: Meine realen Projekte mach ich in C.
Das liegt daran, dass es mir normalerweise nicht auf den letzten
Taktzyklus ankommt, dafür befreit mich aber der Compiler von
Routineaufgaben eines Assembler-Programmierers. Ich schreib halt
lieber
    i = j * 348
als mich darum zu kümmern, in welchem Register jetzt das j schon
wieder rumlungert, wie ich die Multiplikation ausführen muss und
dass ich die Register r0 und r1 für die Hardwaremultiplikation
frei räumen muss.

Hannes Lux (auch ein langjähriger Forumsteilnehmer) sieht die
Sache wieder anders: Der hat lieber Assmembler.

Letztendlich sehe ich das so: Welche Art man bevorzugt, ist
Geschmackssache (auch BASCOM hat durchaus sein Vorzüge), solange
man sie beherrscht. OK, der BASCOM Baukasten ist nicht unbedingt
geeignet, die Funktion der Hardware zu verstehen, allerdings kann
man auch in BASCOM direkt an die Hardware ran.

von Robin T. (rotoe) Benutzerseite


Lesenswert?

Hört sich sehr überzeigend an. Ich kann C++ ich weiß nur nicht ob sich 
das als Vor- oder Nachteil heraustellen könnte.^^

von robert maucher (Gast)


Angehängte Dateien:

Lesenswert?

hallo

ich benutze das myavr board2 mit lcd add on

auf dem das lcd auf partd 4-7 liegt, enable auf 2 und rs auf 3

ich hab die routine soweit geändert das ich meine zeichen ausgeben kann
ich wollte jetzt halt noch wissen was machen mir diese zeilen eigentlich
1
lcd_data:
2
3
           ...           
4
5
           in    temp3, LCD_PORT
6
           andi  temp3, 0x05             ; im original 0x80
7
           or    temp1, temp3
8
           out   LCD_PORT, temp1         ; ausgeben
9
           
10
           ...
11
12
           ret

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.