Hallo,
Ich habe mir vor Kurzem ein DOGM132 Grafik-Display geholt und scheitere
an der Ansteuerung.
Ich habe schon ein paar Texte hier über das Display gelesen, aber keiner
hat wirklich etwas gebracht.
Die Kondensatoren in der Schaltung sind 1µF, wie im Datenblatt.
Der ATmega32 arbeitet mit 5V, daher die Spannungsteiler.
CS,MOSI,SCK sind an den SPI-Pins und LCD_reset & RAMSEL sind an PORTD.
Anbei ist der C-Code & ein Bild der Beschaltung (die Jumper sind
natürlich übergelötet, JTAG ist aus).
Momentan kann ich die nicht genauer nachprüfen. Die Hardware habe ich
schonmal flüchtig geprüft (auf lötfehler) und die schien i.O. zu sein.
Ich rufe dann im Code einfach nur dogm_init(); auf und erwarte, dass
alles Kurz an & wieder aus geht - es passiert aber nichts! (Der
Prozessor macht noch anderes, woran ich merke dass der Prozessor
funktioniert und die Funktion auch aufgerufen wird...)
Eigentlich habe ich mit Programmieren, Elektronik u.s.w. schon etwas
Erfahrung, aber momentan komme ich mit dem Display einfach nicht weiter
und hoffe hier auf Hilfe...
Ich habe gerade gesehen, dass einer der Spannungsteiler-Widerstände
nicht richtig gelötet war. Kann das Display davon schaden genommen
haben?
Das Display hat vom Mega16 die 5V vom Pin über 10kOhm auf Reset oder A0
bekommen :-/.
MfG Alex
Das Problem habe ich jetzt gelöst. Die Buchse in die ich das Display
gesteckt hatte, hielt nicht richtig und hat nicht alle Kontakte korrekt
hergestellt.
Jetzt scheint das Display zu laufen :-).
MfG Alex
Ich spiele gerade mit einem DOGM128 herum.
Das müsste ähnlich genug sein.
Das Display habe ich auf einer Adapter-Platine sitzen die auf meinem
Controller-Board steckt.
Spannungsteiler an Reset und Select sind nicht so geschickt weil die ja
low-aktiv sind und somit aktiviert werden, wenn der Controller durch den
Reset läuft, etwa beim Programmieren.
Das habe ich mit einem digital-Transistor und einem Pullup-Widerstand
gelöst, dann ist zwar die Polarität für die Software anders herum, macht
aber nichts.
Ein Teiler 10k/10k macht auch etwas knappe Pegel.
Ich benutze 4k7/6k8, betreibe das Display aber auch "nur" mit 3,0V.
In meinem Aufbau dauert ein Flankenwechsel mit diesen Spannungs-Teilern
etwa 15 ns mit einem FET als Level-Shifter kam ich nur auf 12 ns runter.
Die wichtigste Erkenntnis bisher war aber, dass der SPI-Takt während der
Initialisierung maximal 500 kHz betragen darf.
Bei 16 MHz Takt meines AT90CAN32 setze ich vor dem Display-Init SPR1 und
kann nach dem Init das wieder löschen und somit den SPI mit 4 MHz laufen
lassen.
Ausserdem setze ich in SPCR noch CPHA und CPOL.
@Rudolph R.
Ich erkenne den Nachteil der Spannungsteiler nicht so richtig...
Sobald das Display benutzt wird, Resete ich es ja und beim Schreiben
nutzte ich CS. Vorher kann an den Pins also passieren was will...
Die Spannungsteiler teilen das Signal auf ca. 2,3V runter...
funktionieren tut es. Wenn ich mehrere von den Dingern baue, dann nehme
ich wirklich andere Spannungsteiler, aber für meinen Erstversuch reicht
es mir ersteinmal.
Mein Prozessor hat einen 16 Mhz Quarz. Zum Testen habe ich SPI mal auf 8
Mhz gestellt und es funktioniert (auch beim Init).
Wie kommst du darauf, dass man nur 500kHz nutzen sollte?
Das ist mein erstes Projekt wo ich SPI nutze und beim Durchlesen dachte
ich mir auch ich müsste CPOL & CPHA nutzen, da es hier aber alle ohne
machen, dachte ich es wäre ohne richtig... Ich habs jetzt wieder rein
getan :-).
MfG Alex
Alex wrote:
> @Rudolph R.> Ich erkenne den Nachteil der Spannungsteiler nicht so richtig...
Wie gesagt, das trifft nur Select und Reset und ist eher theoretisch.
Zumal die Daten ja nur in Richtung Display gehen.
> Die Spannungsteiler teilen das Signal auf ca. 2,3V runter...
Dann ist Deine Versorgung nicht stabil auf 5V?
Und das meinte ich damit, dass die Pegel etwas schlapp wären.
> funktionieren tut es.
Das habe ich auch nicht bestritten.
Gerade die Kombination mit Reset ist eigentlich wieder gut.
Man kann auf diese Art ja auch andere Komponenten wie SD-Karten
anschliessen.
Mit einem Spannungs-Teiler auf dem Select sollte man dann aber besser
keine Karte im Sockel haben, wenn man den Controller programmieren
möchte.
> Mein Prozessor hat einen 16 Mhz Quarz. Zum Testen habe ich SPI mal auf 8> Mhz gestellt und es funktioniert (auch beim Init).> Wie kommst du darauf, dass man nur 500kHz nutzen sollte?
Weil das eben genau die Erfahrung ist die wir mit dem DOGM128S-6 gemacht
haben.
Hmm, ich habe die Takt-Reduzierung während der Initialisierung gerade
mal aus meinem Code rausgenommen - läuft doch.
Gleiche Plattform wie vorher allerdings anderer Code, da werde ich dem
Arbeitskollegen der das zuerst in Betrieb genommen hat wohl mal eine
EMail schicken müssen, dass er doch nochmal sein Programm prüfen sollte.
:-)
> Das ist mein erstes Projekt wo ich SPI nutze und beim Durchlesen dachte> ich mir auch ich müsste CPOL & CPHA nutzen, da es hier aber alle ohne> machen, dachte ich es wäre ohne richtig... Ich habs jetzt wieder rein> getan :-).
Mir kommt dieses Setup vor allem entgegen weil der 8-Kanal DAC den ich
auf dem Board noch drauf habe das auch braucht. :-)
> Mir kommt dieses Setup vor allem entgegen weil der 8-Kanal DAC den ich> auf dem Board noch drauf habe das auch braucht. :-)
Mein PGA2311 und die Schieberegister 74595 auch. :-)
Okay, ob das Initialisieren bei 4 MHz klappte oder nicht,
war jetzt in meinem Code von der Optimierungs-Stufe abhängig.
Die Zeit zwischen Reset-loslassen und dem Übertragen der Daten war wohl
zu knapp, ich verwende im ganzen Code kein einziges delay().
Die Zeile für den Reset habe ich jetzt einfach aus der display_init()
genommen und in main() vor can_init() gesetzt, das gibt dem Display auch
ohne delay() genug Zeit aus dem Reset zu kommen.
Im Datenblatt steht, dass es ein bisschen Zeit braucht bis man schreiben
kan (<1ms stand da Wimre). Ich hab jetzt ein 1000µs Delay nach dem Reset
drinnen. Alle anderen Delays habe ich raus genommen und es läuft noch
mit 8 Mhz. :)
CS nutze ich weiterhin.
MfG Alex