Eingehende Frequenz mit gpiozero auslesen

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

Guten Abend,

ich benötige mal wieder etwas Hilfe.

Ich versuche gerade ab und zu an einem Projekt mit einem Raspberry Pi mt zu helfen.

Es soll ein Feuchtigkeitssensor ausgelesen werden, dieser liefert je nach Feuchtigkeit eine unterschiedliche Frequenz.

Nun bin ich auf der Suche wie ich das mit 'gpiozero' umsetzen kann. Da ich den Sensor nicht da habe, aber noch einen ESP8622, habe ich mit diesem eine Frequenz von 1kHz (mehr geht nicht) erzeugt und konnte diese dann mit diesem Code auslesen:

Code: Alles auswählen

from gpiozero import Button
from time import monotonic
from gpiozero.pins.pigpio import PiGPIOFactory

# Giesomat is the name of the sensor
GIESOMAT_PIN = 21


class Counter:
    def __init__(self):
        self.edges = 0

    def count_edge(self, pin):
        self.edges += 1


def measure_frequency(counter):
    start = monotonic()
    while True:
        if (monotonic() - start) >= 10:
            duration = monotonic() - start
            break
    return counter.edges / duration


def main():
    factory = PiGPIOFactory()
    giesomat = Button(GIESOMAT_PIN, pin_factory=factory)
    counter = Counter()
    giesomat.when_activated = counter.count_edge
    print(measure_frequency(counter))


if __name__ == "__main__":
    main()
Also als Ergebnis bekomme ich 992 Hz.

Ohne 'pin_factory' habe ich eine viel zu geringe Frequenz erhalten. Ich hatte das Gefühl, dass 'gpiozero' mit dem zählen nicht hinter her kommt.

Das ist jetzt ja schon etwas Code. Laut Doku kann man mit steigende oder fallende Flanken mit 'wait_for_press' bzw. 'wait_for_release' abfragen. Das wäre dann dieser Code:

Code: Alles auswählen

from gpiozero import Button
from time import monotonic
from gpiozero.pins.pigpio import PiGPIOFactory

# Giesomat is the name of the sensor
GIESOMAT_PIN = 21
MEASURE_POINTS = 4000


def measure_frequency(giesomat):
    start = monotonic()
    for _ in range(MEASURE_POINTS):
        giesomat.wait_for_release()
    return MEASURE_POINTS // (monotonic() - start)


def main():
    factory = PiGPIOFactory()
    giesomat = Button(GIESOMAT_PIN, pin_factory=factory)
    print(measure_frequency(giesomat))


if __name__ == "__main__":
    main()
Der liefert mir aber immer einen konstanten Wert von 3990.0. Da das fast 4 mal so hoch ist, wie meine eingestellten 1kHz gehe ich davon aus, dass die Flanken nicht alle erkennt werden und die Schleife "ungebremst" durchläuft.

Was mich etwas wundert (oder bin ich vielleicht etwas verwöhnt), das es dafür nichts fertiges von gpiozero' gibt.
In der Doku habe ich dann eine Basis Klasse von 'Pin' gefunden, auf der man frequency aufrufen kann. Mal abgesehen davon, das ich nicht weis ob dass dafür da ist, die eingestellte Frequenz eines PWM-Pins auszugeben oder ob das tatsächlich dafür da ist, eingehende Frequenz zu messen, wie nutze ich diese Pin-Klasse?

Wenn ich mal den Code der Pin-Klasse anschaue, dann sehe ich nur, dass die Klasse ein 'object' erwartet. Ich weis aber gar nicht wie ich damit umgehen soll.
In erster Linie wäre es mal sehr hilfreich für mich, unabhängig vom Problem, was ist das für eine Pin-Klasse? Was macht die und wie kann ich die nutzen? Meine Vermutung ist, dass die "intern" benutzt wird, wenn ich zum Beispiel einen Button oder ähnliches erstelle.

Zu letzt verwundert mich, das wenn ich meinen zweiten Code mit 'RPi' schreibe, dann funktioniert das. Das wäre dann soetwas (hoffe ich habe es noch richtig im Kopf):

Code: Alles auswählen

from RPi import GPIO
from time import monotonic


# Giesomat is the name of the sensor
GIESOMAT_PIN = 21
MEASURE_POINTS = 4000


def measure_frequency():
    start = monotonic()
    for _ in range(MEASURE_POINTS):
        GPIO.wait_for_edge(GIESOMAT_PIN, GPIO.FALLING)
    return MEASURE_POINTS // (monotonic() - start)


def main():
    try:
        GPIO.setmode(GPIO.BCM)
        GPIO.setup(GIESOMAT_PIN, GPIO.IN)
        print(measure_frequency())
    finally:
        GPIO.cleanup()


if __name__ == "__main__":
    main()


Danke schon mal für eure Hilfe.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich kann deine Fragen so direkt nicht beantworten, weil zuwenig gpiozero Erfahrung. Aber ich weiß, wie pigpio direkt funktioniert, und bin ein Fan. Ob der einen Zähler hat, weiß ich nicht. Aber er sampled per DMA mit hoher Zuverlässigkeit, und das hilft ggf.

Ansonsten sind die Möglichkeiten mit Python und dem Pi natürlich beschränkt. Mit einem Kernelmodul könnte man da mit geringem overhead und hoher Genauigkeit bis mehrere KHz arbeiten. Aber da muss man schon ein bisschen tiefer einsteigen.
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

Guten Morgen,

vielen Dank für deine Antwort.

Daraus schließe ich, das ich schon mal auf dem richtigen Weg bin und bei pigpio bleiben werde. (Mal abgesehen davon, das ich ich nach oben begrenzt bin).
Kann ich davon ausgehen, das 'RPi' im vergleich zu 'gpiozero' DMA benutzt und dadurch die Unterschiede entstehen?
Wenn ich nach 'RPi' und 'pigpio' suche, dann bekomme ich Möglichkeiten gezeigt, wie man 'pigpio' mit 'RPi' nutzen kann. Dann wird 'RPi' per default nicht 'pigpio' nutzen.
__deets__ hat geschrieben: Donnerstag 14. April 2022, 21:45 Ansonsten sind die Möglichkeiten mit Python und dem Pi natürlich beschränkt. Mit einem Kernelmodul könnte man da mit geringem overhead und hoher Genauigkeit bis mehrere KHz arbeiten. Aber da muss man schon ein bisschen tiefer einsteigen.
Das würde bedeuten, das ich mich für diesen Fall von Python verabschieden müsste? Hast du mir ein paar Schlagworte, damit ich eine Vorstellung davon habe, wie soetwas grundsätzlich auszusehen hat?
Ich habe allerdings gerade keine Zeit eine andere Sprache zu lernen oder mich irgendwo tief einzuarbeiten, ich würde nur gerne etwas an der Oberfläche kratzen um ein Verständnis für die Unterschied zu bekommen.

Wenn das Auslesen der Frequenz mit Python an die Grenzen kommt und dadurch das Projekt umstrukturiert werden muss, dann bin ich so oder so der falsche Ansprechpartner und jemand anderes muss weiter helfen.

Kannst du noch etwas zu der Frage mit der Pin-Klasse sagen?

Vielen Dank und Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich glaube du verwechselst da was. gpiozero ist ein nett gestaltetes frontend, das verschiedene backends wie pigpio, RPi.GPIO und vielleicht noch mehr abstrahiert. Die Wahl des backends geschieht durch diese Factory Nummer.

RPi.GPIO benutzt afaik (habe da vor 5 Jahren oder so reingeschaut) für Ereignisse (also “Interrupts”) die generische userpace GPIO Funktionalitäten des kernels. Damit wird man per file descriptor benachrichtigt, wenn einer aufgetreten ist. Und dann ruft der Hintergrund thread, der mit select oder poll auf den deskriptor gewartet hat, dein Python callback auf. Das klappt alles ganz ok, ist aber zum einen recht langsam, weil jedes Ereignis einmal die ganz Kette durchrödelt. Und es unterliegt den üblichen Problemen von Tasks unter Linux, die auch mal verzögert gescheduled werden, weil das ein komplexes System ist.

pigpio geht grundsätzlich anders vor. Der hat in seinem Dämon, der extra laufen muss, zwar auch hoch priorisierte threads. Aber vor allem benutzt er einfach einen DMA Kanal, um die GPIO Zustände in einen ringbuffer zu schreiben. DMA geht komplett am scheduler vorbei, und läuft darum auch immer, selbst wenn der Task mal verzögert wird. Das Ergebnis ist ein Buffer, der quasi einen gesammelten bitstrom für die Pins vorhält. Und da kann man dann auch mehrere sonst ggf. verpasste Wechsel nachträglich “in Ruhe” verarbeiten. Damit sollte es IMHO gehen. Kann aber sein, dass man das nur mit direkter pigpio-Nutzung gut hinbekommt, statt eben dem frontend.

Der Aufwand ist aber im Verhältnis zum popeligen Signal zählen, dass ein ESP wie ich dir ja gezeigt habe mit links macht, weil er dafür extra Silicon hat, sehr hoch. Kann einem natürlich egal sein, wenn’s tut, aber elegant ist anders.

Der Kernel Ansatz den ich erwähnt habe, verlagert die gesamte IRQ und Zähl Nummer in ein Kernel Modul. Das ist dann aber C, und vor allem: kompliziert zu bauen & zu erklären. Nicjt so sehr dir, aber dem User im Pi Forum ist das eher nicht zuzutrauen.

Besser wäre also mal wieder ein microcontroller. Oder den Sensor zu wechseln. Ich vermute das ist ein kapazitiver, NE555-basierter. Der NE555 erzeugt diese Frequenz. Ich habe welche, die daraus wiederum eine Gleichspannung machen, die man mit einem ADC einlesen kann. Alle paar Minuten, statt dieser relativ aufwändige gezählte. Die Schaltung findet sich zb hier: https://tlfong01.blog/2020/09/26/capaci ... working-3/ - ggf kann man den Sensor des Users mit diesem tiefpass-Filter ausstatten. Genau verstehe ich den aber auch nich nicht.
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

Danke für deine ausführliche Erklärung.
__deets__ hat geschrieben: Freitag 15. April 2022, 11:22 Ich glaube du verwechselst da was. gpiozero ist ein nett gestaltetes frontend, das verschiedene backends wie pigpio, RPi.GPIO und vielleicht noch mehr abstrahiert. Die Wahl des backends geschieht durch diese Factory Nummer.
Das habe ich verstanden, vielleicht habe ich mich da etwas ungeschickt ausgedrückt.
__deets__ hat geschrieben: Freitag 15. April 2022, 11:22 dass ein ESP wie ich dir ja gezeigt habe mit links macht, weil er dafür extra Silicon hat, sehr hoch. Kann einem natürlich egal sein, wenn’s tut, aber elegant ist anders.
Nur für dich zur Info, das Projekt mit dem ESP steht gerade immer noch still, da die wohl Probleme haben das Material für den Bau der Maschine herzubekommen. Nicht das du denkst, ich hätte das einfach so abgeblasen und dir nicht Bescheid gesagt.
__deets__ hat geschrieben: Freitag 15. April 2022, 11:22 Der Kernel Ansatz den ich erwähnt habe, verlagert die gesamte IRQ und Zähl Nummer in ein Kernel Modul. Das ist dann aber C, und vor allem: kompliziert zu bauen & zu erklären. Nicjt so sehr dir, aber dem User im Pi Forum ist das eher nicht zuzutrauen.
Okay, wenn ich ehrlich bin, dann hängt mein Herz jetzt nicht so arg an diesem Projekt, das ich erst noch C lerne. Aber immerhin habe ich mal von dieser Möglichkeit gehört, man weis ja nie was noch so kommt.
__deets__ hat geschrieben: Freitag 15. April 2022, 11:22 Besser wäre also mal wieder ein microcontroller. Oder den Sensor zu wechseln. Ich vermute das ist ein kapazitiver, NE555-basierter. Der NE555 erzeugt diese Frequenz. Ich habe welche, die daraus wiederum eine Gleichspannung machen, die man mit einem ADC einlesen kann. Alle paar Minuten, statt dieser relativ aufwändige gezählte. Die Schaltung findet sich zb hier: https://tlfong01.blog/2020/09/26/capaci ... working-3/ - ggf kann man den Sensor des Users mit diesem tiefpass-Filter ausstatten. Genau verstehe ich den aber auch nich nicht.
Ja es ist ein kapazitiver Sensor, ob da ein NE555 drin ist, habe ich nicht gefunden:
https://www.ramser-elektro.at/shop/baus ... chichtung/

Ich gebe die Infos von dir mal so weiter.
Vielen Dank dafür!

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ist nicht NE555, aber invertierte schmitt trigger sind in diesem Fall fast das gleiche.

pigpio kann auch ein besonderes Feature was sie “Skripte” nennen. Damit kann man das ggf kompakter lösen.
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

Das mit den Skripten sieht viel versprechend aus, vor allem wenn man die Vergleichszahlen aus dem Beispiel anschaut.
http://abyz.me.uk/rpi/pigpio/pigs.html#Scripts


Zur Info: In der Doku von pigpio habe ich auch ein Beispiel gefunden um eingehende PWM an einem Pin auszulesen. Die machen das so:

Code: Alles auswählen

#!/usr/bin/env python

# read_PWM.py
# 2015-12-08
# Public Domain

import time
import pigpio # http://abyz.co.uk/rpi/pigpio/python.html

class reader:
   """
   A class to read PWM pulses and calculate their frequency
   and duty cycle.  The frequency is how often the pulse
   happens per second.  The duty cycle is the percentage of
   pulse high time per cycle.
   """
   def __init__(self, pi, gpio, weighting=0.0):
      """
      Instantiate with the Pi and gpio of the PWM signal
      to monitor.

      Optionally a weighting may be specified.  This is a number
      between 0 and 1 and indicates how much the old reading
      affects the new reading.  It defaults to 0 which means
      the old reading has no effect.  This may be used to
      smooth the data.
      """
      self.pi = pi
      self.gpio = gpio

      if weighting < 0.0:
         weighting = 0.0
      elif weighting > 0.99:
         weighting = 0.99

      self._new = 1.0 - weighting # Weighting for new reading.
      self._old = weighting       # Weighting for old reading.

      self._high_tick = None
      self._period = None
      self._high = None

      pi.set_mode(gpio, pigpio.INPUT)

      self._cb = pi.callback(gpio, pigpio.EITHER_EDGE, self._cbf)

   def _cbf(self, gpio, level, tick):

      if level == 1:

         if self._high_tick is not None:
            t = pigpio.tickDiff(self._high_tick, tick)

            if self._period is not None:
               self._period = (self._old * self._period) + (self._new * t)
            else:
               self._period = t

         self._high_tick = tick

      elif level == 0:

         if self._high_tick is not None:
            t = pigpio.tickDiff(self._high_tick, tick)

            if self._high is not None:
               self._high = (self._old * self._high) + (self._new * t)
            else:
               self._high = t

   def frequency(self):
      """
      Returns the PWM frequency.
      """
      if self._period is not None:
         return 1000000.0 / self._period
      else:
         return 0.0

   def pulse_width(self):
      """
      Returns the PWM pulse width in microseconds.
      """
      if self._high is not None:
         return self._high
      else:
         return 0.0

   def duty_cycle(self):
      """
      Returns the PWM duty cycle percentage.
      """
      if self._high is not None:
         return 100.0 * self._high / self._period
      else:
         return 0.0

   def cancel(self):
      """
      Cancels the reader and releases resources.
      """
      self._cb.cancel()

if __name__ == "__main__":

   import time
   import pigpio
   import read_PWM

   PWM_GPIO = 4
   RUN_TIME = 60.0
   SAMPLE_TIME = 2.0

   pi = pigpio.pi()

   p = read_PWM.reader(pi, PWM_GPIO)

   start = time.time()

   while (time.time() - start) < RUN_TIME:

      time.sleep(SAMPLE_TIME)

      f = p.frequency()
      pw = p.pulse_width()
      dc = p.duty_cycle()
     
      print("f={:.1f} pw={} dc={:.2f}".format(f, int(pw+0.5), dc))

   p.cancel()

   pi.stop()

Die Werte spielen sich, wie in meinem Code auch, um die 990Hz ein.

Mal sehen ob ich aus den Skript-Beispiel noch irgendwie schlau werde und das mal versuchen könnte.

Danke und Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na 1% Abweichung (wenn es denn 1000 sein sollten) ist quasi nix. Das passt also schon.
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

Mit dem Ergebnis bin ich auch zufrieden und es hat mir gezeigt, das mein Code dann auf jeden Fall in diesem Frequenzbereich brauchbar ist.

Ich sehe gerade das ich mit einem ESP32 bis zu 40MHz ausgeben kann. Die letzten Messungen des Sensors waren irgendwo bei ~45kHz.

Also ESP32 -> MicroPython -> PWM(Pin(OUTPUT_PIN)).freq(45000) und 'duty(512)

Mein Code liefert bei 10 Messungen Werte von 7 kHz - 9 kHz.
Der Beispielcode von 'pigpio' liefert Werte von hauptsächlich ~22 kHz, mit Ausreißer von 9 und 15 kHz.
Der Code mit 'RPi' liefert konstant ~22kHz.

Ich kann 'duty' Werte von 0 - 1023 geben. Ab ca. 850 (habe nicht so genau durchprobiert) weichen die Werte ab und die Ausgaben werden deutlich geringer. Aber von 100 - 850 kann ich die oben angegebenen Werte wieder nachstellen.


Mich wundert es nur, dass mit dem 'RPi'-Code am Sensor Frequenzen von 45 kHz gemessen wurde und ich das jetzt nicht schaffe. Vielleicht weicht in meinem Versuchsaufbau etwas vom original ab. Ich habe halt die Pins miteinander verbunden und dem ESP und dem Pi eine gemeinsame Masse gegeben. Und einmal hatte ich noch einen Widerstand auf Masse dazu verbaut um sicher zu gehen, dass der Pin nicht irgendwas zwischen 0 und 1 annimmt. Aber das brachte keinen Unterschied.

Hmm, jetzt bin ich erst mal wieder ratlos. Vielleicht wirds nach dem Abendessen besser (wie die Zeit vergeht :) )

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

Guten Abend,
__deets__ hat geschrieben: Freitag 15. April 2022, 11:22 Der Aufwand ist aber im Verhältnis zum popeligen Signal zählen, dass ein ESP wie ich dir ja gezeigt habe mit links macht, weil er dafür extra Silicon hat, sehr hoch.
Mache mir gerade dazu Gedanken. Den Pulse-Counter den du in MicroPython eingebaut hast erwartet ja zwei Pins. Das wäre für diesen Fall aber einen zuviel. Hier gibt es keinen Kontroll-Pin.

Ich habe mir mal den C-Code angeschaut um zu sehen ob ich für den Pulse-Counter zwei Pins übergeben muss oder ob das womöglich auch mit einem funktionieren könnte. Da ich C nicht kann, kann ich nur raten und meine das folgende Zeilen dafür sorgen, das ich zwei Pins übergeben muss:

Code: Alles auswählen

int pulse_pin = machine_pin_get_id(args[1]);
    int control_pin = machine_pin_get_id(args[2]);
Also kein Default-Wert für den zweiten Pin.

Das ganze habe ich deswegen gemacht, weil du geschrieben hattest, dass die hauptsächliche Arbeit bei implementieren des Counters, die Bi-Direktionale Funktion war:
Hauptsächlich ist es einfach nur die Unterstützung von bi-Direktion.
Daraus habe ich geschlossen, dass es eine Funktion geben muss, die die Pulse eines einzelnen Pins zählt.

Jetzt mal zu meiner Frage, gibt es einen Pulse-Counter für einen einzelnen Pin, die ich unter MicroPython nur nicht gefunden habe oder ist die Funktion nicht in MP implementiert? /Also diese hier

Du hast ja bestimmt nicht gemeint, das ich einen handler schreiben soll, der die Flanken zählt?

Weis nicht ob ich dich mit dem "weil er dafür ein extra Silcon hat" falsch verstanden habe.

Testen kann ich das erst am Donnerstag wieder, weil ich dort erst wieder in die Werkstatt komme. Deswegen die viele Fragen, hoffe da habe ich mich gerade nicht wieder vertan.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Der Code den ich geschrieben habe ist nicht generisch. Die vielen Möglichkeiten des PCNT Mechanismus unterstützt der nicht. Sondern ist festgelegt auf eben genau deinen ursprünglichen Zweck - quadratur Decoder. Aber tatsächlich geht’s auch damit - denn ein QDEC nimmt einen Pin zum zählen, und den anderen zur richtungsbestimmung. Und den kannst du dir sparen (bzw. auf 0 oder 1 legen), und dann zählt der schon korrekt.

Aber besser wäre natürlich, das Interface so wrappen, das die reine Zählfunktion auch direkt verfügbar ist, und kein Pin verschwendet wird.
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

Danke für deine Antwort.

Dann müsste ich diesen Code anpassen?

Dann kann ich den Control-Pin mal rauswerfen

Code: Alles auswählen

STATIC mp_obj_t pcnt_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) {
    mp_arg_check_num(n_args, n_kw, 3, 3, true);

    int unit = mp_obj_get_int(args[0]);
    if (unit >= PCNT_UNIT_MAX) {
        nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError, "bad pcnt unit id requested: %d (0~7 allowed)", unit));
    }
    int pulse_pin = machine_pin_get_id(args[1]);

    pcnt_config_t pcnt_config = {
        // Set PCNT input signal and control GPIOs
      .pulse_gpio_num = pulse_pin,
      .channel = PCNT_CHANNEL_0,
      .unit = unit,
      // What to do on the positive / negative edge of pulse input?
      .pos_mode = PCNT_COUNT_INC,   // Count up on the positive edge
      .neg_mode = PCNT_COUNT_DIS,   // Keep the counter value on the negative edge
      // Set the maximum and minimum limit values to watch
      .counter_h_lim = 0,
      .counter_l_lim = 0,
    };
Jetzt habe ich aber zum Beispiel '.lctrl_mode' rausgeworfen. Ich müsste also irgendwo einen Code finden, in dem steht was '.lctrl_mode' sein soll und darin vermutlich auch etwas ändern?

Siehst du einen Sinn darin, dass ich das abgeändert bekomme ohne die C-Grundlagen? Mich interessiert das jetzt einfach, ob und wie genau ich die Frequenz ausgelesen bekomme. Also das ist jetzt für mich und erst mal unabhängig von einem Projekt. Allerdings fehlt mir die Zeit mir ein Grundlagentutorial durchzuarbeiten, deswegen glaube ich eher nicht an den Erfolg, es sei denn man müsste wirklich wenig ändern und deswegen auch die "dumme" Frage, ob es ohne die Grundlagen mit ein zwei Nachfragen möglich wäre. Wenn du gleich sagst, das es aussichtslos ist, dann ist das auch okay für und ich arbeite mich ein, wenn ich es mal wirklich brauche.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na ich sehe gar nicht den Sinn. Häng nur einen pin dran & grounde den zweiten. Das war es doch, für das Experiment ist das genug.
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

__deets__ hat geschrieben: Mittwoch 20. April 2022, 06:53 Aber besser wäre natürlich, das Interface so wrappen, das die reine Zählfunktion auch direkt verfügbar ist, und kein Pin verschwendet wird.
Solche Aussagen motivieren mich in erster Linie immer etwas neues zu versuchen. Da war der Reiz den Code umzuschreiben schon etwas höher, wie das Frequenzergebnis. :D

Aber ich sehe es ein, programmieren ist nicht raten. Irgendwann komme ich aber darauf zurück und ich hoffe man findet dich (euch) auch in einem C-Forum.

Danke für deine Hilfe.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

C-Forum bin ich nicht, dafuer ist mir die Sprache nicht wichtig genug :D Du kannst auch hier fragen. Nur im Pi-Forum waere ich vorsichtig, was ich da die Tage wieder an Tipps zur Arduino-Programmierung gesehen habe, laesst mich schaudern :o
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

Wenn es dazu kommt, werde ich das so anstellen, dass du und andere "gewünschte" User das lesen.

Für Fragen in Richtung Programmierung, nehme ich gerne dieses Forum. Es fällt hier immer wieder auf, wenn sich Beiträge überschneiden, das sie inhaltlich doch sehr ähnlich sind und auch das Niveau, das hier angestrebt wird, ist mein langfristiges Ziel.
Also ihr habt mich schon lang überzeugt.

Das Pi Forum nutze ich dann, für spezifische Pi-Fragen und um so gut es geht selbst etwas Hilfe anzubieten.

Viele Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

__deets__ hat geschrieben: Mittwoch 20. April 2022, 13:26 Häng nur einen pin dran & grounde den zweiten. Das war es doch, für das Experiment ist das genug.
Wurde vorhin gemacht und ich bin begeistert. Bspw. 60kHz werden reproduzierbar mit ~60,005 kHz ausgelesen, wenn ich 5 Sekunden lang die Impulse zähle.
Fasziniert hat mich auch, das ich für die Genauigkeit nicht unbedingt über einen längeren Zeitraum zählen muss. Auch wenn ich nur 1 Sekunde zähle erhalte ich bei so hohen Frequenzen ziemlich genaue Werte. 👍

Also zu deiner Aussage, dass der ESP das mit links macht, habe ich jetzt ein Gefühl bekommen. Damit kann ich das Thema für mich mal abhacken und weis was ich verwenden werde, wenn ich das mal brauche.


Vielen Dank dafür!

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Antworten