Schaltung läuft scheinbar nur durch Tastkopf

Gast #2288745
Lesenswert?

Hallo Forum,

habe eine Schaltung (siehe Anhang) entworfen und heute zusammengelötet.
Nur leider musste ich feststellen, das die Schaltug nicht funktioniert.
Als ich dann mit dem Oszi die Ausgänge überprüft habe, welche die 
Schieberegister (74AC164) steuern, musste ich feststellen das die 
Ausgänge arbeiten und die Schieberegister gesetzt werden. Nehme ich nun 
den Tastkopf wieder weg, so läuft gar nicht mehr! Woran könnte sowas 
liegen?

Gemessen habe ich an den Durhkontaktierungen beim ersten 74*164 zwischen 
Kontakt 5/6 (Clockpulse)  und 1/2 (um Register zu laden) und beim 
zweiten zwischen Kontakt 13/14 (Clear)

Das LCD ist noch nicht Angeschlossen wir aber theoretisch schon 
angesteuert.
Die Datei pruefadapter.c ist die aktuell verwendete Software.
Die Wartezeiten "zeit(n)" (in ms) sind nur zum Debuggen so lange 
gewählt.

Bin leider etwas ratlos.
Einen Schaltplan gibt es leider nicht mehr da ich ein kleines 
Synchronisationsproblem hatte und die Daten verloren gingen. Habe nur 
noch die *.brd Datei aus einer Mail fischen können. Bin aber dabei den 
Schaltplan neu zu zeichnen.

Vielen dank im Vorraus...
Angehängte Dateien:
Gast #2288765
Lesenswert?

1. Frage: Selber zusammengelötet? Falls ja, Platine mit Lötstoplack oder 
ohne?
Wenn die ohne ist und es selber gelötet ist, ist mit Sicherheit irgendwo 
ein kleiner Schluss, bei den Mini-Abständen.

2. Frage: Läuft es nur wenn der Tastkopf an diesen besagten Pins ist, 
oder läuft es auch, wenn nur die Masse vom Oszi angeschlossen ist?
Gast #2288774
Lesenswert?

Hört sich nach einer nicht so idealen Signalqualität auf der Taktleitung 
an. Die 74AC ... sind schnell und entsprechend empfindlich auf nicht 
terminierte Leitungen und ein schlechtes Layout (nicht ganz durchgehende 
Massefläche, teils schlechte Anbindung der Abblockkondensatoren).

Die zusätzliche Last durch den Tastkopf kann dann ausreichen um die 
Flanken langsam genug zu machen oder die Überschwinger zu dämpfen.
Moderator (Firma: Titel) Persönliche Seite #2288790
Lesenswert?

Ulrich schrieb:
> nicht ganz durchgehende Massefläche
Diese hübsche "Massefläche" verdient ihren Namen nicht.
Das sind viele kleine Masseinselchen...
Da fehlen mindestens noch 137 Durchkontaktierungen.

Christopher schrieb:
> Nehme ich nun den Tastkopf wieder weg, so läuft gar nicht mehr!
Und wie sieht das Signal aus, solange der TK noch dran ist? Siehst du da 
schon/noch Überschwinger?
Gast #2288886
Lesenswert?

Danke für die Antworten.

1. Also die Platine ist von Beta-Layout gefertigt und mit Lötstopplack
2. Läuft nur wenn der Tastkopf drann ist. Signale sehen sauber aus, 
Steile Flanke beim anstieg und auch saubere Flanken beim abfallen 
(leichtes PT2 verhalten)
3. Habe den Takt schon enorm verlangsamt, damit ich überhaupt was sehe 
an den LEDs
4. Ich denke "DDRx = 0x00;" ist schon richtig denn neber mir liegt ein 
Testboard mit als Ausgang deklarierten PORT und das mit DDRx = 0x00;


5. Hatte die Schaltung schon mal im kleinformat laufen und damals hat 
sie super funktioniert darauf hin habe ich dann das große Board 
designed.

Danke für die Hilfe
Gast #2288902
Lesenswert?

Also, die Masseflächen sind katastrophal. Das sehe ich wie Lothar. Da 
fehlen ja alle Dukos! Aber selbst mit Dukos hast du keine 
zusammenhängende Massefläche für die schnellen Taktleitungen.

Dann, was ist mit der Aura passiert? Da sind 100pro jede Menge Schlüsse! 
Z.B. bei "47" auf blau.

Ich sehe keinerlei Terminierungen der Taktleitungen! Aber selbst wenn 
welche da wären, ohne zusammenhängende Massefläche wird das nichts.

Ich sehe jetzt keinen Schaltplan, aber ich denke, du solltest das auf 
einer Vier-Lagen-Platine routen. Serien-Terminierung dürfte eventuell 
schon ausreichen.
Persönliche Seite #2288905
Lesenswert?

Magnus Müller schrieb:
> Christopher schrieb:
>> 4. Ich denke "DDRx = 0x00;" ist schon richtig denn neber mir liegt ein
>> Testboard mit als Ausgang deklarierten PORT und das mit DDRx = 0x00;
>
> Falsch.

Nachtrag:

Lies dir mal dieses Kapitel durch, dann wird dir (hoffentlich) ein Licht 
aufgehen.

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Zugriff_auf_IO-Ports
Gast #2288909
Lesenswert?

nachtrag

Magnus Müller schrieb:
> Es müsste korrekterweise lauten:
> DDRB = 0xff;      //Port als Ausgagn
> DDRD = 0x00;      //Port al Eingang


du hast natürlich recht aber komisch finde ich, das es trotzdem 
Funktioniert.
Vermutlich schalte ich, wenn der PORT als eingagn deklariert ist über 
PORTx = 0xff die PULLUPs ein und daher leuchten die LEDs
Gast #2288910
Lesenswert?

>2. Läuft nur wenn der Tastkopf drann ist. Signale sehen sauber aus,
>Steile Flanke beim anstieg und auch saubere Flanken beim abfallen
>(leichtes PT2 verhalten)

Ja, solange der Tastkopf mit seiner Streukapazität dran hängt. Typisches 
Verhalten bei Wellenwiderstandsfehlanpassung durch falsche oder fehlende 
Terminierung.

Route die Taktleitungen mal in Microstriptechnik mit durchgehender 
Massefläche und Serienterminierungen.
Gast #2288928
Lesenswert?

Ina schrieb:
> Da
> fehlen ja alle Dukos!

Dukos = Durchkontaktierungen?!

Ina schrieb:
> Dann, was ist mit der Aura passiert? Da sind 100pro jede Menge Schlüsse!
> Z.B. bei "47" auf blau.

Kontakt 47 zu blau ist sauber, das liegt an der Export Funktion von 
Eagle!

Ina schrieb:
> Ich sehe keinerlei Terminierungen der Taktleitungen! Aber selbst wenn
> welche da wären, ohne zusammenhängende Massefläche wird das nichts.

Wenn ich den Steuerpuls verlangsame, brauche ich da zwingend 
Terminierungen?
Welche Terminierungen benutzt man üblicher weise 330 Ohm in Reihe.
Kannte terminierungen bisher nur vom CAN-Bus mit je 120 Ohm am Ende der 
Leitung.

Habe die Masse aller 164er nachgemessen und sie war da oder ist in dem 
Fall Durchgang != Durchgang ?
Persönliche Seite #2288930
Lesenswert?

Christopher schrieb:
> du hast natürlich recht aber komisch finde ich, das es trotzdem
> Funktioniert.

Komisch ist es nicht, dafür aber grenzwertig.

> Vermutlich schalte ich, wenn der PORT als eingagn deklariert ist über
> PORTx = 0xff die PULLUPs ein und daher leuchten die LEDs

So ist es.

Allein der angelegte Tastkopf sorgt durch seinen Eingangswiderstand 
(welcher gegen GND geht) dafür, dass dein Signal beim Abschalten des/der 
PullUps in Richtung 0V gezogen wird.
Gast #2288972
Lesenswert?

So habe die pruefadapter.c mal korrigiert und getestet. Es läuft 
eigentlich wie ich mir das vorgestellt habe nur eben nicht auf dem dafür 
vogesehenen Board :(

Wie ist das jetzt mit dem Terminierungswiderstand der Taktleitug? Gibt 
es da irgendwelche Faustformeln.

Zu Microstriptechnik habe ich auch noch nichts brauchbares gefunden.
An was für grundregeln hat man sich den da so zu halten

Danke an alle LG Chris
Angehängte Dateien:
Gast #2288979
Lesenswert?

>Wenn ich den Steuerpuls verlangsame, brauche ich da zwingend
>Terminierungen?

Es geht um die Flankensteilheit.

>Welche Terminierungen benutzt man üblicher weise 330 Ohm in Reihe.

Bei einer 4-Lagenplatine ergibt eine 0,3mm breite Leiterbahn auf der 
obersten Ebene, in einer Massefläche eingebettet, mit 0,3mm Aura, und 
gegen eine Massefläche in der zweitobersten Ebene, eine Leitungsimpedanz 
von rund 80R. Die ATMEGA-Port-Ausgänge haben Impedanzen von rund 30R. 
Also gibt es immer Fehlanpassungen bei direktem Anschluß. Abhilfe 
schaffen hier zusätzliche 51R Widerstände, die direkt an die 
Port-Ausgänge gehängt werden. Damit wird eine Serienterminierung 
erreicht mit allen ihren segensvollen Auswirkungen.

Leider habe ich keinen Schaltplan, kann also nicht sehen, was alles an 
einer Leitung hängt und wie lange diese ist.
Gast #2288986
Lesenswert?

Ina schrieb:
> Leider habe ich keinen Schaltplan, kann also nicht sehen, was alles an
> einer Leitung hängt und wie lange diese ist.

Ich auch nicht mehr das ist ja das Blöde....
Aber evtl. könnte ich das in der *.brd Datei nachmessen?!? Ich versuch 
das mal und geb dir dann die Eckdaten.
Gast #2289005
Lesenswert?

So habe die Taktleitung mal Farblich hervorgehoben. Jetzt bitte nicht 
vom Stuhl fallen :) sieht ziemlich wüst aus dank Autorouter (schäm) und 
nach dem was ich jetzt über Reflexion, Wellen, Terminierung und 
leitungsführung gelesen habe ist das bestimmt nicht die beste Lösung 
gewesen.
Angehängte Dateien:
#2289045
Lesenswert?

Hi Autor: Christopher (Gast) ,

wenn es doch mit Tastkopf alles funktioniert, könnte man ja
einen einbauen.
1Mohm und 10pF vielleicht.
.. aber ich würde ja mal am Anschluss 222, das Ende deiner Leitung
etwas herumspielen. evt. 10k gegen +UB und 10k gegen Gnd...
oder das gleiche mit 3k probieren.

Mir scheinen die vielen Bausteine auf der Taktleitung ein wenig
viel für den uC zumal die AC Bausteine eh ziemlich bissig sind,
wenn diese in Gruppen oder Rudeln auftauchen.

evt. kannst du auch in deiner Software die Funktion der Taktleitung
invertieren und zwischen uC Pin und der Taktleitung einen 74HC04
(hex Inverter) schalten, bei dem du dann alle 6 Bausteine parallel
schaltest. Sozusagen als Treiber.

gruss  k.
#2289121
Lesenswert?

Hi,
das sind zu viele Bauteile für die Taktleitung.
Jeder Eingang der 74ACer wirkt als "Kapazität" die geladen/entladen 
werden muss.
Außerdem führst du die Taktleitungen immer schön in einer Schleife.
Eine alternatives Routing der Taktleitung siehe Anhang (hoffe man 
versteht es :) ).
Außerdem würde ich für so etwas immer einen Buffer, z.B. NC7WZ16P6X 
,verwenden.


Das Programm habe ich mir noch nicht angeschaut.
Werde es gleich aber noch machen.

Viele Grüße
Angehängte Dateien:
Gast #2289254
Lesenswert?

Magnus Müller schrieb:
> Es müsste korrekterweise lauten:
>
> DDRB = 0xff;      //Port als Ausgagn
>
> DDRD = 0x00;      //Port al Eingang



Und hier ist der Sieger ;)
Konnte heute einen neuen Test starten und siehe da es läuft :)
Was ein Misst... (schäm) so is das wenn man von Bascom auf C umsteigt. 
Muss wohl noch mehr Programieren, damit mir sowas gleich auffällt.
Konnte das gestern nur zu Hause auf meinem EVAL Board testen und da 
hängen nur LEDs dran denen ist son dreher scheinbar egal.

Aber VIELEN VIELEN DANK anoch mal an alle. Werde mir die vielen Tipps 
bei meinem nächsten Projekt zu Herzen nehmen.

LG Chris
Gast #2289421
Lesenswert?

Noch etwas was schon ansatzweise erwähnt wurde und Dir in zukunft Ärger 
machen kann, wenn Du die Taktzeiten hochschraubst: Es sitzen wirklich 
verdammt viele (TTL? LVTTL? CMOS?) Eingänge an dem einem Ausgang des 
Mikrocontrollers - das Signal was Du im 'takt.png'-Bild grün gefärbt 
hast.
Du weißt was der AVR für Ströme sinken/sourcen kann? Du weißt über die 
Kapazitäten der Eingänge deiner Logigbausteine bescheid? Ab einer 
gewissen Taktgeschwindigkeit wird der Controller zum Umladen der 
Eingänge durch den limitierten Strom zu lange brauchen.
Leitungstreiber und eine Takttopologie mit mehreren Gruppen und 
Untergruppen wären angesagt. Die auch schon vorgeschlagene, sternförmige 
Verteilung des Signals wäre eine schöne Abrundung - ob es gar nötig ist, 
wie das ebenfalls erwähnte impedanzkontrollierte Führen der Leiterbahn - 
hängt von der Frequenz des Taktsignals ab.
Gast #2289437
Lesenswert?

Es ist lustig, wie hier über Flankensteilheit, Massefläche und 
Teminierung geschwafelt wird, wobei das eigentliche Problem doch ist, 
dass er die Ports auf Eingang geschaltet hat und das ganze Teil nur über 
die Pull-Ups läuft (was natürlich nur klappt, wenn man den Pin z.B. mit 
dem Tastkopf leicht gegen Masse zieht, damit er nicht oben schweben 
bleibt)

kopfschüttel
#2289445
Lesenswert?

@  Arno Nyhm (Gast)

>Du weißt was der AVR für Ströme sinken/sourcen kann?

20mA, damit kommt man ein Stückchen.

>gewissen Taktgeschwindigkeit wird der Controller zum Umladen der
>Eingänge durch den limitierten Strom zu lange brauchen.

Ist hier noch lange nicht das Problem. 10 Eingänge schafft er auf jeden 
Fall, ggf. mehr.

>Leitungstreiber und eine Takttopologie mit mehreren Gruppen und
>Untergruppen wären angesagt.

Nachdenken statt 0815 wäre angesagt. Das ist ein popeliger AVR mit einer 
Handvoll Schieberegister. Da sollte man die Kirche im Dorf lassen.

>wie das ebenfalls erwähnte impedanzkontrollierte Führen der Leiterbahn -
>hängt von der Frequenz des Taktsignals ab.

Nö, der Anstiegszeit. Siehe Wellenwiderstand.

MfG
Falk

P S Der Dreher mit DDRx kommt vom vielen PIC-Programmieren, dort ist es 
nämlich genau anders heruma las beim AVR. :-0

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren