Hallo wieder einmal,
im Moment brüte ich darüber, warum ich bei meiner einfachen Kombination
aus µC und DAC per SPI (ATMega16 und DAC8043A -> wäre schön, wenn
letzteren schon mal jemand benutzt hat) nicht das erwartete Ergebnis
bekomme.
Den SPI-Prozess (bestehend aus zwei Bytes, weil 12-Bit DAC) habe ich
(hoffentlich) soweit verstanden. Ich denke nicht, dass mein Problem dort
begraben liegt. Ich erreiche nicht die volle Spannung am DAC und die
Werte ändern sich meiner Meinung nach nicht linear. Zudem habe ich den
Eindruck, dass immer nur ein Byte vom DAC geschluckt wird.
Bevor ich aber weiter auf Details eingehe, die vielleicht gar nicht
nötig sind:
Mir fallen zwei Dinge an meinem Aufbau (auf einer Steckplatine) auf:
- mein definierter Eingangspin reagiert enorm auf Handbewegungen in der
Nähe der Platine, wenn ich nicht aktiv mit der anderen Hand Masse
berühre. Ein ESD-Armband erwies sich als wirkungslos.
- Das SPI-Clock-Signal, das jedesmal gestartet wird, nachdem ich ein
Byte in das SPDR-Register geschrieben habe, sieht meines Erachtens
furchtbar aus (siehe Bild). Hier gibt es nach meinem laienhaften
Eindruck durch das Überschwingen in jedem Takt mehrere steigende
Flanken. Kann es sein, dass der DAC damit überfordert ist bzw. er in
Summer einfach zu viele Flanken sieht und damit sein Empfangsregister
wieder überschreibt? Soweit ich das verstanden habe, nimmt er pro Takt
ein Bit an.
Woran kann das liegen, dass die Clock, direkt gemessen am SCK-Pin des
µC, so schlimm aussieht? Die eigentliche Quarz-Clock für den µC selbst
sieht hingegen sehr gut aus.
Vielen Dank schon mal
Peter
> ... auf einer Steckplatine ...
Allenfalls
-sollte man sich von Steckplatinen verabschieden
-die SPI Clock verlangsamen
-die SPI Signale mit RC filtern
@ Peder (Gast)
>Mir fallen zwei Dinge an meinem Aufbau (auf einer Steckplatine) auf:>- mein definierter Eingangspin reagiert enorm auf Handbewegungen in der>Nähe der Platine, wenn ich nicht aktiv mit der anderen Hand Masse>berühre. Ein ESD-Armband erwies sich als wirkungslos.
Klingt nach offenen Pins.
>- Das SPI-Clock-Signal, das jedesmal gestartet wird, nachdem ich ein>Byte in das SPDR-Register geschrieben habe, sieht meines Erachtens>furchtbar aus (siehe Bild).
Richtig!
> Hier gibt es nach meinem laienhaften>Eindruck durch das Überschwingen in jedem Takt mehrere steigende>Flanken. Kann es sein, dass der DAC damit überfordert ist bzw. er in>Summer einfach zu viele Flanken sieht und damit sein Empfangsregister>wieder überschreibt?
JA!
> Soweit ich das verstanden habe, nimmt er pro Takt ein Bit an.
Ja.
>Woran kann das liegen, dass die Clock,
der Takt
>direkt gemessen am SCK-Pin des>µC, so schlimm aussieht? Die eigentliche Quarz-Clock für den µC selbst>sieht hingegen sehr gut aus.
Messfehler?
http://www.mikrocontroller.net/articles/Oszilloskop#Tastk.C3.B6pfe_richtig_benutzen
Masseproblem? Schlechte Masseverbindung? Oder saumäßige Verbindung
allgemein?
http://www.mikrocontroller.net/articles/Wellenwiderstand#Leitungsf.C3.BChrung_und_Layout
Den Tastkopf würde ich eigentlich ausschließen, weil ich am Oszi für die
Quarz-Clock ein sauberes Signal sehe.
Mit einem Tiefpass sieht es tatsächlich schon viel besser aus, auch wenn
a) die Flankensteilheit drunter leidet und b) ich immer im Hinterkopf
habe, dass der µC irgendwas macht, was mir nicht gefällt.
Die Byteübertragung scheint jetzt gut zu funktionieren, zumindest
reagiert der DAC auf Änderung von High- und Low-Byte in
nachvollziehbarer Weise.
Bleibt nur das Problem, dass die Spannung nicht voll erreicht wird. Aber
wenn ich das nicht hinbekomme, werde ich wohl eh noch mal mit Schaltplan
wiederkommen müssen.
Danke soweit schon mal!
@ Peder (Gast)
>Den Tastkopf würde ich eigentlich ausschließen, weil ich am Oszi für die>Quarz-Clock ein sauberes Signal sehe.
Ist ein Argument. Es heißt aber dennoch Quarztakt.
>Mit einem Tiefpass sieht es tatsächlich schon viel besser aus,
Klar, wenn mir die Realität nicht gefällt setze ich einfach eine dunkle
Sonnenbrille auf . . .
>Die Byteübertragung scheint jetzt gut zu funktionieren,
"scheint" ist kein sonderlich bauchbareas Adjektiv bei fehlerhaften
Schaltungen. Du musst SICHER nachweise (=messen) dass es so ist.
Die beiden letzten Beiträge habe ich erst gesehen, nachdem ich schon an
meinem Beitrag geschrieben habe. Die möchte ich natürlich nicht
unkommentiert lassen.
@E-Profi
SPI ist Hardware, der ATMega16 bietet mir dafür eine Schnittstelle.
Das Netzteil ist ein Labornetzteil, was den Anforderungen eigentlich
gewachsen sein sollte. Das war zwar nicht unbedingt teuer, aber die
Netzspannung überprüfe ich permanent mit Oszi. Das macht bisher einen
guten Eindruck.
@Falk
Ich habe es gerade mal mit einem "richtigen" Tastkopf versucht (das
Ding, was ich vorher benutzt habe, habe ich synonym einfach mit
Tastköpfen in einen Topf geworfen) und kann den Überraschungseffekt, den
ich jetzt auch bei anderen gelesen habe, nur teilen, wenn ich den denn
richtig benutzt habe. Ich habe trotz Abraten die Krokoklemme benutzt,
aber soweit ich das mittlerweile gesehen habe, fängt "hochfrequent" auch
nicht da an, wo ich mich bewege.
Damit habe ich zwar dem µC grob Unrecht getan, verstehe dann aber nicht
mehr, womit ich meinen Übertragungsfehler beseitigt habe. Auch Filtern
ist quasi überhaupt nicht mehr nötig, der Takt ist 1A "rechteckig"!
Was die offenen Pins betrifft, liegst du nicht falsch, davon habe ich
etwa 25 (hab nur diesen µC-Typ hier), aber nachdem ich die Mehrzahl mal
auf Masse gezogen habe, hat sich diese Überempfindlichkeit nicht
geändert. Meine Eingangspins werden aber später eh per Taster oder TTL
angesteuert, damit sind die dann fest definiert.
Gibt es eine Möglichkeit, die Byteübertragung korrekt zu überprüfen,
wenn der DAC (DAC8043A) nur ein reines Empfängerbauteil ist?
Hmm. Blöde Frage.
Hast du auch nicht vergessen, die Pins in den DDR Registern auf Ausgang
zu stellen? Das ist durch die Verwendung des SPI nämlich nicht
impliziert, sondern du musst das selber machen.
Das würde auch u.U. erklären, warum du nicht den erwarteten Spannungshub
erhältst. Denn deine SPI Einheit schaltet dann immer nur den
Pullup-Widerstand zu bzw. weg.
@ Peder (Gast)
>Ich habe es gerade mal mit einem "richtigen" Tastkopf versucht (das>Ding, was ich vorher benutzt habe, habe ich synonym einfach mit>Tastköpfen in einen Topf geworfen)AHHHHHHH> und kann den Überraschungseffekt, den>ich jetzt auch bei anderen gelesen habe, nur teilen, wenn ich den denn>richtig benutzt habe. Ich habe trotz Abraten die Krokoklemme benutzt,>aber soweit ich das mittlerweile gesehen habe, fängt "hochfrequent" auch>nicht da an, wo ich mich bewege.
Nö, sondern schon bei deutlich niedrigeren Frequenzen.
>Damit habe ich zwar dem µC grob Unrecht getan, verstehe dann aber nicht>mehr, womit ich meinen Übertragungsfehler beseitigt habe. Auch Filtern>ist quasi überhaupt nicht mehr nötig, der Takt ist 1A "rechteckig"!
Na wenigsten eine Erkenntnis.
>Was die offenen Pins betrifft, liegst du nicht falsch, davon habe ich>etwa 25 (hab nur diesen µC-Typ hier), aber nachdem ich die Mehrzahl mal>auf Masse gezogen habe, hat sich diese Überempfindlichkeit nicht>geändert. Meine Eingangspins werden aber später eh per Taster oder TTL>angesteuert, damit sind die dann fest definiert.
Naja, unbenutzt Pins sind erstmal egal. Das Thema ist eher, ob Pins, die
mit der SPI zu tn haben bzw. in deinem Programm abgefragt werden in der
Luft hängen. Kalte Lötstellen? Wackelkontakt?
>Gibt es eine Möglichkeit, die Byteübertragung korrekt zu überprüfen,>wenn der DAC (DAC8043A) nur ein reines Empfängerbauteil ist?
Sicher, er muss recht genau die Spannung aussucken, die man als
Stellwert reinschreibt. Klassischer Test. Man schreibt einfach schnell
nacheinander einen aufsteigenden Wert von 0-4095 rein und schaut sich
den DAC-Ausgang auf dem Oszi an. Da sieht man viele Dreckeffekte.
Denk dran, das Pin SS MUSS als Ausgang konfiguriert sein, siehe
Datenblatt "SS pin functionality".