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