21. Lektion: Pin's: Difference between revisions

From Attraktor Wiki
Jump to navigation Jump to search
Line 43: Line 43:
: Setzt den Pin auf 1.
: Setzt den Pin auf 1.
; Pin.toggle()
; Pin.toggle()
: Pin invertieren.  '''Nur Raspberry Pi Pico.'''
: Pin invertieren.  '''Nur Raspberry Pi Pico.''' Nicht bei docs.micropython.org.


= Pins als Ausgang=
= Pins als Ausgang=

Revision as of 08:56, 16 August 2023

Was bietet uns die Klasse Pin?

Im M5Microphyton:

>>> import machine
>>> dir(machine.Pin)
['__class__', '__name__', 'value', '__bases__', '__dict__', 'IN', 'IRQ_FALLING', 'IRQ_RISING', 'OPEN_DRAIN', 
'OUT', 'PULL_DOWN', 'PULL_HOLD', 'PULL_UP', 'WAKE_HIGH', 'WAKE_LOW', 'init', 'irq', 'off', 'on']

Im Raspi Microphyton:

>>> import machine
>>> dir(machine.Pin)
['__class__', '__name__', 'value', '__bases__', '__dict__', 'ALT', 'ALT_GPCK', 'ALT_I2C', 'ALT_PIO0', 'ALT_PIO1', 
'ALT_PWM', 'ALT_SIO', 'ALT_SPI', 'ALT_UART', 'ALT_USB', 'IN', 'IRQ_FALLING', 'IRQ_RISING', 'OPEN_DRAIN', 
'OUT', 'PULL_DOWN', 'PULL_UP', 'board', 'cpu', 'high', 'init', 'irq', 'low', 'off', 'on', 'toggle']

Pins initialisieren.

So sieht eine umfangreiche Initialisierung aus:

my_pin = machine.Pin(id, mode=- 1, pull=- 1, *, value=None, drive=0, alt=- 1)

Üblicherweise reicht diese Kurzform:

from machine import Pin
p0 = Pin(0, Pin.OUT)
p2 = Pin(2, Pin.IN, Pin.PULL_UP)

Bedeutung der Parameter:

id
Nummer des Pin (GPIOxx)
mode
Pin.IN, Pin.OUT, Pin.OPEN_DRAIN
Open Collector / Open Drain
pull
None, Pin.PULL_UP, Pin.PULL_DOWN
PullUp / PullDown

Methoden von Pin

Pin.value(x)
Diese Methode ermöglicht das Setzen und Lesen des Pins. Wird x (0 oder 1) angegeben wird der Pin darauf gesetzt. Ohne x wird der Wert des Pins ausgelesen.
Pin.high()
Setzt den Pin auf 1. Nicht ESP32!
Pin.low()
Setzt den Pin auf 0. Nicht ESP32!
Pin.off()
Setzt den Pin auf 0.
Pin.on()
Setzt den Pin auf 1.
Pin.toggle()
Pin invertieren. Nur Raspberry Pi Pico. Nicht bei docs.micropython.org.

Pins als Ausgang

from machine import Pin

pin_von_led = 25
led_pin = Pin(pin_von_led, Pin.OUT)
led_pin.value(0)

LED ansteuern.

  • Anschaltung
    • nach Vcc
    • nach GND
  • Software

LED blinken lassen.

So findet man es zu Abtippen:

while True:
    led_pin.value(1)
    sleep_ms(500) 
    led_pin.value(0)
    sleep_ms(500) 

Hier eine Alternative:

while True:
    if led_pin.value() == 0:
        led_pin.value(1)
    elif:
        led_pin.value(0)
    sleep_ms(500) 

Mit der toggle.Methode:

while True:
    led_pin.toggle()
    sleep_ms(500) 

toggle / XOR '^'

XOR ist eine logische Vernüpfung die nur 1 ergibt, wenn a oder b 1 ist, wenn a und b 1 sind wird 0 ausgegeben.

XOR Verknüpfung
A B Q
0 0 0
1 0 1
0 1 1
1 1 0
Übung:
>>> pin_x = 0
>>> pin_x = pin_x ^ 1
>>> pin_x
1
>>> pin_x = pin_x ^ 1
>>> pin_x
0
>>> 

Als konkretes Beispiel:

# mit toggle-Methode

led_pin.toggle()


# ohne toggle-Methode
# mit bitwise xor

led_pin.value(led_pin.value()^1)

LED dimmen.

Das Dimmen einer LED unterscheidet sich vom Blinken nur durch die Umschaltgeschwindigkeit. Sobald unser Auge den Wechel nicht mehr wahrnimmt, wird das Impuls-Pausen-Verhältnis in Helligkeit umgesetzt.

Übung:

Schreibt ein Programm mit dem die Helligkeit der LED verändert werden kann. Die Helligkeit wird nicht im laufenden Programm geändert. Dazu wird dad Programm gestoppt. Entsprechende Werte im Script geändert und neu gestartet.

Pins als Eingang

Taster abfragen.

Taster abfragen

Taster entprellen

Übung:
  • Übung 1:
    • Schreibe ein Programm bei dem Du mit der Taste die Blinkfrequenz verändern kannst.
      • max: 1000ms, min: 100ms, step: 100ms.
  • Übung 2:
    • Schreibe ein Programm bei dem Du mit der Taste die Helligkeit verändern kannst.
      • max. 100%, min: 0%., step: 10%.

https://docs.m5stack.com/en/mpy/official/machine