mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme beim Ansteuern verschiedener Messgeräte über serielle Schnittstelle


Autor: Sebastian Ulmer (sulmer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey,
ich steuer mit meinem NEC V850/FJ3 verschiedene Messgeräte über die 
serielle Schnittstelle an. Die Daten werden alle gesendet (laut Terminal 
Programm auf dem PC) dennoch meldet mein Messgerät Fehler wenn alle 
Daten gesendet werden. Setze ich Breakpoints und sende die Daten 
schrittweise funktioniert es. Daher denke ich das meine Daten zu schnell 
gesendet werden. Wollte erst ein paar Delays einbauen, was aber zu 
teilweise unnötigen Verzögerungen führt.
Schicke ich die selben Daten vom PC aus funktionierts, allerdings nutze 
ich da zwischen jedem Kommando den Befehl "fflush(com)".
Was genau macht "fflush()"? bzw. wäre es sinnvoll eine ähnliche Funktion 
für den Controller zu schreiben?

Danke für eure Hilfe

Grüße Sebastian

Autor: 3360 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
flush leert den buffer

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> bzw. wäre es sinnvoll eine ähnliche Funktion
> für den Controller zu schreiben?

Das wird dein Problem nicht lösen.

Deine Analyse dürfte korrekt sein: Du überfährst deine
Messgeräte mit den Daten.
Normalerweise kann sich die Gegenstelle mit einem Verfahren
das sich 'Handshake' nennt, dagegen wehren. Im Prinzip sagt
die Gegenstelle deinem Programm dabei: 'Einen Moment, bitte
jetzt nichts senden, ich bin beschäftigt'.

Wenn sich jetzt dein Programm nicht um diese Warte-Mal-Nachricht
kümmert, dann ist klar, dass du die Gegenstelle überfährst.

Handshake gibt es in 2 Varianten:
* Softwarehandshake
* Hardwarehandshake

Jetzt musst du als allererstes mal rausfinden welche Variante
deine Messgeräte unterstützen (wenn überhaupt), und dann eine
entsprechende Behandlung in dein Programm einbauen.

Autor: Sebastian Ulmer (sulmer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jo das mit den Handshakes ist klar, dachte aber ich komm evtl. ohne aus, 
da es übern PC auch ohne Handshake funktioniert hat. Für nen 
Hardware-Handshake würde ich dann noch zusätzliche 2 Pins meines 
Controllers benötigen, was auch ein kleines Problemchen darstellen 
wird^^

Naja ich schau mal weiter ob ich ne andere Lösung find. Evtl. fahr ich 
einfach mit der Geschwindigkeit oder so bissl runter, mal schaun ob das 
schon genügt.

Danke für eure Antworten.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sebastian Ulmer wrote:

> Naja ich schau mal weiter ob ich ne andere Lösung find. Evtl. fahr ich
> einfach mit der Geschwindigkeit oder so bissl runter, mal schaun ob das
> schon genügt.

Schlechte Lösung.

Eine professionelle Lösung zur Behandlung einer seriellen
Schnittstelle beinhaltet immer eine Handshakebehandlung.
Denn: Du weißt nie, ob deine Gegenstelle zur Aufnahme von
Daten bereit ist. Erst durch ein Handshake kannst du dir
einigermassen sicher sein, daß es keine Probleme geben wird.

Autor: Sebastian Ulmer (sulmer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Funktioniert alles super, hab aber nun nur einen Handshake mittels der 
RTS und CTS Leitung eingebaut. Da meine Pins am Controller knapp werden.
Funktioniert bei dem Agilent 33120A top. Jetzt wird das Gerät allerdings 
von einem Kollegen benötigt und ich muss nun mit einem Hewlett Packard 
33120A arbeiten, was leider nur einen DTR/DTS Handshake unterstützt.

DTR/DTS und RTS/CTS funktioniert doch in etwa gleich oder? Kann ich die 
DTR/DTS Leitungen einfach auf die RTS/CTS umleiten? oder hab ich bei der 
Beschreibung der Handshakes was überlesen? Für jede UART 4 Pins fürn 
Handshake zu opfern ist mir leider nicht möglich.

Danek schoneinmal im V.

Sebastian Ulmer

Autor: Norgan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erst mal, es heisst D*SR* nicht DTS.

Dann, DSR/DTR ist leicht unterschiedlich zu RTS/CTS, allerdings sind die 
Unterschiede nicht besonders schlimm. Theoretisch zeigen Geräte mit DTR 
an, dass sie grundsätzlich bereit sind, nicht, dass sie gerade Daten 
empfangen können. In der Praxis wird das oft anders gehandhabt, nämlich 
wirklich zum Flow-Controll. Das muss allerdings nicht so sein. Daher: 
Erst mal genau das Handbuch des 33120A lesen. Macht der wirklich 
Flow-Controll über DTR?

Wenn dem so ist, dann kann man RTS durch DTR und CTS durch DSR ersetzen. 
Also den DTR Ausgang vom 33120A mit dem CTS Eingang am Controller und 
den DSR Eingang am 33120A mit dem RTC Ausgang vom Controller verbinden.

Alles unter der Annahme das der Mikrocontroller als DTE und der 33120A 
als DCE verkabelt ist.

Autor: Sebastian Ulmer (sulmer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ups stimmt DSR  bin bissl durcheinander gekommen^^

Hat sich aber nun doch erledigt, muss doch das Agilent Gerät verwenden, 
da die Programmierung auch kleine Unterschiede aufweist im Gegensatz zum 
HP.

Hab das mit dem DSR/DTR trotzdem mal genau nachgeschaut und probiert. 
Funktioniert ohne Probleme. Dann verstehe ich aber nicht wieso die 
Geräte nicht die CTS und RTS Leitungen zum FlowControl benutzen. Wäre 
doch eigentlich logischer. Naja auch egal.

Autor: Norgan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Hat sich aber nun doch erledigt,

Dankeschön dass ich meine Zeit mit einer Antwort verschwenden durfte.

Autor: Sebastian Ulmer (sulmer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab das auch erst gerade erfahren. Und umsonst war es ja trotzdem nicht. 
Probiert hab ich es und verwende jetzt bei dem Agilent Gerät auch den 
DSR/DTR Handshake und nicht mehr den RTS/CTS. Damits bissl einheitlicher 
bleibt

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.