Forum: Mikrocontroller und Digitale Elektronik Pollin Net IO - Eingänge spielen verrückt


von Christoph (Gast)


Lesenswert?

Hallo Forum!

Habe leider hier kein Vergleichbares Problem mit dem Pollin-Teil 
gefunden.
Ich hab folgendes Problem:
Meine beiden (1*Bausatz, 1*Fertigteil) Net-IO´s produzieren willkürlich 
Pegeländerungen bei den Eingängen.
Hab hier viel gelesen über  Fuses, Kondensatoren tauschen usw., aber 
nirgends, wie sich diese Dinge in der Praxis auswirken.
"Version" gibt 1.03 aus. Habe keine Änderungen (weder Soft- noch 
Hardware) durchgeführt.
Ansonsten bin ich elektronisch jetzt nicht so der Guru...

Danke für eure Hilfe.
Chris

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Wie sieht die Eingangsbeschaltung der betroffenen Ports aus?

von Christoph (Gast)


Lesenswert?

Das passiert auch dann, wenn am Sub-D gar nichts angesteckt ist.
Also, nur Pollin-Net-IO, Strom und LAN.

von ... (Gast)


Lesenswert?

offene Eingänge machen oft, was sie wollen

von JensM (Gast)


Lesenswert?

Ein unbeschalteter Eingang ist nicht definiert.

Der kann den Zustand 0 oder 1 haben.

Dies kann sich durch Störungen ändern.

Deshalb den Eingang z.B. mit einem 10kOhm Widerstand nach VCC definieren 
(Pullup).
Dann hat der Eingang eine 1 und kann z.B. mit einem Schalter auf 0 
gezogen werden.

Wenn man das Programm ändern kann, schaltet man die internen Pullup 
Widerstände ein, dann erspart man sich die externen Widerstände.

Gruss JensM.

von Christoph (Gast)


Angehängte Dateien:

Lesenswert?

Danke für die ersten Antworten.
Das Problem hab ich nicht nur, wenn nichts angeschlossen ist.
Hab an den Eingängen im "Normalbetrieb" Taster, da passiert das gleiche.
Das mit den PullUp-Widerständen, müßte dass dann so aussehen:

von JensM (Gast)


Lesenswert?

Wenn der Taster offen ist, so ist es wie nichts angeschlossen.

Die Schaltung ist so noch nicht richtig.

Sondern so:

                                    /
Versorgung ------10kOhm------|-----/ ------ GND
                             |
                             |
                             |
                         Eingang1

Dann hat der Eingang1 mit offenem Taster 1 und mit geschlossenem 0.

Gruss JensM

von Christoph G. (christoph_g)


Lesenswert?

Danke Jens für deine Unterstützung.
Ob "0" oder "1" wäre egal, kann ich im Programm entsprechend abändern.
Versorgung wären dann die 5V? Oder die Betriebsspannung des Boards?

von JensM (Gast)


Lesenswert?

Die Versorgung ist die Versorgungsspannung des Prozessors.

Je nachdem, ob dieser mit 3,3V oder 5V versorgt wird entsprechend mit 
dieser Spannung.

Beim Pollin Net IO sind es 5V.

Gruss JensM.

von Christoph G. (christoph_g)


Lesenswert?

Alles klar soweit.
Ich werde ASAP die Widerstände organisieren und die Sache mit den 
Pullup´s testen.
Werd dann Bescheid sagen.

Vielen Dank derweil!!

von spess53 (Gast)


Lesenswert?

Hi

>Alles klar soweit.
>Ich werde ASAP die Widerstände organisieren und die Sache mit den
>Pullup´s testen.
>Werd dann Bescheid sagen.

AVRs haben auch interne Pull-Up-Widerstände. Einfach die 
Portregister-Bits bei den Eingängen auf 1 setzen.

MfG Spess

von Christoph G. (christoph_g)


Lesenswert?

Wäre natürlich auch praktisch, aber ich hab keine Ahnung wie das gehen 
soll.
Von daher ist die externe Beschaltung zwar vlt nicht schön, aber für 
mich machbar ;-)

von Frank W. (frank_w)


Lesenswert?

Hallo,
das passt zu meinem Projekt.

Ich bin gerade beim entwerfen einer umfangreichen Schaltung für den 
Pollinbausatz.
Digitale Eingänge werden mit Opokoppler entkoppelt.
Digitale Ausgänge da nehme ich die Relaiskarte von Pollin.
Für die analogen Eingänge fehlt mir noch die saubere Entkopplung zum 
AVR.

Gruß Frank

von Volker S. (volkerschulz)


Lesenswert?

spess53 schrieb:
> AVRs haben auch interne Pull-Up-Widerstände. Einfach die
> Portregister-Bits bei den Eingängen auf 1 setzen.

Dafuer muesste man aber an die Sources von Pollin kommen... ;)

TO: Der Wert der Pull-Ups ist uebrigens nicht ganz so kritisch, da 
sollte alles zwischen 10K und 1M stabil funktionieren. Wenn Du also 
etwas groesseres als 10K rumliegen hast, brauchst Du nicht extra etwas 
besorgen gehen.

Die Logik laesst sich auch einfach invertieren indem du "Vorsorgung" und 
"GND" im Beispiel von JensM vertauschst. (Dann hat der Eingang1 mit 
offenem Taster 0 und mit geschlossenem 1). Generell ist die 
Pull-Up-Variante aber zu bevorzugen, da man dann (unter normalen 
Umstaenden) die internen Pull-Ups des AVR benuzten kann.

Volker

von Christoph G. (christoph_g)


Lesenswert?

Selbst wenn man die Sources von Pollin bekommt würde man eine 
Möglichkeit brauchen, den Controller zu programmieren...

Ob der geschlossene Taster 0 oder 1 liefert, ist egal, das kann ich in 
meinem Programm dementsprechend verarbeiten.
Wenn ihr also Pullup empfehlt, dann mach ich das so.

von Christoph G. (christoph_g)


Lesenswert?

Morgen allerseits!

Es scheint, als würde es nun funktionieren.
Anfangs war ich enttäuscht, weil sich nichts geändert hat, nachdem ich 
die Widerstände eingelötet hab.
Dachte dann, das es natürlich auch an meiner etwas russischen 
Testschaltung liegen könnte, und hab zum Probieren den Widerstand auf 
einen jungfräulichen Sub-D-Stecker gelötet.
Hat dann wunderbar funktioniert.
Wenn ich das ganze nun Ordentlich löte, kann ich bei 10k bleiben und 
wäre hier mehr besser? Weil hier schon von bis zu 1M die rede war.

Danke euch jedenfalls für die Hilfe, jetzt bin ich schon recht zufrieden 
mit dem Teil...

von Nils S. (kruemeltee) Benutzerseite


Lesenswert?

Christoph G. schrieb:
> Wenn ich das ganze nun Ordentlich löte, kann ich bei 10k bleiben und
> wäre hier mehr besser? Weil hier schon von bis zu 1M die rede war.

10k sind vollkommen in Ordnung, bedenke aber, wenn du Spannungen messen 
willst über den ADC, geht das nicht so einfach, du verfläschst das 
Ergebnis mit dem Widerstand.

von Christoph G. (christoph_g)


Lesenswert?

Es geht um die digitalen Eingänge.

von Christoph G. (christoph_g)


Lesenswert?

Hallo Forum!

Nachdem ich dachte, es würde funktionieren hab ich alles nochmal 
ordentlich verkabelt und zusammengelötet.
Hab mich an den Tipp von Jens gehalten, und den 10K zwischen digitalem 
Eingang und Vcc gelötet.
Nachdem ich nun den ganzen Spaß nun wieder in Betrieb genommen hab mußte 
ich feststellen, dass meine Eingänge noch immer machen, was sie wollen.
Spielt es denn eine Rolle, wie weit weg von der Net-IO-Platine die 
Widerstände sitzen?
Wenn´s egal ist und die 10K reichen, hm, dann hat wohl mein Programm 
eine Macke. Aber ich frag ja nur alle 0,1s die Eingänge ab.

Habt ihr noch einen Tipp? Bin jetzt ein klein wenig frustriert, weil ich 
sehr optimistisch war.

lg

von Dietrich L. (dietrichl)


Lesenswert?

Christoph G. schrieb:
> Spielt es denn eine Rolle, wie weit weg von der Net-IO-Platine die
> Widerstände sitzen?
> Wenn´s egal ist und die 10K reichen,

Ist (in Grenzen) egal und 10k ist perfekt. In Grenzen heißt: die 
Port-Leitungen sollten nicht so wild in der Gegend "herumirren" und sich 
Störungen einfangen.

> hm, dann hat wohl mein Programm eine Macke.

Ist denkbar.

> Habt ihr noch einen Tipp? Bin jetzt ein klein wenig frustriert, weil ich
> sehr optimistisch war.

Mess doch mal die Spannung am Port. Die sollte eine saubere VCC sein.

Gruß Dietrich

von Volker S. (volkerschulz)


Lesenswert?

Christoph G. schrieb:
> [...]
> Wenn´s egal ist und die 10K reichen, hm, dann hat wohl mein Programm
> eine Macke. Aber ich frag ja nur alle 0,1s die Eingänge ab.
>
> Habt ihr noch einen Tipp? Bin jetzt ein klein wenig frustriert, weil ich
> sehr optimistisch war.

10K reichen: Je groesser der Wert des Widerstands, desto hoeher die 
Empfindlichkeit gegen Stoerung, desto niedriger aber auch der Strom, 
den Du auf GND ziehen musst.

Was meinst Du mit "Dein Programm"? Waere es nicht sinnvoll nicht an 
allen Baustellen gleichzeitig zu arbeiten und zum Abfragen der Eingaenge 
die Original-Pollin-Software und Firmware zu nehmen, so lange du an der 
Beschaltung der Eingaenge arbeitest?

Gruss,
Volker

von Volker S. (volkerschulz)


Lesenswert?

Ich habe mir die Muehe gemacht, mit meinem NET-IO (Ver. 1.03) zu testen: 
Die Eingaenge liegen definitiv auf dem internen Pull-Up, Du brauchst 
also gar keinen externen Widerstand. Wenn Du mit der Original-Software 
(oder ueber RS232) auch flatternde Eingaenge siehst, liegt der Fehler 
wohl auf der Platine. Wenn die Eingaenge stabil sind, liegt's wohl an 
Deiner Software (auch wenn ich nicht verstehen kann, wie man bei einer 
solchen Abfrage etwas falsch interpretieren kann).

Nochmal Gruss,
Volker

von Christoph G. (christoph_g)


Lesenswert?

Morgen!

Danke für die Antworten.
Die Widerstände hab ich direkt an die Sub-D-Buchse gelötet.
Dannach sind je nach Eingang eta 7m Cat-Kabel, an denen dann die Taster 
sind.
Mein Multimeter zeigt 4,94V an.

Wenn ich mir das ganze mit der Pollin-Software anschaue, sind da keine 
Schwankungen erkennbar. Das einzige was mir aufgefallen ist, ist das die 
Pollin Software ab und an wohl die Verbindung verliert.
Aber die Statusänderungen, die mein Prog anzeigt sind zeitlich damit 
nicht in Verbindung zu bringen...
Ich kann mir auch nicht vorstellen, dass man beim auslesen recht viel 
falsch machen kann.
Meine Funktion dazu:
function get_input($host, $port) {
    $kommando = "getport ".$port."\r\n";
    $fp = fsockopen($host, "20590");
    fwrite($fp, $kommando);
    $status = abs(fgets($fp)-1);
    fclose($fp);
    return $status;
  }
Naja, dann geht die Suche wohl weiter...

von Christoph G. (christoph_g)


Lesenswert?

Ich hoffe, das schweift jetzt nicht zu sehr vom eigentlichem Thema ab.
Hab den Code nochmal etwas geändert. Ein Kollege meine, naja, man weiß 
so nie ob der Befehl erfolgreich an den NetIO geschickt wurde.
function get_input($host, $port) {
    $kommando = "getport ".$port."\r\n";
    $fp = fsockopen($host, "50290);
    fwrite($fp, $kommando);
    $i=0;
    $test="";
    while (!feof($fp) and $i<10) {
      echo "Testschleife\n";
         $i++;
      $test.=@fgets($fp);
      usleep(10000);
     }
    //$status = abs(fgets($fp)-1);
    fclose($fp);
    //return $status;
    return $test;
  }

von Volker S. (volkerschulz)


Lesenswert?

Christoph G. schrieb:
> Die Widerstände hab ich direkt an die Sub-D-Buchse gelötet.
> Dannach sind je nach Eingang eta 7m Cat-Kabel, an denen dann die Taster
> sind.
> Mein Multimeter zeigt 4,94V an.

Das ist ja schon mal was. 7m? Waere es nicht sinnvoll die grossen 
Leitungslaengen eher auf der Ethernet-Seite zu haben?

> Wenn ich mir das ganze mit der Pollin-Software anschaue, sind da keine
> Schwankungen erkennbar. Das einzige was mir aufgefallen ist, ist das die
> Pollin Software ab und an wohl die Verbindung verliert.

Also wird es wohl an Deinem Code liegen. Das Verlieren der Verbindung 
kenne ich so auch, aber sehr sporadisch. Und mit den Eingaengen hat das 
schon gar nichts zu tun. ;)

> Meine Funktion dazu:
> function get_input($host, $port) {
>     $kommando = "getport ".$port."\r\n";
>     $fp = fsockopen($host, "20590");
>     fwrite($fp, $kommando);
>     $status = abs(fgets($fp)-1);
>     fclose($fp);
>     return $status;
>   }

Wie erklaerst Du mir:
$status = abs(fgets($fp)-1);
?

Das Checken auf Fehlermeldungen waere dann das Naechste. Die Antwort ist 
komplett wenn ein \r\n empfangen wurde.

Volker

von Christoph G. (christoph_g)


Lesenswert?

Hallo Volker!

Die abs()-Funktion nutze ich, um eine "1" zu erhalten, wenn der Taster 
gedrückt wird.
Im Normalfall ist ja offen eine "1", durch abs() kann ich das 
"umdrehen".

Meine beiden NetIO´s sind im Unterverteiler, die 7m Catkabel sind 
sozusagen die Steuerleitungen, die die Taster im Raum mit dem NetIO 
verbinden.

Ich danke euch derweil für eure gedanklichen "Inputs", ich werd mir 
jetzt mal ansehen, wie ich das "\r\n" überprüfen kann.

von Volker S. (volkerschulz)


Lesenswert?

Christoph G. schrieb:
> [...]
> Die abs()-Funktion nutze ich, um eine "1" zu erhalten, wenn der Taster
> gedrückt wird.
> Im Normalfall ist ja offen eine "1", durch abs() kann ich das
> "umdrehen".
> [...]

Also in meiner Welt liefert fgets einen Char zurueck. In Dezimal waeren 
das 48 fuer eine 0 und 49 fuer eine 1. Wenn Du dann noch die 1 
subtrahierst und den Absolutwert bildest, bist Du bei 47 bzw. 48. \r\n 
sind uebrigens 13 und 10. ;)

Volker

von Christoph G. (christoph_g)


Lesenswert?

Hallo Volker!

Lt. Beschreibung schickt der (das?) NetI0 bei getport x folgendes 
zurück:
"Zustand des Eingangs bei High-Pegel = 1, bei Low-Pegel = 0 als 
ASCII-Zeichen"
Also bei mir klappt das (zumindest das)

Beim Check nach Fehlermeldungen bin ich noch nicht weitergekommen.
Ich gestehe auch, im AVR NetIO Forum mal angefragt zu 
haben...Wahrscheinlich ist dir Lösung relativ einfach, aber ich sehs 
noch nicht.

von Volker S. (volkerschulz)


Lesenswert?

Christoph G. schrieb:
> [...]
> Lt. Beschreibung schickt der (das?) NetI0 bei getport x folgendes
> zurück:
> "Zustand des Eingangs bei High-Pegel = 1, bei Low-Pegel = 0 als
> ASCII-Zeichen"

Genau. Und 0 als ASCII-Zeichen entspricht, wie erwaehnt, 48 dezimal. 49 
bei 1 respektive. Da gibt's auch keine zwei Meinungen. ;)

> Also bei mir klappt das (zumindest das)

Offensichtlich nicht. Wenn mit der Original-Software alles problemlos 
laeuft, mit Deiner aber nicht, dann liegt Dein Problem exakt an dieser 
Stelle.

> Beim Check nach Fehlermeldungen bin ich noch nicht weitergekommen.
> Ich gestehe auch, im AVR NetIO Forum mal angefragt zu
> haben...Wahrscheinlich ist dir Lösung relativ einfach, aber ich sehs
> noch nicht.

Du liest in einer Schleife die Antwort Zeichen fuer Zeichen ein bis die 
Bytes 13 und 10 (Dezimal) empfangen wurden. Dann verarbeitest Du diesen 
String. Ist doch nicht so schwierig.. Und uebrigens auch nichts 
NET-IO-spezifisches...

Volker

von Christoph G. (christoph_g)


Lesenswert?

Hallo Volker!

Jetzt funktionierts!
Ich hab mich von dem gefunden Codeschnippsel $irgendwas=fgets(irgendwas) 
komplett, vermutlich zwecks mangelndem Wissen, in die Irre führen 
lassen.
So ist nämlich $irgendwas 0 oder 1.
Bin durch Zufall draufgekommen, dass $irgendwas ein 3-stelliger String 
ist, und nachdem ich den Zeichen für Zeichen ausgelesen habe bin ich 
genau wie du gesagt hast auf 48 (oder 49) + 13 + 10 gekommen.
Somit kann ich nun alles richtig abfragen und mich über funktionierende 
Eingänge erfreuen.

Danke nochmal für deine Anregungen!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.