>So sieht mein Code aus>>#define F_CPU 1000000UL /ontroller Taktfrequenz
Daraus macht der Compiler sicher nur eine Fehlermeldung.
> /* Set MOSI and SCK output, all others input */>DDRB = 0b00001100;
Netter Kommentar, nur wird SCK nicht zum Ausgang.
@Holger: hast recht hab die zeile abgeändert in DDRB = 0b00101000;
das /controller stand so nicht im quelltext, der fehler ht sich beim
schreiben des threads eingeschlichen.
@spess: die elkos zw. pin 19 und 20 bzw. 18 und 21, sowie an VLCD.
Die spannung von 10 Volt kann ich nicht messen.
Wobei ich jetzt sagen muss das die LED mit abgeänderten Zeile "DDRB =
0b00101000;" nun nicht mehr angeht.
Das heißt wohl es wird nicht initialisiert?!
Hi
>@spess: die elkos zw. pin 19 und 20 bzw. 18 und 21, sowie an VLCD.>Die spannung von 10 Volt kann ich nicht messen.
Da gehören Keramik-Cs hin.
MfG Spess
Hi
>bist du sicher,das es mit elkos nicht geht? zumindest hab ich gelesen>das hier einige elkos benutzen.
Das ist zumindest die Aussage von EA und meine eigene Erfahrung.
Was sagst du zum code. sollte das passen?
Ich bin notorischer Assemblerprogrammierer. Allerdings macht mich dieser
Kommentar stutzig:
> /* Set MOSI and SCK output, all others input */
Lies dir mal das Kapitel 'SS Pin Functionality' im Datenblatt durch.
MfG Spess
Wir hatten vor einiger Zeit mal ein DOGXL160 Shield für den Arduino
entwickelt. Vielleicht hilft der Schaltplan weiter:
http://code.google.com/p/dogm128/wiki/dogxl160
Dort gibt es auch eine Graphic-Lib zum Runterladen (auch für nicht
Arduino), die den DOGXL160 unterstützt. Die Lib enthält sowohl HW als
auch SW SPI (soweit ich mich erinnere), was das Problem mit dem
Slave-Select-Pin etwas entschäfen könnte.
Grüße,
Oliver
@spess: also im Datenblatt steht das SS als input festgelegt werden
soll. Wenn ich das mache geht die LED nach der Initialisierung nicht an.
Ich vermute das Programm bleibt irgendwo hängen. Hast du eventuell die
Initialisierung als asm code. Damit könnte ich zumindest testen ob es
überhaupt geht.
@oliver: danke für den tip aber ich möchte es erstmal per hand machen.
>@spess: also im Datenblatt steht das SS als input festgelegt werden>soll. Wenn ich das mache geht die LED nach der Initialisierung nicht an.
Genau das Gegenteil ist der Fall. SS muss ein Ausgang sein.
Oder wenigstens ein Eingang mit Pullup, den du nicht als
Eingang verwenden darfst!
Hi
>@spess: also im Datenblatt steht das SS als input festgelegt werden>soll.
Da steht auf S.125:
'If SS is configured as an output, the pin is a general output pin which
does not affect the SPI system. Typically, the pin will be driving the
SS
pin of the SPI Slave.'
Wenn du /SS als Eingang konfigurierst muss es auf H bleiben. Bei L an
/SS schaltet das SPI in den Slave-Mode.
>Hast du eventuell die Initialisierung als asm code. Damit könnte ich >zumindest
testen ob es überhaupt geht.
Das DOGXL habe ich vor längerer Zeit nur mal kurz getestet. Also noch
keine richtige Lib erstellt. Die Initialisierung von SPI und LCD habe
ich dir mal in den Anhang kopiert.
Ein Beispiel für die Initialisierung in C findest du auch bei EA:
http://www.lcd-module.de/support.html
MfG Spess
habe jetzt den elko an VLCD durch einen aus keramik ersetzt und den 10M
Widerstand hinzugefügt der nach neuerem datenblatt hinzugefügt werden
soll. Auch nach vielem vielem probieren bekomme ich den doxl nicht zum
laufen.
Keine spannung an VLCD. Werde es jetzt morgen mal mit dem tip von oliver
probieren. hab langsam das gefühl, das der display kaputt ist. naja mal
schauen...
Ich betreibe das DOGXL im 4wire-Mode;
sollte eigentlich (wenn's richtig umgesetzt ist) egal sein.
Straff mal Deine Initialisierung, die meisten Parameter werden eh per
default gesetzt.
Bei mir sieht's so aus.
Mann erkennt dann flächig einen Hauch von Pixel.
Wie sieht denn Dein Display nach der INIT aus?
Gruß Holger Sch
ps:
Deine:
waitus();
kannste vergessen!
ziehst du den CD nach der Übertragung ohne Verzögerung wieder auf High?
die waitus() war dafür gedacht da noch ein bischen zeit zu geben. meinst
das macht probleme?
ok, mit dem Befehl "Display_Enable" müsste sich eigentlich Vlcd
einstellen.
>Muss ich vielleicht MOSI oder SCK noch auf high ziehen?
Nein, Deine SPI-Initialisierung sollte richtig sein und die
entsprechenden Zustände nach einem Datentransfer herstellen.
Initialisiere nur mal "Vbias-pot", nix anderes, und spiele mit dem
Parameter rum.
Du initialisierst mit 0x5F, ich(FSTN pos. transflective) mit 0x9C.
Wenn's nix bring, klekker mal die Hardware zu Papier;
so wie'se ist, nicht so wie Du denkst.
Gruß Holger Sch
Nur vbias potentiometer zu intiliasieren bringt keine änderung. die
schaltung ist wirklich wie nach datenblatt (ausnahme reset auf VDD).
Werde dann morgen mal nen schaltplan basteln...
PB2 schaltet auch den CD, habs nachgemessen. die spannungsteiler bringen
auch schöne 3V an den dogxl.
SCK und MOSI sind ja dann zwangsläufig durch die SPI init
funktionstüchtig.
So das Dislay funktiniert!!! Es ist mir fast ein bischen peinlich aber
als ich heute den schaltplan erstellt habe ist mir aufgefallen das SCK
und SDA vertauscht sind...ggrrrr
Jetzt habe ich 13,6 V an VLCD und überall auf dem display verteilt PIXEL
(normal)????
Für alle die den dogxl mit einem atmega8 betreiben wollen, stelle ich
mal hier den Schalplan und Quelltext mit rein.....
Hi
>...habe ist mir aufgefallen das SCK und SDA vertauscht sind...ggrrrr
Stimmt, das führt manchmal zu einem Fehlverhalten.
>Für alle die den dogxl mit einem atmega8 betreiben wollen, stelle ich>mal hier den Schalplan und Quelltext mit rein.....
Der ATMega8 bei einem solchen Display etwas schwach auf der Brust. Ein
Bild in der Displaygröße hat schon über 4K. Einen oder mehrere Fonts
möchtest du vielleicht auch.
Übrigens kann das Display, im Gegensatz zu der Datenblattangabe, auch
Grautöne. EA hat das, lt. eigener Aussage, aus Kontrastgründen nur als
SW-Display beworben.
MfG Spess
ja das mit den grautönen sehe ich auch grad. nach der init sind auf dem
ganzen display pixel in verschiendenen tönen verteilt.
Bin grad ein bischen am probieren mal ein paar pixel zu steuern.
Hallo Felix,
na, hat dann ja doch geklappt.
> und überall auf dem display verteilt PIXEL> (normal)????
Das Display-RAM ist undefiniert, wenn Du alles mal mit 0x00 beschreibst
erhälst Du eine gleichmäßige Fläche. Dann noch mit den Displayparametern
rumspielen und gut isses.
Wenn Du dann mit der Frequenz hochgehen solltest währe es angebracht,
die Spannungsteiler für's DOGXL um den Faktor 10 zu verkleinern.
Gruß Holger Sch
also wenn ich alles mit 0 beschreibe bekomme ich einen fast schwarzen
display. wenn man genau hinguckt sieht man aber vertikale streifen.
ich schreibe die 0 mit der schleife:
for(p=0; p < 26; p++) // 26 Pages
{
for(c=0; c < 160; c++) // 160 Columns
{
// SPI_Senden(0x00 + p);
// SPI_Senden(0x00 + c);
// SPI_Pixel(0b00000000);
}
}
Hi
>also wenn ich alles mit 0 beschreibe bekomme ich einen fast schwarzen>display.
Dann hasst du ein 'negatives' Display. Dann zum Löschen halt mit $FF
beschreiben.
MfG Spess
jetzt gehts. Man sollte in c die variablen deklarieren. sonst fängt die
schleife irgendwo an :)
genau, da ich ein negatives habe kann ich den display mit FF leer
machen. Wenn ich alles mit 00 beschreibe wird der display ganz kurz
hell, dann aber sofort wieder dunkel. kann der dogxl das nicht ab?
Hi
>Wenn ich alles mit 00 beschreibe wird der display ganz kurz>hell, dann aber sofort wieder dunkel. kann der dogxl das nicht ab?
Mach mal den Kondensator an VLCD größer. 100n stehen zwar im aktuellen
Datenblatt, sind aber nach meiner Erfahrung zu klein.
Beitrag "Re: Probleme Kontrast DOGXL160 - Graphik-LCD"
MfG Spess
also ich habe jetzt mal ein bischen rumprobiert.
aber ich verstehe die Adresszuweisung von Page und Column nicht.
Im Datenblatt steht z.b "set page adress 011 PA(4-0) mit PA=0-25
Soll ich dann mit den ersten 5 Bit eine Zahl zwischen 0 und 25
darstellen??
Hi
>Soll ich dann mit den ersten 5 Bit eine Zahl zwischen 0 und 25>darstellen??
Die oberen 3 Bit (011) spezifizieren den Befehl 'Set Page Adress' und
die unteren 5 Bit die Pagenummer.
>Im Datenblatt steht z.b "set page adress 011 PA(4-0) mit PA=0-25
Du meinst hoffentlich das Datenblatt vom Displaycontroller (UC1610).
MfG Spess
ah ok das habe ich verstanden. also die pixel kann ich jetzt schon
relativ gut und gekonnt setzen. das einzige Problem was ich jetzt noch
habe ist das wenn ich den display komplett dunkel mache mit:
for(p=0; p < 26; p++) // 26 Pages */
{
for(c=0; c < 160; c++) // 160 Columns */
{
SPI_Senden(0x00 + p);
SPI_Senden(0x00 + c);
SPI_Pixel(0b00000000);
}
}
Dann kann ich die pixel nicht mehr ansteuern.
Wenn ich hingegen den Pixelsalat vom start beibehalte und dort drin
rumwurschtel geht alles.
Hi
>Dann kann ich die pixel nicht mehr ansteuern.>Wenn ich hingegen den Pixelsalat vom start beibehalte und dort drin>rumwurschtel geht alles.
Du kannst kein einzelnes Pixel ansteuern. Um ein Byte (4 Pixel) gezielt
zu Beschreiben gehst du wie folgt vor:
Kommando Page setzen
Kommando Low(Spalte) setzen
Kommando High(Spalte) setzen
Datenbyte setzen
MfG Spess
Hi
>was meinst du mit Low spalte bzw high spalt? den cs zieh ich bei>Kommandos für die Übertragung immer nach low.
Mal angenommen du willst in Page5 das Byte 53 adressieren dann sendest
du
1. Kommando 0b01100101 = 0b01100000 (Set Page Adress) + 0b00000101 (5)
2. Die Spalte in 2 Befehlen. Einmal für das untere Nibble und dann für
das obere Nibble.
53 = 0b00110101
| ||__|__Unteres Nibble
|__|______Oberes Nibble
Daraus ergeben sich die beiden Befehle:
0b00000101 = 0b00000000 (Set Column Address LSB) + 0b00000101
0B00010011 = 0b00010000 (Set Column Address MSB) + 0b00000011
MfG Spess
ok Ich habe es bis jetzt wie folgt gemacht.
1. Page senden: 0b01100000
2. column senden: 0b00000000
damit wäre die Position ganz oben links am Display.
3. Daten für Pixel senden womit ich dann bestimmen kann welche der 4
Pixel an oder aus sind.
war das so komplett falsch? es hat zumindest meist funktioniert.
Hi
>war das so komplett falsch?
Nicht komplett.
>2. column senden: 0b00000000>damit wäre die Position ganz oben links am Display.
Aber was ist so schwer zu verstehen, das die Column Adresse nicht in
einem Stück gesendet wird? Dein Befehl setzt die Colunm Adresse auf
einen Wert 0bxxxx0000.
Tu dir bitte einen Gefallen und lies das Datenblatt vom
Displaycontroller. Mit dem Datenblatt vom Display kommst du in Puncto
Programmierung nicht weit. Die Befehlsliste ist unvollständig und nicht
erläutert. Und mit deinem
Trial&Error-Dediller wirst du nicht weit kommen.
MfG Spess