www.mikrocontroller.net

Forum: FPGA, VHDL & Co. OneWire Seriele Verbindung mit Open-Drain-Schaltung


Autor: Samuel Schmidt (Firma: Student) (snowyrain)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe einen FPGA (Spartan 3E EVO-Board) an dem ein Servo hängt. Die 
Übertragung  erfolgt mittels einem RS232 ähnlichen Signals nur "One 
Wire" (nur 3,3V). Der Servo tut was er soll, nur nicht antworten.
Für die Antwort des Servos muss der FPGA 0x00 und 0x00 senden. Der Servo 
zieht dieses Signal dann auf LOW. Dafür setze ich den Ausgang auf 
"hochohmig" z und arbeite mit einer "Open-Drain" Schaltung mit einem 
Pullup-Widerstand von 3,3kOhm (habe ich irgendwo in ner 
Xilinxs-Anleitung gefunden). Leider schafft der Servo es nicht das 
Signal auf Low zuziehen (Aufm Oszi sieht man es gut, er zieht nur auf 
ca. 2,5V runter). Ich habe versucht den Pullup Widerstand zu vergrößern, 
ohne Erfolg. Irgendwann wird die Spannung so gering, dass das Empfangen 
auch nicht klappt.

Ich komme nicht weiter, vielleicht sehe ich auch den Wald vor lauter 
Bäumen nicht. Wie kann ich so was realisieren?

Gruß

Snowyrain

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Höchst wahrscheinlich setzt Du das Signal nicht auf hochohmig.
Zeige einmal wie dein Kode aussieht und ev. wie die Schaltung.

Autor: Samuel Schmidt (Firma: Student) (snowyrain)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

vielen Dank für Antwort. Hier die Zeilen:

RX_B_intern<= '0' when TXRX_B ='1' else '1';
TXRX_B <= '0' when TX_B_intern ='1' else 'Z';

Ich habe intern ein Modul mit einer Seriellen-Schnittstelle hier sind:
RX_B_intern : Eingang
TX_B_intern : Ausgang
Das Signal TXRX_B (INOUT) ist der Ein/Ausgang zum Servo.

Die Invertierung ist drin, da ich erst alles mit einem MAX232 getestet 
habe. Da tat alles wie es sollte. Nur jetzt mit nur einem Pin klappt es 
nicht. Er empfängt nur immer das was er sendet. Auf dem Oszi sieht man 
das der Servo das Signal versucht runter zuziehen aber es nicht schafft.

Vielen Dank für Mühe!

Gruß

Snowyrain

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Samuel Schmidt (Firma Student) (snowyrain)

>RX_B_intern<= '0' when TXRX_B ='1' else '1';
>TXRX_B <= '0' when TX_B_intern ='1' else 'Z';

Passt soweit.

>nicht. Er empfängt nur immer das was er sendet. Auf dem Oszi sieht man
>das der Servo das Signal versucht runter zuziehen aber es nicht schafft.

Pull-Up zu klein? Falschen Widerstand erwischt?

MFG
Falk

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bleibt TX_B_intern auch brav auf '0' während des Empfangs?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Klaus Falser (kfalser)

>Bleibt TX_B_intern auch brav auf '0' während des Empfangs?

Ist egal, dann würde es ja auf jeden Fall auf LOW gezogen, aber nicht 
auf HIGH hängen bleiben.

MFG
Falk

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stimmt.

Autor: Samuel Schmidt (Firma: Student) (snowyrain)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

mir ist ein echt blöder Fehler passiert. Die Schaltung hatte einen 
Masse-Fehler. Vielen Dank für die Hilfe. Habe die Servos mit einer 
fliegenden Verdrahtung angeklemmt und es geht. Sogar mit dem Internen 
PullUp-Winderstand.

Gruß

Snowyrain

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]
  • [vhdl]VHDL-Code[/vhdl]
  • [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.