sorry, leider nein.Hast mich jetzt??
Alle ASCII-Zeichen ab dec 48 ($30) sind anzeigbar, und natürlich dürfen es dezimal nur die Werte 48-57 sein (48+0 bis 48+9).
Wschl muss es dir ein asm-Progger erklären.
Ich hab sehr wohl verstanden WIE Ziffern/Zahlen/Zeichen angezeigt werden können!
Offenbar kann ich mich nicht so ausdrücken, dass ihr das so versteht, wie ich es meine!
Die Rechenoperationen sind bis auf die ASCII-Umwandlungen durch (34515).
Diese Registerinhalte 03 04 05 01 05 (15 bereits getrennt) müssen klarerweise noch in ASCII umgewandelt werden um sie anzeigen zu können.
Es geht nur darum, dass die einzelnen Register nurmehr mit $30 addiert werden müssen, dann kann man sie einzeln anzeigen.
Aber 40 oder 15 mit $30 addiert ergibt kein anzeigbares Zeichen!! Zumindest nicht die Ziffer, die es sein soll!
Also auf "low-nibble" = 04!
Und 15 trennen auf 01 05!
Hast mich jetzt??
Geändert von HeSt (15.01.2019 um 12:48 Uhr)
sorry, leider nein.Hast mich jetzt??
Alle ASCII-Zeichen ab dec 48 ($30) sind anzeigbar, und natürlich dürfen es dezimal nur die Werte 48-57 sein (48+0 bis 48+9).
Wschl muss es dir ein asm-Progger erklären.
Damit ich die Zahl 34515 auf dem LCD anzeigen kann, muss ich jede einzelne Ziffer dieser Zahl (jede Ziffer steht in einem eigenen Register) in anzeigbare Zeichen umwandeln = Ziffer + $30:
3 = $33, 4 = $34, 5 = $35, 1 = $31 und 5 = $35.
Entweder ich geb das zusammengefasst als String aus (wobei ich nicht weiß, wie ich das zu einem String zusammenstellen kann) oder eben jedes einzeln.
Ein "03" oder "05", .... wie es im Register steht ist nicht anzeigbar!
Jetzt??
Geändert von HeSt (15.01.2019 um 12:46 Uhr)
nein, sorry, ich muss mich ausklinken, (edit) deine Rechnungen sind sogar ok (so rechne ich selber ja auch), aber dein Problem ist für mich als C-Programmierer so als wäre es in sumerischer Keilschrift geschriebenJetzt??![]()
Geändert von HaWe (15.01.2019 um 12:28 Uhr)
Ist ja auch gut !!
avr_racer verstehts schon![]()
letzter Versuch - kannst du direkt nacheinander die Konstanten
$30
$31
$32
$33
$34
ausgeben?
Wenn nein, funktioniert deine lcd-Ausgabe nicht.
Wenn ja, hast du dich vlt oben verrechnet bei der Dezimalstellen-Zerlegung...
Geändert von HaWe (15.01.2019 um 12:37 Uhr) Grund: typo
Alle $xx ja,
§33 ist nicht anzeigbar.
C und Assembler sind nicht identisch!!
Vergiss es!![]()
typo, sollte ntl $33 heißen.
Aber dann liegt wohl der 2. Fall vor (Rechenfehler)
C erzeugt denselben Maschinencode wie asm und rechnet mit denselbern Registerwerten.
PN
Der Swap dient der Zuordung der richtigen Stelle
1Mio, 100tsder, 10tsder, Tausender, Hunderter, Zehner, Einer.
Das hängt davon ab wie man es betrachtet. Wenn ich rechne möchte ich das Ergebnis als ganzes sehen um evtl Fehler usw zu erkennen und spart Bytes. Somit habe ich eine reine Zahlenroutine nur für die Ausgabe von Zahlen.
Wenn man jeder Ziffer der einzelnen Stellen jeweils ein Byte zuordnet kann man das gern machen um es dann mit $30 zu addieren um es quasi als LCD-Ziffer schon parat und abrufbereit zu haben, erfordert je nach Ergebnis aber eben schonmal bis zu 10byte.
Problem wirds geben wenn man das zu früh macht und evtl mit dem Ergebniss weiter rechnen muss...
Ich spare mir das indem ich dafür eine reine Zahlenroutine habe die dann High/Lowbyte auftrennt und $30 dazu addiert
Nun ich nehme an das ZE als Buchstaben zu betrachten sind und Buchstaben brauchen nicht mehr gewandelt werden.
Mach mal einen Doppelklick auf ein Register, dort hast du jetzt mehrere Möglichkeiten einen Wert einzugeben und in HEX/DEZ/OCT/BIN/TEXT darstellen zu lassen. Also klicke mal TEXT an und gebe Z oder E ein. Dann klickst auf Bin oder HEX oder DEZ, da steht dann der Zahlenwert im jeweiligen Zahlensystem. Mal einen Wert von E oder Z als BIN anzeigen lassen und nix machen
Wechsel zur PDF des LCD. Dort ASCII-Tabelle suchen und mal die UPPER und LOWER 4Bit ansehen und vergleichen nun sollte eigentlich ein EUREKA die Synapsen befeuern![]()
Selbst dein Bildschirm beinhaltet diesen Zeichensatz.
absolut korrekt.
40 als DEZ + $30 = $58 in binär 0101 1000 und sollte eigentlich das X sein
15 als DEZ + $30 = $3F in binär 0011 1111 und sollte eigentlich das ? sein
$40 + $30 = $70 in binär 0111 0000 müsste das p sein
$15 + $30 = $45 in binär 0100 0101 müsste das E sein
Die erste Spalte, also $00 bis $0F, sind die Adressen für eigens zu erstellende Zeichen im CHARAKTER-ROM... Heißt du würdest jetzt im Zeichenvorrat-Ram deine eigenen Zeichen adressieren...
Als Assembler "String" wäre das eine Schleife.
Heißt du könntest diese Zahl im RAM ablegen um die Register frei zu machen somit dann gesichert. Und schreibst dir eine Unterroutine wo du dir die gesicherte Zahl in dein/e Register schreibst, $30 dazu addieren gefolgt von LCD_DATA. Vorher solltest du eine Adresse (00 bis 0F) + $80 für Zeile 1 oder für Zeile 2 ($40 bis $4F) + $80 definieren auf die bzw ab die das LCD mit dem setzen der Zeichen beginnen soll.
1. Adresse auf LCD setzen mit LCD_Command
2. Zeichen/Ziffer laden + bearbeiten
3. Zeichen mit LCD_DATA an LCD senden
4. bei weiteren Zeichen Sprung zu 2 solange bis EndeBedingung erkannt wurde die musst du dann für dich kreieren
*LACHT*
Geändert von avr_racer (15.01.2019 um 16:49 Uhr)
Ich möchte euch allen für eure Hilfe und Geduld danken!
Programm ist fertig - umgewandelt.
Ein paar kleine Schreib- und Definitionsfehler waren noch drin.
Die LCD-Funktionen hab ich - soweit mit dem T24 auf dem Miniboard möglich - getestet.
Schaut alles gut aus.
Demnächst wird die Platine entworfen.
Dann gehts weiter ...
Bei diesem Projekt hab ich wieder viel gelernt! Und auch die Scheu vor einem LCD verloren
Es ist doch viel einfacher damit, wenn man immer wieder - zumindest anfangs - an ein paar Parametern "drehen" muss ...
PS:
Hab bei meiner alten MC20 Funke das LCD (ist um einiges größer als das neue 1602er) entfernt und bei meinem T24 Test probiert - läuft einwandfrei![]()
Geändert von HeSt (18.01.2019 um 08:48 Uhr)
Lesezeichen