Arduino Blue Pill & PWM

OP #7577755
Lesenswert?

Hallo und ein frohes neues Jahr,

ich komme mal wieder nicht weiter. Ich benutze einen Arduino BluePill also letztendlich einen STM32F103.

Dazu wollte ich ein Lauflicht (Knight Raider) programmieren. Das passt soweit auch. Was nicht passt, ist das Verhalten der PWM Ausgänge. Also hab ich einen sketch geschrieben der nur die LED´s mittels PWM Heller und Dunkler macht. Dieser anbei. Das Lauflicht verhält sich so: https://youtu.be/yAkn36FYmO8

Also LED 3,6,7 gehen nicht an LED 9 & 10 Blinken hin und her bei jedem Durchlauf.

Ersetzte ich im Sketch den analogWrite Befehl mit digitalWrite und ändere die Werte 150 auf HIGH und 0 auf LOW funktioniert es wie es soll. Es muß also an der PWM liegen.

Hat dazu jemand eine Idee?

Gruß

Kay

Angehängte Dateien:
Gast #7577797
Lesenswert?

Ich sehe auch auf Anhieb keinen Grund, warum die anderen Pins (außer PA9/10) nicht funktionieren.

Ist das Board mit einem original STM32F103 bestückt? Die Fakes haben sich ja schon oft als nur teilweise funktionierend herausgestellt.

#7577862
Lesenswert?

Wastl schrieb:

Kay L. schrieb:

Hat dazu jemand eine Idee?

  • Lerne was PWM bedeuted. In deiner "Source" kann ich keine PWM Programmierung erkennen. Nur einfache analog Write Operationen. PWM hat was mit Timern zu tun mit denen man Signale länger oder kürzer machen kann.

  • Man kann nicht einfach jeden Pin analog betreiben.

Kreuze an:

[ ] Du weißt was Ardiuno ist und wie es funktioniert? [ ] Arduino? Ich fahr BMW. [ ] Ich kenne nur Adriano, der Sack schuldet mir noch 50 Euro!

OP #7577918
Lesenswert?

Bis hierhin erstmal vielen Dank für die hilfreichen Antworten.

Das wichtigste ist das ich keinen Programierfehler gemacht habe. Ist bei dem Pipicode zwar fast nicht möglich aber ab und zu sieht man den Fehler einfach nicht. Laut Analyser ist an den nicht funktionierenden Pin auch kein PWM zu messen.

Ich denke das die PA9/PA10 Seriell Geschichte am blinken schuld ist. Das es viele Fake STMs gibt weiß ich. Zumindest haben die das ST Logo aufgedruckt, die die ich schon mal hatte hatten das nicht. Da die aber aus meiner letzten Bestellung sind könnte das eine Ursache sein. Ich hab mir deshalb mal einen anderen genommen den ich gerade Griffbereit hatte. Zur weiteren Info der aktuelle (also der aus dem Video) ist ein C8. Ich muss schauen ob ich noch einen anderen, nicht aus dieser Lieferung stammenden, C8 habe. Einen C6 hab ich gerade probiert, der verhält sich für den Pin PA2 anders, (der funktioniert beim C6) PA7 und PA8 funktionieren bei beiden nicht, auch Blinken bei PA9& 10 ist gleich.

Vielleicht hat ja noch jemand die zündende Idee?

ich versuche am WE aber mal eine komplette Schaltung mit ULN2003, damit ich alle LED gleichzeitig schalten kann.

Gruß

Kay

#7577933
Lesenswert?

Schau mal in der Pinbelegung vom Blue Pill, nicht alle Pins können PWM, es gibt auch Pins die nicht 5Volt tollerant sind, habe auch gerade die Blue Pill und betreibe die am Arduino IDE.

Wenn du das ganze einfacher halten willst, dann nutze die NEOPIXEL. Ist dann auch etwas einfacher zu händeln als die LED's einzeln zu schalten.

OP #7577947
Lesenswert?

Ja nicht alle PIns können das die von mir im Sketch genutzten sind aber laut DB PWM fähig.

Ob Neopixel einfacher ist kann ich nicht beurteilen. Aber 15LED in einer Reihenfolge also knight rider zu programmieren ist nun auch kein Hexenwerk. Geht mit ner state Maschine und analogWrite ganz einfach. Mein Sketch funktioniert ja auch. Nur die Ausgänge spinnen. ich hab mit meiner State Maschine den gleichen Effekt (das x LED nicht leuchten) wie mit dem angehängten Sketch.

OP #7577958
Lesenswert?

So ich hab folgendes gemacht:

Alle funktionierenden LED´s auskommentiert. Somit bleiben nur noch PA2 PA7 PA8 PA9 und PA 10 übrig. Ergebnis: PA2 leuchtet weiterhin nicht PA7 Blinkt einmal auf nur im ersten Durchlauf, danach nicht mehr PA8 leuchtet nicht PA9 blinkt wie gewünscht PA10 blinkt wie gewünscht

nächster Versuch: PA 9 und PA 10 ebenfalls auskommentiert Ergebnis: PA2 leuchtet nicht PA7 Blinkt wie gewünscht PA8 leuchtet nicht

nächster Versuch PA7 auch auskommentiert ( also nur Noch PA2 und PA8 werden angesteuert) Ergebnis: PA2 leuchtet nicht PA8 blinkt wie gewünscht

letzter versuch bis auf PA2 alles auskommentiert Ergebnis: keine LED blinkt

somit folgendes seltsame Fazit: PA2 funktioniert gar nicht PA9 und 10 funktionieren nur wenn nicht alle PWM Ausgänge genutzt werden PA7 und PA8 funktionieren anscheinend nur allein

seltsam.....

#7579089
Lesenswert?

Hey,

kenn mich mit den BluePill nicht aus, aber beim esp32 zum Beispiel gibt es mehre Channels für PWM. Da muss man den Pin ein Channel zuweisen und dann kann man den Channel ändern, wenn man Änderung am Pin haben will.

//Als Ausgang deklarieren pinMode(L1_rot_pin,OUTPUT);

// Stellt Channel Frequenz und Resolution pro Channel ein ledcSetup(L1_red_channel, freq, resolution);

// Channel wird mit Pin verbunden ledcAttachPin(L1._red_pin , L1_red_channel);

// setzt duty ledcWrite(L1_red_channel, l->red_value_scaled);

evtl. bekommt das Arduino Framework das nicht ordentlich hin den richtigen Channel den Pin zuordnen. Würde mal gucken ob das STM-Layer sone Funktionen anbietet und es damit nochmal Versuchen.

Gruß Michael

OP #7582377
Lesenswert?

Hallo zusammen,

ich habe ein wenig weiter gemacht, wenn ich PA8, PA10 und PB0 auskommentiere scheinen die anderen zu funktionieren.

Aber nur bis zu dem Moment wo ich analogWrite einen Wert von kleiner als 128 zuweise, dann leuchten PB6, PB7, PB8 und PB9 nicht mehr.

Da ich mir der "fakes" bewusst bin hab ich aus jeder Bestellung einen Blue Pill zum testen gelassen. alle verhalten sich gleich. Da ich die bei verschiedenen Lieferanten bestellt habe, werden wohl nicht alle gefaket sein.

Gruß

Kay

OP #7583988
Lesenswert?

Noch eine Zusatz Info:

bei meinen Tests habe ich festgestellt das die Pins PB6 bis PB9 mit Werten kleiner 128 nicht arbeiten. Das bedeutet die LED ist bei Wert 128 noch an, ab 127 und darunter aber bereits aus. Im Gegensatz zu den anderen Pins, die sich schön bis 0 runterdimmen lassen.

Somit ist der aktuelle Stand, das ich von 15 als PWM fähig deklarierten Pin nur 8 vollwertig (incl Dimmen) gleichzeitig nutzen, das ist nicht wirklich zufrieden stellend.

Gruß

Kay

#7584114
Lesenswert?

Bei mir blinkt es! Siehe unten analogWrite

1
const int LED3 = PA2;
2
unsigned long Delay = 500;
3

4
// the setup function runs once when you press reset or power the board
5
void setup() {
6
  // initialize digital pin LED_BUILTIN as an output.
7
  pinMode(LED3, OUTPUT);
8
}
9

10
void loop() {
11
analogWrite(LED3, 255); // 150 Nicht 255 OK 
12
delay(Delay);
13
analogWrite(LED3, 0);
14
delay(Delay);
15
}

[Mod: C-Tags eingefügt]

OP #7584159
Lesenswert?

Ja, den Fehler bei PA2 habe ich gefunden, dies war eine kalte Lötstelle.

Das ist der aktuelle Stand

1
const int LED1 = PA0;
2
const int LED2 = PA1;
3
const int LED3 = PA2;
4
const int LED4 = PA3;
5
const int LED5 = PA6;
6

7
const int LED6 = PA7;
8
const int LED7 = PA8; // Auskommentiert da nicht funktioniert
9
const int LED8 = PA9;
10
const int LED9 = PA10; // Auskommentiert da nicht funktioniert
11
const int LED10 = PB0; // Auskommentiert da nicht funktioniert
12

13
const int LED11 = PB1;
14
const int LED12 = PB6; // Funktioniert bei analogWrite kleiner als 128 nicht mehr
15
const int LED13 = PB7; // Funktioniert bei analogWrite kleiner als 128 nicht mehr
16
const int LED14 = PB8; // Funktioniert bei analogWrite kleiner als 128 nicht mehr
17
const int LED15 = PB9; // Funktioniert bei analogWrite kleiner als 128 nicht mehr

[Mod: C-Tags eingefügt]

OP #7584191
Lesenswert?

Es ging ja nicht um den Code es soll nur eine Aufstellung sein welcher Pin funktioniert und welcher nicht.

Aber damit sich keiner überanstrengt beim lesen:

Das ist der aktuelle Stand:

1
PA0 - funktioniert
2
PA1 - funktioniert
3
PA2 - funktioniert
4
PA3 - funktioniert
5
PA6 - funktioniert
6
PA7 - funktioniert
7
PA8 - funktioniert nicht
8
PA9 - funktioniert
9
PA10 - funktioniert nicht
10
PB0 - funktioniert
11
PB1 - funktioniert
12
PB6 - Funktioniert bei analogWrite kleiner als 128 nicht mehr
13
PB7 - Funktioniert bei analogWrite kleiner als 128 nicht mehr
14
PB8 - Funktioniert bei analogWrite kleiner als 128 nicht mehr
15
PB9 - Funktioniert bei analogWrite kleiner als 128 nicht mehr

Ich hoffe, das hilft dir und Du hast auch eine Idee zu meiner Frage?

Gruß

Kay

[Mod: Code-Tags eingefügt]

Moderator Persönliche Seite #7584214
Lesenswert?

Kay L. schrieb:

Aber damit sich keiner überanstrengt beim lesen:

Weder das eine noch das andere Posting ist im Mobilmodus lesbar, siehe Screenshots 1.png und 2.png.

EDIT:

Ich habe jetzt beide Deiner Postings mit Code- bzw. C-Tags nachbearbeitet. Ergebnis siehe Bild 3.png. Sieht etwas besser aus, oder?

Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren