hallo,
ich arbeite an der Programmierung mein ATmege 32 zur Steuerung ein
Grafik LCD.
Ich verwende Bascom AVR.
Aus technischen Gründen will ich mein Dataport invertieren.
Also anstatt:
LCD_Port0 an DP0
LCD_Port1 an DP1 usw.
will ich:
LCD_Port0 an DP7
LCD_Port1 an DP6 usw.
programmieren.
Mein Befehl lautet:
Config Graphlcd = 128 * 64sed , Dataport = Portb usw....
Wie man hier sieht, diffiniert man das Gesamte Port auf einmal.
Irgendeine Idee??
Grüße
Wimmer
>Irgendeine Idee??
Schließ das Display richtig an und benutze die BASCOM
Libs. Ansonsten mach es zu Fuß. Die Reihenfolge der Bits
so wie du es möchtest zu ändern ist schon ziemlicher
Deppenkram.
holger schrieb:
> Schließ das Display richtig an und benutze die BASCOM> Libs. Ansonsten mach es zu Fuß. Die Reihenfolge der Bits> so wie du es möchtest zu ändern ist schon ziemlicher> Deppenkram.
Moin,
wenn ich das richtig verstehe will der Fragesteller die Bits nicht
invertieren sondern spiegeln?
Ich stand auch schonmal vor dem Problem, es handelte sich um eine
Auftragsarbeit, bei der die gespiegelte Reihenfolge halt vorgegeben war.
In Assembler aber keine grosse Herausforderung, gibt es in Bascom einen
Befehl zum Rotieren eines Registers?
Wenn ja, dann acht mal bitweise nacheinander das Quellregister in eine,
das Zielregister in die andere Richtung rotieren lassen, dann liegt das
Bitmuster gespiegelt vor.
(Die bessere Alternative, wenn moeglich: Schließ das Display richtig an
und benutze die BASCOM Libs.)
hallo,
ich meinte in der tat Port spiegeln.
Die Idee mir C habe ich auch gehabt bzw. mittels Bascom versucht.
Ich habe die Datei m32def.dat mit dem Editor geöffnet und so
manipulliert, dass PortB z.B. so diffiniert, dass DP.0 = 7 ist und nicht
DP.0 = 0, wie es ursprunglich diffeniert ist. Leider hat es nicht
geklappt.
Der hintergründ der ganze Gischichte ist, dass die Beine meines Displays
gespiegelt sind.
Grüße
Wimmer
>Die Idee mir C habe ich auch gehabt bzw. mittels Bascom versucht.>Ich habe die Datei m32def.dat mit dem Editor geöffnet und so>manipulliert, dass PortB z.B. so diffiniert, dass DP.0 = 7 ist und nicht>DP.0 = 0, wie es ursprunglich diffeniert ist. Leider hat es nicht>geklappt.
Natürlich hat das nicht geklappt. Da steht drin, wie die Hardware des
Prozessors in der Realität ist und nicht wie man sie sich wünscht.
Wie man es lösen kann hat Dir Thomas W empfohlen:
>Wenn ja, dann acht mal bitweise nacheinander das Quellregister in eine,>das Zielregister in die andere Richtung rotieren lassen, dann liegt das>Bitmuster gespiegelt vor.
Übrigens kann man in Bascom direkt auf Assembler umschalten und wieder
Zurück. In Assembler geht das Spiegeln des Portwerts blitzschnell.
Gruss allu
A.Drei (allu) schrieb:
> Übrigens kann man in Bascom direkt auf Assembler umschalten und wieder> Zurück. In Assembler geht das Spiegeln des Portwerts blitzschnell.
Oder auch anders, an Bascom angepasst:
Dim Zum_display As Byte ' Übergabe und Rückgabe
Wert steht ungespiegelt in "zum_Display"
$asm
Spiegel:
Loadadr Zum_display , X
ld r18, X
ldi r20, 8
Spiegel_10:
rol r18 'Zeichen wenden
ror r19
dec r20
brne spiegel_10
st X, r19
$end Asm
Wert gespiegelt in "zum_Display" ... und ab damit zum Display
Ok, ok, Du hast gewonnen, geniales Programm.
Selbst meine einfachste Variante braucht zum spiegeln immer noch 16
Zyklen.
Und ist auch noch einen Befehl länger.
Dim Zum_display As Byte ' Übergabe und Rückgabe
$asm
Spiegel:
Loadadr Zum_display , X
ld r18, X
rol r18
ror r19
rol r18
ror r19
rol r18
ror r19
rol r18
ror r19
rol r18
ror r19
rol r18
ror r19
rol r18
ror r19
rol r18
ror r19
st X, r19
$end Asm
Gruß allu