Posts by WillyR_aus_C

Registriere dich jetzt, um exklusive Vorteile zu genießen! Als registriertes Mitglied kannst du Inhalte herunterladen und profitierst von einem werbefreien Forum.
Mach mit und werde Teil unserer Community!

    Guten Tag,

    Auf einem SPI angesteuerten Color Display möchte ich sowohl Text, wie auch grafische Elemente darstellen. Das sind zu einem Nachbildungen von analogen Zeigerinstrumenten, zum anderen Balkendiagramm, aber auch einfache Dinge wie Zeiger, die einen Trendverlauf visualisieren sollen.

    Aktuell habe ich schon erste kleine Versuche unternommen diese Darstellungen als eigenständige Funktion ablaufen zu lassen. Mir geht es jetzt nicht darum, wie ich mit den Befehlsfolgen aus der LIB "frambuf" diese Darstellung auf das Display bekomme, sondern ausschließlich darum, wie kann man unter Zuhilfenahme des zweiten Cores diese Aufbereitung beschleunigen ? Das reine Zeichnen von grafischen Grundelementen wie Rechtecke, Linien oder Kreise, glaube ich im Griff zu haben. Ebenso die Ausgabe von linksbündig orientierten Texten.
    Besonders viel Zeit verliere ich offensichtlich bei der Beschriftung einer 3/4 Kreis Skala ähnlich einer Uhr, welche sich am bisherigen Maximalwert orientiert. Hier habe ich noch keine wirklich funktionierende Formel oder Berechnungskrundlage gefunden, welche mir skaliert eine solche Beschriftung an die Richtige Position rückt.

    Mein angedachte Ziel ist es anhand des bisherigen Eingangswertes zwei- oder dreistellig, diese Skala über einen Parameter als 10 oder in jeder anderen Größe bis max. 15 Sklanestrichen aufzuteilen, und diese dabei noch zu beschriften. Dabei bräuchte ich eine Skalenbeschriftung die als Ganzzahl oder mit ".5" als Teiler durch 10/50/100 entsprechend skaliert wird. Dieser Teilungsfaktor soll dann als Textelement in der Form "x100" o.ä. unterhalb des Zeigers zentrisch positioniert werden.


    Wie bestimmt man zudem den Mittelpunktwert eine solchen Textausgabe, wenn man frambuf.text("TEXT", Position_X, Position_Y, Farbe) nutzt ?

    Meine bisherigen Versuche laufen darauf hinaus das ich sehr sehr viel Zeit mit den Berechnungen verliere. Ohne das alle benötigten Ausgaben schon implementiert sind dauert eine solche vollständige Displayaktualisierung mehrere Sekunden.

    Guten Tag,


    Ich bin schon wieder am Ende mit meinem Latein, und muss euch wieder um Unterstützung bitten.

    Ich möchte mehrere Grafikdateien aus einem Pfad erfassen ( Dir-Listing ), diese ggf Umbenennen, und im Anschluss weiter bearbeiten.

    Mein Problem ist nun: wie ermittle ich alle Dateien die in ein Schema *.Dateiendung passen, damit ich nur diese aufgelistet bekomme ? Hierbei wäre es mir wichtig das ich zu einem als Programmparameter die absolute Pfadangabe wie auch ein beliebige Anzahl an möglichen Dateiendungen wie z.B. *,tif, *.jpg usw. angeben kann.
    Diese Dateien sollen ohne das vom Original eine Kopie erzeugt wird, nach einem festen Schema umbenannt werden, so das nur die Dateiendung erhalten bleibt. Diese dann nun neue Liste an gewandelten Dateinamen möchte ich dann in die schon vorhandene Bearbeitungsroutine einbinden.


    Könnt ihr mir hierbei helfen ? Danke

    Guten Tag,

    für eine formatierte Ausgabe komme ich an einer Stelle nicht weiter.


    wenn ich eine Integer-Zahl mit einer voranstehenden Null ausgeben will, schreibe ich

    Python
    zahl = 3
    print(f"{zahl:02d}")

    Nun möchte aber auch eine reele Zahl vorzeichenlos aber mit einer definierten Anzahl Nachkommastellen ausgeben.

    Python
    zahl = 4.148786
    print(f"{zahl:02.3f}")

    Hier passiert aber nun nichts, die erste Stellen, wenn ich verschiedene Zahlen einsetze ist dann auch nicht mehr anhand der Kommastelle "." formatiert.

    Wie kann ich eine Ausgabe erreichen ?

    Code
    04.1487
    10.257

    Danke für eure Hilfe.

    Guten Morgen DeaD_EyE,


    wahrscheinlich habe ich mich etwas verschwommen ausgedrückt. Es ging und geht niemals um das Datum.
    Es geht rein um die Zeit als Stunden, Minuten und Sekunden Angabe.
    Mit dem Übertrag meinte ich das ich die Umrechnung der Dauer in ein Aufaddierbares Format zur rtc.datetime()[4:7] hinbekmme, ohne das ich jeden Wertübertrag /-überschreitung 23 bei Stunden, 59 bei Minuten und Sekunden ohne IF Abfragen hinbekomme. Das Problem machine.Timer() habe ich durch viel herumprobieren versucht aufzulösen.
    Mit aktiver machine.RTC kann ich nur einen ONE_SHOT Timer bis 3 h 15 min Initiieren, der dann auch sicher zur Ausführung kommt. Ob das an der Version des µPython liegt, oder andere Ursachen hat, kann ich nicht sagen.

    Guten Tag DeaD_EyE,


    Dein Programm macht offensichtlich das gleiche, was mein Code macht. Ich erkenne jetzt keinen Unterschied in der eigentlichen Funktion, außer der Aufteilung mit Hilfe einer weiteren Funktion zur Berechnung der Verzögerungsdauer für den Timer-Aufruf, welcher in ms erfolgt.

    Es geht jetzt auch nicht um die Herleitung dieser Zeitangabe in ms, und auch nicht wie in deinem #3 geschrieben mit irgendwas, was mit einem Datum zu tun hat.

    Mir geht es jetzt erst einmal um die Lösung eines Teilproblems für ein komplexeres Projekt.

    Dazu möchte ich in der Form:

    Python
    time_table = [("06:30:00", 45),
                   "08:20:00", 15),
                   "12:05:30", 345)]

    eine Art Ausführungstabelle erstellen, später über ein User-Interface dynamisch, wo der Startzeitpunkt als reale Uhrzeitangabe, und die Beendigung über einen Wert der Dauer vorgegeben wird.
    Ich hatte nun mehrere Varianten durchprobiert, bin aber zu keiner wirklich unter allen Umständen funktionierenden Lösung gekommen. Das Datum selber wird dafür gar nicht benötigt. Es soll jeden Tag immer nach dem Muster welcher in dieser Tabelle beschrieben ist ausgeführt werden.

    Dazu hatte ich schon die Überlegung angestellt, jede Sekunde - aller 1000 ms über die interne RTC die aktuelle Zeitabzufragen, im Falle einer Übereinstimmung den ersten Vorgang zu starten und über einen weiteren Timer wie es Tell vorgeschlagen hatte einen ONE_SHOT Timer zu initiieren, welcher dann die Nachfolgeoperation auslöst.
    Dazu hatte ich den in #4 gezeigten Code gestartet. Das ganze passierte auf einem PICO W, und als Indikator habe ich einfach die OnBoard LED genutzt. Wie ich schon darlegte kann man einen ONE_SHOT Timer mit diesem großen numerischen Wert, welcher 6 Stunden entspricht starten. Es folgt auch keine Fehlermeldung, oder ähnliches. Der Wert wird offensichtlich übernommen. Nur hat sich die LED nach diesen 6 Stunden nicht wie erhofft abgeschaltet.
    Bei kürzeren Zeitwerten, welche im Sekunden oder Minutenbereich liegen funktioniert das mit dem ONE_SHOT-Timer auch einwandfrei. Ich weis jetzt nicht wo die Grenze liegt, offensichtlich bei einigen Millionen ms wo dieser nicht mehr korrekt ausgeführt wird.

    Daher hatte ich gefragt, wie man zu der Startzeit diese Dauer wieder als Angabe einer realen Uhrzeit umrechnet, um mit der gleichen sekündlichen Abfrage Startzeit dann auch die Endzeit-Funktion aufrufen kann. Vereinfacht es läuft dann nur ein Timer, welcher pro Sekunde einmal prüft ob eine der beiden Zeiten erreicht ist, und dann die entsprechende Funktion startet.

    Ich kann auch nicht sagen ob es an der Besonderheit des PICO W liegt, oder ob Micropython allgemein ein Problem mit so hohen Übergabezeiten bei der Timer-Initiierung hat.


    Als weitere Besonderheit kommt dann noch hinzu, was aber für dieses Teilproblem erst einmal nach meiner Ansicht unerheblich ist, das die zweite Funktionen nach Ablauf der Dauer eine Rückmeldung geben muss, welche Bedingung ist, damit im weiteren Ablauf der nächste Start mit der neuen Startzeit zur Ausführung kommt. Es ist eine Sicherheitsfunktion, welche im Falle das die Bewegung welche nach Ablauf "Dauer" nicht bis zu einem Referenzpunkt ausgeführt werden konnte ( dieser Punkt muss erreicht oder überfahren werden ) dann den erneuten Start verhindert, und eine Warnmeldung ausgibt.

    Guten Abend,

    Sieh dir mal die Timer-Klasse an.

    Ja, Timer habe ich mir angesehen.
    Okay, ich habe jetzt keine Ahnung warum es nicht so mit langen Überbrückungszeiträumen funktioniert wie es mit kurzen.

    Wenn ich nun einen Timer starte:

    Python
    from machine import Pin, Timer
    
    def Abschalten():
        led.off()
    
    led = Pin('LED', Pin.OUT, value = 1)
    
    timer = Timer(period = (6 * 60 * 60 * 1_000),  # 6 Stunden 
                  mode = Timer.ONE_SHOT,
                  callback = lambda t: Abschalten())

    welcher nur einmal ausgeführt wird, passiert komischer Weise nicht.
    Hier habe ich in der Abwandlung mit der Onboard LED und 21_600_000 ms für die Dauer ein Abschaltung dieser versucht. Deswegen auch mein verspätetet Antwort.
    Auf dem PICO W nun sind über 6 Stunden vergangen und die LED leuchtet immer noch.

    Guten Morgen,


    Ich habe ein kleines Problem - wohl ich habe mich wohl etwas verrannt, und finde keine Lösung.

    Ausgangssituation: Ich habe eine Startzeitt im Format "hh:mm:ss" und eine Dauer im Format "mm". Die Dauer wird immer in Minuten angegeben. Das ich bei einer Dauer größer 60 min dann auch den Stundenwert mit ändern muss ist mir klar.
    Wie bekomme ich nun ohne IF Abfragen heraus, um wie viel ich ggf auch die Stunden erhöhen muss, was mache ich wenn z.B. 17:52:15 die Startzeit ist und die Dauer 83 min beträgt ? Was würde zudem notwendig werden, wenn die Tagesgrenze 0:00 Uhr überschritten wird ?

    Das ist mit der Abfrage über localtime einen Vorgangs starten kann, ist mir klar. Nur wenn ich dann auch noch über die Tagesgrenze komme, weis ich aktuell nicht wie ich dann den Ausgangszustand wieder herstelle.

    Ich bräuchte in µPython eine kleine Hintergrundroutine welche immer zu den Startzeiten eine bestimmt Funktion aufruft, und nach Ablauf der Zeit "Dauer" eine andere Funktion aufruft. Es geht hier nicht um eine einfache GPIO ON/OFF Lösung.

    Ich hoffe ihr könnt mir weiter helfen

    Guten Morgen

    über den Widerstand wird der Spannungsabfall vom Pico gemessen, da das Messgerät den maximalen Strom begrenzt (4...20mA) kann da m.E. nix passieren zur Sicherheit wird noch eine Z-Diode parallel zum Widerstand eingebaut und einen Vorwiderstand hin zum Pico gibts auch noch. Das Konstrukt muss ich nur noch testen

    Wenn du einen Spannungsabfall messen willst, ist es notwendig, das "Meßgeräte" parallel zum Widerstand einzubauen. Ein reiner Widerstand ändert nichts an der Spannung, er ist nur eine Strombremse.
    Da dein PICO selber mit dem gleichen Massepotential verbunden ist, und der AGND des PICOs intern mit dem DGND , oder einfach der gleichen Masse verbunden ist, kannst du keine Spannung mit nur einem Widerstand als Vorwiderstand messen. Die Spannung die zum ADC-Eingang geführt wird, egal ob du diese vor oder nach dem Widerstand ( gemäß deiner Stromlaufskizze ) abgreifst, diese wird immer größer sein als die Referenzspannung des ADCs von 3,3 Volt und damit den RP2040 zerstören.
    Wenn du im Verhältnis die 24 V Spannung auswerten willst, bräuchtest du schon einen Spannungsteiler oder einen Differenziellen ADC. Das Problem ist nunmal das, das auf dem PICO alles gegen Masse liegt.
    Hinzu kommt auch noch der Umstand, das man diese GPIOs nicht unendlich belasten kann.
    Alle Output GPIOs in der Summe sollten nicht mehr wie mit 16 mA belastet werden. Und du wirst je nach Aufbau deiner Spannungsversorgung merken, dass du jeden Schaltvorgang ( Output ) auch wenn es nur wenige mA sind, du als Eingangsschwankung über den ADC Kanal registrierst.
    Bei jedem On- Schaltvorgang wird für eine kurze Zeit die Eingangsspannung je nach Glättungskondensator zusammenbrechen, und du damit einen höheren Spannungswert über den ADC Eingang festsellen. Denn die Schwankung der Referenzspannung aus der gleichen Quelle kommend, hat eine umgekehrtproportionale Auswirkung auf den Meßrohwert des ADC.
    Je nach dem wie viele Ausgänge du für deine Relais nutzt, wie hoch der Strom durch diese GPIO Ausgänge gezogen wird, solltest du diesen Umstand als Meßfehler einkalkulieren.

    Auch wenn es sicherlich bessere Lösung gibt, würde ich hier dafür sorgen das die Ausgangsströme an den Output GPIOs reduziert werden.
    Da deine Ausgangsbeschaltung "geheim" ist, und man hier nur raten kann, mache mal eins , auch auf einem Steckboard, und schalte mal. Wenn du mit einem 2 Kanal- OSZI dann an die Pins ADC_VREF und 3V3_OUT gehst und beobachtest was mit dieser 3,3 Volt Spannung passiert, während der Schaltvorgänge und wie lange es braucht bis sich diese Spannung wieder erholt hat, dann wirst du verstehen, wenn man die Funktion eines ADCs kennt, das dein Aufbau möglicher Weise ungeeignet ist. Dazu muss man beachten, der ADC vergleicht die Eingangsspannung mit dieser Referenzspannung. Mit diesem 47µ / 6,3V Tantal-Elko C2 am Ausgang des Spannungsreglers auf der PICO Platine lässt sich da nicht viel machen. Auch wenn jetzt wieder einige die OPCs nicht mögen, oder warum auch immer hier wettern werden, mit einem OPV kann man den Strom aus den GPIO Ausgängen in den pA ( Pico-Ampere ) Bereich reduzieren, und am Ausgang auf Grund der Stromverstärkung des OPVs einige mA abgreifen, um zB einen Optokoppler sicher anzusteuern. Besonders bei schnellen Schaltspielen der Relais und es sind ja mehrere wirst du ganz schnell feststellen können, wie sich dieses positiv auf die ADC Meßergebnisse auswirkt. Dazu muss man nur den / die OPV(s) aus den 5 Volt deines Spannungswandlers 24to5,0 versorgen. Die Beschaltungsvarinate des OPVs wird Impedanzwandler oder Spannungsfolger genannt. Vorne wenige pA aus dem GPIO-Out rein, hinten einige mA raus, um z.B. einen Optokoppler oder dieses Darlington Array anzusteuern. Denn hier ist die Summe und die Häufigkeit der Schaltvorgänge der potentielle Störfaktor für die ADC Nutzung.

    Guten Morgen

    ... unter Umständen baue ich dann vielleicht auch einen Traco Baustein ein, der funktioniert dann einfach so...

    nachdem ich erst einmal suchen musste was du mit diesem TRACO-Baustein meinst, ich mir dazu auch die Datenblätter des Herstellers angesehen habe kann ich dir zusichern - es wird nichts.
    Ich hatte selber schon einmal mit solchen DC/DC Wandlerbausteinen ein Projekt aufzubauen, und bin dabei zur gleichen Erkenntnis gekommen, wie diese schon erwähnt wurden. Sobald man die ADC-Eingänge nutzen möchte treten genau diese schon aufgeführten Effekte auf. Da diese Bausteine genauso wie die StepDown Wandler mit unterdimensionierten Glättungskapazitäten eine übermäßige Restwelligekeit über den Ausgang mit ausgeben, wird jede ADC Messung zu einer Glückslotterie.

    Sobald das Spannungsdelta am Ausgang, was mit Restwelligkeit oder Ripple bezeichnet wird, etwa 5 mV überschreitet sieht man bei einer Folgemessung oder einer Meßwertaufnahme in Form einer ganzen Meßreihe sehr deutlich diesen Einfluß welche über die proportional mitschwankende Referenzspannung sich in den Meßrohdaten widerspiegelt.
    Es ist zum Schluß auf deiner Platine auch eine Platzfrage, ob man eine externe Referenzspannungsquelle mit allen seinen Zusatzbauelementen unterbringen muss um eben über Pin 35 "ADC_VREF" ein präzisere Spannung im Bereich von 3.25 bis 3.3 Volt einspeißt, oder ob man sich die Mühe macht den DC/DC b.z.w. StepDown-Wandler in seiner Ausgangsspannung so auswählt, oder dimensioniert damit man mit einem LDO und einer möglichst geringen Dropspannung dann nur noch mal zur Verbesserung der Eingangsspannung beiträgt. Gute LDO-Regler ( Low-Drop ) erreichen hier selbst bei einem Spannungsunterschied zwischen EIngangs- und Ausgangsspannung von weniger als 300 mV eine Restwelligkeit von unter 100µv bei gleichzeitig weniger Platzbedarf im Vergleich zu einer externen Referenzspannungsquelle.
    Die Bereitstellung der Versorgungsspannung für den PICO zweistufig aufzubauen, zuerst den großen Sprung von 24 Volt auf etwa 5.5 bis 6.0 Volt und diese dann noch einmal mittels LDO auf 5.0 Volt zu reduzieren, kann durchaus sinnvoll sein.

    Die ADC Eingängen am PICO unter den Standardumständen mit einer Standardversorgung via USB ohne eine besonderes Augenmerk auf die Versorgungs- b.z.w. Referenzspannung zu lenken, liefern etwa die Genauigkeit einer 10 % Schätzung. Ich kann leider aus der Gesamtbeschreibung deinerseits nicht abschätzen, ob du mit einem solchen Meßfehler leben könntest, oder ob es mittels Software notwendig werden würde, diese Meßwerte zu glätten oder / und zu Filtern, um die gewünschte Funktion erreichen zu können. Dabei muss man immer im Auge behalten das solche Software.Lösungen immer mit einem erheblichen Rechenaufwand, und einer entsprechenden Latenz einhergehen.

    Es gibt in diesem Forum schon sehr viele Beiträge, welche man sehr leicht über die Forensuche findet, wo diese Probleme um die erzielbare Genauigkeit mit einem PICO angesprochen werden, und ebenso unterschiedliche Lösungswege aufgezeigt werden.

    Guten Morgen,


    für eine kleines Projekt mit einer einfachen Steuerungsaufgabe habe ich mir zwei Klassen geschrieben, welche jeweils intern einen Timer zur Aktualisierung verwenden.
    Dabei handelt es um eine Klasse zur Displayansteuerung. Welche ein auf einen 128x64 Display, 4 Textzeilen als Variable bereitstellt, und diese mit einer Timer-Wiederholrate X auf dem Display angezeigt, bzw. aktualisiert werden sollen.
    Die zweite Klasse liest nun ein Temperatursensor aus, und trifft die eigenständig anhand von vorgegebenen Parametern ob eine Zuluftklappe geöffnet oder geschlossen werden muss, und regelt zudem einen Lüfter via eines PWM Signals.

    Die Funktion der "Luftsteuerungsklasse" ist schon fertig, und läuft auch schon vollständig fehlerfrei und autonom.
    Nun möchte ich als Information folgende Dinge auf dem Display ausgeben:
    - Lüfterdrehzahl als Prozentangabe

    - den Zustand der Zuluftklappe offen oder geschlossen

    - die Außen- und Innentemperatur jeweils für sich getrennt in einer Zeile.


    Wie bekomme ich es nun hin, einen Datenaustausch zu machen ? In der "Luftsteuerungsklasse" sind all diese Variablenwerte in self.<name> gespeichert bzw abrufbar. Am liebsten wäre es mir, wenn diese Display-Klasse sich die Werte allein abholt.

    Guten Tag Roland53,


    wenn ich deinen Code richtig verstanden habe, würde ich an deiner Stelle die zeitmäßige Trennung in der Variablen Ti außerhalb, also dann in der Übergabe zur Display Routine, machen.
    Dazu kannst du ein wichtiges Merkmal von machine.time_pulse_us() nutzen. Wenn es zu einer Zeitüberschreitung kommt, gibt diese Funktion einen negativen Wert zurück. Das kann sehr effizient im Code der Displaydarstellungsroutine unterbringen. Zudem kannst du diese Displayroutine auch als Klasse schreiben, und einen Counter mitlaufen lassen, welcher die Displayaktualisierungen mitzählt. Anhand dieser, gestartet bei der ersten Wertübergabe eines negativen TI Wertes, kannst du dann diesen Counter dazu nutzen, über deine angestrebte Aktualisierungsrate zu ermitteln, wie lange schon der negative Impuls nicht mehr erkannt wird.
    Ich kann jetzt so ohne praktische Tests nicht einschätzen wie zeitkritisch dein Code ist. Jedoch mit der Aussage von Dennis89 und Franky07 diese Daten aus deiner Funktion herauszulösen, kann man bei einem Pico, wenn keine anderen wichtigen Dinge anstehen, aber der Erfassungscode oberste Priorität genießt, diese Displayroutine als _Thread im sekundären Core laufen lassen. Die Übergabe zwischen den beiden Core's sollte problemlos funktionieren.
    Vielleicht kann Dennis89 hierzu noch einmal eine ergänzende Aussage machen, wie man effektiv einen Datenaustausch zwischen einer Hauptprogramm (__MAIN__) -Routine und einem Thread im sekundären Core gestaltet.

    Für den Fortgang deines Projektes wäre es noch gut zu wissen, wie nun diese Pumpe tatsächlich gesteuert wird ? Ob es nur ein einfaches Schaltsignal ist, oder ob diese Pumpe doch über eine Art Drehzahl- /Leistungsregulierung gesteuert wird ?
    Ebenso habe ich noch nicht ganz verstanden, wie das mit den oberen Zwischenspeichertanks funktionieren soll ? Haben diese alle das gleiche Füllstandsniveau, oder verfügt jeder Tank über einen eigenen Abschaltsensor, wenn diese befüllt werden ?
    In diesem Falle müsste es auch auch eine Art Ventilsteuerung geben !? Vielleicht kannst du Roland53 hierzu mal einige ergänzenden Ausführungen machen.

    Guten Morgen,

    Geile Lösung! Da bin ich echt sprachlos!

    Was ist daran so komisch, ein Komparatorreferenzsignal mittels eines Potentiometers bereitzustellen ? Wahrscheinlich reicht dein Grundwissen auch hier wieder einmal nicht aus, was bei einem Komparator passiert. Die Idee ist an für sich gar nicht so schlecht. Etwas aufwendiger in den Kosten, aber dennoch mit einem geringen Aufwand umsetzbar - zudem sehr flexibel. Was würde wohl passieren, wenn er eine Spannungsbegrenzung via einer Z-Diode herbeiführen würde ? Er hätte in der Auswertung eine zusätzlichen, also falschen, negativen Impuls in der Erfassungskette. Das Signal einstutzen und dann wieder mit einem Komparator auf den gewünschten Pegel anzuheben ist noch nicht einmal eine unübliche Methode. Dazu muss man nur verschiedene Nachschlagewerke benutzen, welche auch als PDF im Netz veröffentlicht wurden, und sich mit Einsteigerschaltungen /-experimenten des RasPi beschäftigen. Mir selber sind mehrere Nachschlagewerke bekannt, welche es mal zu kaufen gab, und nun als "PDF-Sicherheitskopie" im Netz herumgeistern, wo diese Methode - dieser Aufbau verwendet wird. Darunter Bartmann und Koffler, um nur einige Autoren beim Namen zu nennen.

    Guten Tag,

    Ich habe nie behauptet, dass das Python sein soll - im Gegenteil - ich habe explizit Pseudocode geschrieben. Ich stelle weder den Anspruch, hier lauffähigen Python Code zu posten noch den dass er frei von Tippfehlern ist. Das überlassa ich dir.

    Es gibt einen Unterschied, welcher auch für Pseudocode zutrifft ! Das beginnt bei der korrekten und einheitlichen Nutzung eines Syntax ( ob real anwendbar oder nur zur Versinnbildlichung ). Dann, was aber hier gar nicht zur Diskussion stand, ein Fehler in der Programmlogik. Dein Code in seiner Urform ist ja noch nicht einmal frei von Syntaxfehlern, wenn man die unterschiedlichen Schreibweisen von Variablen und Funktionen betrachtet. Wenn man zudem auch noch ein Lob dafür einfordert, für ein Stückchen Code welches von mehreren Mitglieder sowohl in der Struktur, dem Syntax, wie auch in der Programmlogik kritisiert wird - wohl auch berechtigt - sollte mal etwas herunter kommen.
    Auffällig ist hier und insbesondere bei dir, du kritisierst egal bei welchem Mitglied immer wieder die korrekte Schreibweise, den Satzbau, und auch jeden nur erdenklich kleinen Schreib- oder Tippfehler. Würdest du diesen Maßstab mit der gleichen Wichtung mal auf deine Texte und Codes anwenden, müsstest du zu einer gewissen Erkenntnis kommen !


    Ich stelle weder den Anspruch, ... dass er frei von Tippfehlern ist.

    Du darfst also Tipp- und Schreibfehler produzieren, wenn andere Mitglieder es tun, nutzt du es um über diese herzufallen -> ein sehr klares Bild was hier über deinen Charakter gezeichnet wird.

    Schönes Wochenende

    Guten Tag

    Wenn ja waere es nett wenn der TE den Thread mit der Erklaerung woran es lag beenden wuerde

    Ich habe den Dreck in die Ecke geschmissen, nachdem mich diese Mimose dumm angemacht hat, weil ihm offensichtlich meine Antworten auf seine Nachfragen nicht gepasst haben.
    Ursache -> unbekannt !!!
    Ich habe mir von einem anderen Anbieter die gleichen Sensoren besorgt. Mit dem identischen Aufbau, mit dem gleichen Programm funktioniert es so, wie es im Tutorial beschrieben wurde.


    hyle der Pullup befand und befindet sich nun wieder unmittelbar am Controllerboard.


    Iich weine solchen herablassenden Spinnern keine Träne nach, welcher einfach behaupten eine Fragensteller würde bewusst Lügen verbreiten.

    außer Du möchtest Nebelkerzen streuen

    Wahrscheinlich ist es so, es gibt immer wieder Menschen die mit einer Antwort nicht klar kommen, welche auf einen von ihnen selbst gestellte Frage mit einer von der eigenen Erwartung abweichenden Aussage beantwortet werden. Wenn er im Vorfeld schreibt

    Die "Temperatur" 85 deutet auf Probleme in der Spannungsversorgung hin.

    dann werte ich das als Kontrollauftrag und prüfe das nach. Dieses als Anlass zu nehmen, dem Fragesteller zu unterstellen er würde bewusst falsche Informationen weitergeben - ist schon ein Frechheit an sich.
    Nun ist er und das offensichtlich kaputte Zeugs weg. Das Thema hat sich für mich erledigt.

    Jedoch die tatsächliche Ursache wird wohl niemals einer erfahren.

    Guten Abend,

    lies nochmal in #3 den Absatz, in dem das Wort "Kontaktproblem", "Reset" etc. wie aus dem Nichts auftaucht.

    Mit nur einem Sensor funktioniert das Auslesen der "devices" ohne PullUp Widerstand gar nicht. Diese "list" bleibt leer.

    Erst wenn ich einen Widerstand größer 3,3 kOhm einsetze, wird auch der Sensor über den Device-Scan erkannt.

    Ich wusste gar nicht das es hier Mitglieder gibt, welche über eine :gk1: verfügen. Wie es dir doch gelingt aus der Ferne mit einer Bestimmtheit vorherzusagen, welchen Aufbau ich gewählt habe, obwohl ich sowohl bei meinen ersten Versuchen noch ein Steckbrett genutzt habe, habe ich dann auch, weil Kontaktprobleme bei solchen Brettern bekannt sind, alles verlötet aufgebaut. Damit hast du also die wohl göttliche Gabe aus der Ferne zu sagen und exakt zu bestimmen das eine der 68 Lötstellen fehlerhaft ist. Ich bewundere deine Begabung.
    Aber falls du es nicht verstanden haben solltest, ich hatte bereits in meiner ersten Ausführung geschrieben:

    So gibt einer dieser Sensoren ständig nur den Wert von 85 aus, ein Anderer 73,5 usw.

    Keiner dieser Sensoren liefert ob mit oder ohne Pullup, gesteckt oder gelötet einen annähernd richtigen oder passenden Temperaturwert zurück. Alle geben egal was ich in welcher Konfiguration durchprobiert habe, immer eine Temperatur Minimum 40 Grad zu viel an. Wenn du mir jetzt unterstellst, das ich auch zu blöd zum Löten bin, oder zu dumm bin ein Meßgerät zu bedienen, sowie nicht weis was eine Minimalwertfunktion ist, dann sind deine Aussagen ein Zeichen von völliger Selbsterhöhung. Ich könnte auch ein 40 MHz Digital-Oszilloskop anschließen, um die Versorgungsspannung, oder auch das Datensignal zu Monitoren. Nur glaube ich nicht das ein geänderter Aufbau mit den Kontrollmitteln dazu führt, das auf einmal diese Sensoren korrekte Werte ausgeben werden.

    Guten Tag,

    1. Fehlermeldung

    Die "Temperatur" 85 deutet auf Probleme in der Spannungsversorgung hin. Im Datenblatt zu DS18B20 heißt es:

    Welchen Zweck verfolgst Du mit der Messung der Spannungen? Ich halte das für vollkommen irrelevant, zumal die Werte nur geringfügig von 3,3 V abweichen - außer Du möchtest Nebelkerzen streuen.

    Deswegen habe ich in meiner Aussage auf die die Vc hingewiesen. Deswegen verstehe ich deine Aussage nicht, es würde sich um Nebelkerzen handeln. Vielleicht solltest du auch mal deine eigenen vorherigen Aussagen lesen, und nicht anderen User Dinge unterstellen, welche nur auf deine Aussage geantwortet haben.


    Du hast ein Problem in Deinem Aufbau - nicht wir. Bei uns läuft das seit Jahren. Wenn du alle Lösungsvorschläge ignorierst, wirst Du der Lösung keinen Schritt näher kommen.

    Ich kann keinen Fehler erkennen. Ich habe sowohl deine wie auch auch hyle Ratschläge bezüglich der Pullup-Widerstände befolgt, und auch die Ergebnisse gepostet.
    Wenn solche Sätze wie oben gezeigt die Grundeinstellung der "Wissenden" oder soll man hier schon "Wahrheitsbesitzer" sagen, die Form ist wie man auf Antworten reagiert, dann wünsche ich dir weiterhin viel Spass !
    Ich werde das Thema schließen, weil Fachhilfe ist hier nicht zu erwarten, weil es einige Personen / Mitglieder hier gibt, die nur ein Sichtweise haben.
    Du hast eine Hinweis gegeben, die eine Überprüfung erforderlich machte. Und dann kommst du an, und erklärst diese Erkenntnis für eine Nebelkerze. Ganz tolle Leistung !!!

    Guten Tag,

    Bei diesen Pin und GPIO Bezeichnungswirrwarr wäre es gut, wenn Du konkret schreibst welche Pins Du verwendest inkl. der GPIO-Nummer. Sprichst Du z.B. von GPIO 16, dann ist das ja der Pin 21, also schreib es dann besser so: GPIO 16 (Pin 21).

    Ich weis zwar nicht was du meinst, wenn du auf das von dir verlinkte Pinout schaust.
    Den GND- , wie auch dem 3V3(OUT) -Pin sind nur Pin-Nummern zugeordnet. Diese Pins selber tragen keine GPIO- Nummer, höchstens eine Bezeichnung. Die GPIO Nummer in dem Falle 14,15,16 entsprechen den Pin Nummern 19, 20, und 21.

    Guten Tag,

    Lass den Pullup Widerstand doch mal weg und beobachte was dann passiert!

    Bezogen auf deine Links.
    Mit nur einem Sensor funktioniert das Auslesen der "devices" ohne PullUp Widerstand gar nicht. Diese "list" bleibt leer.

    Erst wenn ich einen Widerstand größer 3,3 kOhm einsetze, wird auch der Sensor über den Device-Scan erkannt.


    1. Fehlermeldung

    Die "Temperatur" 85 deutet auf Probleme in der Spannungsversorgung hin. Im Datenblatt zu DS18B20 heißt es:

    Es ist ja nur ein Sensor der den Wert 85 ausgibt. alle anderen geben ebenfalls definitiv falsche Werte aus. Weil Raumtemperatur 73.5 ist eher unwahrscheinlich. Gemessen und mit einem Multimeter mit Minimalwertanzeige verfolgt sinkt die Vc3,3 aus Pin 36 auf maximal 3,21 Volt ab.

    2. Verzögerungszeit

    Ersetze im Quellcode die Wartezeit 750 ms durch einen Wert >= 950. Auslesen und Berechnung von 12 Bits dauert laut Datenblatt DS18B20 750 ms. Die Praxis zeigt aber, dass es auch mal länger dauern kann. Das sollte die Angabe von fehlerhaften Temperaturen von 85 (°C) verhindern. Siehe aber 1. bzgl. Kontaktproblem.

    auch das halte ich nicht für die Ursache. Aber hier der Test-Programmcode:


    3. Widerstand 4k7


    Der Widerstand 4k7 gilt als maximaler Einstiegswiderstand. Bei mehr Sensoren muss dieser Widerstand verkleinert werden.

    Ersetze den Widerstand 4k7 durch einen kleineren Widerstand. z.B. 3k9, 3k3, 2k7, 2k2, 1k8, 1k5, 1k2.

    Dazu hatte ich schon Hyle geantwortet. Bei einem einzelnen Sensor geht ohne Widerstand gar nichts. Erst wenn ich mehr als 3 dieser Sensoren zusammen und parallel schalte wird bei Device-Scan auch die korrekte Anzahl der Sensoren erkannt. Den Rest hatte ich ja schon oben niedergeschrieben.

    Die Vc der Sensoren kommen von Pin36, GND beziehe ich über Pin 38 ( habe auch schon alle anderen GND Pins ausprobiert ) und als Eingangspin für OneWire nutze ich wie im Beispielprogramm Pin 16 , habe aber auch schon Pin 15 und Pin 14 ausprobiert. Es ändert alles nichts an den Ergebnissen.
    Funktionstests der Pins 14, 15, 16 mit einem Taster oder LED auf I/O Fähigkeit - alle Pins lassen sich mit diesem PICO sowohl zur Abfrage von Tastern auch via Pin.IRQ() nutzen, und damit lassen sich als Ausgang genutzt auch LEDs mit entsprechendem Vorwiderstand betreiben.
    Zur Datenausgabe / Visualisierung nutze ich ein OLED 0,96" SSD1306 Display in der Ausführung 3,3 Volt Kompatibel. Ich benötige damit auch keinen Levelshifter für die I2C Anbindung vom OLED.
    Selbst wenn ich das ganze Display in weiß erstrahlen lasse oled.fill(1);oled.show() sinkt die Vc3,3 gerade einmal um 0,01 Volt laut meinem Meßgerät ab.

    Guten Tag,

    Ich habe mir bei AZ-Delivery ein 10er SET DS18B20 Temperatur-Sensoren gekauft. Diese habe ich nun wie in diesem Tutorial angeschlossen, und auch das Programm aus dieser Anleitung übernommen.
    Ich habe jeden Sensor einzel, aber auch alle gemeinsam angeschlossen, ebenso mit dem Widerstandswert etwas herumgespielt, es findet keine wirkliche Temperaturmessung statt.
    In der Auswertung der Programmzeile

    Python
    devices = sensor_ds.scan()

    werden alle angeschlossenen Sensoren, auch egal in welcher Kombination und Anzahl erkannt. Wenn nur 1 Sensor erkannt wird, enthält die "list" "devices" auch nur einen Eintrag, bei 7 sind es 7 Einträge, und bei allen 10 angeschlossenen Sensoren sind es 10 Einträge.

    Wenn nun im Programmlauf fortgefahren wird erfolgt das Auslesen der einzelnen Sensorwerte

    Python
    for device in devices:
        print('Sensor:', device)
        print('Temperatur:', sensor_ds.read_temp(device), '°C')

    jetzt ist es aber so, egal was ich mache, ob ich diese Sensoren alle mit dem Herstellerschriftzug "Dallas" versehen, mit einem Fön abblase um eine Temperatursteigerung zu erreichen, oder von einem kleinen Lüfter anpusten lasse, es ändert nichts an den ausgegebenen Temperaturwert.
    Jedem dieser oder seiner Seriennummer entsprechend kann ich jedem Sensor einen festen Temperaturwert zuordnen, der rein gar nichts mit der tatsächlichen Temperatur zu tun hat.

    So gibt einer dieser Sensoren ständig nur den Wert von 85 aus, ein Anderer 73,5 usw.

    Jetzt habe ich schon den Service von AZ-Delivery bemüht, und dort erfuhr ich, wenn die Sensoren von Detect erkannt werden sind sie auch Ganz und funktionsfähig, es würde am der falschen Dimensionierung des PullUp Widerstands liegen. Garantie seitens des Händlers wird somit abgelehnt.

    Meine Frage jetzt dazu ist, liegt es wirklich nur an dem falschen Widerstand das diese Dinger nur einen Festwert ausgeben, welcher sich von Außen nicht beeinflussen lässt, oder sind die Teile Fakes ???