Frei nach Erik Bartmann: Meine Eeprom-Lösung

  • Nach vielen misslungen Versuchen, eine I2C-Kommunikation mit einem Eeprom aufzunehmen, hatte ich nach einer anderen Lösung gesucht, Parameter dauerhaft sichern zu können.

    Ich sag's gleich vorneweg: Diese Präsentation meiner Lösung wird nicht jedem Pythonisten gefallen, es ist auch nicht meine Absicht, eine pythonistische Sprachkultur der besonderen Art zu pflegen. Man mag meinen Stil annehmen oder auch nicht, ich jedenfalls komme damit gut zurecht.

    In meinem Projekt wird eine standardmäßige SPI-Schnittstelle bereits von dem Touchpanel der von mir gewählten Monitoreinheit verwendet, ohne dass ich auf diese Schnittstelle mit meinem eigenen Pythonscript einen Einfluss ausüben kann. In meinem Projekt sollte auch noch eine weitere SPI-Schnittstelle mit einem AD-Wandler aufgebaut werden, weshalb ich der grundsätzlichen Idee einer I2C-Kommunikation mit einem Eeprom zur Parameter-Speicherung positiv gegenüber stand.

    Da ich als Newbie noch nicht abschätzen konnte, ob ich die zweite integrierte SPI-Schnittstelle dann vielleicht doch noch anderweitig werde verwenden müssen, hatte ich mich entschlossen, den AD-Wandler MCP3204 mit einer handgestrickten SPI-Schnittstelle zu betreiben, so wie es Erik Bartmann in seinem Buch "Die elektronische Welt mit Raspberry Pi entdecken" vor vielen Jahren beschrieben hatte. Erik Bartmann setzte mit seiner Beschreibung auf eine damals übliche Bibliothek auf. Aus bestimmten Gründen habe ich es aber vorgezogen, auf die pigpio-Bibliothek aufzusetzen und seine Methode mit Erfolg entsprechend umgesetzt.

    Danach sollte es mit der I2C-Kommunikation zur Einbindung eines Eeproms weitergehen. Das hat ohne Erfolg sehr viel Zeit gekostet, während dessen ich die pigpio-Bibliothek gründlich studieren konnte. Es lohnt sich, Einblicke in das Innere der Bibliothek zu nehmen. Man wird staunen. Vor wenigen Tagen hatte ich dann beschlossen, die I2C-Kommunikation mit einem Eeprom nicht mehr betreiben zu wollen. Das aufmerksame Studium des Datenblattes zu einem SPI-Eeprom brachte mich dann zu der Erkenntnis, dass diese Art der Kommunikation der Lösungsweg für mein Problem sein könnte. Besonders der Satz:

    Quote

    It may also interface with microcontrollers that do not have a built-in SPI port by using discrete I/O lines programmed properly in software to match the SPI protocol.

    hatte es mir angetan. Erik Bartmann war schon einmal als Problemlöser in die Bresche geprungen, er sollte es auch dieses Mal wieder tun.

    Das Modul ist nicht unbedingt nur auf ein bestimmtes Eeprom anwendbar und kann jederzeit leicht angepasst werden. Diesem Modul liegt ein Eeprom zugrunde, das 256 Byte speichern kann. Jedes Byte kann für sich einzeln geschrieben und gelesen werden. Es können aber auch 256 Byte in einem Durchgang gelesen werden. Das gilt im besonderen Verständnis auch für das Schreiben: da aber der interne Schreibvorgang auf jeweils 16 Byte pro Speicherseite limitiert ist, wird durch die Funktion "writeSequence" eine automatische Aufteilung vorgenommen, die diese Restriktion umgeht, ohne dabei nach außen sichtbar zu werden.

    Alle Funktionen, die das Datenblatt zu dem Eeprom des Typs 25AA020A hergibt, sind in dem Modul implementiert.

    Solange auf dem SPI-Bus nur das Eeprom zuhause wäre, müssten keine weiteren Maßnahmen zur Busarbitrierung getroffen werden. In meinem Falle ist jedoch ein AD-Wandler mit von der Partie. Wichtig ist, dass die Ausführung der Funktion "writeSequence" ohne Unterbrechung erfolgen muss, weil sonst der interne Schreibprozess nicht erfolgreich angestoßen wird. Neben der Arbitrierung, die ich nach dem Prinzip der Anmeldung und der daraufhin erteilten Freigabe durchführe, der eigentliche Zugriff auf das Eeprom durch Semaphore gekapselt wird.

  • Anmerkungen zum Quelltext: Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase).

    Namen sollten keine kryptischen Abkürzungen enthalten oder gar nur daraus bestehen. Der Name soll dem Leser vermitteln was der Wert dahinter im Programm bedeutet, nicht zum rätseln zwingen. TK kenne ich als Krankenkasse, oder „Tiefkühlkost“, oder als Bleistiftmodell. 🙂

    Kommentare sollten entsprechend dem Code eingerückt sein, sonst erschweren die das ablesen der Code-Struktur anhand der Einrückung. Insbesondere wenn da noch so dekorative Trennlinien sind. Zudem macht es mehr Sinn zur Dokumentation der Klasse und Methoden DocStrings zu verwenden. Dafür gibt es die ja.

    Es macht keinen Sinn jeder Kommentarzeile noch ein * am Anfang hinzuzufügen. Die werden ja alle schon mit dem Kommentarzeichen eingeleitet.

    In den Kommentar/die Dokumentation der Klasse noch mal class und den Klassennamen zu schreiben ist Redundant. Das sieht man ja auch so, sowohl menschliche Leser, als auch Dokumentationswerkzeuge.

    Wo die Vorbelegung der Pins erfolgt hat da nichts zu suchen, denn wenn sich das in dem anderen Modul mal ändert, müsste man daran denken diesen Text auch anzupassen. Ähnlich das „write protect“ auf High gesetzt wird ist eine Information die nur darauf wartet vergessen zu werden falls sich das mal ändert.

    read_byte() und send_byte() sind Methoden und keine Funktionen.

    Das parent-Argument von __init__() wird nirgends verwendet.

    data = data ist sinnfrei.

    Um if-Bedingungen braucht man keine Klammern setzen.

    Statt magischer Zahlen im Code wo die Konstantennamen nur im Kommentar stehen, sollten das tatsächlich Konstanten sein.

    affectWEL() ist ein komischer Name für set_write_enable().

    Der Satz „liest 'count' Bytes aus 'data_list' ab der Adresse 'index' ins Eeprom“ ist ein bisschen verwirrend.

    Grunddatentypen haben nichts in Namen verloren. Den Typen ändert man gar nicht so selten mal während der Programmentwicklung und dann muss man überall im Programm die betroffenen Namen ändern, oder man hat falsche, irreführende Namen im Quelltext. Und statt einer Liste kann man hier auch beliebige Sequenzen verwenden. Sogar ein Wörterbuch könnte man übergeben.

    Allerdings ist das keine gute API (leere) Datenstrukturen zu übergeben und zu füllen, statt eine neue zu erstellen als Rückgabewert zu liefern. Selbst wenn man das mit der Datenstruktur zum befüllen macht, ist das schräg die Adresse im EEPROM und den Index in diese Datenstruktur auf diese Weise zu koppeln. Genauso schräg ist das beim Schreiben der Daten. Da würde man einfach nur eine Zieladresse und eine Sequenz mit Bytewerten übergeben, statt index und count auch für die zu sendenden Daten zu verwenden.

    wip und wipcount kann man sich sparen wenn man eine for-Schleife schreibt, die mit break abbricht und den else-Zweig zum for für die Ausnahme verwendet.

    Insgesamt kann man in der Methode mit deutlich weniger Variablen auskommen und leichter verständlichen Code schreiben.

    Ungetestet:

    Python
    print("P3 90 60 1")
    for b in range(5400):print(1,a:=+((b/90-30)**2+(b%90-45)**2>324),a)
  • Die beste Sache ist offensichtlich die, sich solchen Beiträgen der ehrenamtlichen Oberlehrer zu verschließen, nicht aber einer Kritik an sich. Bei den heutigen Tests, konnte ich eine ungute Eigenart von Python zu Tage fördern, die solche Formalienreitereien wie die hier zuletzt vorgetragene, in einem zweifelhaften Licht erscheinen lassen. Gut, wie dem auch sei, ich gewinne langsam Spaß, an der Sache, wieviel Mühe sich ein Stalker macht. Das vorgestellte Modul funktioniert und es gibt überhaupt keinen Anlass eine Änderung vorzunehmen.

    Wenn ich noch einmal viel Zeit haben sollte, werde ich mir das Datenblatt eines Eeproms mit I2C-Kommunikation zu Gemüte führen und eine handgestrickte I2C-Kommunikation aufbauen, bis jetzt hat die Methode zweimal funktioniert, warum sollte sie nicht auch noch ein drittes Mal zum Erfolg führen.

    Ja, der Tag war heute noch in einer anderen Sache erfolgreich. Ich kann berichten, dass die Hardware-PWM-Methoden der pigpio-Bibliothek sauber funktionieren. Eine Super-Sache. Ich kann dafür meine Empfehlung aussprechen.

  • Batucada2 Ich glaube Du verstehst nicht was die Intension ist. Das was angesprochen wurde ist reine Rechtschreibung und ein bisschen Grammatik um es auf eine normale Sprache zu reduzieren. Geschriebener Text sollte halt lesbar sein und geschriebener Code ebenso. Dafür gibt es in Python Konventionen namens PEP8. Das ist sowas wie der Duden für die deutsche Rechtschreibung. Man hält sich daran und schon weiß jeder was im Text gemeint ist ohne den Text mehrmals lesen zu müssen. Klar könnte man sich nicht an die Regeln halten, aber dann würde man sich nicht wundern, wenn Leute das auch ansprechen würden.

    Dein Code entspricht nicht den Konventionen, also gibt es keinen Grund einem User, der diesen durcharbeitet und berichtigt, komisch zu kommen.

  • Anbei mal mein Kommentar:

    1) Ich finde gut dass Batucada2 seinen Code hier der Community zur Verfuegung stellt

    2) Ich mache das fuer meinen Code in github und dort bekommt man stylistischen bzw formalen Feedback nur wenn man in ein existierendes Projekt einsteigt. Gemaess Helmut Kohl ist "entscheidend was hinten rauskommt".

    3) __blackjack__hat sich die Arbeit gemacht den Code durchzusehen und hat sinnvolle Verbesserungsvorschlaege. Ein jeder der den Code hilfreich findet und nutzt kann fuer sich entscheiden ob er das Feedback von __blackjack__ im Code eingearbeitet

    :no_sad: ... Kein raspiBackup - kein Mitleid ... :no_sad:

    Mein Raspberry Zoo

    3 * RPi1B, 2 * RPi3B, 2 * RPI4, 1 * CM4, 1 * RPi5

  • hyle

    Du magst ja recht haben, wenn sich jeder und wirklich jeder an die von dir gepriesenen Grundsätze halten würde. Ich bin in dem Geschäft schon ziemlich alt geworden und habe so einiges erlebt. Und ich erlebe es jetzt wieder. Ich habe während der letzten Wochen so einige Bibliotheken, soweit das möglich war, von "innen" gesehen. Das lässt mich zweifeln, ob die Pep8 wirklich von jedermann gelesen wird. Das Beispiel mit den Regeln der deutschen Sprache hatten wir schon mal diskutiert, auch da gibts unterschiedliche Standpunkte. Ich könnte dir dann beipflichten, wenn die Pep8 unbedingt eine Grundvorraussetzung bilden würde, damit der Interpreter seine Arbeit ordnungsgemäß durchführen kann. Nein es ist keine Grundvorraussetzung.

    Ich finde es bemerkenswert, ich habe in diesem Faden von dem Erfolg berichtet, ein SPI-Eeprom durch handgestrikte Bitschubserei dazu bewegt zu haben, mit meinem Script Kontakt aufnehmen zu können. Das ist eine technische Lösung, die in dem Umfeld der eingeschränkten Möglichkeiten für mich als Newbie ein erfreulicher Meilenstein darstellt. Und wenn ich meine Texte und Begriffe so wähle wie gezeigt, dann verbinde ich eine Hoffnung damit, dass ich in nächster Zeit, sofern die Notwendigkeit dazu tatsächlich mal bestehen sollte, die Verbindungen zu meinen heutigen Gedankengängen wieder herstellen kann. Um nur ein Beispiel zu nennen, es wurde bemosert:

    Quote

    affectWEL() ist ein komischer Name für set_write_enable()

    Nein, das ist wirklich kein komischer Name, aber set_write_enable() ist der dümmste Vorschlag überhaupt. WEL bedeutet Write Enable Latch und ist in dem dazugehörigen Datenblatt ein feststehender Begriff, den Hinweis auf das Datenblatt habe ich mir bei der Namensfestlegung erlaubt, um mir für später eine Eselsbrücke zu bauen. Andere Texte hat die KI dazu beigetragen. Das soll keine Entschuldigung sein, aber ich bin immer wieder überrascht, wie intelligent der Copilot in VS Code agiert.

    Ich bin seit 10 Wochen dabei und beackere den Python-Interpreter, leider hat mir jemand meine IDE so eingerichtet, der nicht wollte, dass ich Freiheiten entwickle, ich war so sehr bemüht , die von Flake8 aufoktroyierten Regeln zu beachten, so dass ich nicht in der Lage war, die tiefe Logik von Python zu erkennen. Die Regeln von Flake8, als den langen Arm von PEP8 sind ja nun gebrochen, und ich kann endlich ein Programm entwickeln. Es ist daher unfair, wenn jemand von mir einen Stand verlangt, den er sich über Jahrzehnte hat einüben können.

    Um es ganz klar zu sagen, ich schreibe das Projekt nicht für andere Leute sondern ausschließlich für mich und möchte mit den mir zur Verfügung stehenden Kenntnissen die Scripte auch noch in einiger Zeit verstehen können. Unter diesem Aspekt betreibe ich meinen Stil, das ist mir wichtig, ich will anderen nicht gefallen.

    Und ganz klar ich habe heute einen weiteren Erfolg feiern können, die Hardware-PWM unter pigpio erfolgreich getest zu haben. Soll ich darüber berichten? Besser nicht, sonst gibt's wieder Schelte vom Herrn Professor 🤣🤣🤣

    Edited once, last by Batucada2 (June 19, 2024 at 11:53 PM).

  • Nein, das ist wirklich kein komischer Name, aber set_write_enable() ist der dümmste Vorschlag überhaupt. WEL bedeutet Write Enable Latch

    Ein gutes Beispiel, weshalb man aussagekräftige Namen verwenden sollte, denn ohne diese, macht man sich schnell falsche Vorstellungen beim Lesen des Codes.

    Der Interpreter schluckt so ziemlich alles, was man ihm als Namen zu fressen gibt und wenn das dann zueinander passt ist für den alle gut, aber als menschlicher Leser versteht man eben nicht alles sofort oder es kommt zu Missverständnissen wie hier. Genau deshalb gibt es PEP8. Nur weil sich nicht jeder daran hält ist das noch lange kein Grund das nicht zu tun. "Nur weil alle von der Klippe springen, muss man das ja nicht auch machen." Hat Mutti früher öfter mal zu mir gesagt.

  • Wenn man so Wehement auf PEP8 besteht dann sollte man auch die Ungarische Notation für Variablen und Konstanten zwingend nutzen.
    Andernfalls ist beim lesen des Code nicht ersichtlich um was für eine Variable es sich handelt.
    Wenn schon, denn schon.
    jm2ct

    Offizieller Schmier und Schmutzfink des Forum.
    Meine PI:

    Display Spoiler

    #1 : Pi1 - Packet Radio Digi mit TNC-PI
    #2 : Pi2 - ADSB Feeder
    #3 : Pi3 - DHCP/DNS Server für 4 VLAN
    #4 : Pi3 - Wireguard Gateway
    #5 : Pi3 - FM Funknetz Gateway mit Shari SA818
    #6 : PI Zero W mit DMR Hotspot
    #7 : Pi4 4GB - Kiosk Browser
    #8 : Pi4 4GB - Kiosk Browser
    #9 : Pi4 8GB - Test Pi
    #10 : Pi2 - Auto CD Ripper abcde

    Dazu noch ein paar Zero und Pi1/2 die noch auf einen sinnvollen Einsatz warten.

  • Ein gutes Beispiel, weshalb man aussagekräftige Namen verwenden sollte, denn ohne diese, macht man sich schnell falsche Vorstellungen beim Lesen des Codes.

    Tja, wenn man den Kontext nicht gewähren lässt? In den Kontext gehört eine ganze Menge hinein. Ich sehe das so, als Autor habe ich das Datenblatt bis zum Erbrechen studiert - und das wird uns in dem Falle wohl deutlich unterscheiden. Ich war darauf angewiesen, das Datenblatt zu verstehen, weil ich sonst das Projekt zu Grabe hätte tragen müssen. Also habe ich mir die feststehenden Begriffe eingeprägt, das ist viel mehr als das, was ich von einem Leser verlangen kann und muss. Eine andere Hilfstellung als diese, dass ich mir ein Beispiel an Erik Bartmann genommen habe, gab es nicht. Ansonsten viele laue Worte. Und jetzt hat das gute Stück mich ohne weitere Hilfe einen beträchtlichen Teil meines Weges nach vorne gebracht. Warum will man sich an mir abputzen? Weil ich als Newbie etwas zustande gebracht habe und dabei gegen den Strom geschwommen bin - wie ein anderer als platte Behauptung einst von sich gab?

    Liebe Pythonisten, ich benötige das Forum nicht, ich dachte eher an einen Austausch auf User-Ebene. Die Bemerkung von dir, lieber hyle, dass du dich auch für pigpio interessierst, hatte mir sehr gut gefallen, weil ich als unsicherer User daraus schließen kann, dass ich mit pigpio kein totes Pferd reite. Dann schau' auch mal rein in die pigpio-Bibliothek! Vieles von dem, was in PEP8 festgelegt erscheint, wird nicht vom Autor dieser Bibliothek beachtet.

    Nur ein kleines Beispiel: Als in den 80ern die PCs in der breiten Masse akzeptiert wurden, haben sich schnell die schlechtesten Sitten aller Zeiten verbreitet. Mikroschrott kam immer noch mit den schlappen Scheiben auf den Markt, schön groß, aber für den Dateinamen standen lediglich 8 Zeichen+Suffix zur Verfügung. Was da an kryptischen Dateinamen möglich wurde, ging auf keine Kuhhaut. Zur gleichen Zeit gab es ein anderes System, dessen Dateinamen 31 Zeichen lang sein konnten...

    Ein anderes Beispiel:

    prelimAverage = sum(self.SPRMemory[:_SPRMemSize_ // 5]) / (_SPRMemSize_ // 5)

    wenn ich das als eine algebraisch angelehnte Formel schreiben würde

    a = sum(b[:c // 5]) / (c // 5)

    wäre die kürze Form augenfälliger, man muss also einen Mittelweg finden, eine goldene Regel, die auch für pythonische Jünger gilt. Darüber hinaus würden noch breitere Namen nicht in die 79-Zeichen-Regel passen.

    Es ist so, ich hätte eher erwartet, dass sich jemand über den Code hermacht und begründete Vorschläge macht, wie man den Code effizienter macht. Aber alleine die Benutzung von Adjektiven wie "schräg" zeichnet lediglich die Fraktion der Oberlehrer aus.

    Bei der Anweisung

    prelimAverage = sum(self.SPRMemory[:_SPRMemSize_ // 5]) / (_SPRMemSize_ // 5)

    hab' ich als Anfänger die geregelten Probleme, das zu verstehen, was nicht da steht, weil das Nicht-Dort-Stehende eine immense Bedeutung hat, was aber für den Anfänger nicht ersichtlich ist. Das gleicht der Quadratur des Kreises.

  • Wenn man so Wehement auf PEP8 besteht dann sollte man auch die Ungarische Notation für Variablen und Konstanten zwingend nutzen.
    Andernfalls ist beim lesen des Code nicht ersichtlich um was für eine Variable es sich handelt.
    Wenn schon, denn schon.
    jm2ct

    JEIN, aber so ein großes JEIN.

    So wie ich jetzt verstanden habe, wird der Datentype on-the-fly zugewiesen. Das funktioniert streckenweise ganz gut. kann aber zu einer Menge Probleme führen, wenn das Datum als Integer erwartet wird, aber von dem Datum eine Gleitkommazahl geliefert wird. Eine implizite Wandlung gibt es leider nicht. Man muss also höllisch aufpassen.

  • Das ist doch in jedem Thema das gleiche, was du vondir gibst. Es ist recht einfach, behalte dein Code für dich oder zieh was nützliches aus der Kritik.
    Oder *frage* nach Optimierungspotential aber erwarte es nicht stillschweigend.

    Das sind so unnötige, wiederkehrende Diskussionen in deinen Themen, aber ich weis, es liegt nicht an dir.🧐

    🎧 Hate the jocks, the preps, the hippie fuckin' scumbags.
    Heavy-metalers with their awful, pussy hairbands.
    Counting seconds until we can get away.
    Ditching school almost every single day, oh, yeah 🎧

  • Der_Imperator Wo aus PEP8 leitest Du das denn ab? Und warum ist ungarische Notation da zwingend? Und ja sicher auch nicht bei jedem Namen, falls das die Bedeutung von „zwingend“ sein sollte, denn nicht nur statische Prüfwerkzeuge, sondern auch menschliche Leser sind zu einem gewissen Grad zu Typinterferenz fähig. Ansonsten macht man das ja auch tatsächlich. Also die echte ungarische Notation, die im Namen die Bedeutung hat, nicht einen (Grund)daten(typ).

    Und wer wirklich konkrete Typen im Quelltext sehen will pappt das nicht an den Namen, sondern schreibt Typannotationen. Dafür sind die ja da.

    Batucada2 Ich habe den Code inhaltlich verbessert. Und zum Beispiel die schräge API durch eine sinnvoller benutzbare ersetzt, die nicht unsinnigerweise die Adresse im EEPROM an den Index in der Sequenz koppelt, was in der Benutzung zu umständlichen Code führt wo ganz bestimmt mehr als ein Leser einen WTF‽-Moment hat.

    Natürlich hält sich nicht jeder an PEP8. Deine Auswahl an Projekten wo Du das beobachtest, führt IMHO aber auch zu einer Verzerrung, weil das zu einem signifikanten Teil Projekte sind, die nicht von Python-Programmierern geschrieben sind, sondern von C- oder C++-Programmierern (aus dem „embedded“/Mikrokontroller-Bereich) die mal eben schnell einen C oder C++ Code nach Python portieren, oder eine C-Bibliothek an Python anbinden, und dabei nur eine Untermenge der Sprache gelernt haben um den Code mehr oder weniger 1:1 zu übertragen.

    Du sagst Du dachtest an einen Austausch, nimmst aber keine konstruktive Kritik an, sondern fasst offenbar jede Kritik an Deinem Code als persönliche Kritik an Dir auf. Und gehst auf die technischen Anmerkungen und Verbesserungen überhaupt nicht ein. Da kommt statt dessen „Oberlehrer“, „ich mag Dich nicht“, und alberne Vorwürfe ich würde Dich „stalken“, und ähnliches zurück. Du nimmst das alles viel zu persönlich, und unterstellst wahrscheinlich deswegen auch anderen Motive wie „im Stolz verletzt weil ein Newbie was geschafft hat ohne sich an Konventionen zu halten“, weil das ist wie Du das anscheinend siehst. Ich ganz sicher nicht. Ich halte mich an bestimmte Konventionen, weil ich das für sinnvoll halte. Auf so eine Selbstverständlichkeit bin ich nicht stolz, weil das keine besondere Leistung ist.

    Datentypen werden nicht zugewiesen, beziehungsweise wenn dann nur indirekt. Namen haben in Python keine Typen, Werte haben Typen. Variablen haben in der Regel einen Namen, eine Adresse im Speicher, einen Typ, und einen Wert. In Python gehören die Adresse und der Typ fest zum Wert. In anderen Programmiersprachen, beispielsweise C gehört die (teilweise relative) Adresse und der Typ fest zum Namen.

    Mit dem IBM PC und DOS haben sich nicht die schlechtesten Sitten verbreitet. Zum Beispiel was die Dateinamen angeht sind die Einschränkungen ja von CP/M übernommen. Und klar gab es Systeme wo längere Dateinamen möglich waren, aber es gab auch welche da waren die noch kürzer. Man hätte es also auch noch schlechter erwischen können. Ich fand die Einschränkung auf Länge und Inhalt, von Commodore 8-Bit-Rechnern kommend auch, nun ja einschränkend. Von 16 Zeichen in denen so gut wie alles vorkommen konnte, auf die 8+3-Zeichen von DOS. Aber auf der anderen Seite standen halt viele Vorteile und das Preis-Leistungsvehältnis von günstigen Klonen, Erweiterungen, und Software, zu dem Zeitpunkt wo ich mir dann einen PC zugelegt habe.

    Python
    print("P3 90 60 1")
    for b in range(5400):print(1,a:=+((b/90-30)**2+(b%90-45)**2>324),a)
  • Das ist doch in jedem Thema das gleiche, was du vondir gibst. Es ist recht einfach, behalte dein Code für dich oder zieh was nützliches aus der Kritik.
    Oder *frage* nach Optimierungspotential aber erwarte es nicht stillschweigend.

    Das sind so unnötige, wiederkehrende Diskussionen in deinen Themen, aber ich weis, es liegt nicht an dir.🧐

    stell dir mal vor, du würdest einfach schweigen, so einfach ist das. Warum soll ich einfach schweigen, wenn man mir einen Meinung aufzwingen will, die nicht von nöten ist?

  • Moinsen,

    betrachten wir mal den Fall ganz nüchtern.
    Mir ist es egal was hier jeder denkt oder für Meinungen vertritt, denn dieses Forum soll gemäß der Eigendeklaration eine Hilfeforum für Problemlösungen um das RasPi und artverwandte Controller / Einplatinencomputer sein.

    Hier macht sich unabhängig der Person jemand die Mühe aus dem Kreis der immer zunehmenden Inkompatibilität verschiedener Bibliotheken auf verschieden OS Versionen ( Buster bis Bookworm) und 32 bit oder 64 bit auf unterschiedlichen Hardware Plattformen eines einzigen Herstellers Raspberry Pi Foundation auszubrechen, und liefert hier einen funktionierenden Code ab, der unabhängig möglicher Hardware Konfigurationen und Zusatzbestückung funktioniert, weil auf die vollständige Nutzung von Hardware Implementierter Schnittstellen vollständig verzichtet wird.

    Das erkennt keiner von euch an ! Keiner hat mit der angegebenen externen Hardware diesen Code auf Funktion verifiziert. Oder etwa doch ?

    Jeder, und ich betone jeder hackt hier auf einem Menschen herum, der sein Tagwerk allen Mitgliedern auch späteren Lesern kostenfrei und funktionsgetestet zur Verfügung stellt.

    Sieht man hier aus der Mitgliedergemeinschaft auch nur ein anerkennendes Wort für dieses Werk ? Nein

    Vielleicht solltet ihr alle mal lernen auch diesen Gesichtspunkt zu überdenken ?
    Und dann kann man das auch mit anderen Worten formulieren, wenn man Manöverkritik üben will, was bei einem Mitglied auffällig ist, und schon fast an einen BOT erinnert, dass unter jedem Pythoncode, der nicht einem einzigen Narrativ immer der gleiche fast im Serienbriefformat gesetzte Text gesetzt wird.

    In erste Linie sollte dem TO soviel Respekt gezollt werden, das er hier überhaupt nach all den bisherigen Attacken überhaupt noch etwas veröffentlicht. Aber soweit scheint es bei einigen nicht mehr zu reichen, weil in dieser Ellenbogengesellschaft immer nur noch die eigene oder die Mehrheitsmeinung als die absolute Wahrheit angesehen wird. Das zeigt sich auch in der Kritik Formulierung. Und ich bleibe dabei, kein von euch, die sich hier alle aufregen und weiter auf dem TO herum hacken, hat sich mit dem Code dahingehend auseinander gesetzt, das er diesen Code unabhängig seines Typus ausprobiert hat.
    Schämt euch !

    Franky

  • Batucada2
    Ich finde das Thema eine interessante Sache, zumal ich im 3D Druck öfter mit EEPROMs zu tun hatte.
    Was wäre denn da z.B. eine Anwendung für einen Pi oder Mikrocontroller, die normal mit SD Karten als EEPROM Ersatz arbeiten könnten ??

    Bei meinem 3D Drucker werden/wurden gerätespezifische Parameter abgelegt, damit man diesen autark ohne Server betreiben konnte.
    Da dieser nun über den Repetier Server gesteuert wird (über den Pi), ist aber auch das inzwischen überholt, da diese Parameter nun auf der SD Karte des Pi abgelegt werden.

    ;) Gruß Outi :D

    Mein Zeug

    Pis: 2x Pi B, 1x Pi B+, 1x Pi 2 B in Rente / 2x Pi 3 B (Tests / Repetier Server) / 2x Pi Zero 1.2 / 2x Pi Zero 1.3 / 2x Pi Zero W 1.1 / 1x Pi Zero 2 (BW+CUPS/SANE) /
    1x Pi 3 B+ (Tests) / 1x Pi 4 B 4GB (HomeAssistant) / Pi 400 (BW) / 1x Pi 5 8GB (BW) / 2x Pico / 2x Pico W / 2x Pico 2 / 2x Pico 2 W
    HATs: Sense HAT / HM-MOD-RPI-PCB / RPI-RF-MOD / PiFi DAC+ V2.0 / TV HAT / Pi 5 Kühler HAT / Pimoroni NVMe BASE / M.2 HAT+
    Cams: orig. Raspberry Pi Camera Module V1 & V3 / PS3 Eye

  • Franky07 Ich habe das nicht mit der Hardware verifiziert weil ich die nicht habe. Aber ich sehe den Quelltext, ich sehe die Namen, und ich sehe die API und da gab es halt Verbesserungspotential. Das habe ich angesprochen und auch eine überarbeitete Version erstellt. Ich habe nicht auf einem Menschen herumgehackt, sondern Code qualitativ verbessert.

    Was das anerkennen angeht: das ist teilweise KI-generierter Code der handwerklich nicht gut ist. Wie anerkennend muss man da bitte sein? Du kritisierst, dass den Code wahrscheinlich keiner verifiziert hat: hast Du Dir die Kritik mal inhaltlich angeschaut? Mal wenigstens überlegt wie Code aussehen müsste der zum Beispiel 10 Bytes ab Adresse 100 liest oder schreibt, mit der API der man nur Anerkennung zollen sollte wenn man die Hardware nicht hat, aber lesen und verstehen kann?

    Meine konstruktive Kritik und Überarbeitung war auch kostenfrei und für alle zukünftigen Leser. Und was das ”Tagwerk” angeht, bin ich mir nicht so ganz sicher wie viel Arbeit da überhaupt reingesteckt wurde, und wie viel einfach KI-generiert ist ohne das selbst mal kritisch durchzulesen. Denn das wäre für mich zumindest eine plausible Erklärung warum ein nach eigener Aussage erfahrener Programmierer, der 20 Programmiersprachen beherrscht, so eine schlechte API abliefert.

    Edit: Mir ist nicht ganz klar was mit „Typus“ in diesem Kontext gemeint ist‽

    Python
    print("P3 90 60 1")
    for b in range(5400):print(1,a:=+((b/90-30)**2+(b%90-45)**2>324),a)

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!