Hallo, ich habe ein Problem mit dem im Betreff genannten Atmel bei dem ich selber nicht zur Lösung komme. Ich möchte ein grafisches LCD, basierend auf dem T6963C-Controller, möglichst schnell ansteuern. Aktuell mache ich dies mit "digitalWrite", was mir aber zu langsam geht. Beispiel für mein "SendData": void SendData(unsigned char aData, bool aAutoWrite = false) { digitalWrite(PIN_CD, LOW); // CD down (data) digitalWrite(PIN_WR, LOW); // CD & WR down digitalWrite(PIN_CE, LOW); ParportWriteData(aData); digitalWrite(PIN_CE, HIGH); // CE & WR up again digitalWrite(PIN_WR, HIGH); digitalWrite(PIN_CD, HIGH); // CD up again } Hier noch mit "DigitalWrite". Mein "ParportWriteData" sieht so aus: void ParportWriteData(unsigned char aData) { unsigned char maskD = B11111100; unsigned char bitsD = aData << 2; PORTD &= B11011111; // <<<================ PORTD = (PORTD & ~maskD) | bitsD; unsigned char maskB = B00000011; unsigned char bitsB = aData >> 6; PORTB = (PORTB & ~maskB) | bitsB; } Das komische dabei ist, dass ich die Zeile, die ich mit "Pfeil" markiert habe, unbedingt brauche. Das ist, nach vielen Versuchen, die minimale Änderung, die nötig ist, dass ich alle Bits sauber rausbekomme. Ich muss "Bit 5" auf "PORTD" immer im Voraus "LOW" ziehen. Erst danach kann ich meine Werte tatsächlich auf den Port schreiben. Ohne diese Zeile habe ich Zufallspixel auf dem LCD. Mir erschließt sich aber nicht, warum das nötig ist. Hat hier vielleicht jemand schon ähnliche Effekte gehabt und kann mir sagen was ich falsch mache?
Hallo Marcel, meine Glaskugel sagt 42! Ich will damit sagen, ohne Schaltplan und Pinbelegung kann Dir niemand sagen, warum Du genau dieses BIT auf LOW ziehen musst. Gruß Frank
Mit dieser Zeile ziehst du das Bit 5 nicht auf Low. Mach dich mal schlau zum Thema Bitmanipulation.
Ist ein Arduino. Die Digital-Pins vom LCD hängen Arduino-Pin 2 aufwärts (also D0 vom LCD ist Pin 2 vom Arduino. Hoch bis Pin 9 am Arduino). Gesamtes "Pinout": #define PIN_D0 2 #define PIN_D1 3 #define PIN_D2 4 #define PIN_D3 5 #define PIN_D4 6 #define PIN_D5 7 #define PIN_D6 8 #define PIN_D7 9 #define PIN_RD 13 #define PIN_WR 11 #define PIN_CE 10 #define PIN_CD 12 Das LCD hängt da einfach "dran". Keine weiteren Besonderheiten. Kontrastspannung und Beleuchtung ist direkt am LCD verdrahtet und landet nicht am Arduino.
Timingprobleme? Muss es Bit 5 sein, oder tut ein beliebiges anderes Bit oder ein paar NOPs auch?
Manuel schrieb: > #define PIN_RD 13 > #define PIN_WR 11 > #define PIN_CE 10 > #define PIN_CD 12 Und zu welchem Port gehören die bei deinem Arduino-Board? Zeige einfach einen Schaltplan(-ausschnitt), der zeigt, an welchem Port-Bit welche Leitung von deinem Dispay hängt. Wen interessieren die Arduino Pin-Nummern, wenn du direkte Zugriffe machen möchtest.
Manuel schrieb: > Mir erschließt sich aber nicht, warum das nötig ist. Hat hier vielleicht > jemand schon ähnliche Effekte gehabt und kann mir sagen was ich falsch > mache? Falsch verbunden ? Bei dir sind sowohl RD als auch WR auf 0, wie soll das funktionieren ? PD.5 und PB.5 verwechselt ?
Beitrag #4967870 wurde vom Autor gelöscht.
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.