Hallo, ich habe wieder mal mit einem interessanten Phänomen zu kämpfen. Ich habe ein älteres Gerät bei dem das Display nur noch ein Schachbrettmuster zeigt. Der Displaycontroller ist vom eigentlichen Display abgesetzt und ist ein S1D13505. Jetzt dachte ich mir als kleine Spielerei, ein neues Display zu verbauen und als Protokollübersetzer einen ATmega164 werkeln zu lassen. Als erstes wollte ich mir die Kommandos über die Serielle rausdumpen lassen. Als das nicht geklappt hat, habe ich mit dem Oszi das CS zum Displaycontroller angesehen. Ohne ATmega sieht man mehrere Kommandos, bei denen das CS für 40µs Low wird. Mit ATmega ändert sich weder der Pegel noch die Flankensteilheit. Allerdings kommen auf dem CS nur noch ein paar Pulse, die für ca. 5µs auf Low gehen. Es ist gerade so, als wenn der Hauptrechner etwas zurückliest und entsprechend reagiert. Das sollte aber in der Init-Sequenz aber eigentlich nicht sein. Hat jemand eine Idee?
Matthias schrieb: > Mit ATmega ändert sich weder der Pegel noch die Flankensteilheit. > Allerdings (ändert sich etwas) Was genau ändert sich denn zuerst. Offenbar beeinflusst dein ATmega oder deine Schaltung die Kommunikation. Damit fängt es an, untersuche das. Schaltplan, Quelltext und Foots vom Aufbau könnten hilfreich sein, damit wir über dein Gerät reden, nicht über etwas anderes das wir im Kopf ausdenken.
Ist das das Gerät, an welches du das neue andere Display anschließen willst? Wo ist jetzt dein ATmega164 als Protokollübersetzer eingeschleift?
Der Schaltplan zeigt den Übersetzer. Es ist zwar ein ATmega16 eingezeichnet, aber der war gerade nicht verfügbar. Der 164 ist pinkompatibel. Von dem Gerät habe ich keinen Schaltplan. Am S1D13505 ist ein kurzes (10cm) Flachbandkabel angelötet. Von da gehts über einen Micromatch auf die ATmega-Platine.
Deine Level-Shifter können bidirektional arbeiten. Das heisst, der AVR kann die bestehenden Signale stören, wenn nicht ausschließlich nur liest. Jetzt kommt es also auf dein Programm an, ob es stört.
Die Levelshifter gehen zum neuen Display. Der Atmega hängt direkt am S1D13505.
Hast du bemerkt dass der Level Shifter an jeder Leitung zwei interne Pull-Up Widerstände mit ca. 40kΩ hat, welche die alte Schaltung belasten? Außerdem wird die Kapazität deines Flachkabels und deiner Platine bis hin zum AVR auch die alte Platine belasten. Vielleicht beeinflusst das die alte Schaltung zu sehr. Was der AVR mit den Leitungen anstellt kann ich mangels Quelltext gar nicht einschätzen. Wahrscheinlich würde das ganze ohne diese Levelshifter weniger Problematisch sein. Der AVR akzeptiert die 3,3V auch ohne Pegelwandler als gültige HIGH Pegel. Zum Foto: Sehe ich richtig, dass die Pegelwandler noch gar nicht bestückt sind? Wenn ja, dann hängen da also nur eine Menge Leitungen an dem Display, die nirgendwo enden. Da fällt mir ein, dass offene Leitungen Reflexionen zurück werfen und dadurch Signale stören können.
Um vielleicht ein Missverständnis auszuschließen - die Signale werden am S1D13505 abgegriffen. Der Hauptrechner redet spricht also dieses Protokoll. Der ATmega soll es auf das Protokoll des neuen Display-Controllers übersetzen. Die Pullups hatte ich auch im Verdacht. Ich hab sie sicherheitshalber im MCUCR global ausgeschaltet. Die Leitungslänge sollte normalerweise die Flankensteilheit verringern. Allerdings ist die Signalqualität die Gleiche. Der Hauptrechner zieht wie gesagt ohne ATmega die CS-Leitung für 40µs auf Low, mit nur für ca. 5µs.
Matthias schrieb: > Die Pullups hatte ich auch im Verdacht. Ich hab sie sicherheitshalber im > MCUCR global ausgeschaltet. Ich rede von den Pull-Ups in den Pegelwandlern! > Die Leitungslänge sollte normalerweise die Flankensteilheit verringern. Sollte? Und was ist mit Reflexionen? SO etwas kann man nur mit einem Oszilloskop kontrollieren, dazu muss man aber auch die Anforderungen der alten Schaltung an die Signale kennen, sonst kann man das Messergebnis nicht bewerten. > Allerdings ist die Signalqualität die Gleiche. Das ist technisch unmöglich. Kabel ohne Auswirkung gibt es nicht.
Der Atmega hängt direkt am S1D13505. Die Levelshifter und das Display sind noch nicht verbaut. Der ATmega sollte zunächst nur die Kommandos rausplotten, die zum S1D13505 gehen.
Matthias schrieb: > Der Atmega hängt direkt am S1D13505 Wärst du dann bitte mal so freundlich, den richtigen Schaltplan zu zeigen anstatt mich in die Irre zu führen? Und schau dir mal ganz genau die Flanken der Signale an. Wenn das Kabel oder der AVR stört, dann wird sich das vermutlich im Bereich von einigen zig Nanosekunden um die Flanken herum abspielen.
Matthias schrieb: > Das Interface zum S1D13505 ist im Schaltplan J2. Ja das ist mir inzwischen auch klar geworden. Wie gesagt, überprüfe die Flanken der Signale mit einem Oszilloskop. Und wenn du Hilfe zu Programm haben willst, dann zeige es.
Nicht von dem LUFA-Projekt verwirren lassen, das liegt da nur so rum.
Matthias schrieb: > Hier die Suftware als zip. > target ATTiny13A ????? Die relevanten I/O Pins sind alle auf INPUT ohne PULL-UP konfiguriert, so Weit gut. Was für ein Timing hat die Datenübertragung zum Display im funktionierenden Fall? Wenn sie nicht extrem langsam ist, sehe ich keine Chance, dass deine ISR samt serieller Ausgabe so funktionieren kann. Dennoch sollte sie die Kommunikation des Displays nicht stören. Das wird wohl noch ein Hardwareproblem vorliegen. Womöglich sind dire Kurzen Leitungen schon das Problem. Stefan ⛄ F. schrieb: > Wie (mehrfach) gesagt, überprüfe die Flanken der Signale mit einem Oszilloskop.
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.