
RPi Pico – Schmitt-Trigger Hysterese
von Martin
Müller
Elektronik-Labor
Projekte
Mikrocontroller
Raspberry
Verwendet man einen GPIO-Pin des RPi-Pico als digitalen Eingang, so
befindet sich dieser standardmäßig im Schmitt-Trigger-Modus. Leider
hält sich das Datenblatt mit genauen Informationen hinsichtlich
Schwellenspannung und Hysterese vornehm zurück. Es wird lediglich der
Minimalwert der Hysterese angegeben. Grund genug dazu ein paar
Messungen und Versuche durchzuführen.
GPIO 15 wird als digitaler Ausgang verwendet, GPIO 13 als Eingang.
.program rcpioasm
.wrap_target
set pins,1
wait 1 gpio,13
set pins,0
wait 0 gpio,13
.wrap
Der Status von GPIO 13 wird von einer PIO-Einheit immer wieder abgefragt und auf GPIO 15 invertiert ausgegeben.
#include "rcpioasm.pio.h"
int main(){
gpio_init(15);
gpio_set_dir(15, GPIO_OUT);
gpio_init(13);
gpio_set_dir(13, GPIO_IN);
gpio_set_input_hysteresis_enabled(13,1);
gpio_disable_pulls(13);
pio_gpio_init(pio0, 15);
uint offset = pio_add_program(pio0, &rcpioasm_program);
pio_sm_set_consecutive_pindirs(pio0, 0, 15, 1, true);
pio_sm_config c = rcpioasm_program_get_default_config(offset);
sm_config_set_set_pins(&c, 15,
1);
pio_sm_init(pio0, 0, offset, &c);
pio_sm_set_enabled(pio0, 0, true);
while(true){
}
}
Der eigentliche Programmcode macht nichts anderes als GPIO 15 und GPIO
13 zu initialisieren. Weiterhin wird PIO0 konfiguriert und gestartet,
bevor der Code in einer Endlosschleife weiterläuft.
Das alles lässt sich wunderbar mit der Arduino-IDE ausführen. Was man dazu genau machen muss, ist hier beschrieben: Pico16.html
An GPIO 13 wird eine Dreieckspannung mit einer Amplitude von 2 V und
einer Frequenz von 100 Hz angelegt. Wie man leicht sehen kann, beträgt
die Spannung ab der GPIO 13 als HIGH erkannt wird 1,58 V. Die Hysterese
beträgt 400 mV. Somit wird GPIO 13 wieder als LOW erkannt, wenn
die Eingangsspannung bei 1,18 V oder darunter liegt.
Mit dem so programmierten RPi-Pico kann man leicht einen RC-Oszillator
konstruieren. In diesem Beispiel werden dafür ein 100 kOhm-Widerstand
und ein 100 nF-Kondensator verwendet.
Der Oszillator schwingt mit einer Frequenz von ca. 212 Hz. Die
Hysterese beträgt 400 mV, und auch die Schwellenspannungen stimmen
nahezu exakt mit den vorherigen Messungen überein.
Der Vollständigkeit halber soll noch erwähnt werden, dass derartige
Konstruktionen (Microcontroller, die versuchen digitale Gatter
nachzubilden) immer mit einem gewissen Maß an Jitter behaftet sind, der
auf den gezeigten Oszillogrammen nicht zu sehen ist.
Elektronik-Labor
Projekte
Mikrocontroller
Raspberry