Geschätztes Forum... Ich hab ein Problem bei dem ich einfach nicht weiter weiss. An einem mega 32 hängen eine Compact Flash Karte und noch ein ADC/DAC Modul. 8 Bidirektionale Datenleitungen vom AVR zu beiden Busteilnehmern. 3 Adressleitungen zu beiden Busteilnehmern. Chip Select je für Busteilnehmer. Busy-Leitung der CF zum mega 32 (um Bereitschaft der CF auszuwerten). Datentransfer ca. 100 kB/s. 5V für alle, Leiterbahnbreite 0.8mm, Abblock C 1uF Folie, 10uF Kerko bei allen Komponenten. 5V ist sauber. Das Auslesen von Daten der CF und Ausgabe an DAC funktioniert mit der einten CF Karte immer perfekt, mit einer 2. Baugleichen auch, mit einer 3. Baugleichen aber leider nicht immer, manchmal kommen fehlerhafte Daten von der Karte. Mit einer Karte eines anderen Herstellers geht es gar nicht oder es kommt fast nur Datenmüll. Ich kann Software Fehler ausschliessen. Es scheint mir als ob es ein Frequenzproblem ist, quasi HF-Effekte, welche für einige CF kritisch sind. Das ganze läuft auf einem Print, 0.2 mm Leiterbahnbreite. Die Leiterbahnen sind ungefähr gleich lang. Leider habe ich keine Ahnung wie ich das Problem lösen kann. Die Signale sehen auf dem KO meist okay aus, manchmal aber auch wirklich hässlich, Sägezahn mit nur halber Spannung :( Weiss jemand was dazu ?
Hallo Busy, sieht wie ein Hardware-Problem aus. Könnte es sein, dass die CF-Karte sehr hochohmige Ausgänge hat? Die internen Pull-UPs Deines µC auch deaktiviert? Wenn Du alles niedriger taktest, wie sieht dann das Fehlerbild aus? Lässt Du allen Busteilnehmern genügend Zeit, wenn Du von Read auf Write und umgekehrt umschaltest? Ich weiß, Fragen über Fragen ;) Bernhard
Hi Bernhard! Danke für dein Interesse! Laut CF-Spezifikationen kann jeder Ausgang (wenn die CF Daten liefert) mind. 8mA treiben. Interne Pullups des AVR sind deaktiviert. Alle Read, Write etc. Zyklen werden nach Datenblatt eingehalten. Ich werde es baldmöglichst mit einem niedrigerem Takt versuchen (16 Mhz Quarz tauschen). Spasseshalber hat ein Kollege 470? Ohm Widerstände in Serie! der Datenleitungen bei der CF gelegt und es funktioniert nun auch mit einer CF welche vorher nur Datenmüll lieferte. Wie gesagt, ich kann es mir nicht erklären. Die Widerstandslösung Lösung funktioniert im Moment zwar, aber beruhigt mich nicht. Leider habe ich wehnig Ahnung von HF-Effekten.
@ Hauke Tut mir leid, leider darf ich das von der Firma aus nicht. Beschreibung; 0.2mm Leiterbahndicke. Alle Signalleitungen ca. +- 7 cm gleich lang. Der Bus geht zwar vom AVR noch an andere Komponenten, diese sind aber zur Zeit noch gar nicht bestückt. Ich würde schätzen die jeweiligen Signalleitungen sind max. 70 cm lang.
in dem Fall könnten es Reflexionen sein, bei moderaten 100kb dürfte das aber eigentlich noch nicht so das grosse Problem sein, korrektes Programm vorausgesetzt. PS: was ist ein KO?
KO = Osziloskop. Es werden 100 kB/s über den Bus ausgetauscht. Natürlich "asynchron" wegen der Ladezeiten der Sektoren; Nach dem Sektor x Lesebefehl an die CF dauert es eine Zeit bis diese parat ist und dann werden ziemlich fix die 512 Bytes ausgelesen. Wie ermittle analysiere ich Reflexion, besser wie wirke ich dem entgegen :) ?
Achso schade aber achte drauf, keine rechten winkel in den datenleitungen zu haben, da kommts zu reflexionen. Wie siehts mit masseflächen aus? irgendwelche anderen hochfrequenten leitungen in der nähe? (oder z.b. auf der unterseite) Das es mit Widerständen besser geht lässt darauf schließen, dass der avr zu niederohmig für die karte ist. Probier ruhig mal verschiedene werte durch(auch höhere)
Es kann auch sein, dass der Bus zu hochohmig im Read-Modus ist, somit wirken parasitäre Kapazitäten und verfälschen die Signale. Vielleicht mal Widerstände zwischen +5V und den Busleitungen schalten(1...10k), aber die Seriellen R der CF dabei beachten, dass der Pegel auch stimmt. Bernhard
Jo wir haben keine 90 Grad Leitungen ausser bei den Vias. Diverse Leitungen kreuzen sich auf der Unterseite. Ausser dem Bus und dessen Signale sind keine Hochfrequenten Signale vorhanden. Mit Pullup / down ("Abschlusswiderständen")diverser Werte der Leitungen bringen kein Erfolg. AVR zu niederohmig wenn als Eingang geschaltet, kann ich mir nicht vorstellen. Reflexionen schon eher... uch das wird schwierig wenn man keine Erfahrung damit hat.
Manchmal ist es günstiger, diverse Wartezeiten im Programm-Code zu vereinbaren. Nach dem Motto: Weniger ist manchmal mehr Bernhard
Okay, ich werde baldmöglichst die Wartezyklen hochschrauben und den Quarz runter, mal sehen was passiert. Würdet ihr mir Pullups oder downs empfehlen und vorallem an welchem Ort / Teilnehmer soll ich sie setzen ? Ich denke da die CF nur mind. 8 mA bringen muss nach spec. werde ich es mal mit 3k3 Ohm probieren. Aber warum funktionierts mit serie R? Dadurch werden ja nur die parasitären Kapazitäten noch langsamer geladen? Wie kann es passieren das "zufällig" die Pegel am Arsch sind :) ? Fragen über Fragen... Danke an die Helfenden!
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.