Forum: Mikrocontroller und Digitale Elektronik Änderung gLCD Ausgabe obwohl keine Änderung im Programm


von Michael D. (etzen_michi)


Angehängte Dateien:

Lesenswert?

Hallo ...

Nach X Versuchen den Grund heraus zu finden wende ich mich nun an euch 
.... Ich weiß einfach nichtmehr weiter.

Ich schreibe gerade an einem Programm zum Ausgeben einer im Speicher 
befindlichen Grafik mit der möglichkeit die Position unabhängig von der 
Grafik in Pixel X/Y an zu geben.

Das Programm lief bisher soweit ohne Probleme.

Nun bin ich dabei nachdem ich die 8Pages ausgewählt habe die Geladenen 
Daten so zu verändern das man die Position in pixel und nicht in Pages 
angeben kann.

Dies geht zeitweise nicht:
Im Hauptprogramm (KS0108.asm) definiere ich die Temp2, welche die Y 
Position angeben soll.

Der Page wechsel funktioniert ohne Probleme, nur das Bewegen innerhalb 
der Page macht massive Probleme:

Schreibe ich eine 7 rein habe ich einen Vollen 8Bit balken in der Page.
Schreibe ich eine 8 rein bin ich ganz normal in der zweiten Page
Schreibe ich eine 6 rein habe ich ganz normal 2Bit in der Page
Schreibe ich eine 7 rein habe ich ein 10111010 Muster in der Page ...

Bei welcher Ziffer der Fehler auftritt ist immer anders.
Beim Verifizieren der Daten gibt es nie Fehler (auch wenn ich es 
nachträglich mache).


KS0108.asm ist mein Programm zu testen
KS0108_2.asm ist meine eigene AnsteuerRoutine
Grafik out.asm ist die Datei mit den Routinen an denen ich Arbeite

Beim Befehl LCCD_Page sowie SetYAdr sind die ersten zwei Bit die 
ChipSelect.
Beim SetYAdr wird die X Adresse gesetzt

Denke das sind die wichtigsten infos. Fall weitere Infos benötigt werden 
bitte bescheid sagen ...

von holger (Gast)


Lesenswert?

Mach mal ein Bild vom Display.
Das hilft mehr als tausend Worte;)

von Michael D. (etzen_michi)


Angehängte Dateien:

Lesenswert?

Weiß zwar nicht wie das hilft aber hier sind mal ein Paar Bilder.

(Der eine Balken wandert da die Daten noch an beide Chips gesendet 
werden)

Positionsfolge: 4; 8; 7; 6; 7.

Das mit dem einen Punkt ist genau richtig, da ich bisher nochnicht auf 
zweite Page umschalte ..

Das letzte kann eig. garnicht kommen, da ich direkt vor der Ausgabe 
massig NULLEN einschiebe -.-

von holger (Gast)


Lesenswert?

>Weiß zwar nicht wie das hilft aber hier sind mal ein Paar Bilder.

Was wolltest du eigentlich anzeigen?

von Michael D. (etzen_michi)


Lesenswert?

Später sollen Bilder/Grafiken angezeit werden.

Daher das ich noch am Schreiben um immer Testen bin sollte er die im 
Hauptprogramm unter .Grafik gespeicherten Daten anzeigen (0xFF da ersten 
zwei Byte die Auflösung sind und ich testweise bisher nur mit dem ersten 
Byte zum Schreiben arbeite)

Angezeigte Länge des Balken sollte der Rest von 8 - Temp2 sein.
Sobald Temp2 = 8 sollte er 8-(temp2-8) sein u.s.w.

von Blödmann (Gast)


Lesenswert?

@ Michael

Das Problem ist sicher schwierig und bedeutend für Dich. Aber bedenke 
auch bitte, das wir nicht in Dein Projekt hineingewachsen sind. Wir 
kenne Deine Begriffe nicht und nicht Deine gedanklichen "Abkürzungen" im 
Sinne von Satz- oder Wort- und Gedankenverkürzungen.

Ein Beispiel:
Mit dem Satz "(Der eine Balken wandert da die Daten noch an beide Chips 
gesendet werden)" kann niemand ausser Dir etwas anfangen.
Die Frage für einen Aussenstehenden ist: Inwiefern begründet die 
Tatsache, das Daten (welche Daten?) an beide Chips (welche beiden 
Chips?) gesendet werden, die weitere Tatsache, dass der Balken wandert?
So geht es bei fast jedem Satz in Deinen Posts.

Du müsstest uns also ersteinmal beschreiben worum es überhaupt geht. Was 
soll Dein Programm machen und auf welche Weise? Du musst also Dein 
Programm dokumentieren. Die dahinterstehende Idee, den Ablauf, wie der 
Ablauf realisiert ist.

Das wirft ein anderes Problem auf. Wahrscheinlich wird sich niemand die 
Mühe machen Deine Beschreibung zu studieren um dann das Problem zu 
finden. Das ist nämlich durchaus harte Arbeit, das Programm eines 
Anderen zu verstehen.

Es gibt nur eine Möglichkeit: versuche das Problem einzugrenzen. Mach 
Debug-Ausgaben, nachdem Du Dir überlegt hast, was an welcher Stelle 
welche Variable für einen Wert enthalten muss und wie der 
Programmverlauf von den Variableninhalten abhängt.

Viel Erfolg.

von Blödmann (Gast)


Lesenswert?

Eine weitere Bitte habe ich, wobei ich vorausschicken muss, das es sich 
hier nicht um Schikane oder Besserwisserei oder den Kitzel des 
Zurechtweisens handelt, die mich dazu motivieren:
Bitte schreibe, so gut es Dir möglich ist, grammatisch vollständige und 
korrekte Sätze. Denk daran, Du willst von uns Hilfe. Uns ist Dein 
Problem erstmal egal. Also mach es uns leicht Dich zu verstehen.

von Michael D. (etzen_michi)


Lesenswert?

Fehler gefunden!!

Habe hier ehrlich kaum gesucht gehabt, da es vorher eig. ging ...
1
ShiftData:
2
  mov      r4,          Temp6            ; Zuletzt heruasgeschobene Daten in r4 sichern
3
  clr      Temp6                      ; Register mit herausgeschobenen Daten löschen
4
  push    Temp5                      ; Register mit Schiebemenge sichern
5
  tst      Temp5                      ; Testen ob 0 geschoben werden muss
6
  breq    Shifted                      ; Wenn 0 geschoben kann schieben übersprungen werden
7
Shifting:
8
  lsl      Temp1                      ; Daten mit 0 schieben
9
  rol      Temp6                      ; Register für rausgeschobene Daten mit Carry schieben
10
  dec      Temp5                      ; Menge an benötigten Shifts verringern
11
  brne    Shifting                    ; nachschauen ob nochmal geschoben werden muss
12
Shifted:
13
  or      Temp1,        r4              ; Wenn geschoben Inhalt des letzten Schiebens einfügen
14
  pop      Temp5                      ; Benötigte Shift Anzahl wiederherstellen
15
  ret

Die Herausgeschobenen Bit wurden in Temp6 gesichert (soweit wie es 
soll), dann wurde am Ende des schiebens der Inhalt von r4 mit in die 
Daten eingefügt (auch richtig).
Nach einem Reset (welcher beim Verifizieren kommt) läuft das alles 
nochmal durch, wo nun aber Temp6 immernoch den alten Inhalt hat, welcher 
nun zunächst nach r4 kopiert und dann in die Daten eingefügt wird was 
wieder eine 8Zeichen Linie ergibt.

Schande über mein Haupt...

von Blödmann (Gast)


Lesenswert?

Naja. Die Schande hält sich in Grenzen, denn wie gesagt ist es sehr 
zweifelhaft, dass das ausser Dir überhaupt irgend jemand mitbekommen 
hat.

von Michael D. (etzen_michi)


Lesenswert?

Ja tut mir leid habe ich ein wenig undeutlich geschrieben.
Daher das ich testweise noch auf beide Chips schreibe und nicht nur auf 
den benötigten (128x64 Pixel Display mit zwei Chip für je 64x4Pixel) gab 
es einen Balken der sich aufgrund der nicht vorhandenen beschreibung des 
zweiten Chips mit der X Adresse bewegt hat.
Daher das ich die Bilder kleiner gemacht habe ist dieser nicht zu sehen.
(Wollte eig. die Textstelle noch entfernen, habe aber erst den Text 
kontrolliert und dann die Bilder gemacht/bearbeitet).


Ich weiß das die Antworten hier ohne Nutzen der anderen kommen und finde 
das auch total toll.
Ich versuche auch möglichst grammatisch korrekt und verständlich zu 
schreiben, weswegen ich mir das geschriebene auch immer noch zwei mal 
vor dem Abschicken durchlese.

Leider dachte ich auch das die Info reicht welche ich gegeben habe. Das 
Problem hierbei ist das der Ablauf für mich selbstverständlich ist und 
ich eig. schon mehr geschrieben hatte als ich dachte das es nötig sei.


Ich sehe auch eure Hinweise nicht als "Schikane oder Besserwisserei oder 
den Kitzel des Zurechtweisens" an sondern als ganz normaler Hinweis auf 
Dinge welche man besser machen kann und sollte.


Trotzdem vielen Dank



Die Stunde ist wirklich nicht lange, aber ich saß schon seid rund 15Uhr 
davor und habe diesen einen Fehler nicht gefunden ... (6Stunden 
Fehlersuche kann ziemlich Demotivierend sein)

von spess53 (Gast)


Lesenswert?

Hi

>Nun bin ich dabei nachdem ich die 8Pages ausgewählt habe die Geladenen
>Daten so zu verändern das man die Position in pixel und nicht in Pages
>angeben kann.

Ich sehe das mal als sportlichen Anreiz. In der Praxis würde ich 
versuchen das zu vermeiden.
Persönlich wäre mein Ansatz die Bytes einer Spalte in einem Ritt zu 
'shiften'.

MfG Spess

von Blödmann (Gast)


Lesenswert?

Naja. spess scheint ja was damit anfangen zu können. Dann ist es ja halb 
so wild.

von Michael D. (etzen_michi)


Lesenswert?

spess53 schrieb:
> Persönlich wäre mein Ansatz die Bytes einer Spalte in einem Ritt zu
>
> 'shiften'

Wenn das was ich denke das du es meist, das was du meinst meinst ist, 
dann habe ich das auch schon überlegt, bin mir aber noch unsicher ob ich 
die Pages x Spalten abarbeiten oder die Spalten x Pages abarbeiten 
sollte.

Vorteil bei erstem ist auf jeden Fall das ich keinen riesigen Speicher 
brauche -> ~256Byte.

Nachteil ist das ich dauernt die Positionen neu übertragen muss, da bei 
einer Datenübertragung automatisch die Spalte um 1 erhöt wird, weswegen 
ich nach allen 8Bit weitere 2Byte übertragen müsste um wieder an der 
richtigen Position zu sein -> biszu 2kByte mehr Datenübertragung.

von spess53 (Gast)


Lesenswert?

Hi

>Wenn das was ich denke das du es meist, das was du meinst meinst ist,
>dann habe ich das auch schon überlegt, bin mir aber noch unsicher ob ich
>die Pages x Spalten abarbeiten oder die Spalten x Pages abarbeiten
>sollte.

Ich meinte eine Spalte. Dafür reicht ein Puffer in der Anzahl der 
Pages (vorzugsweise als Register).

MfG Spess

von Michael D. (etzen_michi)


Lesenswert?

Gut dann habe ich gedacht das du meinst was du meintest ...

Das ist die zweite Variante, wo sich eine 3fach Datenmenge ergeben 
würde, welche ich wohl aufgrund der einfacheren Programierung und weil 
Speicher wertvoll ist nehmen werde ^^.

von spess53 (Gast)


Lesenswert?

Hi

>Gut dann habe ich gedacht das du meinst was du meintest ...

>Das ist die zweite Variante, wo sich eine 3fach Datenmenge ergeben
>würde, welche ich wohl aufgrund der einfacheren Programierung und weil
>Speicher wertvoll ist nehmen werde ^^.

Eigentlich hatte ich nur an die Verwendung von Registern gedacht. Oder 
meinst du Flash?

MfG Spess

von Michael D. (etzen_michi)


Lesenswert?

Die Register sind doch im Flash ....

Ich mache das nun so das ich die komplette "Höhe" in die Register r7 bis 
r14 lade (soweit benötigt, erkennung überlege ich noch) und diese dann 
alle durch schiebe (erstes mit lsl und die anderen rol bis durch)

Mit Datenmenge meinte ich die Menge der zum Display übertragenen Daten.

von Michael D. (etzen_michi)


Lesenswert?

Ane .. die sind ja im Ram ... Flash ist ja der Programmspeicher

Hatte vor die Bilder im Flash ab zu legen und im Ram zu bearbeiten.

von holger (Gast)


Lesenswert?

>Ane .. die sind ja im Ram ... Flash ist ja der Programmspeicher
>
>Hatte vor die Bilder im Flash ab zu legen und im Ram zu bearbeiten.

Dann besorg dir mal nen ATmega32.
Ein komplettes Bild bei 128x64 braucht schon 1kB.
Ein paar nette Fonts in verschiedenen Größen im
Flash belegen dann auch noch ganz gut was.

Atmega8 und Grafikdisplay ist doch ein Witz.

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.