Forum: Projekte & Code CH32V003-J4M6: Einfacher Rechteckgenerator 0,5 Hz 20 kHz


von Ralph S. (jjflash)



Lesenswert?

... der wohl einmillionsteundeine Rechteckgenerator oder noch nie war 
blinken so schön wie heute!

###############

Spaß beiseite, da ich am Aufarbeiten von mehreren kleinen und einem 
großem Projekt bin stelle ich hier das einfachste vor, einen Taktgeber, 
den ich für ein anderes Projekt benötigt habe (und doch tatsächlich 
keinen Timer 555 hier habe).

Auch wenn der Aufbau jetzt mit einem 16-Pin Chip realisiert wurde, ist 
er für einen CH32V003-J4M6 gedacht, den ich hier schlicht aus der 
Tatsache heraus verwendet habe, weil ich mir meinen letzten 8-Pin Chip 
zerstört habe. Die Firmware verwendet ausschließlich die Pins, die auch 
auf einem J4M6 vorhanden sind.

Die Software produziert eine Frequenz von 0,5Hz .. 20 kHz in 4 
Frequenzbereichen. Welcher Frequenzbereich aktiv ist, wird über 4 
Leuchtdioden angezeigt. Die Frequenz selbst wird über einen 
Trimmer/Potentiometer eingestellt. Der Trimmer fungiert als 
Spannungsteiler und diese Spannung wird analog vom VH32V003 eingelesen 
und dementsprechend wird eine Frequenz erzeugt.

In Ermangelung genügender GPIO's des 8-Pin Chips wurde die LED Anzeige 
über eine Wired Logik (siehe Schaltplan) realisiert.

Grundsätzlich könnte sich der Rechteckgenerator für Einsteiger eignen, 
weil in der Firmware nachgesehen werden kann, wie man - wenn auch nur 
mittels Polling - eine analoge Spannung einliest und wie man Timer 2 und 
von einen von diesem ausgelösten Interrupt verwenden kann.

Da ich momentan in einer Art "Rausch" bin, kleinere Schaltungen auf ein 
PCB zu setzen um sie auf einem Steckbrett nutzen zu können (siehe Foto: 
sehr kleiner Programmer minichlink kompatibel und Picomon3) wird auch 
dieser Rechteckgenerator auf meiner nächsten PCB Platz finden.

Für denjenigen der sich aus Schaltung oder Firmware etwas entnehmen 
kann: Viel Spaß damit.

Ein Video vom Rechteckgenerator gibt es auch:

https://www.youtube.com/watch?v=6X88YehenaM

von Mi N. (msx)


Lesenswert?

Ralph S. schrieb:
> Grundsätzlich könnte sich der Rechteckgenerator für Einsteiger eignen,

Dann aber bitte nicht mit einem exotischen µC, sondern mit Arduino auf 
ATmega328 (o.ä) oder RP2040 Basis. Gerade bei Letzterem ist die Hardware 
fix und fertig und für wenige Euro zu beschaffen. Einfach USB 
anschließen und loslegen. Im Netz finden sich viele Beispiele, die auch 
Sinus oder beliebige Signalformen erzeugen können.
Schnell mal geStartpaged: 
https://www.instructables.com/Arbitrary-Wave-Generator-With-the-Raspberry-Pi-Pic/

von Harald K. (kirnbichler)


Lesenswert?

Mi N. schrieb:
> Dann aber bitte nicht mit einem exotischen µC, sondern mit Arduino auf
> ATmega328 (o.ä) oder RP2040 Basis.

Warum nicht gleich mit einem Raspbery Pi 5?

von Ralph S. (jjflash)


Lesenswert?

Mi N. schrieb:
> Dann aber bitte nicht mit einem exotischen µC

Die Frage ist, ob ein CH32V003 noch exotisch ist? Für den gibt es 
mittlerweile einige Beispiele und sogar eine Arduino Unterstützung (wenn 
man das mag).

Mi N. schrieb:
> RP2040 Basis. Gerade bei Letzterem ist die Hardware
> fix und fertig und für wenige Euro zu beschaffen.

Wenn man den auf ein eigenes (sehr kleines) PCB setzen möchte ist ein 
RP2040 schon etwas schlecht handbar (löten).

Im Übrigen finde ich den Raspberry Pi pico relativ unhandlich was den 
Upload anbelangt. Die "Lösung" mit einem Programmer für das Steckbrett 
und nur einer singlewire Verbindung zum Controller ist (aus meiner Sicht 
der Dinge) schon nicht schlecht. Demnächst werde ich auch den Programmer 
mit dem 8-Pin Controller fürs Steckbrett veröffentlichen so ich meine 
Dateien alle aufgearbeitet habe.

Zudem: wenn ich nur einen Rechteckgenerator benötige ist das mit Kanonen 
auf Spatzen geschossen. Mit dem CH32V003 beschäftige ich mich 
ursprünglich, weil er einfach nur sehr billig ist.

Außerdem, sieht man von dem nur halb so großen Speicher des v003 ab, ist 
er dem ATmega328 haushoch überlegen (auch wenn manche da andere Meinung 
sind).

Mit Einsteiger meinte ich diejenigen, die in den v003 einsteigen möchten 
oder eingestiegen sind.

Im Übrigen sind im Archiv alle Dateien enthalten, die ein Compilieren 
der Firmware ermöglichen, auch das CH32FUN Framework. Einzig ein 
systemweit verfügbarer riscv-none-elf-gcc Compiler muß verfügbar sein. 
Ein vereinfachtes Makefile, welches einen funktionalen Compiler-, 
Linker- und Flashergang vornimmt ist enthalten. Dieses Makefile sollte 
auch von einem Anfänger durchschaubar sein.

Man hätte auch monieren können, dass das ganze nur unter Linux und nicht 
unter Windows funktioniert.

Mi N. schrieb:
> Im Netz finden sich viele Beispiele, die auch
> Sinus oder beliebige Signalformen erzeugen können.

Wenn ich aber momentan nur einen Rechteck gebraucht habe?

Eine ähnlich kleine Schaltung habe ich für Sinus im Sinn, im Stile von 
"derguteweka"

Beitrag "Sehr einfacher Sinusgenerator, Digitalelektronik Projekt"

als DDS Generator. Letztlich - wenn ich das wirklich realisiere - weiß 
ich noch nicht auf welcher Plattform ich das machen mag. Sicherlich 
nicht wie Weka in Assembler, zumindest nicht auf einem ATtiny13, weil 
ich hier zu wenig Spielraum für Erweiterungen habe. Hier bin ich dann am 
überlegen, ob ich vom DDS dann evtl. weggehe und das mit STM32F072 
realisiere, weil der einen DAC hat oder vllt. dann doch wieder mit 
CH32V003.

Warum mit Hardware X ein "Projekt" Y realisiert wird (Anführungszeichen, 
weil ich das hier schon fast nicht als Projekt bezeichnen mag) sollte 
nicht Bestandteil einer Diskussion des Projektes sein.

von Ralph S. (jjflash)


Lesenswert?

Harald K. schrieb:
> Warum nicht gleich mit einem Raspbery Pi 5?

Ich hätte noch einen Ryzen 9 mit Meilhaus I/O Card im Angebot, 
allerdings müßte ich dann diesen Rechner immer neben den Versuchsaufbau 
schleppen (da wäre dann das Aufstellen des Funktionsgenerators 
einfacher).

:-) :-) :-) außerdem glaube ich, dass das Switchen von I/O's mit einem 
Controller schneller vonstatten geht als mit dem Raspberry

====> dieser Beitrag ist nicht so wirklich ernst gemeint!

von Jens M. (schuchkleisser)


Lesenswert?

Sehr interessant, aber zwei Aber:

1. Die 4. LED ist eigenartig. Ich komm nicht dahinter wie das gehen 
soll, und es fehlt ihr ein Widerstand. Ist die evtl. falschrum 
gezeichnet?
2. Wie programmiert man das Ding? Ein Arduino nano hat einen fertigen 
USB-stecker, der RPi pico auch. Hier brauchts einen Programmer, wie auch 
immer der aussehen muss. Und die IDE. Arduino ist eine Exe. Wie isses 
hier?

von Matthias S. (dachs)


Lesenswert?

Jens M. schrieb:
> 1. Die 4. LED ist eigenartig. Ich komm nicht dahinter wie das gehen
> soll, und es fehlt ihr ein Widerstand. Ist die evtl. falschrum
> gezeichnet?

Die leuchtet über den 1K-Widerstand wenn PC1 und PC2 H sind.

von Jens M. (schuchkleisser)


Lesenswert?

Matthias S. schrieb:
> Die leuchtet über den 1K-Widerstand wenn PC1 und PC2 H sind.

In der gezeigten Polung eben nicht.

: Bearbeitet durch User
von Nemopuk (nemopuk)


Lesenswert?

Matthias S. schrieb:
> Die leuchtet über den 1K-Widerstand wenn PC1 und PC2 H sind.

Dafür ist sie falsch herum gepolt.

von Norbert (der_norbert)


Lesenswert?

Jens M. schrieb:
> 2. Wie programmiert man das Ding? Ein Arduino nano hat einen fertigen
> USB-stecker, der RPi pico auch. Hier brauchts einen Programmer, wie auch
> immer der aussehen muss.

Link-E. Kostet aber deutlich mehr als einen Euro. Fast zwei sogar, 
WIMRE.

> Und die IDE.

Braucht man nicht.

> Arduino ist eine Exe. Wie isses hier?

Ne einfache tool-chain. Gut, iss nicht bunt, funktioniert aber wie all 
die traditionellen Werkzeuge an die man sich gewöhnt hat.

von Ralph S. (jjflash)



Lesenswert?

Nemopuk schrieb:
> Matthias S. schrieb:
>> Die leuchtet über den 1K-Widerstand wenn PC1 und PC2 H sind.
>
> Dafür ist sie falsch herum gepolt.

Vielen Dank für die Aufmerksamkeit, ich habe sie tatsächlich falsch im 
Plan gezeichnet. Korrigierter Schaltplan hier im Anhang.

Für diejenigen, die wissen möchten wie das funktioniert hier auch die 
Simulation dazu:

https://www.falstad.com/circuit/circuitjs.html?ctz=CQAgjCAMB0l3BWcMBMcUHYMGZIA4UA2ATmIxAUgoqoQFMBaMMAKABkRs1OEUQUEhHnypUAZgEMANgGc61SO07cALCrz9BINRtEhJs+UkVhCfBGv4oVFS2AxC+AEzqSArlIAuDKXSfgoQJh0FgAnWxsUPA0LG2xeQLB4FgB3CPAHdNNRVJAMbnshfKpsqBZTPmKMou4Ua34QF3cvHz8AvWDIFFzY8EIqKtLFACU8vBtCsYmooO1aWZgEMKn+fBXcGxLkipBoksy9q0jG1wkPb19-CA7YLtyMcbmBx42y-we4yBscIXi+Z1O5xY70eKjgeWwQh0DSaZy8wOUVD+nEIGleAOangRXCo0MhGjBVAxcKxaXxTxRaK+ZR25Mm5Lqx1h51aVwWt26ozpmTpMz0YIUQWgS3C5PUSNR6S2cFyDPq5NeigA5pT0uSEJkcmTJYTVeKymTuMjesjFGkTQkqqbZap1No8Li7Wb7Y6CQ6+lqXR6sv0DStJh9VrpcvroT9tE77i9qXguJxqc7Y3xXknqn7Dozdu79cqs7j3YcNUJPanJodJs6rZbIcIygAPbRgYggQjYXaQZuEKH8GwAEQAlgB7FwAHRkKX7oT8Y5QY4AXm4xyox2wAKK9hi9ugAY2HdFCPUsmaqmedvUz5+i9aOiP4xCRKDbkRsAEkAHJjhhjgCCLAbdSQFRiAgFBgO0YgbGfEB30-McACEWCAA

Jens M. schrieb:
> 2. Wie programmiert man das Ding? Ein Arduino nano hat einen fertigen
> USB-stecker, der RPi pico auch. Hier brauchts einen Programmer, wie auch
> immer der aussehen muss. Und die IDE. Arduino ist eine Exe. Wie isses
> hier?

Man muß das ganze nicht immer als fertige Platine sehen, bei dem man 
einfach nur in eine Schaltung ein USB-Kabel einsteckt. Ein Arduino nano 
ist nichts weiteres als (in der klassischen Variante) ein ATmega328 mit 
Bootloader-Firmware und einer USB2UART Bridge. Wenn Du einen ATmega ohne 
das Board programmieren möchtest, benötigst du auch dort einen 
Programmer.

Das gleiche gilt hier für den CH32V003 auch.

Im Thread

Beitrag "CH32V003: Selbstbauprogrammer und "Getting started""

habe ich mal die grundsätzlichen Schritte in einem Projekt 
zusammengefasst, um mit einem CH32V003 Schaltungen aufbauen zu können 
und auch gleich eine Schaltung für einen Programmer, dort sogar auf 
Lochrasterplatine, mit vorgestellt.

Das ganze basiert auf einem Framework namens CH32FUN, welches über die 
Maßen schlank ist. So schlank, dass man bei einer Veröfftlichung (z.Bsp. 
hier) das gesamte Framework mit anhängen kann, da es in einem Archiv 
noch nicht einmal 300 kByte benötigt.

Etwas mehr Infos kannst du auf meiner Webseite finden (die wohl immer im 
Aufbau befindlich bleiben wird, ich aber dennoch bemüht bin die zu 
erweitern):

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

In naher Zukunft (so hoffe ich doch) wird auch der Programmer für das 
Steckbrett vorgestellt und in das Archiv mit integriert werden. Das 
ganze gibt es für mich auch schon auf einer PCB, die ich "Eval-Toys" 
genannt habe.

Auf dieser PCB findet man den kleinen Programmer dieses Projektes, sowie 
ein, in den Dimensionen etwas größeres Board, welches entweder selbst 
als Programmer dienen kann, oder eben im Steckbrett als Controller 
verwendet werden kann. Dieses verwendet grundsätzlich V-USB (wie es bsp. 
auch für einen AVR-Programmer namens USBASP oder auch TINYUSB) gemacht 
worden ist. Nachteil hier (bei Verwendung als Board, nicht als 
Programmer) ist, dass vor einem Upload in den Controller eine Taste 
gedrückt werden muß und der Upload innerhalb 2 Sekunden erfolgen muß.

Ein weiteres Board hat eine USB2Uart Bridge mit auf der Platine, so dass 
das ganze grundsätzlich wie ein Arduino-Nano funktioniert. Leider nur 
eben nicht so schnell wie das V-USB. Dafür benötigt es kein händisches 
aktivieren des Bootmode.

Grundsätzlich auf dieser PCB ist dann noch, der ebenfalls hier 
vorgestellte Picomon3, eine USB2UART-Bridge mit CH340N sowie kleine 
Platinchen für Leuchtdiodenaufbau.

Ich stelle das mal hier ein, auch wenn ich das später, wenn alles 
aufgearbeitet ist (Dokumentation und Säuberung der Software) dann in die 
entsprechenden Threads gestellt werden soll.

Die hier im Anhang befindlichen Gerberfiles können im Übrigen so wie sie 
sind der Fa. JLCPCB zugesendet werden und die werden klaglos so 
hergestellt.

:-) Der Schaltplan für den Steckbrettprogrammer und den für Picomon3 
gibts hier ja schon.

Relevante Threads hierzu sind:

Beitrag "PicoMon für CH32V003 oder STM32F0xx"

Beitrag "CH32V003: Selbstbauprogrammer und "Getting started""

Beitrag "CH32V003: serieller Bootloader"

(wobei die gezeigte Schaltung für den Bootloader noch ein paar "Macken" 
hatte, die mittlerweile behoben sind).

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.