Guten Tag an alle, Ich habe ein Problem mit dem Display VGM256032A0M01. Ich bekomme es einfach nicht dazu irgend ein Pixel auszugeben. Benutze einen Mega8 und will es über den 8080 Bus ansteuern und hoffe nun es kann sich jemand mal die zeit nehmen mal kurz drüber zu schauen das wäre echt lieb. Ich komme einfach nicht weiter. LG little P.S. Code im Anhang
Dein Code enthält mir viel zu viele Dinge, die mit dem unmittelbaren Problem einer Display Ansteuerung überhaupt nichts zu tun haben (zb Watchdog). Sowas ist unklug. Denn wenn man sich auf ein bestimmtes Thema konzentrieren will, will man sich auch noch um 300 Neben-Themenkreise kümmern müssen. Deine Kommentierung ist ebenfalls nicht sehr hilfreich
1 | up_W_D_Command: SBI PortD,4 ; E(RD)lesen ausschalten |
2 | CBI PortB,2 ; CS ausschalten (daten sind für Display) |
3 | CBI PortB,1 ; DC ausschalten (es wird ein Commando gesendet) |
4 | CBI PortD,5 ; WR ausschalten (schreiben einschalten) |
5 | NOP ; warten |
6 | NOP ; warten |
7 | ;///////////////////////////////////////////////////////////////////////////////////////// |
8 | MOV AK_M_2,AK_M_1 ; rette date |
9 | LSR AK_M_1 ; schiebe nach rechts |
10 | LSR AK_M_1 ; schiebe nach rechts |
11 | OUT PortC,AK_M_1 ; schreibe in PortC |
12 | SBRS AK_M_2,0 ; wenn bit 0 gesetze |
13 | SBI PortB,5 ; setze b,5 |
14 | SBRC AK_M_2,0 ; wenn bit 0 gelöscht |
15 | CBI PortB,5 ; claer b,5 |
16 | SBRS AK_M_2,1 ; wenn bit 1 gesetze |
17 | SBI PortB,3 ; setze b,3 |
18 | SBRC AK_M_2,1 ; wenn bit 1 gelöscht |
19 | CBI PortB,3 ; claer b,3 |
20 | ;///////////////////////////////////////////////////////////////////////////////////////// |
21 | |
22 | SBI PortD,5 ; WR anschalten (schreiben ausführen) |
23 | NOP ; |
24 | NOP ; |
25 | SBI PortB,2 ; CS anschalten (daten sind für andere Geräte) |
26 | RET |
27 | ;------------------------------------------------------------------------------------------ |
Im Kommentar steht 1:1 genau dasselbe, was auch schon in den Anweisungen zu sehen ist. Was ich aber aus dem Kommentar nicht erfahre, was mich aber brennend interessieren würde, ist WARUM du gewissen Dinge machst. Das steht aber nicht im Code. Zb steht da gleich nach dem OUT die Kommentierung 'Wenn Bit 0 gesetzt ist, dann setze Bit 5 in Port B'. Schön. Das sehe ich auch im Code, das das gemacht wird. Aber warum wird es gemacht? So ganz verstehe ich noch nicht, wie du dir das mit dem Write Puls vorstellst. Meinem naiven Verswtändnis nach, geht der Ablauf doch so: Erst werden die Daten an den Bus angelegt und dann kommt der Write Puls. Zumindest erscheint mir das logisch. Bei dir ist das ineinander verzahnt.
1 | CBI PortB,2 ; CS ausschalten (daten sind für Display) |
2 | CBI PortB,1 ; DC ausschalten (es wird ein Commando gesendet) |
3 | CBI PortD,5 ; WR ausschalten (schreiben einschalten) |
Nein, eben nicht 'SChreiben einschalten'. Das hat mit ein-/ausschalten nichts zu tun. Eine 8080 legt die Adresse und die Daten auf den Bus und dann kommt ein Puls auf der WR Leitung (die active Low ist). Dieser Puls bedeutet: "Jetzt gilts. die Werte, die jetzt am Bus anliegen sind korrekt, jetzt übernehmen". Das hat nichts mit ein oder ausschalten zu tun. Das ist wie das Einstellen von Eingabewerten auf einer Maschine und wenn alles eingestellt ist, dann haut jemand auf einen Button um der Maschine anzuzeigen: alles eingestellt, jetzt bitte die Werte übernehmen. Ich weiß jetzt nicht mehr auswendig, wie das spezifiziert ist. Ob die Peripherie die Daten bei der fallenden oder bei der steigenden Flanke übernehmen muss. Spielt im Grunde aber auch keine große Rolle. Halte ich mich an den Ablauf
1 | Busleitungen einstellen |
2 | WR auf Low |
3 | WR auf High |
dann ist mir das völlig wurscht, ob es die fallende oder die steigende Flanke ist. Zuerst stelle ich alles ein und dann kommt der Übernahmepuls.
1 | CBI PortB,2 ; CS ausschalten (daten sind für Display) |
Du bist hoffentlich mit dir selber im reinen, wie du die Begriffe 'einschalten' bzw. 'ausschalten' benutzt. Diese Leitungen sind active Low. D.h. von einer logischen Perspektive aus gesehen, wird dem Gerät mit einem 0-Pegel signalisiert, aktiv zu werden - sich einzuschalten. Wenn du hier das 'ausschalten' darauf beziehst, dass du den Pin auf 0 setzt, dann muss ich dir sagen: Kommentierung nicht verstanden. Dass der Pin auf 0 geht, seh ich im Code das brauchst du nicht kommentieren. Als Assemblerprogrammierer muss ich schliesslich wissen was ein CBI macht. Wenn du allerdings das 'ausschalten' darauf beziehst, was dieses 0-setzen des Pins beim Gerät bewirkt, dann ist das ganz klar falsch. Denn der Chip Select wird ja gerade durch das 0 Setzen des Pins aktiv. Den Pin auf 0 zu setzen, schaltet also das Gerät eigentlich 'ein' und nicht aus. Fazit: der Begriff 'ausschalten' ist hier missverständlich. Benutze ihn nicht.
Guten Tag Karl Heinz, Danke erst mal das du dir die mühe gemacht hast:-). Ja ich weiß meine Kommentare lassen ein bisschen zu wünschen übrig...:-(. Mir ist das mit dem ein und ausschalten schon klar ich hatte nur versuch das Projekt in C zu schreiben und da ich da nicht ganz so geübt bin wie in Assembler habe ich mir dahinter geschrieben was ich mit dem Befehl wirklich mach.... das ist also noch son bischen Altlast Sorry. Das mit dem WR PIN mache ich so weil es im Datenblatt so steht: void Write_Command(uchar command) { CS=0; DC=0; WR=0; _nop_();_nop_(); P0=command; WR=1; _nop_();_nop_(); CS=1; } So nächste Frage war über den Abschnitt MOV AK_M_2,AK_M_1 ; (zusendende Date zwischenspeichern) LSR AK_M_1 ; (schiebe 2 mal rechts) LSR AK_M_1 ; (Da D2=PortC,0 D3=PortC1 ...D7=PortC,5) OUT PortC,AK_M_1 ; C6=Reset (nicht als Port genutzt) C7=--- SBRS AK_M_2,0 ; wenn Datenbit 0 gesetzt SBI PortB,5 ; setze b,5 (entspricht Ausgang für D0) SBRC AK_M_2,0 ; wenn Bit 0 gelöscht CBI PortB,5 ; claer b,5 (entspricht Ausgang für D0) SBRS AK_M_2,1 ; wenn Bit 1 gesetzt SBI PortB,3 ; setze b,3 (entspricht Ausgang für D1) SBRC AK_M_2,1 ; wenn Bit 1 gelöscht CBI PortB,3 ; claer b,3 (entspricht Ausgang für D1) So hoffe die Kommentare helfen um für Klarheit zu sorgen LG Heidi PS: WR will eine Hi-flanke zum schreiben so seht es im Datenblatt
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.