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 ...
Mach mal ein Bild vom Display. Das hilft mehr als tausend Worte;)
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 -.-
>Weiß zwar nicht wie das hilft aber hier sind mal ein Paar Bilder.
Was wolltest du eigentlich anzeigen?
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.
@ 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.
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.
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...
Naja. Die Schande hält sich in Grenzen, denn wie gesagt ist es sehr zweifelhaft, dass das ausser Dir überhaupt irgend jemand mitbekommen hat.
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)
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
Naja. spess scheint ja was damit anfangen zu können. Dann ist es ja halb so wild.
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.
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
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 ^^.
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
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.
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.
>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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.