Hallo zusammen hier im Forum, ich komme einfach nicht mehr weiter… Ich habe Probleme mit dem CS am EA-DIP204. Dieser hängt an meinem Prozessor am PB0. Ich konnte das ganze auch sowohl mit dem Multimeter (LOW = 0.46V / HIGH = 4.69V) als auch mit dem Oszi messen. Ich möchte das Display gerne mit dem CS-Pin steuern. Wenn ich in der Initialisierung des DIP204 den CS-Pin auf LOW ziehe und diesen dann dort lasse, funktioniert das Programm fehlerfrei. Sobald ich aber, bevor ich etwas über SPI senden möchte, das CS auf LOW und nach dem senden wieder auf HIGH setzte, dann geht mein Programm nicht mehr, ich kann das nicht verstehen. Ich habe schon probiert den CS mit einem PULL-UP und auch mal mit einem PULL-DOWN auszustatten (ich weiß das war unnötig aber ich hab echt alles probiert) Laut Datenblatt des KS0073 darf die Zeit von CS-low zu SCLK-Low 60ns betragen. Das ist auch nicht das Problem. Ich habe aus dem Defines [en/disable_dip204()] schon Funktionen gemacht damit ich besser debuggen kann. Auch die Optimization ist aus. Vielleicht weiß von Euch jemand einen rettenden Tipp für mich… Randbedingungen: ATmega644P auf STK500 F_CPU 8MHz intern EA-DIP204-4 blue über 2m Kabel am STK500 WINAVR mir Eclipse V3.4.2 PS: Die Funktion [wait_dip204_ready] geht noch nicht, wollte erst das mit dem CS hin bekommen. Deshalb taucht diese noch nirgends auf! Viele Grüße, Marcel
Marcel K. schrieb: > dann geht mein Programm nicht mehr Was heißt, dein Program geht nicht mehr? Bleibt es hängen, oder wo im Debugger befindet es sich dann? Oder geht nur das Display nicht mehr?
Das mit den Brücken hast berücksichtigt? SERIELLER MODUS Das Modul kann auch mit synchron seriellen Daten beschrieben werden. Dazu muss die Wechsellötbrücke 4/8 auf der Modulrückseite geöffnet und auf SPI geschlossen werden. Die Spezifikation zur seriellen Datenübertragung finden Sie im Kontrollerdatenblatt KS0073 von Samsung (z.B. http://www.lcd-module.de/eng/pdf/zubehoer/ks0073.pdf)
Hallo und guten Morgen, danke erst mal für eure Antworten! @Ansbach: Ja, das Diplay zeigt nichts mehr an! Beim debuggen läuft das Programm normal durch. Ich habe auch mal versucht, in der Initialierungsphase soetwas auszuprobieren, das hat dann geklappt. init_spi4dip204(); DDRB |= (1<<PB0); // EN Ausgang enable_dip204(); delay_us(1000); disable_dip204(); ex_function_set(LINE,LINE_4); disable_dip204(); delay_us(1000); enable_dip204(); ex_function_set(CURSOR,NORMAL); disable_dip204(); delay_us(1000); enable_dip204(); display_control(DISPLAY,ON); disable_dip204(); delay_us(1000); enable_dip204(); lcd_clear(); disable_dip204(); delay_us(1000); enable_dip204(); cursor_home(); disable_dip204(); delay_us(1000); enable_dip204(); entry_mode(CURSOR,INCREMENT); disable_dip204(); delay_us(1000); Sobald ich allerdings die en/disable_dip204()- Funktionen in die Senderoutine gepackt habe, lief das ganze nicht mehr!!! @Klaus: Ja, das habe ich alles berücksichtigt! Wie gesagt, es läuft ja wenn ich das CS nicht verwende. Kann es sein, das die CS- Leitung intern irgendwie defekt ist? Mir ist auch aufgefallen, wenn ich den Reset-Pin des Display über einen Pull-Up oder einen Pull-Down (10k) beschalte, dass das Display trotzdem läuft. Seltsam. Ich habe das Display schon sehr lange und sehr oft in den Anfangsprojekten verwendet. Ich kann es nicht ausschließen, das es eventuell irgendwann mal etwas abbekommen hat. Aber dann dürfte es eigentlich gar nicht mehr gehen, oder? Damals habe ich die CS-Leitung fest mit GND verbunden gehabt und ein delay für alle Befehle verwendet. Das möchte ich jetzt verbessern mit Abfragen von BF und halt das CS-Signal! Grüße... Marcel(",)
Hi Kann es sein, das du mit CS das Display evtl. zu früh abschaltest? MfG Spess
Hallo Spess, was meinst du mit: "zu früh abschaltest" ?? CS-LOW oder CS-HIGH? Im Datenblatt vom KS0073 steht, dass dem Display mit dem "herunterziehen" des CS-Leitung signalisiert wird, beim nächsten "LOW" auf der SCLK-Leitung folgen Daten. Die Zeit zwischen CS-LOW und SCLK-LOW dürfen 60ns betragen. Das wird wohl locker eingehalten. In den Beispielcodes die ich zu diesem Thema gefunden habe, wird auch nicht darauf geachtet, dass das CS-Signal eine bestimmt Zeit einhält! Grüße, Marcel
Hi
>was meinst du mit: "zu früh abschaltest" ?? CS-LOW oder CS-HIGH?
Eigentlich meinte ich CS-High bevor die Übertragung abgeschlossen ist.
MfG Spess
Hallo Spess, naja, sitze jetzt nicht davor, müsste ich testen. Aber da meine "spi_putchar()" eigentlich wartet bis das SPIF-Flag = gelöscht wurde, gehe ich mal davon aus. Vorher komme ich aus dem "spi_putchar" gar nicht raus (while-Schleife). Daher denke ich, dass das Senden beendet ist bevor ich wieder CS-HIGH, mache! Grüße, Marcel
Hallo Forum, leider konnte mir hier im Forum niemand bei meinem obigen Problem helfen. Trotzdem Danke für die Versuche. Naja wie so oft, hilft es bei mir, dass ganze einfach mal ein paar Tage liegen zu lassen. Dann geht man bei einem Neuversuch ganze anders an die Sache ran. Ich habe den Fehler gefunden und möchte jetzt wenigstens mitteilen, woran es gelegen ist. Vielleicht hilft es irgendjemand anderem einmal :o) Jetzt im nachhinein ist es ein echt total doofer Fehler, das ist schon fast peinlich gg Es ist so, wenn man sich das Datenblatt des KS0073 anschaut, wird erklärt, wie eine serielle Kommunikation ablaufen soll. Die Übertragung beginnt mit einem „starting Byte“ und anschließend folgen dann die Datenbytes. Ich habe wegen der Übersicht, deshalb zwei Funktionen geschrieben. Die erste nannte sich „send_sof()“. Der Übergabe-Wert war dann die gewünschten RW bzw. RS bits. Also z.B. so „send_sof(WRITE_COMMAND)“. Nach jedem „send_sof() folgten dann die reinen Daten in der Funktion „send_data()“. Naja, den Quellcode für das Display habe ich vor einigen Jahren geschrieben damit ich das Display verwenden kann. Damals habe ich aber die CS- Leitung nicht verwendet. Jetzt wollte ich, dass die CS-Leitung mit verwenden werden soll, so das alles seine Richtigkeit hat :o) Ich dachte, ich muss jetzt einfach nur das CS-Signal in den Funktionen auf „LOW“ bzw. „HIGH“ ziehen und schon funktioniert es. Ich kann gar nicht glauben wie blöd der Fehler eigentlich war. Ich habe die CS-Leitung auf „LOW“ gezogen, das „send_sof()“ gesendet und dann die CS-Leitung wieder auf „HIGH“ gezogen. Anschließend wieder CS auf „LOW“ gezogen und nach senden der eigentlichen Daten CS wieder auf „LOW“ gelegt. Naja und darin lag halt der Fehler! Man kann ja am Display nicht mitten in der Übertragung einfach den Zustand der CS-Leitung ändern. Jetzt habe ich den Quellcode so umgeschrieben, dass vor dem ersten senden, CS auf „LOW“ gezogen wird und erst nach dem letzten Datenbyte wieder auf „HIGH“ geht. Jetzt klappts so wie es soll… :o) Also danke noch mal für die Anteilnahmen und viele Grüße, Marcel (",)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.