Forum

Einloggen | Registrieren | RSS  

GeorgZ(R)

04.10.2023,
20:44
 

Pico Programmierung klappt nicht so recht (Elektronik)

Hallo,
heute morgen habe ich den Raspberry Pico bekommen.
Der Anfang ging ganz einfach, jetzt komme ich aber gerade nicht weiter:
Die Lichtsteuerung gelingt mit einer LED prima, aber mit zweien schon nicht mehr.
Jede LED alleine funktioniert, nur gemeinsam nicht.
Hier der Code:
from machine import Pin, PWM
from time import sleep_ms
# Sequenz
seq = 'bdfzzmgaaaaaaaaabdfdbaaa'
wait = 100
# Initialisierung der Onboard-LED
led = PWM(Pin(13, Pin.OUT))
led.freq(1000)
# Funktion
def light1(seq, wait):
abc = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
step = int(65535 / len(abc))
# Wiederholung einleiten (Schleife)
while True:
i = 0
for i in range(0, len(seq)):
for j in range(0, len(abc)):
if seq[i] == abc[j]:
break
led.duty_u16(j * step)
sleep_ms(wait)
light1(seq, wait)

led2 = PWM(Pin(10, Pin.OUT))
led2.freq(1000)
seq2 = 'bdfzzmgaaaamaaaaabdfrdbaaa'
wait2 = 500

def light2(seq2, wait2):
abc = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
step = int(65535 / len(abc))
# Wiederholung einleiten (Schleife)
while True:
k = 0
for k in range(0, len(seq2)):
for m in range(0, len(abc)):
if seq2[k] == abc[m]:
break
led2.duty_u16(m * step)
sleep_ms(wait2)
light2(seq2, wait2)

Ich wäre sehr dankbar für etwas Hilfe

Gruß, Georg

bastelix(R)

04.10.2023,
22:21

@ GeorgZ

Pico Programmierung klappt nicht so recht

So kann das kein Mensch lesen. Python verwendet whitepsaces um Blöcke zu definieren, die Forensoftware entfernt diese aber. Kannst du deinen Code als Datei anhängen oder bei Gitlab/Github oder irgendwo hochladen wo die Formatierung erhalten bleibt?

GeorgZ(R)

04.10.2023,
22:59

@ bastelix

Pico Programmierung klappt nicht so recht

https://www.elektronik-kompendium.de/forum/upload/20231004225736.txt

bastelix(R)

05.10.2023,
00:26

@ GeorgZ

Pico Programmierung klappt nicht so recht

» https://www.elektronik-kompendium.de/forum/upload/20231004225736.txt

In Zeile 19 startest du eine Endlosschleife, damit wird der Code nach Zeile 27 (wo du light1 aufrufst) nie ausgeführt. Du musst beide LEDs in der gleichen Endlosschleife ansteuern. Versuch mal deine k/m-Schleife direkt unter die i/j-Schleife zu schreiben damit du erst die led1 und dann die led2 ansteuerst.

GeorgZ(R)

05.10.2023,
09:03

@ bastelix

Pico Programmierung klappt nicht so recht

» » https://www.elektronik-kompendium.de/forum/upload/20231004225736.txt
»
» In Zeile 19 startest du eine Endlosschleife, damit wird der Code nach Zeile
» 27 (wo du light1 aufrufst) nie ausgeführt. Du musst beide LEDs in der
» gleichen Endlosschleife ansteuern. Versuch mal deine k/m-Schleife direkt
» unter die i/j-Schleife zu schreiben damit du erst die led1 und dann die
» led2 ansteuerst.

Ja, da hast Du wohl Recht. Aber genau das krieg ich nicht gebacken.
Was ich schon alles ausprobiert habe! Und mit dem Thonny kann man das ja so schön schnell testen - bis jetzt hat nichts geklappt.

Am Ende braucht jede LED eine eigene Schleife, weil ja jede auch eine eigene Blinksequenz hat.
Leider kenne ich Python einfach gar nicht.

Gruß, Georg

bastelix(R)

05.10.2023,
22:18

@ GeorgZ

Pico Programmierung klappt nicht so recht

» Am Ende braucht jede LED eine eigene Schleife, weil ja jede auch eine
» eigene Blinksequenz hat.
Nein die Schleife zählt ja nur hoch und wiederholt den Schleifenkörper bis zum Abbruchkriterium. Den Zustand der LEDs hältst du in den Variablen. Du musst deinen Code so anpassen, dass du in einer Schleife die unterschiedlichen Zustände für n LEDs steuern kannst. Fang erst mal mit den zwei LEDs in einer Schleife (und zwei Variablen) an. Wenn das klappt kannst es auf mehr LEDs erweitern.

» Leider kenne ich Python einfach gar nicht.
Dann war ja der Raspberry Pcio genau die richtige Wahl. :-P Ich glaube zwar nicht, dass es an der Programmiersprache liegt aber schau mal in Netz, den Pico kann man wohl auch mit C++ programmieren.

GeorgZ(R)

05.10.2023,
23:47

@ bastelix

Pico Programmierung klappt nicht so recht

Ich hatte heute ausgiebigen Kontakt mit Leuten aus einem Raspberry-Forum.
Die haben sich intensiv mit meinem Code auseinandergesetzt, sind aber schließlich gescheitert:
"Mir fällt auch keine wirklich einfache Lösung ein, denn wir betreten hier das Thema „Nebenläufigkeit“ (engl. concurrency) das mit zu den komplizierteren gehört."
Das war das Ergebnis:

https://www.elektronik-kompendium.de/forum/upload/20231005234152.txt

Ein schönes Programm, aber es bleibt auch in der ersten Schleife stecken.

Aber auf diese Schleifen bin ich gar nicht so versessen, mir wäre es viel lieber, mit einem oder mehreren Zufallszahlen immer wieder andere LEDs zum Leuchten zu bringen.

Gruß, Georg

bastelix(R)

06.10.2023,
00:44

@ GeorgZ

Pico Programmierung klappt nicht so recht

» https://www.elektronik-kompendium.de/forum/upload/20231005234152.txt
» Ein schönes Programm, aber es bleibt auch in der ersten Schleife stecken.
Ich sehe kein Abbruchkriterium für die Endlosschleife in Zeile 9, denke da steckt die Motte zwischen den Röhren.

» mit einem oder mehreren Zufallszahlen immer wieder andere LEDs zum
» Leuchten zu bringen.
Wie schon von einigen Leuten erwähnt ist das nicht trivial zu implementieren. Andererseits ist das aber auch keine Steuerung für eine Voyager-Sonde.

Interessant klingt das Projekt schon, allerdings habe ich keine Micropython-fähige Hardware und auch keine Lust auf Python.
Ich könnte am Wochenende einen proof of concept hacken der mit einem Arduino sechs LEDs Steuert (der µC hat nur sechs PWM-Pins). Darauf könnte man dann aufbauen oder den Arduino/C++ Code auf µPython übersetzten und da weiterbasteln.

Der Umfang wäre: Sechs LEDs die zufällig mit fade-in/out aufleuchten. Die Leuchtdauer ist vorerst immer gleich, die LEDs werden zufällig ausgewählt und es leuchten immer nur drei LEDs gleichzeitig.

Würde dir das weiterhelfen?

GeorgZ(R)

06.10.2023,
09:09

@ bastelix

Pico Programmierung klappt nicht so recht

» Darauf könnte
» man dann aufbauen oder den Arduino/C++ Code auf µPython übersetzten und da
» weiterbasteln.

einen Arduino habe ich gestern auch bekommen - wollte ich mal ausprobieren.

» Der Umfang wäre: Sechs LEDs die zufällig mit fade-in/out aufleuchten. Die
» Leuchtdauer ist vorerst immer gleich, die LEDs werden zufällig ausgewählt
» und es leuchten immer nur drei LEDs gleichzeitig.
»
» Würde dir das weiterhelfen?

wenn das dann erweiterbar ist, natürlich schon.

Offroad GTI(R)

06.10.2023,
10:49

@ GeorgZ

Pico Programmierung klappt nicht so recht

» Jede LED alleine funktioniert, nur gemeinsam nicht.
Welche LEDs benutzt du denn jetzt überhaupt?

GeorgZ(R)

06.10.2023,
10:56
(editiert von GeorgZ
am 06.10.2023 um 10:56)


@ Offroad GTI

Pico Programmierung klappt nicht so recht

» Welche LEDs benutzt du denn jetzt überhaupt?

Im Moment, zum Rumprobieren ganz einfache rote 20 mA 2V

bigdie(R)

06.10.2023,
12:23

@ GeorgZ

Pico Programmierung klappt nicht so recht

Ein Picaxe kann bis 8 Schleifen parallel abarbeiten
https://picaxe.com/docs/picaxem2.pdf

bastelix(R)

07.10.2023,
02:48
(editiert von bastelix
am 07.10.2023 um 02:50)


@ GeorgZ

Pico Programmierung klappt nicht so recht

» einen Arduino habe ich gestern auch bekommen - wollte ich mal
» ausprobieren.
Gute Wahl! ;-)

» wenn das dann erweiterbar ist, natürlich schon.
Ich unterstelle dir mal, dass du mich nicht beleidigen wolltest :allesgut: :-P

Hier eine Skizze, wie ich die LEDs (20mA, 3,0V mit 120Ohm Vorwiderstand) angeschlossen habe.


Der Code für Arduino (Vorsicht, das sind zwei Dateien die im gleichen Ordner abgelegt werden müssen):

https://www.elektronik-kompendium.de/forum/upload/20231007023334.ino (Dateiname: led-multifade.ino)
https://www.elektronik-kompendium.de/forum/upload/20231007023346.h (Dateiname: LED.h)

Der Code läuft jetzt seit fast drei Stunden und wechselt die sechs LEDs brav zufällig durch.

Für mehr als 6 LEDs brauchst du etwas mehr Hardware, weil der Arduino nur 6 PWM-Pins hat. Entweder du nimmst die LEDs mit eingebauten µC (WS2801) oder du nimmst externe PWM-ICs (wie den PCA9685, der genau für solche Anwendungsfälle geschaffen wurde) und hängst da LEDs deiner Wahl dran. Der Code vom PoC lässt sich auf beide Ansätze sehr einfach anpassen. Die Leuchtdauer der LEDs zu randomisieren ist auch machbar, da muss man nur noch mal etwas drüber nachdenken.

Und wenn du dann noch große Lust hast weiter zu basteln kannst du auch noch den Pseudo-Zufallszahlengenerator gegen einen Hardware-Zufallszahlengenerator austauschen ;-)

Edit: Hab die Dateinamen zu den Sourcen dazu geschrieben, die müssen nach dem Download entsprechend umbenannt werden damit der Compiler die auch findet.

GeorgZ(R)

07.10.2023,
12:05

@ bastelix

Pico Programmierung klappt nicht so recht

Hallo bastelix,

das hat jetzt ein wenig gedauert, aber ich hatte ja noch nicht mal das Tütchen des Arduino aufgeschnitten und musste mir erst mal irgendwo eine Betriebsanleitung suchen, mich mit allem vertraut machen und Software installieren usw..
Mein Arduino ist ein UNO R3
Das war unproblematisch, ich musste nur die PIN-Nummern in Deinem Programm ändern. ( der UNO hat übrigens 13 PWM-Pins).
Ich habe jetzt ein Steckbrett angeschlossen und es blinkt munter und unregelmäßig vor sich hin - toll !
Woran ich noch arbeiten muss, ist die Art des Blinkens, jetzt leuchten sie immer mit voller Helligkeit. Das und eigentlich auch das vollkommene Erlöschen sollten nur Ausnahmefälle sein..

» Für mehr als 6 LEDs brauchst du etwas mehr Hardware, weil der Arduino...
» ...noch mal etwas drüber nachdenken.

Das muss im Moment etwas zurückstehen.
Jetzt möchte ich erstmal meine "Wolke" fertigbauen und die LEDs reinbasteln, alles mit Widerständen verlöten, verdrahten ... das dauert eine Weile.

Vielen herzlichen Dank jedenfalls, ich habe schon fast nicht mehr an eine Realisierung geglaubt.
Ich melde mich, sobald ich mit der Elektronik weitermache.

BTW: könnte man eigentlich den Raspberry Pico an den Arduino anschließen?
Bei dem lässt sich über die Sequenzen das Geflackere so schön einstellen.

Gruß, Georg

bastelix(R)

07.10.2023,
23:57
(editiert von bastelix
am 08.10.2023 um 01:05)


@ GeorgZ

Pico Programmierung klappt nicht so recht

Hallo Georg,

» Mein Arduino ist ein UNO R3
» Das war unproblematisch, ich musste nur die PIN-Nummern in Deinem Programm
» ändern. ( der UNO hat übrigens 13 PWM-Pins).
Der UNO hat doch auch nur eine ATMega328p verbaut. Ich kenne nur die 6 PWM-Pins: https://www.arduino.cc/reference/de/language/functions/analog-io/analogwrite/

» Woran ich noch arbeiten muss, ist die Art des Blinkens, jetzt leuchten sie
» immer mit voller Helligkeit. Das und eigentlich auch das vollkommene
» Erlöschen sollten nur Ausnahmefälle sein..
Das lässt sich relativ einfach anpassen.

» Ich melde mich, sobald ich mit der Elektronik weitermache.
Tu das, aber mit Foto! :-D ich finde grad echt gefallen an dem Geblinke auf dem Steckbrett und bin schon am überlegen ob ich nicht doch einen PWM-IC auspacke und das ganze mal mit vielen LEDs zusammenbastle.

» BTW: könnte man eigentlich den Raspberry Pico an den Arduino anschließen?
Möglich ist vieles, aber Sinnvoll ist es in dem Fall nicht. Mit dem Pico lassen sich noch andere tolle Sachen basteln, da fällt dir bestimmt irgendwann was ein ;-)

» Bei dem lässt sich über die Sequenzen das Geflackere so schön einstellen.
Erklär das mal etwas genauer oder gib mir einen Link wo ich das mit den Sequenzen nachlesen kann. So gut kann ich Python nicht lesen um mir das schnell aus dem Code zusammen zu reimen. Wenn man das in Python hacken kann kann man das auch in C++ hacken. Die feste Leuchtsequenz war ja nur für den PoC.

Edit: Übrigens, wenn du Cross-Postings in zwei (oder mehr) Foren machst, solltest du darauf hinweisen und auf den anderen Post verlinken. Dann kann man nachschauen ob es schon eine Lösung gibt bzw. welche Ideen schon verworfen wurden.

Edit2: Ich hab noch etwas mit randomisierten Geschwindigkeiten der LED-Fadein/out experimentiert, das wird dann aber recht unruhiges Blinkenlights. Und gefühlt kommt der Pseudo-Zufallszahlengenerator dann auch an seine Grenzen. Aber mit nem Arduino kann man ja auch echten Zufall basteln.

GeorgZ(R)

08.10.2023,
10:53

@ bastelix

Pico Programmierung klappt nicht so recht

Hallo bastelix,

»...Ich kenne nur die 6
» PWM-Pins:
Du hast Recht, ich habe mich von der Art der Beschriftung täuschen lasse.
Jetzt, da ich auf die richtigen PWM-Pins umgestellt habe, blinkt es schon viel schöner.

» ich finde grad echt gefallen an dem Geblinke auf
» dem Steckbrett ...

Geht mir auch so - es hat so was Freundliches.

» » Bei dem lässt sich über die Sequenzen das Geflackere so schön einstellen.
» Erklär das mal etwas genauer oder gib mir einen Link wo ich das mit den
» Sequenzen nachlesen kann.

Die LEDs gehen nicht einfach an und wieder aus, sondern sie sind unruhig, gehen kurz bis zur halben Helligkeit an um gleich wieder aus zu gehen und dann mit voller Helligkeit kurz zu leuchten, werden wieder dunkler und gehen nach noch zwei kleinen Blinkern aus, usw... Immer das - wäre mir viel zu viel, aber ab und an, zwischendrin, unerwartet ....

Hier kann man gut sehen, wie das gemacht wird: https://www.elektronik-kompendium.de/sites/raspberry-pi/2701061.htm
Etwa in der Mitte der Seite gibt es einen Code, bei dem man gut sehen kann wie die Uhruhe durch die Sequenzen hergestellt wird.

» Übrigens, wenn du Cross-Postings in zwei (oder mehr) Foren machst,
» solltest du darauf hinweisen und auf den anderen Post verlinken.

Ein bis dahin positives Ergebnis habe ich hier eingestellt: https://www.elektronik-kompendium.de/forum/upload/20231005234152.txt
Der Link zu den Thread ist: https://forum-raspberrypi.de/forum/thread/59673-raspberry-pico-programmierung-hakt/

» ...das wird dann aber recht unruhiges
» Blinkenlights.

Na ja, ich denke, wenn es immer nur gleichmäßig und ruhig blinkt, wird es irgend wann langweilig - es braucht beides, gut abgestimmt. :-)

Gruß, Georg