Forum: Mikrocontroller und Digitale Elektronik Probleme mit 8-Bit Datenbus


von Busy (Gast)


Lesenswert?

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 ?

von Bernhard S. (bernhard)


Lesenswert?

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

von Hauke Radtki (Gast)


Lesenswert?

Nen bild vom layout wäre auch hilfreich:)

von Busy (Gast)


Lesenswert?

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.

von Busy (Gast)


Lesenswert?

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

von H.joachim S. (crazy_horse)


Lesenswert?

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?

von Busy (Gast)


Lesenswert?

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  :) ?

von Hauke Radtki (Gast)


Lesenswert?

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)

von Bernhard S. (bernhard)


Lesenswert?

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

von Busy (Gast)


Lesenswert?

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.

von Bernhard S. (bernhard)


Lesenswert?

Manchmal ist es günstiger, diverse Wartezeiten im Programm-Code zu
vereinbaren.

Nach dem Motto: Weniger ist manchmal mehr

Bernhard

von Busy (Gast)


Lesenswert?

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!

von arc (Gast)


Lesenswert?


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
Noch kein Account? Hier anmelden.