Hallo Leute,
ich bin auf der Suche nach Informationen bzgl. Ansteuerung OLED SSD1306
auf einem Raspberry Pi Pico.
Und zwar nicht mit MicroPython (hierüber existieren sehr viel
Informationen), sondern mit C.
Vorab: reines Kompilieren und "Anschaulichmachen" des Beispiels aus den
Pico SDK Examples ist ja simpel.
https://github.com/raspberrypi/pico-examples/tree/master/i2c/oled_i2c
Wie auf dem angehängten Foto zu erkennen stellt er drei kleine
Raspberries dar (die von links nach rechts auf dem Bildschirm wandern).
Mein Problem ist, dass ich ausser diesem einen Beispiel nirgendwo
weitere erhellende Beispiele finden kann.
Ich mag jenen Code nicht besonders da er lang und kompliziert ist und
ich zu anfangs eigentlich nur schlichten Text darstellen will.
Also was ich bräuchte wäre ein simples "Hello World" Programm.
Hätte da jemand einen Link zu einem Repository, Forumsbeitrag etc.?
Danke!
PS1: Hier kurz und prägnant was ich in MicroPython tippen würde.
Ach ja, wieder mal so ein Maker der denkt ist ja alles so simpel -
zusammen stöpseln, etwas Copy & Paste und schon läufts. Nein so einfach
ist es eben nicht. Man muß das schlichtweg lernen. Das passiert in Lehre
oder beim Studium, wenn man dies zu seinem Beruf machen möchte. Für's
Hobby geht das mit Lesen, Lesen nochmals Lesen und zwar Fachliteratur,
Datenblätter etc. und dazu ne gehörige Portion Schweiß. Und ja auch
Tiefschläge gehören da zum Geschäft, die sind aber in alle Regel äußerst
lehrreich.
Naja, das Gute an meinem Aufbau ist: es läuft schon.
Codebeispiele im beschriebenen Kontext wären allerdings dennoch
hilfreich. Die gibt es nach meiner Rechereche nämlich nicht. Aber
vielleicht habe ich auch was übersehen.
Ansonsten finde ich es durchaus auch selber heraus, sow wie in der
Vergangenheit auch.
Eine Mentalität wie du sie hier zur Schau stellst mache ich mir dennoch
nicht zu Eigen. Ich freue mich eigentlich immer mein (gewiss begrenztes)
Wissen zu teilen, auch mit Leuten wie dir.
Kann es sein dass dein Problem in einem Denkfehler liegt? Ich hab nur
kurz drüber geschaut aber es wirkt auf mich so als würde der "Treiber",
bzw. das Code-Beispiel nur Pixel-Grafik unterstützt, und davon ausgeht
dass du Pixel setzen und löschen willst. Von Text habe ich in dem ganzen
Code nichts gesehen.
Schaut also so aus als müsstest du Text selber in Pixel umsetzen und auf
das Display kopieren. Einen Diskussion um Pixel-Fonts in verschiedenen
Größen findest du hier:
Beitrag "Re: 6-8px Win1252 Font"
> Ich mag jenen Code nicht besonders da er lang und kompliziert ist und> ich zu anfangs eigentlich nur schlichten Text darstellen will.
Das liegt daran das das gesamte Framework vom Pi Pico von vorne bis
hinten ein ueberkomplizierter Schmerz im Arsch ist. Ich musste lange
nicht mehr so kotzen wie beim lesen dieses Sourcecodes. Sowas will man
einfach nicht in seinen Projekten haben, es tut weh.
Hier liefert dir jemand ein paar Beispiele wie es ohne den Kram geht:
https://github.com/dwelch67/raspberrypi-pico
Fuer das ansprechen der I2C-Schnittstelle und danach deines Oleds liesst
du dann einfach nur die Datenblaetter und programmierst das eben runter.
Keine grosse Sache. Hat bei mir 2-3h gedauert. Vorausgesetzt natuerlich
du kannst schon programmieren und weisst das damit was anderes gemeint
ist als aus dem Internet Source zu kopieren.
Olaf
Vielleicht noch mal einen Tip fuer diejenigen die einen Pico
als richtigen Microcontroller ohne das aufgeblasene System vom
Hersteller
nutzen wollen. Der von mir oben gepostete Link zeigt nicht nur wie man
seinen eigenen Source viel einfacher uebersetzt, er liefert auch das
Tool um aus einem hex/bin das uf2 File zu erzeugen das man braucht um
sein Programm direkt auf den Pico kopieren zu koennen!
Man wird allerdings schnell feststellen das dies auf dauer nervig ist
und man gerne eine echten Debugger verwenden will.
Es gibt von Arm eine definierten Stecker fuer das Debuging der schoen
klein ist:
https://www.keil.com/support/man/docs/jlink/jLink_connectors.htm
Den kann man sich auch gut selber auf den Pico kleben. Siehe Bild.
Bevor man das tut sollte man allerdings pruefen ob die eigene JLink
Hardware modern genug ist um den Pico zu unterstuetzen. Das geht
naemlich nicht mit jedem JLink! Es kommt da auf die Hardwarerevion
an und nicht ob man einen Ultra oder EDU hat!
Olaf
Olaf schrieb:> Hier liefert dir jemand ein paar Beispiele wie es ohne den Kram geht:>> https://github.com/dwelch67/raspberrypi-pico
Und wie geht damit die gewünschte Textausgabe per printf ?
Das eigentlich Problem des TO ist nicht unschöner Code, sondern fehlende
Funktionalität. Das löst dein link auch nicht.
Das hier ist das Problem:
asd schrieb:> Schaut also so aus als müsstest du Text selber in Pixel umsetzen und auf> das Display kopieren.
Oliver
> Und wie geht damit die gewünschte Textausgabe per printf ?
Man programmiert es sich. Wobei ich gerne mein eigenes printf nutze das
ich seit 20Jahren verwende. Einfach reinkopiert und fertig.
Allerdings gibt es natuerlich auch ein printf in den Libaries des
Compilers. Bei so einem fetten Controller kann man ja mal schludrig
sein. Das muss man sich halt _write und tiefer selber programmieren.
Finde ich sowieso besser weil man dann seine eigenen Fonts verwenden
kann.
Olaf
Olaf schrieb:> Hier liefert dir jemand ein paar Beispiele wie es ohne den Kram geht:>> https://github.com/dwelch67/raspberrypi-pico
Makefile Bug!
Die Makefile hat nen Bug die bei neuer gcc version den compile
verhindert, das
-nostartfiles muss zu den COPS hoch:
> Makefile Bug!
Ist mir nicht aufgefallen. Aber ich habe auch mein eigenes Makefile.
Ich hab das was dwelch da geleistet hat auch nur als Anregung genommen
und vieles selber gemacht. .-)
Bei mir sieht es so aus:
CFLAGS += -fno-diagnostics-show-caret
CFLAGS += -fdata-sections -ffunction-sections
CFLAGS += -funsigned-char -funsigned-bitfields
CFLAGS += -mcpu=cortex-m0plus -mthumb
CFLAGS += -Wl,--gc-sections -Wl,-Map=$(BUILD)/mapfile.map
CFLAGS += -MD -MP -MT $(BUILD)/$(*F).o -MF $(BUILD)/$(@F).d
LDFLAGS += -mcpu=cortex-m0plus -mthumb
LDFLAGS += -lc -lm -lrdimon
#LDFLAGS += -nostdlib
LDFLAGS += -specs=nosys.specs
LDFLAGS += -lgcc
LDFLAGS += -nostartfiles
LDFLAGS += -Wl,--gc-sections
LDFLAGS += -Wl,--script=./syssrc/rp2040.ld
LDFLAGS += -Xlinker -Map=$(BUILD)/$(BIN).map
Olaf
olaf schrieb:>> Makefile Bug!>> Ist mir nicht aufgefallen. Aber ich habe auch mein eigenes Makefile.> Ich hab das was dwelch da geleistet hat auch nur als Anregung genommen> und vieles selber gemacht. .-)
Perfekt für einen Anfänger. HaHaHa.
Keine Ahnung ob er das lösen konnte, es hätte sicher gereicht, wenn er
die Doku gelesen hätte…
https://docs.micropython.org/en/latest/esp8266/tutorial/ssd1306.html
Keine Ahnung warum das Fahrrad immer wieder neu erfunden werden muss.
> Keine Ahnung warum das Fahrrad immer wieder neu erfunden werden muss.
Weil Python ein rostiges Hollandrad mit defekter Tretkurbel und
bescheidener Uebersetzung ist. Aber klar, man erreicht damit auch Ziele.
Olaf
olaf schrieb:>> Keine Ahnung warum das Fahrrad immer wieder neu erfunden werden muss.>> Weil Python ein rostiges Hollandrad mit defekter Tretkurbel und> bescheidener Uebersetzung ist. Aber klar, man erreicht damit auch Ziele.>> Olaf
Die Frage bezog sich nicht auf Deine Meinung und Deine
Selbstbeweihräucherung - Sorry. Es war nicht gefragt ob Du es kannst.
Und vergiss nicht negativ zu bewerten.
Uwe D. schrieb:> Keine Ahnung ob er das lösen konnte, es hätte sicher gereicht, wenn er> die Doku gelesen hätte…> https://docs.micropython.org/en/latest/esp8266/tutorial/ssd1306.html>> Keine Ahnung warum das Fahrrad immer wieder neu erfunden werden muss.
Vielleicht, weil der TE ausdrücklich in C schreiben wollte – dass er
Micropython kennt und weiß, wie das Display dort zu nutzen wäre, lässt
sich aus dem unteren Teil des Eingangsbeitrags durchaus ableiten, finde
ich.
Es ist für mich nachvollziehbar, dass man, wenn Micropython für einen
Job nicht [mehr] reicht (gibt da Sachen, die gehen damit einfach nicht),
oder man aus anderen Gründen (z.B. zum Lernen) mit C/C++ hantieren
möchte, auch das Display aus C/C++ heraus ansprechen möchte. Insofern
halte ich die Frage grundsätzlich für legitim, und ich frage mich ein
wenig, zu welchem Zweck du in diesem Kontext die Micropython-Doku
verlinkt hast und von Fahrrädern schreibst.
Billiger, schneller und einfacher wäre es dafür einen ESP32 zu benutzen.
Dafür gibt es dann auch fertigen Code in verschiedenen Versionen (z.B.
Arduino) auf Github. Wieso kauft überhaupt jemand einen Raspberry Pico
W, wo es ESP32 schon so lange gibt? ESP ist nur halb so teuer und wenn
man keinen Dualcore und BLE braucht, reicht auch ein ESP8266.
Schopfküttel!
> Wieso kauft überhaupt jemand einen Raspberry Pico> W, wo es ESP32 schon so lange gibt?
Schau mal kleiner, ich erklaers dir. Es gibt Leute die betrachten
programmieren intellektuelle entspannende Uebung. Vielleicht so wie
schlichtere Gemueter Kreuzwortraetzel loesen oder TV kucken. Die
programmieren dann selbst. Die finden es nett einen Dualcore zu haben
oder ein System wie eine PIO zu erforschen. Die halten kopieren und
"moeglichst einfach" fuer nicht zielfuehrend.
Ich weiss alles schraege Nerds, aber die haben uns schon mal geholfen
aus der feuchten Hoehle rauszukommen und das Feuer zu entdecken. Cool
oder?
Olaf
Jack V. schrieb:> Uwe D. schrieb:>> Keine Ahnung ob er das lösen konnte, es hätte sicher gereicht, wenn er>> die Doku gelesen hätte…>> https://docs.micropython.org/en/latest/esp8266/tutorial/ssd1306.html> Vielleicht, weil der TE ausdrücklich in C schreiben wollte – dass er> Micropython kennt und weiß, wie das Display dort zu nutzen wäre,> …> sich aus dem unteren Teil des Eingangsbeitrags durchaus ableiten,> halte ich die Frage grundsätzlich für legitim, und ich frage mich ein> wenig, zu welchem Zweck du in diesem Kontext die Micropython-Doku> verlinkt hast und von Fahrrädern schreibst.
Mea culpa - habe das entscheidende Detail nicht MicroPython überlesen
(selektive Wahrnehmung). Denn für MicroPython hätte der Link genügt.
Nach 10 Sekunden Suchmaschine:
- https://github.com/daschr/pico-ssd1306
- https://forums.raspberrypi.com/viewtopic.php?t=299754
Mit einer Vorlage in einer mir nicht völlig unbekannten
Programmiersprache kann ich relativ einfach „abbasteln“.
Nachtrag: Und natürlich das Datenblatt in die Hand nehmen, da steht eine
Menge drin (Befehle, Organisation, …) und macht den vorliegenden
Quellcode verständlicher.
olaf schrieb:> Schau mal kleiner, ich erklaers dir.
Wenn du den Ton bei den juengeren Kollegen auf deiner Arbeitsstelle auch
anschlaegst, lieben die dich direkt nach der ersten Zusammenarbeit.
Hundert Pro. LOL.
> Wenn du den Ton bei den juengeren Kollegen auf deiner Arbeitsstelle
Du vergisst dabei das Kollegen in der Entwicklung zuvor ein Studium
der Nachrichtentechnik, Informatik, usw, erfolgreich durchlaufen
haben. Da sind Menschen die glauben das man nur durch kopieren
zum Ziel kommt durch die 50-80Prozent Abbrecherquote aussortiert
worden. .-)
Vanye
Vanye R. schrieb:> Du vergisst dabei das Kollegen in der Entwicklung zuvor ein Studium> der Nachrichtentechnik, Informatik, usw, erfolgreich durchlaufen> haben.
Die haben das bestanden, weil sie effiziente Loesungen finden koennen.
Und keine Zeit verschwenden. Sollten die Pruefungen etwas anderes
zulassen, kommen nur Leute bei raus die von richtigen Ingenieuren
entweder belaechelt werden, oder diese zur Verzweiflung treiben.