====== Netzer GPIO ====== {{ :netzer_top.png?nolink& |Netzer IO}} Für die Funktionalität muss das **[[io_project|IO Projekt]]** (base oder pro) auf den Netzer [[fwupdates|geladen]] werden. ===== Überblick ===== Hier ist ein Überblick über die 13 verfügbaren Netzer-Pins. ^ Netzer Name ^ ID ^ Pinleiste ^ PIC Pin ^ Strombelastbarkeit Ausgang ^ Maximale Eingangsspannung ^ Beschreibung und zusätzliche Funktionen^ | SPI_INT | j | JP1 | RC2 | 25\ mA | 5,5\ V | [[io#PWM- und Impulsgenerator|PWM- und Impulsausgang]] | | SPI_CLK | k | JP1 | RC3 | 25\ mA | 5,5\ V | Takt des SPI- oder I2C-Moduls - RTS-Ausgang für [[UART]] **(Ab Version 1.5)** | | SPI_MI | l | JP1 | RC4 | 25\ mA | 5,5\ V | Dateneingang des SPI-Moduls, Datenleitung des I2C-Moduls - CTS-Eingang für [[UART]] **(Ab Version 1.5)** | | SPI_MO | m | JP1 | RC5 | 25\ mA | 5,5\ V | Datenausgang des SPI-Moduls | | SPI_CS | i | JP1 | RF7 | 2\ mA | 5,5\ V | GPIO | | RX | h | JP2 | RC7 | 25\ mA | 5,5\ V | Empfangsleitung UART | | TX | g | JP2 | RC6 | 25\ mA | 5,5\ V | Sendeleitung UART | | IO0 | a | JP2 | RB0 | 25\ mA | 5,5\ V | Interrupt-Eingang, [[io#flankenzaehler|Flankenzähler]] und [[io#Impulstrigger|Impulstrigger]] | | IO1 | b | JP2 | RB1 | 25\ mA | 5,5\ V | Interrupt-Eingang und [[io#flankenzaehler|Flankenzähler]] | | IO2 | c | JP2 | RB2 | 25\ mA | 5,5\ V | Interrupt-Eingang und [[io#flankenzaehler|Flankenzähler]] | | IO3 | d | JP1 | RD1 | 8\ mA | 5,5\ V | [[io#PWM- und Impulsgenerator|PWM- und Impulsausgang]] | | IO4 | e | JP1 | RA2 | 2\ mA | **3,3\ V** | [[io#ADC|ADC-Eingang]] | | IO5 | f | JP1 | RA3 | 2\ mA | **3,3\ V** | [[io#ADC|ADC-Eingang]] | Alle Pins des Netzers können frei über das Webinterface als digitaler [[io#Digitale Eingänge|Eingang]] oder [[io#Digitale Ausgänge|Ausgang]] konfiguriert werden. Die ID wird als Kürzel auf den Webseiten sowie im [[gpioserver|GPIO-Server]], der [[commands_io|Kommandoschnittstelle]] und [[serialserver|seriellen Server]] verwendet. Sollte der [[serialserver|serielle Server]] aktiv sein, sind einige IOs nicht schreibbar, aber immer lesbar. Je nach Modus betrifft das verschiedene IOs. Die GPIO-Hauptseite informiert über IOs, die vom seriellen Server benutzt werden. Jeder IO-Pin hat eine eigene Konfigurationsseite, die über die GPIO-Hauptseite erreichbar ist. Darüber kann die Signalrichtung konfiguriert werden, aber auch neue Funktionen wie PWM, Impuls, Flankenzähler und ADC eingestellt werden. ===== Webseiten ===== ==== Allgemeine Konfiguration ==== {{ gpiocommon.png?nolink& |Allgemeine Konfiguration}} Das automatische Neuladen stellt ein, nach wieviel Sekunden die GPIO-Hauptseite automatisch neugeladen werden soll (bei Überwachung von bestimmten Eingängen). Das Neuladen wird browserseitig angestossen, der Browser muss das Refresh also unterstützen (schaut dazu in die Browser-Dokumentation). ==== GPIO Hauptseite ==== {{ gpiomain.gif?nolink& |GPIO Hauptseite}} Die GPIO Hauptseite ermöglicht den schnellen Überblick und Zugriff auf alle IOs. Digitale Signale werden in Form einer Checkbox oder eines Balls dargestellt (Javascript muss aktiviert sein). Eingänge sind ausschliesslich lesbar. PWM-/Impuls-Werte werden in Form eines Textfeldes dargestellt, können also direkt geändert werden. Von der Hauptseite kann durch Auswahl der entsprechenden ID in der "Konfigurieren"-Box auf eine der IO Konfigurationsseiten gewechselt werden. ===== Digitale Ausgänge ===== Jeder Netzer-Pin kann als digitaler Ausgang konfiguriert werden. Eine logische '0' entspricht dem Spannungspegel 0\ V, eine logische '1' dem Spannungspegel 3,3\ V. Die maximale Strombelastbarkeit ist der Tabelle im [[de:netzer:io#Überblick|Überblick]] zu entnehmen. Weitere elektrische Daten sind dem {{:docs:pic18f97j60.pdf|Datenblatt}} des Netzer-Controllers zu entnehmen. Auf der IO-Konfigurationsseite kann der Startwert festgelegt werden, der nach Neustart des Netzers angenommen wird. Der Ausgang ist über die GPIO-Hauptseite und über den [[gpioserver|GPIO-Server]] oder die [[commands_io|Kommandoschnittstelle]] schreib- und lesbar. ===== Digitale Eingänge ===== Jeder Netzer-Pin kann als digitaler Eingang konfiguriert werden. Es ist dabei die maximal zulässige Eingangsspannung zu beachten (siehe IO-Tabelle im [[de:netzer:io#Überblick|Überblick]]). Weitere elektrische Daten sind dem {{:docs:pic18f97j60.pdf|Datenblatt}} des Netzer-Controllers zu entnehmen. Um eine Beschädigung des Netzers zu verhindern, sollten Eingänge möglichst nicht offen bleiben, sondern immer durch eine Spannungsquelle oder durch Pullup- oder Pulldownwiderstand auf definierten Spannungsniveau gehalten werden. Für jeden digitalen Eingang kann konfiguriert werden, ob bei auftretenden Änderungen am Pin (steigende, fallende oder beide Flanken) direkt eine Nachricht an den [[gpioserver|GPIO-Server]] oder die [[commands_io|Kommandoschnittstelle]] gesendet werden soll. ===== Flankenzähler ===== {{ edgecounter.png?nolink& |Konfigurationsdialog für Flankenzähler}} IO0, IO1 und IO2 sind mit Flankenzählern ausgestattet. Es werden je nach Einstellung steigende oder fallende Flanken gezählt. Die Zählrichtung (dekrementieren oder inkrementieren) ist konfigurierbar. Der Zähler ist 15 Bit breit. Überläufe werden registriert und auf der jeweiligen IO-Seite angezeigt. Durch die Reset-Checkbox kann der Zählerwert zurückgesetzt werden. Auf Zählerwert und das Überlaufflag kann alternativ mit [[gpioserver|GPIO-Server]] oder [[commands_io|Kommandoschnittstelle]] zugegriffen werden. Der Filter ermöglicht das Entprellen von beispielsweise Taster- oder Relaiskontakten und kann zwischen 1\ ms und 250\ ms in Stufen eingestellt werden. Handelt es sich um eine externe Signalquelle, die gezählt werden soll, wird der Pin als digitaler Eingang konfiguriert. Es können aber auch Ausgangsflanken gezählt werden, beispielsweise, wie oft der GPIO-Server bereits ein Signal geschrieben hat. ===== Impulstrigger ===== Neben der normalen digitalen Funktion kann IO0 Interrupts auslösen. Auf den Interrupt ist ein [[io#flankenzaehler|Flankenzähler]] installiert. Weiterhin kann eine Flanke an diesen Pin dazu verwendet werden, Impulse an **IO3** oder **SPI_INT** auszulösen. Für das Auslösen der Flanke **muss** der IO0 Flankentrigger **aktiviert sein**. Je nach Einstellung wird der Impuls bei negativen oder positiven Flanken ausgelöst. Der Flankenzähler muss hingegen für die Impulserzeugung nicht unbedingt aktiv sein. Für externe Trigger-Signale muss IO0 als digitaler Eingang konfiguriert sein. ===== PWM- und Impulsgenerator ===== IO3 und SPI_INT können für das Generieren von PWM- oder Impulssignalen verwendet werden. Folgende Abbildung zeigt beispielhaft den Konfigurationsdialog für IO3. {{ :de:netzer:pwmconfig.gif?nolink& | Konfigurationsdialog für PWM und Impulsausgänge}} Einige der Einstellungen betreffen sowohl IO3 als auch SPI_INT: * PWM-Frequenz * Impulsmodus * Impulseinheit ==== PWM ==== Kontinuierliche PWM-Signale werden über einen 10-Bit-Wert (0..1023) eingestellt. Dieser Wert gibt das Tastverhältnis des Signals wieder. Der Wert selbst wird über die GPIO-Hauptseite oder mittels des [[gpioserver|GPIO-Servers]] oder der [[commands_io|Kommandoschnittstelle]] geschrieben und gelesen. Der PWM-Startwert ist die Default-Einstellung direkt nach Neustart des Netzers. Der PWM-Wert beeinflusst die Länge der ersten Halbwelle im Verhältnis zur zweiten. Je nach Polarität (Logik) des Signals wird beispielsweise bei einem PWM-Wert=1023 eine Gleichspannung von 0\ V (Logik=0) oder 3,3\ V (Logik=1) erzeugt. Die PWM-Frequenz schliesslich beeinflusst direkt die Länge der beiden Halbwellen. Es werden die Werte 40\ kHz, 10\ kHz und 2,5\ kHz unterstützt. ==== Impuls ==== Im Impulsmodus können einzelne oder auch kontinuierliche Impulsfolgen generiert werden. Der Impulswert ist 16\ Bit breit, hat aber einen **Minimalwert von 100**, der nicht unterschritten werden kann. Der Wert selbst wird über die GPIO-Hauptseite oder mittels des [[gpioserver|GPIO-Servers]] oder der [[commands_io|Kommandoschnittstelle]] geschrieben oder gelesen. Die Impulslänge ist intern gepuffert, so dass das Ausgangssignal bei Änderungen keine unzulässigen Zustände annimmt. Die Logik bezieht sich auf die Polarität des Impulses. 0-Logik bedeutet, der Impuls ist 0, danach nimmt der Pin den 1-Zustand an. 1-Logik bedeutet, der Impuls ist 1, danach nimmt der Pin den 0-Zustand an. Der Startwert ist die Default-Einstellung direkt nach Neustart des Netzers. Wird der Impuls getriggert, wird ein Impuls der Länge (Aktueller Impulswert * Impulseinheit) am Pin generiert. Es können die Einheiten 100\ ns, 200\ ns, 400\ ns und 800\ ns eingestellt werden. //Modus Einzelimpuls// Immer dann, wenn ein neuer Impulswert geschrieben wird, wird der Impuls getriggert. //Modus Trigger von IO0// Immer dann wenn an IO0 eine zuvor [[io#flankenzaehler|konfigurierte Flanke]] auftritt, wird der Impuls getriggert. //Modus Kontinuierlich// Analog zur PWM wird ein Impulsstrom am Pin generiert. Getriggert wird immer dann, wenn ein interner Zähler überläuft. Die Zeitdauer des Zählers beträgt (65556*Impulseinheit). Für IO3 und SPI_INT wird der selbe interne Zähler verwendet, so dass beide Signale immer in Phase sind. ===== ADC ===== IO4 und IO5 können Spannungen zwischen 0\ und 3,3\ V messen. Folgende Abbildung zeigt beispielhaft den Konfigurationsdialog für IO4. {{ adcconfig.gif?nolink& |ADC Konfigurationsseite}} Der Messwert ist 10\ Bit (0..1023) breit. Er kann über die GPIO-Hauptseite oder den [[gpioserver|GPIO-Server]] oder die [[commands_io|Kommandoschnittstelle]] abgefragt werden. Der ADC wird nach dem Neustart des Netzers automatisch kalibriert. Beide Kanäle teilen sich den selben ADC. Der ADC wird immer erst aktiviert, wenn ein Auslesevorgang angestossen wird. Der Auslesevorgang dauert ca. 2,5\ µs.