www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Assembler: Routine zum Löschen von Bildpunkten beim T6963C ges


Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

ich suche eine Assembler-Routine mit der ich auf dem 240x128Display 
einen belieben Ausschnitt löschen kann. Also x1,y1-x2,y2. Es sollen 
vorhande Bildpunkte einfach gelöscht werden. Wer kann mir dabei helfen 
bzw.
was würde eine solche Routine kosten?
Vielen Dank.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Keiner Interesse?

Autor: Diensthabender Troll (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist es denn soooo kompli(fi)ziert, zwei Schleifen (y,Y) zu verschachteln 
und darin den ClearPixel-Befehl abzusetzen? Oder anhand der Position den 
belegten Speicherbereich (je Pixel-Zeile ein Bereich) zu ermitteln und 
mit Nullen zu füllen?

Autor: Diensthabender Troll (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, es sollte (X,Y) heißen.

Autor: Abdul K. (ehydra) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beim T6963C ist das Ansteuern von Grafikprimitiven eine Qual. Jedenfalls 
wenn der Prozessor schwachbrüstig ist und somit alles zeitlich auffällt.

Ich hatte mal eine Bibliothek geschrieben, die hatte zuerst die 
Pixelkoordinaten einzeln berechnet (z.B. für einen Kreis), dann diese 
gesammelt um auf die Änderungen innerhalb eines bestimmten Bytes zu 
kommen, dann dieses Byte ALLEIN über den T6963C geschleust. Das Ganze 
wurde noch komplizierter, weil bei diesen speziellen Displays der 
Controller auf aktive 6 Bit pro Byte stand und ich es nicht ändern 
durfte. Letztendlich lief es, aber ich hatte die ersten grauen Haare. 
OK, ich hatte auch noch Maskenfunktionen wie XOR und Clipping Region 
eingebaut...

Für was für einen Controller und in welcher Sprache soll der Code sein?


Gruß -
Abdul

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
achso, also Atmega64 wäre der Prozessor..und normales Assembler

@Diensthabender Troll
Ich sehe nirgends Code von dir...behaupten kann jeder, kannst du auch 
beweisen? :-D

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
up

Autor: A. B. (funky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
muss es unbedingt assembler sein??

Autor: Hannes Lux (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich sehe nirgends Code von dir...behaupten kann jeder, kannst du auch
> beweisen? :-D

Ich vermute mal, dass Du Dir durch diesem plumpen Versuch mehr geschadet 
als genützt hast. ;-)

...

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vermuten kann jeder alles, beweisen aber nicht :-D

Ja, es muß leider Assembler sein, da der Code eingebunden werden soll.

50€ werden geboten :-)

Autor: Hannes Lux (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eieieieiei...

50 Taler dafür, dass Jemand die Hausaufgaben macht...

(Vermute ich mal, ich muss es aber nicht beweisen.)

;-)

...

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>50€ werden geboten :-)

Also dafür schreib ich meinen C-Code jetzt nicht in
Assembler um ;)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tom schrieb:
> Vermuten kann jeder alles, beweisen aber nicht :-D
>
> Ja, es muß leider Assembler sein, da der Code eingebunden werden soll.
>
> 50€ werden geboten :-)

Was Tom meint:

Hast du eine clearPixel Funktion?

Wenn ja, dann ist eine einfache ClearBlock Funktion (in C-Pseudocode)
void ClearBlock( uint8_t x, uint8_t y, uint8_t dx, uint8_t dy )
{
  for( uint8_t py = y; py < y + dy; py++ )
    for( uint8_t px = x; px < x + dx; px++ )
      ClearPixel( px, py );
}

Jage es durch einen C Compiler und du hast deinen Assembler Code.
Aber wie gesagt: das kann man auch besser machen, indem nicht jedes 
Pixel einzeln gelöscht wird. Aber es ist mal ein Anfang.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Aber wie gesagt: das kann man auch besser machen, indem nicht jedes
>Pixel einzeln gelöscht wird. Aber es ist mal ein Anfang.

Je nach X-Position kann das schon recht kompliziert werden.
Selbst mit Optimierung. Man nehme eine Position die nicht
an einer Byte Grenze liegt, und nicht an einer Byte Grenze
endet ;)

Autor: Abdul K. (ehydra) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie ich schon schrieb...
Also mußt du es nur noch umsetzen.

Wenn du einiges drauflegst, schreibe ich es dir.


Gruß -
Abdul

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich lege es darauf an :-D

Autor: Hannes Lux (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
> Ja, es muß leider Assembler sein, da der Code eingebunden werden soll.

Tom, Du unterschätzt vermutlich den Aufwand, fremden ASM-Code in ein 
vorhandenes ASM-Programm einzubinden. Jeder Programmierer hat seinen 
eigenen Stil, Fragmente verschiedener Herkunft passen meist nicht 
zusammen. Um die Bruchstücke passend zu machen, muss man ASM schon 
verdammt gut beherrschen, es ist meist leichter, den Code anhand eines 
gegebenen Algorithmus neu zu schreiben und dabei den Stil des 
bestehenden Programms beizubehalten.

> 50€ werden geboten :-)

Dafür bekommst Du dann vermutlich etwas, das zwar richtig ist, das Du 
abrer nicht gebrauchen kannst, weil es nicht zu den Vereinbarungen 
passt.

Ich hänge Dir mal ein paar Low-Level-Routinen für ein GLCD 240x128 Pixel 
(mit geteiltem Adressraum) an. Eine Bildschirm-Lösch-Routine ist zwar 
dabei, aber keine Löschroutine für Bildschirm-Bereiche, denn die hatte 
ich bisher noch nicht gebraucht. Ein Blick ins Datenblatt des T6963C 
wird Dir zeigen, mit welchem Kommando einzelne Pixel gelöscht werden. 
Damit sollte es kein Problem sein, zwei Schleifen für X- und Y-Position 
zu bauen und darin die Pixel-Adresse zu setzen und das 
Clerpixel-Kommando zu senden.

...

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tom schrieb:
> Ja, es muß leider Assembler sein, da der Code eingebunden werden soll.

Genau umgekehrt wird ein Schuh draus, C läßt sich bedeutend besser 
einbinden als Assembler.

Um fremden Assembler einzubinden, mußt Du ihn erstmal bis ins kleinste 
I-Tüpfelchen verstehen.
Und sicher noch nen Haufen Anpassungen vornehmen, an Deine 
Registerverwendung und Deine Parameterübergabe.

C-Funktionen kann man dagegen oftmals als Black-Box betrachten, d.h. man 
muß nur verstehen, was geht rein und was kommt raus.


Peter

Autor: Hannes Lux (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Und damit Dir nicht langweilig wird, gebe ich Dir noch eine Datei, in 
der Routinen zum Setzen und Löschen einzelner Pixel enthalten sind. Mit 
etwas Arbeit und Verständnis wirst Du sie an Deine Bedürfnisse anpassen 
können. Sollte die Anpassung ein Dritter vornehmen und dafür Honorar 
fließen, dann will ich meinen Anteil. Solltest Du es selbst schaffen, 
dann will ich nix.

...

Autor: A. B. (funky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ohjemine...nur mal so als Frage: warum tut man sich das an, sowas in 
Assembler zu schreiben?
Geschwindigkeit ist doch sicherlich kein Grund, oder? Denn 
Geschwindigkeitsmäßig ist doch eh das Display der limitierende Faktor.

Nicht das ich nicht neidisch bin auf Leute die so gut Asm können, aber 
solchen Code zu warten usw. ist doch übelste Sisyphosarbeit

Autor: Abdul K. (ehydra) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Grund ist einfach der, daß der T6963C erstens absolut doof ist, also 
eigentlich nichts kann, und zweitens auch die Grafikdaten durch ein 
Nadelöhr durch müssen.
Mit einem schnellen Prozessor und genug RAM, ist es am besten die Pixel 
lokal im RAM zu bearbeiten und dann den ganzen Block in kompletten Bytes 
über den LCD-Controller in sein lokales RAM zu schubsen.
(Ich hatte damals vor fast 20 Jahren einfach kaum RAM)


Gruß -
Abdul

Autor: Hannes Lux (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ohjemine...nur mal so als Frage: warum tut man sich das an, sowas in
> Assembler zu schreiben?

Weil's schön einfach und eindeutig ist... ;-)

Falls Du mich fragst, die Gründe dafür dürften individuell verschieden 
sein.

Bei mir ist es die Tatsache, dass ich C nicht kann (und mit 6 
Jahrzehnten auf dem Buckel auch nicht mehr lerne) und Bascom zu 
verschwenderisch mit den knappen Reccourcen des AVRs umgeht. Da bleibt 
eigentlich nur ASM, denn das ist die Sprache, die auch der AVR (in Form 
von MC) versteht. Es ist für mich der Weg des geringsten Widerstandes, 
in ASM macht der AVR exakt das, was ich ihm sage, in einer Hochsprache 
wäre das für mich absolutes Rätselraten.

AVRs in C programmieren können zwar Viele, wenn's effizient sein soll, 
dann werden es aber schon bedeutend Weniger, und die Leute beherrschen 
dann auch ASM.

...

Autor: Abdul K. (ehydra) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ASM betrachte ich auch als die reine Lehre. Es hat was von (fast) 
absoluter Kontrolle. Ein Art Religion.

Fängt man allerdings mit Assembler als erste Programmiersprache an, dann 
ist man ein Leben lang versaut. Ich beobachte das immerwieder bei mir 
und anderen.

Es ist genauso, wie wenn man mit dem Einfingersuchsystem auf der 
Schreibmaschine began. Wer Tippse werden, sollte SOFORT mit dem 
Zehnfingersystem anfangen. Sonst wird das nix mehr richtiges. Wobei ich 
schon recht schnell tippe und Entwickler müssen während des Tippens ja 
auch noch weiterdenken...

Ich denke mal, ein Profi kann in ASM den Code durchaus Faktor 2 
gegenüber einem wirklich guten C-Compiler verschnellern. Je nach 
Spezialbefehlen der CPU manchmal sogar erheblich schneller.

Ein wirklich guter C-Compiler ist z.B. der von Keil. Da ist wenn man es 
im generierten Code ansieht, wirklich nicht mehr viel zu machen. Sogar 
die einzelnen Flag-Bits sammelt dieser Compiler in Bytes ein. Nur der 
Preis würg


Gruß -
Abdul

Autor: Hannes Lux (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ein Art Religion.

Naja, eher eine Art Alphabet... Und die Hochsprache enthält dann die 
(vorgefertigten) Textbausteine.

... die leider allzuoft benutzt werden, ohne verstanden zu haben, was 
sie eigentlich aussagen. Siehe Briefe von Ämtern, Behörden und anderen 
Büros. ;-)

...

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
UP

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ey, wer mißbraucht da meinen Namen?

Der Grund ist, daß herrausgefunden werden soll, ob das Display wirklich 
so langsam ist, oder der Code.
Nur wenn ich mir die ganzen Videos bei youtube ansehe, kann es nur der 
Code sein. Jedes 5€ Seriell-USB-Mp3-Display hat astreine Scroll- und 
Grafikoptik

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Der Grund ist, daß herrausgefunden werden soll, ob das Display wirklich
>so langsam ist, oder der Code.

Also mit T6963 240x64 Pixel hab ich schon 100 FPS geschafft.
In C natürlich. Dabei wurde aber nicht jeder Pixel einzeln
gesetzt oder gelöscht. Immer schön byteweise rein mit den
Daten.

Wobei die 100 FPS Quatsch sind. Ab 10 FPS leidet der Kontrast
schon ganz schön.

Fazit: Das Display ist schnell genug.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Der Grund ist, daß herrausgefunden werden soll, ob das Display wirklich
>so langsam ist, oder der Code.

Da reicht ein Blick ins Datenblatt des Displays.

MfG Spess

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.