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.
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.
Laut Pinout für das Bluepill sollen PA2, PA9 und PA10 funktionieren. PA9/10 sind aber voreingestellt für Serial benutzt, eventuell muss man die mit setRx/setTx erst auf einen anderen Serial Pin umbiegen.
https://github.com/stm32duino/Arduino_Core_STM32/wiki/API
Warum PA2 nicht geht sehe ich auf die Schnelle nicht.
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!
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.
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.
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.
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
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.
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.
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.
Vielen Dank und sorry, das ich jetzt erst antworte.
ja ich nutze den von STM, das Problem bei dem Core von Roger Clarks ist, das dabei CAN nicht funktioniert. Ich nutze aber CAN zum Austausch zwischen den einzelnen Arduinos.
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.