Hallo albundy,
es war wirklich das Kabel, eigentlich logisch bei 16 MHz Taktfrequenz.
Ich habe heute mittag mal das Kabel auf 5 cm gekürzt und wie durch
ein Wunder waren die unerwünschten Bitmuster verschwunden.
Nochmal ganz herzlichen Dank.
Druckbare Version
Hallo albundy,
es war wirklich das Kabel, eigentlich logisch bei 16 MHz Taktfrequenz.
Ich habe heute mittag mal das Kabel auf 5 cm gekürzt und wie durch
ein Wunder waren die unerwünschten Bitmuster verschwunden.
Nochmal ganz herzlichen Dank.
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 :-s (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.
Hallo,
der Ablauf beim lesen muss ein anderer sein.
Code: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
in r24,data_port_in ;Dummyread lt. Datenblatt
in r24,data_port_in ;Datenport nach R24 lesen
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
;hier zu lesen ist sinnlos, da CS1 jetzt High ist.
Danke Albundy!
Manchmal braucht's nur einen kleinen Hinweis!
..OK, manchmal würde es auch reichen, wenn ich das Datenblatt ordentlich lesen würde! ;-)
Der entscheidende Tipp ist der Dummy-Read. Allerdings nicht mit 2x IN ... sondern 2x Read ans Display senden (also RES, A0, E, RW auf high).
Ausserdem darf vor dem IN keine Pause sein, weil die Daten wohl nicht lange genug anliegen. So hat's bei mir gestern nach kurzem ausprobieren geklappt.
Werde mich am WE mal daran machen ein paar einfache Grafik-Routinen zu basteln.
Hallo.
Lange ist's her mit dem letzten Eintrag. Habe trotzdem 3 Fragen.
1.Muß die Quarzfrequenz auch in der lib angepasst werden ?
2.Wozu wird R/W definiert ? Wird im Code doch garnicht verwendet.
3.Wo ist das Tool zum Konvertieren der s/w Bitmaps hin ?
Danke und Gruß
Hallo,
hab mal ne frage. Womit werden die Fonts erstellt? und wofür is der 2te Parameter bei Grdat()
Declare Sub Grdat(byval Variable As String , Byval Stelle As Byte , Byval Font As String) 'Stelle = Ausgabedigits 1-5
kann ich eigene Symbole malen und in einer Font hinterlegen? z.b. anstelle der #(raute) ein eigenes Symbol?