Forum: Projekte & Code CH32V003: Selbstbauprogrammer und "Getting started"


von Ralph S. (jjflash)



Lesenswert?

Nachdem in einem Nachbarthread doch tatsächlich jemand den 
Selbstbauprogrammer für einen CH32V003 nachgefragt hat, obwohl es einen 
originalen Programmer von WCH für sehr kleines Geld gibt (jedoch oft 
nicht erhältlich), habe ich mich daran gesetzt, das ganze aufzuarbeiten. 
Wirklich witzig ist, ohne Namen zu nennen, dass es Mitglieder hier gibt, 
die sich mittlerweile schier nicht "trauen" etwas zu posten, weil sie 
denken Gefahr zu laufen xyz Kommentare dafür zu erhalten: Ich habe 3 
(okay das sind nicht sehr viele) Interessenten, die den 
Selbstbauprogrammer wie ich den gemacht habe, gerne sehen würden und 
haben mich dann auch per Mail angeschrieben. Das, was ursprünglich kein 
Projekt war, und so auch nicht geplant war (ich dachte ich schreibe die 
Sachen einfach nur zusammen) wurde dann zu einem Projekt, zumindest für 
mich.

Wenn die Moderatoren dieses anderst sehen und zu der Ansicht kommen, 
dass dieser Thread hier woanderst besser aufgehoben ist, dann bitte 
verschieben (und nein, das ist absolut nicht böse gemeint).

Allerdings: im Archiv sind absolut genug Codebeispiele enthalten, sowie 
der Aufbau der Hardware an sich ist ja auch ein Projekt.

Grundsätzlich ist aus dem Selbstbauprogrammer eher ein "Getting started 
with CH32V003" geworden und wie immer glaube ich, deutlich zu viel 
geschrieben zu haben: Das Dokument ist jetzt 30 Seiten lang geworden (ob 
das dann wirklich jemand liest?).

Wie dem auch sei: Im Dokument wird beschrieben, wie man einen 
Selbstbauprogrammer für einen CH32V003 herstellen kann. Das einzige was 
benötigt wird ist ein CH32V003 Chip im 20pol. Gehäuse und ein Arduino 
Uno/Nano um den Programmer selbst zu flashen.

Im Archiv ist ein komplettes Setup unter Linux auf Basis von CH32FUN 
enthalten um damit starten zu können.

Und, auch wenn ich kein Arduino-Fan bin, ist den Seiten eine Anleitung 
hinzugefügt, wie man den CH32V003 auch unter Arduino programmieren kann 
und wie man den Selbstbauprogrammer der Arduino-IDE "unterjubelt".

Downloadlinks als "Quellenangabe", bis auf den Compiler sind alle 
benötigten Dateien hier im Archiv angehängt:

Für den Fall dass ich etwas ergänze, hier kann auch der RISCV-Compiler 
gedownloadet werden:

https://www.jjflash.de/ch32v003/downloads/

Der riscv-Compiler auf der originalen Webseite

https://github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack/releases/

V-USB mit der Programmerfirmware auf der Githubseite von Christian Lohr
https://github.com/cnlohr/rv003usb

CH32FUN von hier wurde das Framework für den V003 entnommen sowie das 
Hostprogramm minichlink für den Selbstbauprogrammer:

https://github.com/cnlohr/ch32fun

Der Arduino-Core für den CH32V003

https://github.com/openwch/arduino_core_ch32

Für denjenigen der das hier wirklich ausprobiert: Viel Spaß dabei (vllt. 
einfach bei der nächsten Bestellung bei einem Elektroniklieferanten die 
Chips mitbestellen. Außer dem Chip selbst benötigt es nur zusätzliches 
"Hühnerfutter" um damit anzufangen und bei einem Preis von ca. 25Cent / 
Stück ist das nun wirklich keine Investition).

von F. P. (fail)


Lesenswert?

Sofern man keinen CH32V003 auf Lager hat und daher eh bestellen muß, 
wäre ein CH32V203 praktischer wegen echtem USB statt V-USB.

von Ralph S. (jjflash)


Lesenswert?

F. P. schrieb:
> Sofern man keinen CH32V003 auf Lager hat und daher eh bestellen muß,
> wäre ein CH32V203 praktischer wegen echtem USB statt V-USB.

Für den ist die Anleitung aber nicht gemacht! Außerdem: Die Firmware des 
Selbstbauprogrammers läuft auf dem V203 nicht (ich habe es ausprobiert). 
Das einzige das funktioniertist: Der Programmer (mit V003) kann auch den 
V203 flashen. Der Arduino-Core kann auch den V203 programmieren 
(allerdings muß man dann hier die Config-Dateien in ~./arduino15 
nochmals patchen.

Warum nur müssen irgendwelche Postings immer in der Art ausufern: Mein 
Chip ist aber besser als deiner und die Programmiersprache taugt nichts, 
nimm lieber die andere.

Das hier ist ein "Getting started" für einen CH32V003 und nicht für 
einen CH32V203.

Warum schreibst du nicht, nimm lieber einen STM32F400 (dem gibt es bei 
LCSC wirklich, ich habe ihn hier liegen), der kostet auch nur einen 1 
Euro, gibt es im LQFP-48 Gehäuse und hat FPU, 128kB Flash und 32kB SRAM. 
Okay, USB hat er nicht (ich war überrascht, ich dachte alle F4 haben 
das), aber ansonsten in allem besser als V003. Warum also nicht den 
nehmen? Ganz einfach, für den ist diese Anleitung hier nicht gemacht, 
für diese braucht es eine andere.

von Kilo S. (kilo_s)


Lesenswert?

Ralph S. schrieb:
> Wirklich witzig ist, ohne Namen zu nennen, dass es Mitglieder hier gibt,
> die sich mittlerweile schier nicht "trauen" etwas zu posten, weil sie
> denken Gefahr zu laufen xyz Kommentare dafür zu erhalten

Leider wahr. Ist mir hier auch begegnet.

Viel schöner finde ich das du das ganze hier trotzdem für alle 
veröffentlichst!

Danke dafür.

O.T
Ich hab zwar (noch) keine CH32, hab mir das ganze aber gespeichert, wenn 
mir auf einer der Schlachtplatinen mal ein CH32 begegnet kann ich ihn so 
nutzbar machen ohne extra Geld ausgeben zu müssen. Super Sache!

: Bearbeitet durch User
von Harald K. (kirnbichler)


Lesenswert?

Ralph S. schrieb:
> Nachdem in einem Nachbarthread doch tatsächlich jemand den
> Selbstbauprogrammer für einen CH32V003 nachgefragt hat, obwohl es einen
> originalen Programmer von WCH für sehr kleines Geld gibt (jedoch oft
> nicht erhältlich)

Der "originale Programemr" (WCHLinkE) ist kein "Programmer", sondern ein 
Debuginterface.
Darüber kann man also mehr anstellen, als Code in µCs zu laden, man kann 
Breakpoints im Code setzen, Speicherinhalte betrachten etc. Obendrein 
stellt das Ding auch noch eine serielle Schnittstelle zur Verfügung.

Kann das dieser Nachbau hier auch, oder ist das ein reiner "Flasher"?

Abgesehen davon:

Schickes Projekt, das gehört definitiv nach "Projekte & Code" und das 
hast Du auch schön detailliert aufgearbeitet - Schaltplan, 
Aufbauhinweise, Links -- richtig gut! Großes Lob!

von Ralph S. (jjflash)


Lesenswert?

Harald K. schrieb:
> Der "originale Programemr" (WCHLinkE) ist kein "Programmer", sondern ein
> Debuginterface.
> Darüber kann man also mehr anstellen, als Code in µCs zu laden, man kann
> Breakpoints im Code setzen, Speicherinhalte betrachten etc. Obendrein
> stellt das Ding auch noch eine serielle Schnittstelle zur Verfügung.

Der WCH-LinkE ist nicht nur ein Debuginterface, er hat zudem noch eine 
sehr praktische USB2UART-Bridge mit integriert.

Harald K. schrieb:
> Kann das dieser Nachbau hier auch, oder ist das ein reiner "Flasher"?

Leider ist der Nachbau tatsächlich ein reiner "Flasher", Breakpoints 
setzen und Variableinhalte ansehen geht also tatsächlich nicht.

Harald K. schrieb:
> Schickes Projekt, das gehört definitiv nach "Projekte & Code" und das
> hast Du auch schön detailliert aufgearbeitet - Schaltplan,
> Aufbauhinweise, Links -- richtig gut! Großes Lob!

:-) Vielen Dank fürs Lob

von Ralph S. (jjflash)


Angehängte Dateien:

Lesenswert?

leider haben sich im PDF kleinere Fehler eingeschlichen (vorzugsweise 
eines fehlenden "make flash" beim Flashen des Programmers) und deshalb 
hier die erste bereinigte Version des PDF's

Sorry

von Harald K. (kirnbichler)


Lesenswert?

Ralph S. schrieb:
> Der WCH-LinkE ist nicht nur ein Debuginterface, er hat zudem noch eine
> sehr praktische USB2UART-Bridge mit integriert.

Sieh mal, was im letzten von Dir zitierten Satz von mir drinsteht:

Harald K. schrieb:
> Obendrein stellt das Ding auch noch eine serielle Schnittstelle
> zur Verfügung.

Aber schön, wenn wir uns da einig sind.

von Ralph S. (jjflash)


Lesenswert?

Harald K. schrieb:
> Sieh mal, was im letzten von Dir zitierten Satz von mir drinsteht:
>
> Harald K. schrieb:
>> Obendrein stellt das Ding auch noch eine serielle Schnittstelle
>> zur Verfügung.
>
> Aber schön, wenn wir uns da einig sind.

:-) sorry, das hatte ich überlesen => wer lesen kann ist klar im Vorteil 
(das ging jetzt an mich selbst)

von F. P. (fail)


Lesenswert?

Ralph S. schrieb:
> Warum nur müssen irgendwelche Postings immer in der Art ausufern: Mein
> Chip ist aber besser als deiner und die Programmiersprache taugt nichts,
> nimm lieber die andere.

Darum ging es mir doch gar nicht! Ich will hier keinen angreifen. Du 
schreibst mehrfach von einem "Selbstbauprogrammer für einen CH32V003" 
nicht von einem "Selbstbauprogrammer mit einem CH32V003". Wenn man eh 
Chips für einen Selbstbauprogrammer kaufen muß, ist ein CH32V203 besser 
als ein CH32V003. Ich schrieb an etwaige Nachbauwillige, nicht an Dich. 
Die Lage ist natürlich eine andere, wenn man schon eine 50er-Rolle 
CH32V003 hat.

Noch besser wäre natürlich ein CH32V305. Kostet etwas mehr, aber damit 
kann man einen WCH-LinkE nachbauen und hat dann auch gleich einen 
Debugger. Die beiden CH217K kann man durch einen mechanischen Umschalter 
ersetzen.

> Das hier ist ein "Getting started" für einen CH32V003 und nicht für
> einen CH32V203.

Genauer: Für zwei CH32V003 und einen Arduino.

> Warum schreibst du nicht, nimm lieber einen STM32F400 (dem gibt es bei
> LCSC wirklich, ich habe ihn hier liegen)

Weil ich kein Polemiker bin.

von Ralph S. (jjflash)


Lesenswert?

Zitat 2:

F. P. schrieb:
> Weil ich kein Polemiker bin.

Zitat 1:

F. P. schrieb:
> "Selbstbauprogrammer für einen CH32V003"
> nicht von einem "Selbstbauprogrammer mit einem CH32V003"

von Vanye R. (vanye_rijan)


Lesenswert?

> schreibst mehrfach von einem "Selbstbauprogrammer für einen CH32V003"
> nicht von einem "Selbstbauprogrammer mit einem CH32V003".

Waere nicht ein Selbstbauprogrammer fuer einen CH32V003 aber mit einem 
Atmel/ST/usw irgendwie klueger? Denn wenn ich schon einen CH32V003 
flashen kann, dann brauch ich den Programmer ja garnicht mehr. :-p

Vanye

von Harald K. (kirnbichler)


Lesenswert?

Vanye R. schrieb:
> Denn wenn ich schon einen CH32V003
> flashen kann, dann brauch ich den Programmer ja garnicht mehr.

Manch einer, der so ausgestattet ist, könnte als Freundschaftsdienst 
so einen Programmieradapter programmieren, um jemandem zu helfen, der 
aus welchen Gründen auch immer noch keinen WCH-LinkE abbekommen hat.

Sowas soll es ja geben.

(Ansonsen hast Du recht, dieses Projekt hat ein deutliches 
Henne-Ei-Problem).

von F. P. (fail)


Lesenswert?

Ralph S. schrieb:
> Zitat 2:
> Zitat 1:

Pedanterie muß nicht Polemik sein.

Das Huhn-und-Ei Problem läßt sich umgehen, indem man einen 
64-Pin-CH32V305 nimmt, den kann man wegen rausgeführtem BOOT0 auch ohne 
vorhandene Firmware über USB programmieren. Ich habe hier einen 
CH32V305RBT6, vielleicht sollte ich mal ausprobieren, ob die 
WCH-LinkE-Firmware darauf läuft.

Übrigens ist der WCH-LinkE im WCH-Store auf AliExpress wieder lieferbar:

https://www.aliexpress.com/item/1005004881582037.html

von Johannes F. (jofe)


Lesenswert?

@jjflash, vielen Dank, werde mir das ganze bei Gelegenheit mal ansehen, 
da ich vorhabe, mich in die CH32 einzuarbeiten.

Weil die so billig sind (und ich nur größere Mengen bei LCSC bestelle, 
damit sich die Versandkosten lohnen), habe ich mir kürzlich bei LCSC mal 
150 Stück CH32V003 im TSSOP-20 bestellt. Da ich so viele ja eigentlich 
auf absehbare Zeit nicht brauchen werde, wäre ich gern bereit, zum 
Selbstkostenpreis welche abzugeben (in 10er-Packungen). Wer Interesse 
hat, kann mir gern ne PN schreiben.

von F. P. (fail)


Lesenswert?

F. P. schrieb:
> Ich habe hier einen
> CH32V305RBT6, vielleicht sollte ich mal ausprobieren, ob die
> WCH-LinkE-Firmware darauf läuft.

Wird länger dauern, denn ich habe nicht den passenden Quarz auf Lager.

von Ralph S. (jjflash)


Lesenswert?

Hm, irgendwie glaube ich, dass ihr das ganze nicht ganz korrekt (oder 
vollständig) gelesen habt.

Wenn man einen Selbstbauprogrammer zusammennagelt hat man natürlich 
immer ein Henne-Ei Problem.

Genau aus diesem Grunde ist die Anleitung etwas länger geworden. Diese 
Anleitung soll helfen, wenn man schlicht die V003 Controller schon 
hat... und sonst auch nichts hat.

Aus diesem Grund wird einem Arduino UNO oder Nano eine 
Programmersoftware aufgespielt und der Arduino ist fortan mein 
Programmer für CH32. Der Haken an einem Arduino basierenden Programmer 
ist, dass er schnarch langsam ist (er braucht ca. 80 Sekunden um den 
gesamten Flash von 16384 Bytes zu flasen - was inakzeptabel ist).

Allerdings kann man ihn genau ein einziges mal dafür verwenden, nachdem 
die Hardware für den Selbstbauprogrammer aufgebaut ist, um genau diesem 
die Programmersoftware aufzuspielen und fortan braucht man dann den 
Arduino-basierenden Programmer nicht mehr (der sich im Übrigen Ardulink 
nennt).

F. P. schrieb:
> Das Huhn-und-Ei Problem läßt sich umgehen, indem man einen
> 64-Pin-CH32V305 nimmt, den kann man wegen rausgeführtem BOOT0 auch ohne
> vorhandene Firmware über USB programmieren.

sofern man zum einen einen CH32V305 hat, diesen aufgebaut hat und man 
dann eine Firmware für CH32V305 hat. Ich hatte das nicht gesucht und 
werde das auch nicht suchen, weil der Programmer mit V003 wirklich gut 
funktioniert. Ob nun die Software des WCH-LinkE im Netz auffindbar ist, 
weiß ich nicht. Welches Hühnerfutter daraum noch zu platzieren ist, weiß 
ich auch nicht.

Vanye R. schrieb:
> Waere nicht ein Selbstbauprogrammer fuer einen CH32V003 aber mit einem
> Atmel/ST/usw irgendwie klueger?

Warum sollte das klüger sein? Mit Atmel gibt es den für ATmega88 bis 
328p und ATtiny2313, nennt sich wie oben genannt ArduLink .. und ist 
schnarch lahm. Ob es etwas für STM32 gibt weiß ich nicht (glaube ich 
allerdings auch nicht). Also, warum sollte es klüger sein, etwas das 
(zufriedenstellend) funktioniert durch etwas zu ersetzen von dem man es 
nicht weiß?

Das Szenario ist/war doch: Ich habe mehrere ch32V003 und wie kann ich 
den mit den Mitteln flashen die ich habe. Meine Mittel waren vor Beginn 
des Projekts: Boards mit USB-Zugang oder virtuellen COM-Ports auf Basis 
von: MCS-51, PIC16, STM8, PFS154, STM32F0, F1, F3, F4 und Atmel AVR.

Ich habe genau 2 Firmware's gefunden, die in der Lage sind, einen CH32 
zu flashen, eben die eine für Atmel und die andere für einen V003. Und 
aus den oben genannten Gründen gab es eben eine Anleitung für den V003 
basierenden Programmer!

Warum muß hier jetzt nach Alternativen gesucht werden. Die einzige 
Alternative die wirklich zählt (und die habe ich gleich auf den ersten 
beiden Seiten beschrieben) ist es, einen originalen WCH-LinkE zu 
benutzen, der - in Einigkeit mit Kirnbichler - zum einen schnell ist, 
natürlich auch ein Debug-Interface hat, zudem eine UART-USB-Bridge und 
außerdem auch noch super preiswert ist. Alle anderen Klimmzüge (auch die 
meinigen bei diesem Projekt) müssen hinterfragt werden, wieviel Sinn die 
machen (und "mein" Selbstbauprogrammer macht dann Sinn, wenn es gerade 
mal wieder keinen WCH-LinkE gibt oder man nicht auf dessen Lieferung 
warten möchte um anzufangen).

Letztendlich: Wenn jemand andere Programmerfirmware (egal für welche 
Plattform) findet als die beiden von mir genannten: postet die hier, das 
würde mich interessieren und wie man die verwenden kann.

Im übrigen, so als Überlegung, welchen Sinn ein Programmer mit V003 noch 
machen könnte: Bei mir ist mit derselben Hardware plus zusätzlich einer 
Resetschaltung ein V003 mit USB-Bootloader am laufen. Dieser Bootloader 
kann natürlich auch die Programmersoftware flashen und so habe ich eine 
Schaltung die überhaupt keinen Programmer benötigt, aber zur Not selbst 
zum Programmer werden kann.

von Ralph S. (jjflash)


Lesenswert?

Johannes F. schrieb:
> @jjflash, vielen Dank, werde mir das ganze bei Gelegenheit mal ansehen,
> da ich vorhabe, mich in die CH32 einzuarbeiten.

In der nächsten Zeit, so hoffe ich, werde ich mich meinen STM32F4 
Projekten widmen, allerdings wird das nächste auf der ToDo-Liste für 
CH32V003 das Routen eines eigenen Evaluation-Boards sein, bei dem dort 
der V003 über einen USB-Bootloader verfügen wird, und entweder als 
normales Board verwendbar ist, oder eben auch als Programmer für weitere 
V003.

Allerdings, wie oben beschrieben, wenn du schon einen WCH-LinkE hast, 
wirst du den Programmer nicht wirklich brauchen, allerdings könnte der 
Bootloader interessant werden.

Außerdem hatte ich gestern abend mit Arduino "gespielt" (entgegen meinen 
Überzeugungen) und habe aus meiner TM16xx-Software eine 
"Arduino-Library" gemacht (an alle: ich weiß, dass das keine Library im 
Sinne von C, C++ ist, Library's ist eine Ansammlung von compilierter 
Software in einer *.a Datei, die mittels -lfoo.a hinzugelinkt wird) ... 
wobei ich zu meinem Erschrecken festgestellt hatte, dass die noch Fehler 
enthalten hat. Das Ergebnis des Spielens mit Arduino und CH32V003 war 
erschreckend und ernüchternd: Während ein einfaches Zählerprogramm in C 
mit CH32FUN und TM1650 nicht ganz 1500 Byte groß wurde, wurde dasselbe 
Programm mit Arduino über 9000 Byte groß. Angesichts der Tatsache dass 
der V003 nur 16384 Flashbytes hat stellt sich die Frage nach dem Sinn 
von V003 und Arduino. Hier werde ich mal nachsehen, ob es evtl. 
effizientere Cores als den von mir benutzten gibt.

Es gibt noch viel zu tun, warten wir's ab!

von Harald K. (kirnbichler)


Lesenswert?

Ralph S. schrieb:
> Aus diesem Grund wird einem Arduino UNO oder Nano eine
> Programmersoftware aufgespielt und der Arduino ist fortan mein
> Programmer für CH32. Der Haken an einem Arduino basierenden Programmer
> ist, dass er schnarch langsam ist (er braucht ca. 80 Sekunden um den
> gesamten Flash von 16384 Bytes zu flasen - was inakzeptabel ist).
>
> Allerdings kann man ihn genau ein einziges mal dafür verwenden, nachdem
> die Hardware für den Selbstbauprogrammer aufgebaut ist, um genau diesem
> die Programmersoftware aufzuspielen und fortan braucht man dann den
> Arduino-basierenden Programmer nicht mehr (der sich im Übrigen Ardulink
> nennt).

Dann hat sich das Henne-Ei-Problem in Luft aufgelöst.

Das wurde aus der ursprünglichen Beschreibung (zumindest mir) nicht so 
ganz klar. Ein Satz wie

"Hier wird einmalig der pröttenlahme Arduino-Programmer genutzt, um dann 
einen viel schnelleren auf Grundlage des CH32V003 zu gewinnen"

vielleicht noch hervorgehoben, in einem eigenen Absatz, hätte mir 
geholfen.

Ja, das steht anders formuliert im Eröffnungsposting, aber das hätte man 
gründlicher lesen müssen (als zumindest ich es getan habe).


Fazit: Ich bleibe bei meinem Lob für das Projekt. Klasse Idee, klasse 
umgesetzt (und bei Problemen muss man halt gründlicher lesen - Asche auf 
mein alterndes Haupt)

: Bearbeitet durch User
von F. P. (fail)


Lesenswert?

Die Original-WCH-LinkE-Firmware für den CH32V305 (u.a.) gibt es hier:

https://github.com/cjacker/wlink-iap/tree/main/firmwares

Die Software zum Flashen des CH32V305 (u.a.) über USB ohne vorhandene 
Firmware ist hier:

https://github.com/ch32-rs/wchisp

Hühnerfutter: 12-MHz-Quarz mit passenden Kondensatoren.

Kompletter Original-Schaltplan mit einigem, was man nicht braucht:

https://www.wch.xx/download/file?id=421

(Bitte xx durch cn ersetzen) Der Schaltplan für den WCH-LinkE ist auf 
der zweiten Seite.

Offen ist, ob die Firmware für den 20-Pin-CH32V305 (der keinen BOOT0-Pin 
hat und daher das Huhn-und-Ei-Problem hat) auch für den 64-Pin-CH32V305 
(mit per BOOT0 aktivierbarem USB-Bootloader) funktioniert.

Das Flashen der Firmware funktioniert, aber das Ding meldet sich nicht 
am USB-Port. Eine mögliche Ursache ist, daß die Firmware den HSE statt 
des HSI für USB verwendet (der HSE hat bei mir die falsche Frequenz). 
Oder daß die beiden Versionen des CH32V305 zu verschieden sind. Werde 
ich herausfinden, sobald ich einen Quarz aufgetrieben habe. Für Taktung 
mit SI5351 bin ich im Moment zu faul.

Ich habe halt ein paar 64-Pin-CH32V305 (samt PCB) da und ein 
Notfall-WCH-LinkE wäre ganz praktisch...

von Ralph S. (jjflash)


Angehängte Dateien:

Lesenswert?

Für die, die es interessiert habe ich den "Arduino-Vergleich" einmal 
gemacht (jener, der mich erschreckt hat):

Die Arduino-Library aus meinem "getting started" im Anhang, die nichts 
anderes ist, als die C-Source Quelldatei in eine class nach C++ 
konvertiert.

Da das eine "Arduino-Library" ist, die außer Bitbanging der Pins die 
Hardware nicht verwendet, ist diese natürlich auch auf einem Arduino UNO 
r3 und auch auf einem UNO r4 (mit Renesas RA4M1 Controller) lauffähig 
und sollte auf jedem anderen System unter Arduino laufen.

Getestet habe ich die Arduino-Library mit TM1650 und TM1637. Ergebnisse 
hier jedoch nur für TM1650.

Hier aber einmal nur der Vergleich der Codegrößen Arduino IDE 18 (und 
ich bin immer mehr entsetzt):

- CH32V003: 9572 Byte (riscv-none-elf-gcc 14.2.0)
- UNO R3 (ATmega328): 2040 Byte (avr-gcc 7.3.0)
- UNO R4 (RA4M1): 52576 Byte (arm-none-eabi-gcc q7-2017, für mich 
absoluter negativ-Wahnsinn)
- STM32F401: 12836 Byte (arm-none-eabi-gcc 13.2.1)
- STM32F103: 12136 Byte      "

Das Programm als C-Programm mit den Funktionen aus denen die 
Arduino-Class erzeugt wurde:

- CH32V003: 1316 Byte (risc-none-elf-gcc 14.2.0)
- ATmega328p: 1712 Byte (AVR-GCC 7.3.0)

Es beschleicht mich einfach nur das Gefühl, dass Arduino einfach nur für 
AVR gemacht ist und alles andere, selbst ein originaler UNO r4, da 
einfach nur irgendwie reingepfriemelt" ist, damit das aus dieser IDE 
heraus funktioniert: Hauptsache Arduino. Im Falle des UNO r4 ist das 
schon der Wahnsinn, aber was soll es, kann man sich sagen: Das Board hat 
ja 256 kByte, da ist das schon noch okay. Für mich einfach nur irre!

von Gerald B. (gerald_b)


Lesenswert?

Der offizelle WCH Shop hat ein interessantes Bundle aus Programmer, 
Evaluation Board und 5x CH32V003 ICs im SOIC Gehäuse. Einziges Manko 
ist, das die 10€ für Choice knapp unterschritten werden :-)

https://de.aliexpress.com/item/1005004895791296.html?

von Christoph M. (mchris)


Lesenswert?

Ralph S. (jjflash)
26.05.2025 08:33
>Es beschleicht mich einfach nur das Gefühl, dass Arduino einfach nur für
>AVR gemacht ist und alles andere,

Vielleicht liegt es an der Toolchain und der Einstellung des Linkers die 
keiner außer für die AVRs richtig optimiert hat. Man müsste mal das 
List-File anschauen, was alles drinnen steckt.

: Bearbeitet durch User
von Ralph S. (jjflash)


Lesenswert?

Christoph M. schrieb:
> Vielleicht liegt es an der Toolchain und der Einstellung des Linkers die
> keiner außer für die AVRs richtig optimiert hat. Man müsste mal das
> List-File anschauen, was alles drinnen steckt.

Ich habe mir die Toolchain von Arduino nicht angesehen (und ich glaube 
auch nicht, dass ich das tun werde). Im Falle von CH32 und ARM F1..F4 
sind die Arduino-Cores ja keine offiziellen Cores und hier hätte man 
sagen können: Okay, das könnte man besser machen (wenn man es besser 
machen könnte).

Zuerst dachte ich, der Core für CH32 erzeugt schon große Binaries, aber 
im Vergleich zu ARM ist das Binary dann eher kleiner.

Im Falle von Arudino UNO r4, was ein originales Board ist und der Core 
von Arduino stammt, dürfte das an sich nicht sein, dass die mit dem Core 
derart große Bionaries erzeugen (weil: Ein originales Arduino-Board mit 
einem originalen Core sollte meines erachtens doch bitte-danke optimiert 
sein). Aber, wie es scheint, ist es das nicht, denn UNO r4 ist ein ARM 
M4 Core und ist so erheblich viel größer als ein STM32F4 (von dem ich 
allerdings nicht wirklich weiß, was dem Binary alles hinzugelinkt worden 
ist).

Prinzipiell wollte ich hier ja in erster Linie für die Arduino-Anhänger 
zeigen, dass eben Arduino auch mit CH32V003 funktioniert.

Einen Core hierfür werde ich garantiert nicht schreiben und auch keinen 
Core zusammenklicken und hierfür dann einen Build-Prozess ableiten.

:-) aber vllt. fühlt sich hierdurch jemand herausgefordert und mag das 
machen?

von Christoph M. (mchris)


Lesenswert?


: Bearbeitet durch User
von Ralph S. (jjflash)


Lesenswert?

Christoph M. schrieb:
> oder
> https://hackaday.com/2024/01/04/ch32-risc-v-mcus-get-official-arduino-support/

Den "official-arduino-support" hatte ich genommen mit githubseiten auf:

https://github.com/openwch/arduino_core_ch32

Den Core von Alexander Mandera hatte ich auch ausprobiert, der hatte 
jedoch mit ein paar Arduinoprogrammen Schwierigkeiten, die zu 
übersetzen. Deshalb ist auch in meinem Script der offizielle Core 
beschrieben.

von Ralph S. (jjflash)


Lesenswert?

Jetzt habe ich mich (lange) hingesetzt gehabt und habe aus der Anleitung 
in Ermangelung eines Adobe Acrobat (oder ein kompatibles) Programm eine 
Webseite aus der Anleitung gemacht.

https://www.jjflash.de/ch32v003/

Außerdem habe ich noch einen Downloadbereich eingerichtet, in dem man 
sich die benötigten Dateien herunterladen kann:

https://www.jjflash.de/ch32v003/downloads/

Sollte jemand ein Programm kennen (vllt. bin ich auch nur zu blind?!?) 
das zum einen kostenfrei und Open-Source ist und ein anklickbares 
Inhaltsverzeichnis für ein PDF erstellen kann, dann würde mich das sehr 
interessieren (und dann hätte ich wohl die Webseite nicht gemacht).

Viel Spaß beim Durchklicken, vllt. werde ich dann dort auch die 
Sourcedateien zum Thema SPI-Grafikdisplays endlich einmal dokumentieren 
(um die ich mich schon sehr lange - Jahre - drücke).l

Spaß gemacht hat das Erstellen der Webseite nicht, aber ich bin froh, 
dass ich das gemacht habe.

Aber auch hier lernt man wieder mal aus seinen Fehlern (oder auch 
nicht): Teile der Webseite waren vom "aussehen her" schon einmal 
vorgegeben und sie waren mit einem HTML-Generator erstellt gewesen. Das, 
was der Generator produziert hat, vor allen in Bezug auf Absätze, war 
wirklich schwierig zu lesen und zum Schluß habe ich das ganze dann doch 
in einem Texteditor gemacht.

Das hätte ich von Anfang an machen sollen, weil ich auf die "Falle 
Generator" doch immer wieder hereinfalle.

Wie dem auch sei: Viel Spaß beim Durchklicken

von Harald K. (kirnbichler)


Lesenswert?

Ich bleibe dabei: Schick!

von Kilo S. (kilo_s)


Lesenswert?

Ich mag solche Seiten!

Kein unnötiger Kram, schnell geladen, lesbar.

Nochmal Danke!
Ich find das echt cool.

von Johannes F. (jofe)


Lesenswert?

Ralph S. schrieb:
> Sollte jemand ein Programm kennen (vllt. bin ich auch nur zu blind?!?)
> das zum einen kostenfrei und Open-Source ist und ein anklickbares
> Inhaltsverzeichnis für ein PDF erstellen kann, dann würde mich das sehr
> interessieren

pdf[La]TeX oder Xe[La]TeX oder Lua[La]TeX in Verbindung mit dem 
hyperref-Package.

von Harald K. (kirnbichler)


Lesenswert?

Ralph S. schrieb:
> Sollte jemand ein Programm kennen (vllt. bin ich auch nur zu blind?!?)
> das zum einen kostenfrei und Open-Source ist und ein anklickbares
> Inhaltsverzeichnis für ein PDF erstellen kann, dann würde mich das sehr
> interessieren (und dann hätte ich wohl die Webseite nicht gemacht).

Das könnte so funktionieren:

Du brauchst https://gitlab.com/pdftk-java/pdftk
und eine Java-Runtime.


1) Metadaten aus vorhandener PDF-Datei extrahieren:
1
pdftk datei.pdf dump_data > metadata.txt

2) Dann 'metadata.txt' bearbeiten und für jedes Bookmark (Eintrag im 
Inhaltsverzeichnis) am Anfang einfügen
1
BookmarkBegin
2
BookmarkTitle: Kapitel 1
3
BookmarkLevel: 1
4
BookmarkPageNumber: 5

Die Seitennummern müssen nicht aufsteigend sortiert sein, wenn man als 
erstten Eintrag die Anhänge haben will, ist das kein Problem.

BookmarkLevel ist die Einrückungsebene.

3) Und dann die geänderten Metadaten wieder in die PDF-Datei einbauen
1
pdftk datei.pdf update_info metadata.txt output datei-neu.pdf

von Ralph S. (jjflash)


Lesenswert?

Harald K. schrieb:
> Das könnte so funktionieren:
>
> Du brauchst https://gitlab.com/pdftk-java/pdftk
> und eine Java-Runtime.
>
> 1) Metadaten aus vorhandener PDF-Datei extrahieren:
> pdftk datei.pdf dump_data > metadata.txt

:-) ... irgendwie hast du wohl gewußt, dass ich als Minimalist, eine 
Java-Runtime nicht installiert hatte (habe ich jetzt gemacht) und auch 
pdftk jetzt mal installiert.

Das ganze muß ich mir ansehen. Natürlich (Asche über mein Haupt) habe 
ich bei der Dokumentenerstellung (mit LibreOffice) keine Metadaten 
eingegeben. Als Übung für mich und für das nächste mal, werde ich da 
aber mal mit Arbeiten. Das was du da schreibst, ist dann die nächste 
Herausforderung für mich. Ich "liebe" dokumentieren (nicht wirklich).

Einen Gruß zur nächtlichen Stunde.

Johannes F. schrieb:
> pdf[La]TeX oder Xe[La]TeX oder Lua[La]TeX in Verbindung mit dem
> hyperref-Package.

Ist eine Weile her, dass ich LaTex verwendet habe.

von Harald K. (kirnbichler)


Lesenswert?

Ralph S. schrieb:
> Dokumentenerstellung (mit LibreOffice)

Ein Minimalist hätte das mit Markdown und einem simplen Texteditor 
gemacht. LibreOffice ist ja nun von Minimalismus doch recht weit 
entfernt ...

von Ralph S. (jjflash)


Lesenswert?

Harald K. schrieb:
> Ein Minimalist hätte das mit Markdown und einem simplen Texteditor
> gemacht. LibreOffice ist ja nun von Minimalismus doch recht weit
> entfernt ...

Na ja, die Texte waren zuerst mit einem Texteditor geschrieben (sogar 
auf der Konsole) und wurden dann ins LibreOffice einkopiert.

:-) mit "Minimalist" meinte ich die Java JRE und JDK die nicht 
installiert waren

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.