Hallo,
ich habe folgendes Display (128x64 Pixel, KS0108 Controller) an meinen
AT90CAN128 angeschlossen:
http://www2.produktinfo.conrad.com/datenblaetter/175000-199999/181682-da-01-en-GRAFIK-MODUL_STN_BLAU_WEISS_128X64.pdf
Und als Treiber verwende ich den hier Besprochenen:
Beitrag "KS0108 GLCD Routinen"
Nun funktioniert die Ansteuerung prinzipiell schon einmal, jedoch wird
alles was ich auf den ersten Controller ausgebe (und somit nur auf der
linken Hälfte erscheinen sollte) nochmal auf der rechten Seite angezeigt
- ist also doppelt zu sehen. Schreibe ich nur etwas in die rechte Hälfte
(x >= 64), dann erscheint das auch nur dort. Also ich kann nicht den
ersten Controller allein ansteuern. Woher kann dieser Effekt kommen? Ich
hoffe ihr wisst was ich meine - ich experimentiere schon seit Stunden
und komm einfach nicht auf den Fehler. Es ist bestimmt was ganz
einfaches. Das kann nur noch was ganz einfaches sein. Ein Kabelbruch
oder so ;)
Vielen Dank für Hilfe
Randy Nürnberger
Jeweils eine CS-Leitung an einen Pin des Steuerports (bei mir PORTF).
Also:
PF0 = Data/Instruction
PF1 = Read/Write
PF2 = Enable Signal
PF3 = Chip Select IC1
PF4 = Chip Select IC2
Und an PORTA hab ich den 8-bit Datenbus hängen.
Und ein einfaches:
ks0108Init();
ks0108SetDot(0,0);
funktioniert (!), aber zeigt den Punkt eben zweimal an - einmal an (0;0)
und einmal an (64;0). Wenn ich aber folgendes schreibe:
ks0108Init();
ks0108SetDot(64,0);
DANN erscheint wirklich nur ein Punkt an (64;0).
Muss ich beim Anschließen irgendwas beachten? Habe einfach nen Draht von
dem Pin zu dem auf dem Grafikmodul gezogen. An der richtigen Stelle sind
sie alle.
Liegt bestimmt an der Verdrahtung. Es scheint ja so, dass bei x<64 CS1
und CS2 gesetzt werden und bei x>=64 nur CS2. Vielleicht ist CS2 immer
gesetzt. Bist Du Dir sicher, dass Du dich bei den Pins nicht vielleicht
verzählt hast, so dass z.B. der Reset-Ausgang vom µC mit CS2 vom Display
verbunden ist?
Hm da haut tatsächlich was nicht hin. Hab, um mal zu messen, ob die Pins
nicht vielleicht beim Anlöten des AT90CAN128 vielleicht verbunden worden
sind, mal nur folgendes geschrieben:
DDRF = 0b11111111;
PORTF = 0b01010101;
Und wenn ich messe kommen bei den letzten beiden Pins 5V. Hm ich kann
nur keine Verbindung erkennen. Also die letzten beiden Pins hängen ja in
der Luft - sind nur auf der kleinen Leiterplatte festgelötet, aber dann
ist da kein Draht dran. Komisch.
Wegen dem setzen: ich glaub das ist genau invertiert. Also wenn beide
CS-Leitungen LO, dann sind beide aktiviert, und wenn beide HI, sind
beide deaktiviert. Oder?
Ich hab jetzt nochmal die beiden CS-Leitungen an die zwei anderen Pins
umgelötet - mit dem gleichen Ergebnis. Aber es MUSS an der Hardware
liegen. *seufz
Ich schlaf jetzt erstmal und wenn ich wieder aufstehe, funktioniert es
;) (Erstaunlicherweise kriegt man wirklich immer die Probleme, die einen
am Vortag unlösbar erschienen, am nächsten Tag ziemlich flott hin -
heh). Danke trotzdem für die Hilfeversuche - trotz dass es so spät ist
:)
OK PROBLEM GEFUNDEN !!! VIELEN DANK :)
Also ich hab jetzt diese CS-Leitungen mal abgelötet und per Hand mal an
den Pluspol gehalten und siehe da: es geht. Also der AT90CAN128 hat da
irgendwie ein Problem mit seinen Ports. Entweder da ist was verbunden
oder k.A.
CS-Signale sind meistens active low, d.h. aktiv=0 inaktiv=1. Ob hier
auch, ist aufgrund der doch sehr dicken Wälzer von Datasheets wohl nur
praktisch zu ermitteln. Mindestens bei
http://www.lcd-module.de/deu/pdf/grafik/j128-6n6.pdf steht das immerhin
auch so drin.
Dein oben angehängter Code geht freilich von active high aus.
JUHU SUPER DANKE!!
An JTAG lag es - habs ausgeschaltet und es geht!
Allerdings kann ich jetzt den µC nicht mehr programmieren, wenn JTAG aus
ist (also das Fuse-Bit JTAGEN nicht gesetzt ist). Ich muss das vorher
immer erst wieder setzen, dann das Programm übertragen, dann wieder
löschen (verwende PonyProg dazu). Aber JTAG hat doch nichts mit der
Programmübertragung zu tun, oder? Kann man JTAG auch auf dem µC per
Software ausschalten?
Wenn du per JTAG programmierst hat das schon was damit zu tun ;)
PS: Ja man kann das JTAG per Software ausschalten. Durchsuch das
Datenblatt mal nach "JTD".. Soweit ich mich erinnere musst du in MCUCSR
das Bit JTD zwei mal hintereinander setzen.
Hm ich programmiere per ISP.
Aus dem Datenblatt:
"When the JTAGEN fuse is unprogrammed, these four TAP pins are normal
port pins and the
TAP controller is in reset. When programmed and the JTD bit in MCUCR is
cleared, the TAP
input signals are internally pulled high and the JTAG is enabled for
Boundary-scan and programming."
Also muss ich JTD in MCUCR setzen. Nur leider funktioniert das dann
trotzdem nicht, also das bleibt aktiviert.
PonyProg spinnt jetzt auch irgendwie - jedesmal bringt es jetzt einen
Übertragungsfehler (auch wenns richtig übertragen wurde).
Naja auch egal erstmal - deaktivier ichs halt jedesmal. Vielleicht löt
ich das ganze auch nochmal an einen anderen Port...