Wie hier Beitrag "Re: CH32V003 - Experimente mit dem Zehn Cent-Mikrocontroller" bereits angekündigt wurde eine Platine für die CH32V003F4P6 Mikrocontroller von WCH designed und gefertigt. Es wurden nun einige Platinen bestückt und erfolgreich getestet. Darum wird dieses kleine Projekt hier nun vorgestellt. Die Platine enthält: * Einen 8-Bit Port-Expander mit einem HC595, der wiederum mit weiteren Exemplaren in Reihe erweitert werden kann (Rückseite der Platine) * Einen einfachen Anschluß (linke 16-polige Pin-Reihe) für ein LCD-Display (z.B. 16x2 Zeichen), der direkt mit dem Port-Expander verbunden ist (und kompatibel zu diesem Adapter ist Beitrag "Re: Pollin Display HB10401") siehe Bilder * Einen einfachen Anschluß für 4 Taster, ohne das der Datenbus von dem LCD-Display blockiert werden kann (benötigt nur einen weiteren Eingang von der MCU zusätzlich) * Ein EEPROM, z.B. AT24C128, mit dem u.a. der Speicher für Konfigurationsdaten und Texte erweitert werden kann * Ein 16-Bit Dual DAC (PT8211) der ebenfalls am SPI-Bus hängt (siehe Bild KCH32-DAC-hinten.jpg) * Drei zusätzliche 8-Bit PWM-Kanäle über einen WS2811 mit kleinen Treiber-Mosfets, um direkt größere LED'S oder Motoren ansteuern zu können (siehe Bild KCH32-seite.jpg) * Eine Micro-USB Buchse für die Spannungsversorgung, an der die Datenleitungen wie bei dem USBASP Projekt verwendet werden können (https://www.fischl.de/usbasp/) Der Mikrocontroller wurde hier bereits vorgestellt in Beitrag "CH32V003 - Experimente mit dem Zehn Cent-Mikrocontroller" Beitrag "CH32V003 – Ressourcen und Beschnupperung der HAL" und hat wirklich eine interessante modernere 32-Bit Hardware mit viel Performance zu bieten, so daß nicht nur der Preis sehr attraktiv ist. Unter Debian GNU/Linux konnte erfolgreich das Moun River Studio getestet werden, allerdings funktioniert dort die Programmierung leider nicht. Daher wird lieber auf das Projekt https://github.com/cnlohr/ch32v003fun zurück gegriffen, welches einen viel direkteren Hardware-Zugriff erlaubt und mit den Speicher-Resourcen zudem effizienter umgeht. Die Programmierung funktioniert dort auch in Linux mit minichlink. Bislang wurde vor allem der SPI-Bus und der Port-Expander getestet. Die Aktualisierung des Port-Expander war im Test mit 1444 kHz möglich, was deutlich zeigt, was alles bei einem Systemtakt von 48 MHz möglich ist. Wenn Interesse an solchen Platinen besteht bitte per PN melden. Sämntliche Pads sind größer und für eine Handbestückung ausgelegt. Ein Starter-Kit https://www.aliexpress.com/item/1005004895791296.html sollte bestellt werden, damit der notwendige Programmierer vorhanden ist. Dann sind direkt 5 zusätzliche IC's vorhanden.
:
Bearbeitet durch User
Harald K. schrieb: > Selbst WCH verzichtet darauf und nutzt USB-C. Designe einfach selber ein eigene Platine mit USB-C. :-P Die C-Buchsen sind noch viel teurer und schwieriger zu bestücken. Außerdem benötige ich selber gar keine USB-Buchse, da die Platinen fast immer über die Pin-Header gespeist werden. Deshalb bestücke ich die Buchsen für mich nicht (siehe KCH32-Port.jpg). Diese Buchsen hatte ich zudem noch da und es war der Platz auf der Platine ...
:
Bearbeitet durch User
Der HAL ist für die Programmierung erst einmal gewöhnungsbedürftig und benötigt Experimentierfreude, aber die Anzahl an Beispielen ist schnell wachsend. Es wurde bereits für GPIO eine kleine Library geschrieben die etwas Arduino-Kompatibilität schafft, die erste Version davon wird hier als Zip-Datei direkt mit dem kompilierten Ergebnis beigefügt. Um einen Eindruck zu bekommen - dieses (ältere) Beispiel sieht folgendermaßen aus:
1 | // blink, but with arduino-like HAL |
2 | // Could be defined here, or in the processor defines. |
3 | #define SYSTEM_CORE_CLOCK 48000000 |
4 | |
5 | #include "ch32v003fun.h" |
6 | #include "wiring.h" |
7 | #include <stdio.h> |
8 | |
9 | #define APB_CLOCK SYSTEM_CORE_CLOCK |
10 | |
11 | uint32_t count; |
12 | |
13 | int main() { |
14 | SystemInit48HSI(); |
15 | |
16 | // Enable GPIO ports |
17 | portEnable(port_C); |
18 | portEnable(port_D); |
19 | |
20 | for (int i = pin_C0; i <= pin_C7; i++) { |
21 | pinMode(i, pinMode_O_pushPull); |
22 | } |
23 | |
24 | // GPIO D4 Push-Pull |
25 | pinMode(pin_D4, pinMode_O_pushPull); |
26 | |
27 | while (1) { |
28 | // Turn on pins |
29 | digitalWrite(pin_C0, high); |
30 | digitalWrite(pin_D4, high); |
31 | Delay_Ms(250); |
32 | // Turn off pins |
33 | digitalWrite(pin_C0, low); |
34 | digitalWrite(pin_D4, low); |
35 | Delay_Ms(250); |
36 | for (int i = pin_C0; i <= pin_C7; i++) { |
37 | digitalWrite(i, high); |
38 | Delay_Ms(50); |
39 | } |
40 | for (int i = pin_C7; i >= pin_C0; i--) { |
41 | digitalWrite(i, low); |
42 | Delay_Ms(50); |
43 | } |
44 | Delay_Ms(250); |
45 | count++; |
46 | } |
47 | } |
Mit der aktuellen Bibliothek (#include "ch32v003_GPIO_branchless.h") sieht das erweiterte aktuelle Beispiel so aus: https://github.com/cnlohr/ch32v003fun/blob/master/examples/GPIO/GPIO.c Die Entwicklung ist noch stark im Fluß, ebenso wie für den Compiler riscv64-unknown-elf-gcc.
:
Bearbeitet durch User
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.