| Next revision | Previous revision |
| de:avr:io [2010/07/22 16:32] – angelegt Wember | de:avr:io [2020/07/20 09:00] (current) – external edit 127.0.0.1 |
|---|
| ====== Digitale Inputs/Outputs ====== | ====== Digitale Inputs/Outputs ====== |
| |
| Alle Busse am AVR sind sowohl lesbar als auch schreibbar, wenn sie im normalen logischen Input/Output (I/O) Modus verwendet werden. AVR Busse werden mit Buchstaben des lateinischen Alphabets benannt: A,B,C usw.. Einige AVR haben keine Bus A auch wenn es einen Bus B gibt. | Sämtliche Busse des AVR sind sowohl lesbar als auch beschreibbar, wenn sie im normalen logischen Input/Output (I/O) Modus verwendet werden. AVR Busse werden nacheinander mit lateinischen Buchstaben (A, B, C usw.) benannt. Allerdings können einige AVR zwar einen Bus B, jedoch keinen Bus A besitzen. Jeder Bus ist ein 8-Bit Bus und jedes Bit hat normalerweise seinen eigenen Pin am Controller. Pins werden mit Ziffern, beginnend bei Null, versehen. Für beide Richtungen im Bus gibt es ein separates Register. Zusätzlich gibt es noch ein weiteres Register welches die tatsächliche Richtung des Bus festlegt, ein Bitwert von 1 markiert den Bus als Output und ein Wert von 0 als Input. Damit hat der Bus drei Register: |
| Jeder Bus ist ein 8-Bit Bus und jeder Bit hat normalerweise seinen eigenen Pin am Controller. | |
| Pins werden mit Nummern gezählt und fangen bei Null an. Für beide Richtungen im Bus gibt es ein seperates Register. Zusätzlich gibt es noch ein Register der die tatsächliche Richtung des Bus entscheidet, ein Bitwert von 1 markiert den Bus als Output und eine 0 als Input. Damit hat der Bus drei Register: | |
| |
| * PORT - um den Outputwert des Bus zu setzen. | * PORT - Zur Festsetzung des Outputwertes |
| * PIN - um den Input des Bus zu lesen | * PIN - Zum Auslesen des Inputs am Bus |
| * DDR - Um die Richtung zu setzen. | * DDR - Zur Festlegung der Richtung des Busses. |
| |
| <box 100% round #EEEEEE|Example> | <box 100% round #EEEEEE|Beispiel> |
| |
| Aufgabe: Mache die Pins 0-3 an Bus B zum Input, die Pins 4-7 zum Output, setze Pin 5 "high" und lies die Werte der Pins 0-3 zu einer Variable. Der C-Code sieht wie folgt aus: | Aufgabe: Die Pins 0-3 von Bus B sollen Input sein, die Pins 4-7 Output, setzen Sie Pin 5 „high“ und lesen Sie die Werte der Pins 0-3 in einer Variable aus. Der C-Code sieht wie folgt aus: |
| |
| <code c> | <code c> |
| </box> | </box> |
| |
| In this example, the inputs are used in Hi-Z (high impedance) mode. In essence, the input does not put virtually any load on the source of the signal. This mode might be necessary, if the pin is used as a data bus. It is wise to use a pull-up resistor on the input, if the pin is used for a button, a switch or any other solution, where the input is connected to ground. For that, the output bit of the corresponding pin must be set high in the input mode - as a result, a resistor is placed between the supply voltage and the input, which keeps the input voltage high unless it is being pulled down by something. The goal of a pull-up resistor is to prevent floating of the input due to statical electricity and other interferences. After booting the controller, all IO buses are in the high impedance input mode by default. | In diesem Beispiel, wird der Input im Hi-Z (hochohmig) Modus verwendet. Im Wesentlichen liegt an diesem Input keine Ladung an. Diese Betriebsart könnte hilfreich sein, wenn der Pin als Datenbus genutzt wird. Es ist sinnvoll, einen Pull-Up-Widerstand für den Input zu nutzen, wenn der Pin als Taste, Schalter oder anderes verwendet wird wobei er mit der Masse verbunden ist. Hierfür muss das korrespondierende Output-Bit im Inputmodus „high“ gesetzt werden. Als Folge daraus muss zwischen Stromversorgung und Input ein Widerstand eingefügt werden, welcher die Inputspannung hoch hält, bis irgendetwas sie heruntersetzt. Ein solcher Pull-Up-Widerstand dient dazu, ein Floaten des Inputs aufgrund von Reibungselektrizität oder anderen Einwirkungen zu verhindern. Nachdem der Controller gebootet wurde, befinden sich sämtliche IO Busse standardmäßig im hochohmigen Inputmodus. |
| | |
| Normalerweise werden die Pins am IO Bus auch für andere Peripherals genutzt, neben den logischen Anschlüssen. Falls man eine alternative Funktion des Pins nutzen will, kann man den IO Pin Mode im AVR Datasheet finden. Zum Beispiel wenn man ein ADC Kanal als Input nutzen will, sollte der Pin im Input Modus sein, und um ein PWM Signal zu generieren, sollte er im Output Mode sein. Auf der anderen Seite, suchen sich einige Peripherals den IO Pin Modus selbst aus. | |
| |
| | Normalerweise werden die Pins am IO Bus, neben den logischen Anschlüssen, auch für andere Peripherieschnittstellen genutzt. Soll eine alternative Funktion des Pins genutzt werden, kann der zugehörige IO Pin-Modus im AVR Datenblatt abgelesen werden. Wenn beispielsweise ein ADC Kanal als Input dienen soll, sollte der Pin im Input Modus sein. Um jedoch ein ein PWM Signal zu generieren, sollte er im Output Modus betrieben werden. Es gibt jedoch auch Peripheriemodule, die den IO Pin-Modus eigenständig auswählen. |