Hallo zusammen,
ich versuche bereits seit zwei Tagen das Display zum laufen zu bekommen,
aber nichts funktioniert. Ich könnte noch nicht einmal sagen, ob die
Anzeige vllt. defekt ist.
So sieht meine Verbindung aus:
ATTiny44A ---- EADOGS102N-6
===========================
PA1 - CS0
PA2 - Reset
PA3 - CD
PA4 (USCK) - SCK
PA5 (MISO) -
PA6 (MOSI) - SDA
Das Display läuft mit 3,3V und wurde mit den angegebenen 3x 1µF
Kondensatoren
angeschlossen (http://www.lcd-module.de/deu/pdf/grafik/dogs102-6.pdf,
Seite 4)
Hier der Code zum initialisieren:
> Das war nun leider nicht der Fehler
..dann wars nicht ∗der∗ Fehler sondern ∗einer∗ (von vielen). Aber um
nochmals darauf herumzureiten: was hast Du denn geändert an den
markierten Stellen und wo noch überall? Oder anders gesagt: Wie sieht
der Code jetzt aus?
> DDRA = (1 << LCD_CD);>Aus dem = habe ich ein |= gemacht.
Pin CD möchte welchen Level für Kommandos? Richtig! Low. Du schaltest
ihn aber auf High für Daten.
T.roll schrieb:>> DDRA = (1 << LCD_CD);>>Aus dem = habe ich ein |= gemacht.>> Pin CD möchte welchen Level für Kommandos? Richtig! Low. Du schaltest> ihn aber auf High für Daten.
eigentlich nicht.
An dieser Stelle wird erst mal nur der Pin auf Ausgang gestellt.
Aber so unrecht hast du nicht, denn in
1
voidSPI_Transmit(charcData)
2
{
3
PORTA&=~(1<<LCD_CS);
4
...
wird fleissig an einem Pin LCD_CS rumgeschraubt. Der allerdings ist
wiederrum nicht auf Ausgang gestellt.
Ach das hat doch keinen Sinn.
Zeig deinen kompletten Code, so wie er jetzt ist. Das muss doch alles
kontrolliert werden. Da steckt doch noch jede Menge anderes Zeugs
drinnen. Immer dieses posten von Code-Fitzelchen. Und die Helfer dürfen
sich dann aus 3 Posts und jeder Menge Phantasie die Einzelteile zusammen
suchen, wie der Code wohl jetzt aussehen könnte. Du bist der der Hilfe
will. Also mache es anderen leicht dir zu helfen.
Karl Heinz schrieb:> eigentlich nicht.> An dieser Stelle wird erst mal nur der Pin auf Ausgang gestellt.
Da habe ich DDRA mit PORTA vertauscht. Es ist zu spät :)
Das Größte Problem ist das es überhaupt keine Warte zeiten zwischen den
einzelnen schritten gibt. Das heißt das die Pins ständig geändert werden
aber der Controller des Displays es ganricht mitbekommt.
Du musst aufjedenfall die richtigen Timmings einstellen. Und wie im
Datenblatt des Displays steht findest du die Timmings im Dattenblatt des
Diplay Controllers auf Seite 41.
http://www.lcd-module.de/eng/pdf/zubehoer/uc1701.pdf
Stell die Zeiten ruhig ein bisschen länger ein das ist besser als wenn
sie zu kurtz sind.
Erstmal danke für die vielen Antworten.
Mit einem Teil des Beispielcodes von EADOGS konnte ich das Display zum
blinken bringen. Wenn ich allerdings den gesamten Code ausführe erhalte
ich einen Overflow im Data Memory??? Ich habe die beiden mitgelieferten
Fonts gelöscht und sonst auch keine variablem mit progmem
gekennzeichnet. Woran kann das liegen?
Daran, dass du ums verrecken deinen Code nicht herzeigen willst.
Ist das wirklich so schwer zu verstehen?
Wir sind doch hier keine Hellseher!
Du hast also ein Programm geschrieben oder modifiziert. UNd das stürzt
ab. Und wir sollen jetzt irgendwie wissen, was du da für ein Problem
erzeugt hast.
Wie soll das gehen? Sollen wir Karten legen? Astrologen befragen? Oder
doch vielleicht die Antwort channeln?
Hallo Alexander,
gleich kommen die Antworten, alles einzustellen was da ist, Bilder, der
aktuelle Schaltplan und der gesamte CODE.
So wird das nichts, und Karl-Heinz hätte dir sicherlich gerne bis zum
Erfolg geholfen.
Du musst immer bedenken, wir sitzen nicht für der Hardware, noch sehen
wir den gesamten Code oder kennen die erwarteten und unerwarteten
Reaktionen des Programms.
Ein Helfer, kann nur ein Helfer sein, wenn er/sie alles von dir erfährt,
auf Nachfragen musst Du dann gewissenhaft und vollständig antworten.
Sprichwort:
"So wir ein Schuh daraus!"
Karl Heinz schrieb:> Ist das wirklich so schwer zu verstehen?> Wir sind doch hier keine Hellseher!> Sollen wir Karten legen? Astrologen befragen? Oder> doch vielleicht die Antwort channeln?
Ruhig Blut, Karl Heinz. Deine Antworten sind immer von herausragender
Qualität, und - ich weiß nicht, wie Du das machst - Du schaffst es
nahezu immer, erstaunlich lange die Ruhe zu bewahren. Lass Dich daher
nicht ärgern - auch ich weiß, wie (sehr) frustrierend es ist, zu
versuchen, Anfängern irgendetwas erklären zu wollen, wenn diese eine
bestimmte, vorgefasste Meinung haben und glauben, diese sei korrekt und
nur so ginge es... Da hilft leider nur das Konzept des "Lernens durch
Schmerz" (ein in der Erwachsenenerziehung durchaus anerkanntes
Instrument) - soll heißen, entweder gar nicht antworten oder die
Qualität der Antwort an die Frage anpassen - soll heißen: Genauso
schwammig und "mysteriös" antworten, wie die Frage formuliert ist...
Alexander Thies schrieb:> Overflow im Data Memory> keine variablem mit progmem
Die .data-Section liegt im RAM und nicht im FLASH, daher hilft Dir
progmem hier wenig (sofern es das ist, was Du meinst)...
Entschuldigt bitte! Ich freue mich ja über jede Hilfe. Der Code sieht
jetzt nur genauso aus, wie der Beispielcode aus dem EADogs Archiv weiter
oben. Die Einzige Ausnahme sind die Änderungen der jeweiligen Pins zur
Anpassung an meinen Versuchsaufbau. Ich poste es aber gerne trotzdem.
main.c
===========================
Alexander Thies schrieb:> Schaue ich mir direkt mal an! Das Problem ist gerade immer noch die> Fehlermeldung mit dem Memory Overflow.>>
1
> Program Memory Usage : 7076 bytes 172,8 % Full (Memory Overflow)
2
> Data Memory Usage : 848 bytes 331,3 % Full (Memory Overflow)
3
>
Das Teil ist schlicht und ergreifend zu groß für einen Tiny44.
4K Flash - damit kann man schon was anfangen.
Aber 256 Bytes SRAM íst nun mal nicht viel.
beide Fonts im Flash.
Die verbrauchen schon jede Menge Platz im Flash.
Die könnte man noch leswerden.
Kritischer sind aber die 256 Byte SRAM.
Da heisst es sparsam mit globalen Variablen umgehen, bzw. alle Strings
ins Flash verbannen (nachdem es von einem Font leergeräumt wurde)
An alle die dieses LCD kennen.
Seh ich das richtig, dass laut Datenblatt
http://www.lcd-module.de/deu/pdf/grafik/dogs102-6.pdf
es kein "Read Data Byte" Kommando gibt?
Denn sorry, Alexander.
In diesem Fall ist dieses LCD im Zusammenhang mit deinem Tiny44
gestorben.
Wenn es ein derartiges Kommando gäbe, dann könnte man auf Kosten der
Laufzeit noch etwas retten. Aber ohne dieses Kommandos bleibt dir nun
mal nichts anderes übrig, als im Speicher eine binäre Repräsentierung
der Pixel vorzuhalten, um korrekt zeichnen zu können.
Wer Grafik mit einem unintelligentem DIsplay machen will, braucht nun
mal in erster Linie eines: Speicher, Speicher, Speicher.
Und genau den hat dein Tiny44 nicht.
In dem Fall würde ich erst mal auf anderen Controller plädieren.
Nichts gegen den Tiny44. Aber mit 256 Bytes SRAM gewinnt man nun mal
keinen Blumentopf.
Diese Speichermenge reicht, wenn man ein fertiges Projekt hat, welches
diese Menge oder weniger benötigt und man sich fragt, welchen µC man
jetzt in der Massenproduktion einsetzt. Dann ist der Tiny44 ein
Kandidat.
Aber als allgemeines Entwicklungssystem ist das nun mal zu wenig. Ein
bisschen 'rühren' muss man sich schon können, ohne gleich an allen Ecken
und Enden an die Limits zu stossen.
Als würde ein ATMega für meine Zwecke besser sein? Welchen würdet ihr
dann empfehlen. 1024Byte EEPROM sind für dieses Display dann wohl zu
schmal bemessen...
Alexander Thies schrieb:> Als würde ein ATMega für meine Zwecke besser sein? Welchen würdet ihr> dann empfehlen. 1024Byte EEPROM sind für dieses Display dann wohl zu> schmal bemessen...
SRAM, guter Mann.
Du brauchst SRAM
Such dir einen aus. Aber einen von den moderneren. Nicht gerade die alte
Gurke Mega8, auch wenn die überall in den Tutorien vorkommt.
Karl Heinz schrieb:> In diesem Fall ist dieses LCD im Zusammenhang mit deinem Tiny44> gestorben.
Warum? Das größere SRam benötigt er nur, wenn er Pixel einzeln setzen
und löschen will. Für schlichte (überschreibende) Grafikausgaben oder
Text würd' der Tiny44 noch reichen.
Vielleicht sollte man hier mit dem Vorhandenen erstmal ein
Erfolgserlebnis produzieren, statt wegen anderer Gründe die Flinte ins's
Korn zu werfen.
Ansteuerbar ist das Display (mit eingeschränkten Features), lediglich
baut der TE zu viele Fehler, wozu auch die Verwendung nicht vorhandenem
SRams gehört. Deswegen geht's nicht. Fehler wird er jedoch auf einem
XMega genauso bauen.
Soll er sich 'nen anderen Code irgendwoher kopieren, denn selbst
geschrieben ist das wohl nicht. Wer das selbst geschrieben und somit
verstanden hätte, wäre frühzeitig zum Schluss gekommen, dass 816 Bytes
nicht in 256 Bytes rein passen. Und auch dass EEProm zwar zur
Bereithaltung von Bitmaps verwendbar ist, aber nicht als Bildspeicher
zur Pixeladressierung taugt.
Da mangelt's einfach an den Grundlagen, ein größerer µC macht lediglich
bestimmten copy/paste Code direkt verwendbar, verstehen wird er deswegen
auch nicht mehr.
Danke für eure Hilfe! Leider läuft das Display immer noch nicht.
Ich habe jetzt schon diverse Szenarien durchprobiert und folgendes
notiert.
Im Anhang sind noch ein paar Bilder.
Display mit 3,23V (über Spannungsteiler):
Nach Start Nach Knopfdruck (Erreichen BP)
========================================================================
Debug Modus: Erst 3 schwarze Streifen,| Wieder weiß mit 3 Streifen
dann langsam komplett dann langsam wieder schwarz
schwarz
Normaler Start: Weißer Bildschirm Weißer Bildschirm
Display mit 3,35V (über Spannungswandler):
Nach Start Nach Knopfdruck (Erreichen BP)
========================================================================
Debug Modus: Erst schwarz dann langsam,| Erst weiß, dann wieder wie
verblassend links
Normaler Start: Weißer Bildschirm Weißer Bildschirm
Hier einmal die Anschlüsse des Displays:
15 VLCD: über 1µF Elko an GND
16 VB1- über 1µF Elko an VB1+
17 VB0- über 1µF Elko an VB0+
18 VB0+ s.o.
19 VB1+ s.o.
20 VSS an 3,3V
21 VSS an 3,3V
22 VDD2/3 GND
23 VDD1 GND
24 SDA/MOSI an PA5/DO
25 SCK an PA4/USCK
26 CD an PA3
27 RST an PA2
28 CS0 an PA1
Hi
>15 VLCD: über 1µF Elko an GND>16 VB1- über 1µF Elko an VB1+>17 VB0- über 1µF Elko an VB0+
Die Elkos solltest du durch Keramikkondensatoren ersetzen.
Welche Spannung misst du an VLCD?
MfG Spess
Alexander Thies schrieb:> Display mit 3,23V (über Spannungsteiler):
Woher stammen die 3,23 V? Ausgerechnet oder gemessen (mit oder ohne
Display)?
Ein Spannungsteiler alleine taugt nur zur Stromversorgung, wenn man
wirklich weiß, was man tut. Wenn Dein Display keine konstante
Stromaufnahme hat, wackeln Deine 3,23V lustig umher...
> Welche Spannung misst du an VLCD?>> MfG Spess
0V messe ich, aber das ist ja auch nicht verwunderlich. Der Elko hängt
doch in Reihe hinter VLCD an GND.
> Woher stammen die 3,23 V? Ausgerechnet oder gemessen (mit oder ohne> Display)?> Ein Spannungsteiler alleine taugt nur zur Stromversorgung, wenn man> wirklich weiß, was man tut. Wenn Dein Display keine konstante> Stromaufnahme hat, wackeln Deine 3,23V lustig umher...
Wenn ich den Spannungswandler benutze liegen über dem Display die 3,3V
an.
Wenn ich es an den Spannungsteiler (3,23V) anschließe, kann ich über dem
Display noch 1,04V an. Der Spannungsteiler war nur zum Experimentieren
da. Ich hatte die Vermutung, dass vllt. der DCDC Spannungswandler defekt
ist. Das scheint aber nicht der Fall zu sein.
Hi
>0V messe ich, aber das ist ja auch nicht verwunderlich. Der Elko hängt>doch in Reihe hinter VLCD an GND.
Selbstverständlich ist das verwunderlich. VLCD ist der Ausgang für die
LCD-Spannung (>VCC). Der Kondensator dort dient der Glättung. Bei einem
ordentlich initialisiertem Display sollten dort 5..10V anliegen.
MfG Spess
Ich habe gerade nochmal nachgemessen. Zwischen Vlcd und gnd sind es
jetzt 1,4V?? Die Initialisierung des Displays habe ich wie im Handbuch
beschrieben gemacht.
Hi
>Ich habe gerade nochmal nachgemessen. Zwischen Vlcd und gnd sind es>jetzt 1,4V??
Bei meinem USB-Testboard liegen bei einen funktionierenden DOGS102 9,3V
an VLCD.
Entweder klappt deine Initialisierung nicht oder es liegt an deinen
Kondensatoren. Ich setze generell Keramik-Cs ein und hatte bisher nie
Probleme. Ist auch eine Empfehlung von EA.
MfG Spess
Aber kann das wirklich an den falschen Kondensatoren liegen, ist es
nicht egal ob 1uF mit Elko oder Kerko? Ich werde mir die kerkos dann
bestellen und hoffe, dass es besser wird :-)