de:netzer:io

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
de:netzer:io [2014/01/04 11:19] – [Flankenzähler] sveschde:netzer:io [2025/06/11 20:42] (current) – external edit 127.0.0.1
Line 1: Line 1:
 +====== Netzer GPIO ======
 +
 +{{ :netzer_top.png?nolink& |Netzer IO}}
 +
 +<note important>Für die Funktionalität muss das **[[io_project|IO Projekt]]** (base oder pro) auf den Netzer [[fwupdates|geladen]] werden.</note> 
 +
 +===== Ü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.
 +
 +<note important>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.</note>
 +
 +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}}
 +
 +<note important>Einige der Einstellungen betreffen sowohl IO3 als auch SPI_INT:
 +  * PWM-Frequenz
 +  * Impulsmodus
 +  * Impulseinheit
 +</note>
 +==== 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.