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.
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.
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.
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.