mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit Pulldowns


Autor: Christopher Seifert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.
Ich habe ein Problem. Ich habe einen ATMega 8535 und einen ATMega 8515
direkt mit zwei Ports (8bit) verbunden. Der 8535 gibt 16bit aus, die
der 8515 auf einem Matrixdisplay ausgibt.
Nun das Problem: Die Anzeige schwankt von den Werten her. Das liegt
wahrscheinlich daran, dass ich keine Pulldownwiderstände bei der
Verbindung verwendet habe. Die Frage ist, ob ich das Ganze auch in der
Software (bei den Outputs) verändern kann, um mir die Lötarbeit zu
sparen.

Ps: Weißjemand, wieviele Wörter(!) in einem ATMega 8535 passen? Ggf.
könnte ich sonst beide Programme zu einem vereinen.
VIELEN DANK

Pps: Dies ist mein erster Beitrag im Forum.

Autor: Ronny Schulz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du die Portleitungen direkt verbunden hast und eigentlich deine
Ports auf den sendenden Baustein nie als Eingang verwendet werden, dann
sollte das Problem eigentlich nicht auftreten. Die Pulldowns werden ja
nur benötigt, wenn der Ausgang undefiniert (z.B. Tri-State) ist. Also
kann da nur 0 oder 1 anliegen.

Das Problem wird folglich woanders liegen. Vielleicht ein Timingproblem
beim übertragen der Daten.

"Wörter" ist gut. Wieviel Platz da noch frei ist, siehst Du beim
linken. Kannst ja im Prinzip mal rechnen, ob beide Inhalte in den Flash
passen würden. Oder ob der RAM reicht. Ich habe eher RAM, als
FLASH-Probleme.

Autor: Christopher Seifert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erstmal danke für die Antwort.

Leider bin ich noch nicht so bewandert in sachen Tri-State und so.
Also ich habe jeweils die Datenrichtungsregister (beim Empfänger) auf
0x00 gesetzt. Damit müssten die Eingänge sein. Was bedeutet dann
Tristate?

Hinweis: Ich habe mal zur Probe ein Metallblech zur Abschirmung
drübergehalten. Die Anzige hat nicht so oft geschwankt. Daher schließe
ich ein Timingproblem aus.

Autor: formtapez (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Pull-Ups oder Downs braucht man nur, wenn man irgendwo einen
Tristateausgang auswerten will. Das ist bei Dir nicht der Fall, da die
Port-Outputs bei logisch "1" nach VCC und bei "0" nach GND ziehen.
Tri-state ist z.B. ein Open-Kollektor Ausgang.

Hast Du vielleicht etwas lange Leitungen ?
Wie schnell sind die Daten ?

MfG
formtapez

Autor: Christof Krüger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie synchronisierst du denn den Datentransfer? Generierst du ein
Clock-Signal, oder wie?

Autor: Christopher Seifert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nichts gegen euch, aber ich glaube ihr denkt ein wenig zu umständlich.
Ich habe einfach zwei 8bit-Ports mit Drähten verbunden. Dabei liegen
die Daten direkt parallel an. Ich habe dabei kein Clocksignal, da ich
dabei nichts seriell übertrage.

Wann habe ich denn einen Open-Kollektor Ausgang bei den ATMegas?
Hängt das vom DDRX ab?

Autor: Christof Krüger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe mich nur gewundert, wie du Daten nicht synchron zuverlässig
überträgst, oder haben beide AVR's dasselbe Clocksignal und laufen
synchron? Denn wenn du 16 Bit auf einem 8Bit-Port überträgst, dann
müssen sie doch irgendwie zeitgemultiplext sein, und dazu braucht man
ein entsprechendes Timing.

Autor: Mark Hämmerling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Salut,

@Christopher:
korrigier mich wenn ich falsch liege, aber ich hab das Gefühl, Du gibst
die Daten an einem AVR-Port einfach aus, und liest sie an dem anderen
einfach ein. Sofern Deine µCs nicht 100% synchron laufen, klappt das so
natürlich nicht.
Ob Du Daten seriell oder parallel überträgst, hat nichts damit zu tun,
ob Du das synchron oder asynchron machst.
Serielle Daten kannst Du synchron (z.B. SPI) oder asynchron (z.B. UART)
übertragen. Dort macht asynchron auch Sinn, weil Du alles über eine
einzige Leitung machst, die sowohl Start-/Stopbit enthält, als auch die
Daten.
Parallele Daten kannst Du sicherlich auch asynchron übertragen. Aber
dann mußt Du gewisse Zustände oder Leitungen für die Synchronisierung
definieren. Mehr Sinn macht die Verwendung einer EN(able)-, bzw.
Clock-Leitung. Also: Daten an den Port ausgeben und dann Flanke auf EN
generieren. Das ist das Signal für den anderen AVR, die Daten jetzt
entgegenzunehmen.
Wir denken nicht umständlicher als es nötig ist. Aber ohne
Synchronisierung kannst Du nunmal 8bit parallel schlecht übertragen.
Wenn Du grundsätzlich 16bit-Worte überträgst, könntest Du z.B. die
EN-Leitung zur Wort-Synchronisierung (Framing) verwenden. Steigende
Flanke bedeutet High-Byte liegt an, fallende Flanke steht für Low-Byte.
Das spart externes Framing. Die Datenworte müssen ja auch synchronisiert
werden. Gibt nen höllischen Datenwust, wenn ein Byte verloren geht und
in Folge dessen High- und Lowbytes verkehrt zugeordnet werden.

Gruß,
Mark

Autor: Christopher Seifert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Antworten.
Jedoch verwende ich keine 16bit Worte. Ich gebe bei dem 8535 an zwei
Ports jeweils 8bit aus und lese diese auf zwei Ports bei dem 8515
wieder ein. Syncronisiert sind sie nicht, da ich mir die externe
Beschaltung von Osyillatoren aus Arbeitszeittechnischen Gründen gespart
habe. Ich betreibe beide mit 4MHz internem RC-Oszi.

Autor: Christof Krüger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Verstehe ich das jetzt richtig, dass du also bestimmte Signale anlegst
und diese quasi analysierst und dementsprechend etwas auf dem Display
ausgibst? Also keine Datenübertragung im eigentlichen Sinne?

Autor: Christopher Seifert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So kann man es ausdrücken

Autor: Christof Krüger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm... der Fehler kann aber eigentlich nicht bei der Hardware liegen,
denn der Ausgang legt die Leitung ja wirklich auf einen definierten
Pegel, also kein Open Collector o.ä.
Deswegen brauchst du auch beim Eingang des zweiten AVRs auch keine
Pullups schalten.

Wie oft bzw. in welchem Zeitrahmen ändert sich denn der "Inhalt" der
Ports denn so?

Autor: Christopher Seifert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mindestens 4 bis 5mal in der Sekunde (sehr unbeständig)
Bisher lag es immer daran, dass ich keine Pulldowns eingelötet habe.
Dann kann ich mir die Lötarbeit wohl doch nicht sparen.
Vielen Dank an alle Helfer

Autor: Mark Hämmerling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Salut,

Pull-down-Widerstände werden nix bringen, weil es nichts
"downzupullen" gibt. Am ausgebenden AVR die DDRx auf 0xff einstellen
(ich hoffe, das hast Du schon gemacht, ansonsten sind die internen
Pull-up-Widerstände des AVR alles, was Deinen (dann ziemlich
hochohmigen) Ausgangspegel beeinflußt) und am empfangenden DDRx = 0x00
setzen.
Du kannst genausogut am empfangenden AVR die DDRx = 0x00; PORTx = 0xff
setzen, dann werden die Eingänge intern gegen Vcc gezogen. Damit
cancelst Du schonmal Tristate-Zustände. Ob Du das gegen GND oder Vcc
machst, spielt in diesem Fall ja keine Rolle (weil Du ja definierte
Zustände hast - insofern sind Ziehwiderstände ja aber wie schon
mehrfach erwähnt völlig überflüssig). Mit den internen Pull-ups sparst
Du Dir aber erstmal das Löten.

Insgesamt wird es Dir auf Dauer aber nur helfen, wenn Du Dich etwas in
die Thematik einliest. Die Elektronikgrundlagen sollte man schon etwas
kennen, bevor man beginnt, sich bei solchen Probleme an die Fehlersuche
zu machen.

Gruß,
Mark

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.