Forum: Mikrocontroller und Digitale Elektronik CH32V003F4P6 Breakout Platine mit Port Expander und Extras


von Karsten W. (lsmod)


Angehängte Dateien:

Lesenswert?

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
von Harald K. (kirnbichler)


Lesenswert?

Karsten W. schrieb:
> Eine Micro-USB Buchse

Selbst WCH verzichtet darauf und nutzt USB-C.

von Karsten W. (lsmod)


Lesenswert?

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
von Karsten W. (lsmod)


Angehängte Dateien:

Lesenswert?

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
Noch kein Account? Hier anmelden.