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
Wie sieht die Eingangsbeschaltung der betroffenen Ports aus?
Das passiert auch dann, wenn am Sub-D gar nichts angesteckt ist. Also, nur Pollin-Net-IO, Strom und LAN.
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.
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:
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
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?
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.
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!!
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
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 ;-)
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
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
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.
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...
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.
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
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
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
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
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...
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; }
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
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.
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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.