Hallo.
Hat schonmal jemand versucht die Displaydaten zu lesen um auf Pixelebene zu arbeiten? Ich bekomme es nicht hin (AVR-Assembler-Beginner).
Ich habe Albundys LIB als Basis genommen und wollte zum Test mal den Display-Inhalt invertieren. Teilweise gelingt das auch, aber pro Display-Spalte immer nur bei ein paar (meist aufeinanderfolgenden) Bits. Pro Display-Speicher-Seite dann aber auch unterschiedlich viele (mal 3, mal 4, 5). So habe ich ein hübsches Streifenmuster(siehe Anhang)
Habe das Kabel schon auf 6cm gekürzt um Übersprechen auszuschliessen.
Hier ist der Code
Hab ich irgendwo ein Timingproblem mit den Displaydaten?Code:;----------------------------------------Modifizierte Kopie Von Seddata [sedread] $external Seddelay , Sedkonst Sedread: ldi r18,$00 Out Data_port , R18 ; Pull -ups Aus Out Data_direction , R18 ; Datenport Auf Eingabe ldi r18, (2^Pin_Res+2^Pin_A0+2^Pin_rw) ;High for Reset + A0 + RW Out Ctrl_port , R18 rCall Seddelay ldi r18, (2^Pin_Res+2^Pin_A0+2^Pin_E+2^Pin_rw) ;High for Reset + A0 + E + RW Out Ctrl_port , R18 rCall Seddelay ldi r18, (2^Pin_Res+2^Pin_A0+2^Pin_CS1+2^Pin_rw) ;High for Reset + A0 + CS1 + RW Out Ctrl_port , R18 rcall Seddelay in r24,data_port_in ;Datenport nach R24 lesen ldi r18,$ff ;Datenport wieder auf Ausgabe Out Data_direction , R18 ret [end] ;----------------------------------------Modifizierte Kopie Von Grcls [grinv] $external Sedctrl , Seddata , Sedread , Sedkonst Grinv: clr r24 ;Arbeitsregister clr r25 ;Seiten-Register clr r26 ;Spalten-Register Grinv10: mov r24,r25 ;Seite ins Arbeitsregister ori r24,$B0 ;SET-PAGE-Befehl dazu (oberes Nibble, unteres = Seite 0-7) Out Data_port , R24 rcall Sedctrl ldi r24,$10 ;SET-COLUMN-Befehl (Hi-Nibble der Spalte im unteren 4 Bits) Out Data_port , R24 rcall Sedctrl clr r24 ;2. Teil der Spaltenadresse (Lo-Nibble), hier auch 0 Out Data_port , R24 rcall Sedctrl ldi r24,$e0 ;Read-Modify-Write-Befehl Out Data_port , R24 rcall Sedctrl Grinv20: rcall Sedread ;Daten nach R24 lesen com r24 ;Daten invertieren Out Data_port , R24 rcall Seddata ;Daten zurueckschreiben inc r26 ;naechste Spalte cpi r26,128 ;schon bei 128, Dann Seite fertig! brne grinv20 ;sonst weiter machen ldi r24,$ee ;Ende Read-Modify-Write-Befehl (um SET-COLUMN aufrufen zu können) Out Data_port , R24 rcall Sedctrl clr r26 ;wieder bei Spalte 0 anfangen inc r25 ;naechste Seite cpi r25,8 ;schon bei 8, Dann komplett fertig! brne grinv10 ;sonst weiter machen ret [end]
Ich wäre für etwas Hilfe wirklich dankbar.






Zitieren
(siehe Anhang)
Lesezeichen