Am 08.04.2017 um 17:45 schrieb Gerald Oppen:
P.S.: Und das hier beachtet:
Am 08.04.2017 um 17:45 schrieb Gerald Oppen:
P.S.: Und das hier beachtet:
-- Ensure that data is not being transmitted too fast to the T6963C. Always pole the BUSY flags STA0 and STA1 before sending instructions (section 9.2). If MPU is not set up to read the BUSY flag before writing instructions allow an adequate delay between instructions
DoDi
gebremst bis man jede Zeile einzeln sieht, die aufgebaut wird.
dem LCD landet.
Manuel
Wieviele Nops hattest Du den verbaut? Mit 2-3 Nops ist es nicht getan
Verarbeitungszeiten von einigen Millisekunden hat. Um das herauszufinden solltest Du das Busy-flag abfragen und in eine
meldet...
Gerald
Fehlerhafte Funktion (ohne Hack):
Und die mit Hack, die funktioniert:
Manuel
Manuel Reimer schrieb:
Da ist zwar allerhand komisches Zeug drin, aber nicht der Assembler-Quelltext Deiner Funktion. Aber wie gesagt, mittlerweile glaube ich auch eher an ein Ansteuerproblem des LCD.
Christian
-- Christian Zietz - CHZ-Soft - czietz (at) gmx.net WWW: http://www.chzsoft.de/ PGP/GnuPG-Key-ID: 0x52CB97F66DA025CA / 0x6DA025CA
LCD. Meine Funktion zum Lesen war:
// Blocks until LCD reports DSP to be ready void WaitDSPReady(bool aAutoWrite = false) { ParportSetDirection(INPUT); for (int i = 0; i < 3000; i++) { digitalWrite(PIN_CD, HIGH); digitalWrite(PIN_RD, LOW); digitalWrite(PIN_WR, HIGH); digitalWrite(PIN_CE, LOW);
// In "Non-Auto-Mode" check STA0 and STA1 bool last = false; if (!aAutoWrite && digitalRead(PIN_D0) && digitalRead(PIN_D1)) last = true; // In "Auto-Mode" check STA3 if (aAutoWrite && digitalRead(PIN_D3)) last = true; digitalWrite(PIN_CE, HIGH); digitalWrite(PIN_RD, HIGH); if (last) break; } ParportSetDirection(OUTPUT); }
"Abbruch" durch Status-Bits statt.
Manuel
Dann stimmt was mit deiner Schaltung nicht, ich hab bisher bei diversen
um? Das Statusregister ist nicht das Datenregister ausgelesen sondern eins weiter. Oder ist das dein 'digitalWrite(PIN_CD, HIGH);'?
Hier ist mein 68000-Code der problemlos funktionierte:
check: ; Verwendete Register: ; d2 : Statusregister LCD
move.b adr_lcd+1, d2 ; Statusregister lesen */ andi.b #$03, d2 ; Bit 0 und 1 maskieren */ cmpi.b #$03, d2 bne.s check ; Wenn nicht BEIDE Bits gesetzt rts
check2: btst #$03, adr_lcd+1 beq check2 ; wiederholen solange Bit 3 = 0 rts
Ich hatte das LCD allerdings im Adressraum eingeblendet, ging schneller als via I/O-Baustein. :)
Gerrit
Manuel Reimer schrieb:
Dann musst Du das zum Laufen bekommen. Wie Du im Datenblatt nachlesen kannst, funktioniert der Controller nicht korrekt, wenn Du nicht an den vorgeschriebenen Stellen auch Status-Read machst: "When using the MSB=0 command, a Status Read must be performed. If a status check is not carried out, the T6963C cannot operate normally, even after a delay time. [...] If a status check is not carried out [...] before the next command is sent, there is the possibility that the command or data will not be received." MSB=0 commands sind z.B. "Register Setting" oder "Set Control Word".
Christian
-- Christian Zietz - CHZ-Soft - czietz (at) gmx.net WWW: http://www.chzsoft.de/ PGP/GnuPG-Key-ID: 0x52CB97F66DA025CA / 0x6DA025CA
Komischerweise funktioniert der Controller aber ohne Probleme mit den Arduino-Funktionen alleine.
Mitteln komme ich nicht drauf warum ich die Status-Infos nicht bekomme. Wenn ich versuche das zum Laufen zu bekommen werden die Ausgaben nur noch konfuser. Wenn ich die gesetzten Bits auf dem seriellen Port
Ich glaube ich gebe mich mit der geringen Geschwindigkeit erstmal zufrieden. Das ganze wird eh Open-Source und vielleicht hat jemand die Mittel, die Zeit und die Lust das mit den Registern doch noch zum Laufen
Ganz davon abgesehen, dass ich Mittel, wie z.B. einen Logik-Analyser nicht habe.
Manuel
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.