CH32Vxx - Boards

ESP32, CH32V003, RP2040
Antworten
Benutzeravatar
asp
Site Admin
Beiträge: 137
Registriert: 22 Feb 2025, 19:44
Wohnort: Lohn-Ammannsegg
Kontaktdaten:

CH32Vxx - Boards

Beitrag von asp »

Die CH32V-Boards sind extrem günstig, ohne Leiterplatte kostet der Chip nur etwa 10 Rappen. Ein Entwicklerboard kann man zwischen 50 Rappen bis CHF 2.- kaufen. Zum Programmieren eignet sich vor allem MounRiver.

Hier ein Bild von einem CH32V003 Entwicklerboard
CH32V.jpeg
CH32V.jpeg (41.08 KiB) 2200 mal betrachtet
Und das Block-Diagramm
CH32V003-Block.jpg
CH32V003-Block.jpg (64.4 KiB) 2200 mal betrachtet
Benutzeravatar
asp
Site Admin
Beiträge: 137
Registriert: 22 Feb 2025, 19:44
Wohnort: Lohn-Ammannsegg
Kontaktdaten:

Interface für Münzautomaten

Beitrag von asp »

Ein Freund welcher mit Spielautomaten arbeitet hat mich gefragt, ob ich ihm ein Interface für ein MyPos Kreditkartengerät bauen könne.

Er hat das Problem, dass die Impulse, welche vom MyPos kommen asynchron (erster Impuls zu kurz) sind.

Jetzt habe ich Ihm ein Interface mit einem CH32V003 gebaut, welches die Impulse vom MyPos zählt und dann sauber ausgibt, 5Hz (100ms/100ms). So können auch alte Spielautomaten von modernen Kreditkartengeräten bedient werden.

MAI-Test.jpg
MAI-Test.jpg (106.69 KiB) 2151 mal betrachtet
Programmiert habe ich das MAI-Interface (MünzAutomatenInterface) mit Arduino 1.8.19

Code: Alles auswählen

Schema:
-------
                                                                    12VDC
                                                                      |
                  w  |--------------------|                          ---
Pulse_IN ----------- |                    |                          | |
                     |   MC (CH32V003)    |                     Last | |
                     |                    |                          ---
                  r  |                    |                           |      |\
12VDC    ----------- |              ----- | ------------  Pulse_OUT  --------|  Input
                     |               |    |                                  |/
                     |                /   | (Schalter Normaly Open)
                  s  |               |    |
GND      ----------- |              ---   | ------------  GND
                     |                    |
                     |--------------------|


Technische Daten:
-----------------
Power: 5 .. 12VDC
Pulse_IN: 0 .. 12VDC Positive Flanke (Schaltpunkt bei ca 2.5V)
Pulse_OUT: Power MOSFET-Schalter NO (Eingang am Spielgerät 12V PullUp)
           und wird mit dem NO Kontakt jeweils bei jedem Impuls nach GND gezogen)

PS. Der Eingang Pulse_IN ist an einem Optokoppler angeschlossen und Softwaremässig entprellt
Zum Testen habe ich extra einen Testgenerator aufgebaut, welcher auch Pulse ausgibt welche nur 10ms breit sind.
Benutzeravatar
asp
Site Admin
Beiträge: 137
Registriert: 22 Feb 2025, 19:44
Wohnort: Lohn-Ammannsegg
Kontaktdaten:

Testaufbau

Beitrag von asp »

Um meine Entwicklung zu testen habe ich meine Schaltung mit CH32V003 an einer 12V - Speisung (Vorgabe von meinem Freund) angeschlossen und mit einem Taster die Eingangsimpulse simuliert.

MuenzAutomatInterface.jpg
MuenzAutomatInterface.jpg (57.41 KiB) 240 mal betrachtet

Jetzt kann ich mit dem Taster die Eingangsimpulse von MyPOS (Kreditkartengerät) simulieren und mit meinem Natel mit Magnetfeldmessung zählen, ob die Eingangsimpulse am Relais richtig ausgegeben werden (jedes mal wenn Spule aktiv, wird Magnetfeld gemessen).
Benutzeravatar
asp
Site Admin
Beiträge: 137
Registriert: 22 Feb 2025, 19:44
Wohnort: Lohn-Ammannsegg
Kontaktdaten:

Münz Automaten Interface Testgerät

Beitrag von asp »

Habe noch ein Testgerät gebaut
MAI-Test.jpg
MAI-Test.jpg (42 KiB) 216 mal betrachtet
Benutzeravatar
asp
Site Admin
Beiträge: 137
Registriert: 22 Feb 2025, 19:44
Wohnort: Lohn-Ammannsegg
Kontaktdaten:

CH32V003 mit Arduino programmieren

Beitrag von asp »

Code: Alles auswählen

/*
CH32V003F4P6 Core Board – Der leistungsstarke RISC-V Entwicklungsboard für Ihre Projekte

Die CH32V003F4P6 Core Board ist eine leistungsstarke und flexible Entwicklungsplattform, die auf dem CH32V003 Mikrocontroller basiert. 

Mit einem integrierten RISC-V Prozessor und einem praktischen TYPE-C Anschluss bietet diese Entwicklungskarte eine ideale Kombination aus Leistung,
Energieeffizienz und Benutzerfreundlichkeit. Sie ist ideal für Entwickler, Ingenieure und Bastler, die innovative Projekte im Bereich Embedded Systems,
IoT (Internet of Things) und Mikrocontroller-Programmierung umsetzen möchten.

Technische Highlights der CH32V003F4P6 Core Board
- Die CH32V003F4P6 Core Board ist ein Mikrocontroller-Modul, das auf dem CH32V003 Prozessor aufbaut. Dieser Prozessor ist ein RISC-V-basiertes System,
  das auf Open-Source-Architektur basiert und dadurch eine hohe Flexibilität und Skalierbarkeit bietet. Der RISC-V Prozessor ist besonders bei Entwicklern
  beliebt, da er eine moderne, effiziente und leicht anpassbare Architektur bereitstellt.
- Ein weiteres wichtiges Merkmal der CH32V003F4P6 ist der TYPE-C Anschluss. Dieser moderne Anschluss ermöglicht eine einfache und schnelle Verbindung mit
  anderen Geräten, wie z. B. Computern, Ladekabeln oder externen Speichergeräten. Der TYPE-C Anschluss ist nicht nur kompakt, sondern auch universell
  einsetzbar und bietet eine bessere Benutzererfahrung im Vergleich zu herkömmlichen Anschlüssen.

Leistungsmerkmale und Anwendungsbereiche:
Die CH32V003F4P6 Core Board ist mit einer Vielzahl von Funktionen ausgestattet, die sie zu einer vielseitigen Plattform machen. Sie eignet sich hervorragend
für Anwendungen im Bereich:
- IoT (Internet of Things): Aufgrund ihrer Energieeffizienz und ihrer Fähigkeit, mit verschiedenen Sensoren und Aktoren zu kommunizieren, ist die CH32V003F4P6
  Core Board ideal für IoT-Anwendungen.
- Embedded Systems: Sie ist eine perfekte Wahl für Entwickler, die Embedded-Systeme für industrielle Anwendungen, Automatisierung oder Robotik erstellen.
- Bildungs- und Forschungszwecke: Dank ihrer einfachen Programmierbarkeit und der Verfügbarkeit von Entwicklungsressourcen ist die CH32V003F4P6 Core Board
  auch in der Lehre und Forschung einsetzbar.
- Prototyping und DIY-Projekte: Bastler und Hobbyentwickler können die CH32V003F4P6 Core Board nutzen, um ihre Ideen in die Realität umzusetzen.

CH32V003 Schematic – Transparente und benutzerfreundliche Entwicklungsunterstützung

Ein weiterer Vorteil der CH32V003F4P6 Core Board ist die Verfügbarkeit der CH32V003 Schematic. Diese Schaltplan-Dokumentation ist für Entwickler extrem wertvoll,
da sie eine klare Übersicht über die interne Struktur und die Anschlusspunkte des Mikrocontrollers bietet. Mit der CH32V003 Schematic können Entwickler die
B…H32V003F4P6 Core Board ist ein Beispiel für ein Framework Makeover RISC V Mainboard. Dieses Konzept beschreibt eine Plattform, die durch die Integration
moderner Technologien und Architekturen überarbeitet wurde, um eine höhere Leistung, Flexibilität und Skalierbarkeit zu bieten. Das Framework Makeover RISC V
Mainboard ist besonders bei Entwicklern beliebt, die nach einer Plattform suchen, die sowohl leistungsstark als auch einfach anpassbar ist.

Ein weiteres Schlüsselmerkmal ist das Framework Modular Makeover RISC V Mainboard. Dieses Konzept ermöglicht es Entwicklern, Module und Funktionen nach Bedarf
hinzuzufügen oder zu entfernen. Die modulare Struktur macht die CH32V003F4P6 Core Board zu einer äußerst flexiblen Plattform, die sich an verschiedene
Anwendungsfälle anpassen lässt.

Vorteile der CH32V003F4P6 Core Board im Überblick:
- RISC-V Prozessor: Offene Architektur, hohe Effizienz und Skalierbarkeit.
- TYPE-C Anschluss: Moderner, universeller Anschluss für einfache Verbindungen.
- CH32V003 Schematic: Transparente Dokumentation für Entwickler.
- Framework Makeover RISC V Mainboard: Modernisierte Plattform für leistungsstarke Anwendungen.
- Modulares Design: Flexibilität durch modulares Framework Makeover RISC V Mainboard.
- Energieeffizienz: Ideal für batteriebetriebene und mobile Anwendungen.
- Einfache Programmierung: Unterstützung für gängige Entwicklungsplattformen und Tools.

Anwendungsfälle und Projekte mit der CH32V003F4P6 Core Board:
Die CH32V003F4P6 Core Board eignet sich für eine Vielzahl von Projekten. Einige Beispiele sind:
- Smart Home-Systeme: Steuerung von Lampen, Thermostaten oder Sicherheitssystemen.
- Industrielle Automatisierung: Steuerung von Maschinen, Sensoren oder Robotik.
- Wissenschaftliche Geräte: Entwicklung von Messgeräten oder Datenloggern.
- Bildung und Forschung: Unterrichtsmaterialien und Forschungsprojekte im Bereich Mikrocontroller.
- DIY-Projekte: Bastelprojekte wie Roboter, LED-Displays oder drahtlose Kommunikationssysteme.

Warum die CH32V003F4P6 Core Board wählen?
Die CH32V003F4P6 Core Board ist eine leistungsstarke, flexible und benutzerfreundliche Entwicklungsplattform, die auf modernsten Technologien basiert.
Mit dem RISC-V Prozessor, dem TYPE-C Anschluss und der Unterstützung durch die CH32V003 Schematic bietet sie eine hervorragende Kombination aus Leistung
und Einfachheit. Als Framework Makeover RISC V Mainboard und Modular Makeover RISC V Mainboard ist sie zudem äußerst anpassbar und eignet sich für eine
Vielzahl von Anwendungen.

Ob Sie ein professioneller Entwickler, ein Student oder ein Hobbybastler sind – die CH32V003F4P6 Core Board ist die ideale Wahl, um Ihre Projekte auf ein
neues Level zu heben. Mit dieser Entwicklungskarte können Sie kreative Ideen verwirklichen, innovative Lösungen entwickeln und die Zukunft der Technologie
mitgestalten.

Fazit
Die CH32V003F4P6 Core Board ist eine moderne, leistungsstarke und flexible Entwicklungsplattform, die auf dem CH32V003 Mikrocontroller und dem RISC-V
Prozessor basiert. Mit einem TYPE-C Anschluss, der CH32V003 Schematic und der Unterstützung durch ein Framework Makeover RISC V Mainboard ist sie ideal
für eine Vielzahl von Anwendungen. Egal, ob Sie ein professioneller Entwickler oder ein Hobbybastler sind – mit der CH32V003F4P6 Core Board können Sie
Ihre Projekte effizient und kreativ umsetzen.

Code für interne LED (rot): Bitte nicht verwenden da sonst nicht mehr geflasht werden kann

        #include <ch32v00x.h>

        void setup() {
            // Debug-Funktion auf PD1 deaktivieren
            GPIO_PinRemapConfig(GPIO_Remap_SDI_Disable, ENABLE);
            
            // PD1 als Ausgang konfigurieren
            pinMode(PD1, OUTPUT);
        }

        void loop() {
            digitalWrite(PD1, HIGH);   // LED AUS (je nach Logik)
            delay(500);
            digitalWrite(PD1, LOW);    // LED AN
            delay(500);
        }

Von unten:
        ---------------
  GND 22     (USB)     1  GND
  V3V 21               2  V3V
  PD7 20               3  TX
  PD4 19               4  RX
  PD3 18               5  PD3
  PD2 17               6  PA2
  PD1 16               7  PC0
  PD0 15               8  PC1
  PC7 14               9  PC2
  PC6 13               10 PC3
  PC5 12               11 PC4
        ---------------

Von oben:
        ---------------
  GND  1    |     |    22 GND
  V3V  2    | USB |    21 V3V
   TX  3    |     |    20 PD7
   RX  4     -----     19 PD4
  PD3  5               18 PD3
  PA2  6               17 PD2
  PC0  7               16 PD1
  PC1  8               15 PD0
  PC2  9               14 PC7
  PC3 10               13 PC6
  PC4 11               12 PC5
        ---------------
*/

// hier ein einfacher Blinkcode für eine eterne LED

#include <ch32v00x.h>

#define BLINK_LED PD2

void setup() {  
    pinMode(BLINK_LED, OUTPUT);
}

void loop() {
    digitalWrite(BLINK_LED, HIGH);   // LED AUS
    delay(500);
    digitalWrite(BLINK_LED, LOW);    // LED AN
    delay(500);
}
Benutzeravatar
asp
Site Admin
Beiträge: 137
Registriert: 22 Feb 2025, 19:44
Wohnort: Lohn-Ammannsegg
Kontaktdaten:

Anpassungen

Beitrag von asp »

sudo geany ~/.arduino15/packages/WCH/hardware/ch32v/1.0.4/variants/CH32V00x/CH32V003F4/variant_CH32V003F4.h

Code: Alles auswählen

/* ENABLE Peripherals */
#define                         ADC_MODULE_ENABLED
#define                         UART_MODULE_ENABLED
// #define                         SPI_MODULE_ENABLED
#define                         I2C_MODULE_ENABLED

und


sudo geany ~/.arduino15/packages/WCH/hardware/ch32v/1.0.4/system/CH32V00x/USER/system_ch32v00x.c

Code: Alles auswählen

//#define SYSCLK_FREQ_8MHz_HSI    8000000
//#define SYSCLK_FREQ_24MHZ_HSI   HSI_VALUE
#define SYSCLK_FREQ_48MHZ_HSI   48000000
//#define SYSCLK_FREQ_8MHz_HSE    8000000
//#define SYSCLK_FREQ_24MHz_HSE   HSE_VALUE
//#define SYSCLK_FREQ_48MHz_HSE   48000000
Benutzeravatar
asp
Site Admin
Beiträge: 137
Registriert: 22 Feb 2025, 19:44
Wohnort: Lohn-Ammannsegg
Kontaktdaten:

Programmierbeispiel Lichtsensor

Beitrag von asp »

Solarzelle mit Lichtsensor der Sonne nachführen

Code: Alles auswählen

/*
        ---------------
  PD4  1    o o o o    20 PD3
  PD5  2               19 PD2
  PD6  3               18 PD1
  PD7  4      von      17 PC7
  PA1  5      oben     16 PC6
  PA2  6               15 PC5
  GND  7               14 PC4
  PD0  8               13 PC3
  VIN  9               12 PC2
  PC0 10               11 PC1
        ---------------
*/
// ============================================================
// Solar Controller mit ALS-PT19 (PC4) und MOSFET (PC1)
// CH32V003 mit HSI-Takt
// ============================================================

// an PC0 keinen Lichtsensor anschliessen
#define LIGHT_SENSOR   PC4    // ALS-PT19 an PC4
#define SENSOR_EAST    PD2    // Osten (morgens heller)
#define SENSOR_NORTH   PD3    // Norden (abends heller)

#define BATTERY_SWITCH  PC1    // MOSFET-Leistungsschalter
#define STATUS_LED      PC0    // Blaue interne LED für Anzeige

// Optimierte Schwellwerte für PC4
int darkThreshold = 120;      // Unter 120: Dunkelheit
int lightThreshold = 650;     // Über 650: Helligkeit

int  lightLevel = 0;
int  eastLevel = 0;
int  northLevel = 0;
bool batteryConnected = true;

void setup() {
    pinMode(BATTERY_SWITCH, OUTPUT);
    pinMode(STATUS_LED, OUTPUT);
    
    // Initial: Batterie verbunden
    digitalWrite(BATTERY_SWITCH, HIGH);
    digitalWrite(STATUS_LED, HIGH);
    batteryConnected = true;
    
    Serial.begin(115200);
    delay(100);
    Serial.println("Solar Controller gestartet (Sensor an PC4)");
    Serial.print("Schwellwerte: Dunkel < ");
    Serial.print(darkThreshold);
    Serial.print(" | Hell > ");
    Serial.println(lightThreshold);
}

void loop() {
    // Lichtstärke an den drei Lichtsensoren messen
    lightLevel = analogRead(LIGHT_SENSOR); // ALS-PT19 an PC4, schaltet bei Dunkelheit Batterie ab
    eastLevel = analogRead(SENSOR_EAST);  // Osten (morgens heller)
    northLevel = analogRead(SENSOR_NORTH); // Norden (abends heller)
    
    // Debug-Ausgabe
    Serial.print("Licht (PC4): ");
    Serial.print(lightLevel);
    Serial.print(" | Batterie: ");
    Serial.println(batteryConnected ? "VERBUNDEN" : "GETRENNT");

    Serial.print("EAST (PD2): ");
    Serial.println(eastLevel);

    Serial.print("NORTH (PD3): ");
    Serial.println(northLevel);
    Serial.println();
    
    // Steuerlogik mit Hysterese
    if(lightLevel < darkThreshold && batteryConnected) {
        // Es wird dunkel → Batterie trennen
        digitalWrite(BATTERY_SWITCH, LOW);
        digitalWrite(STATUS_LED, LOW);
        batteryConnected = false;
        Serial.println("🌙 DUNKELHEIT -> Batterie getrennt");
    }
    else if(lightLevel > lightThreshold && !batteryConnected) {
        // Es wird hell → Batterie verbinden
        digitalWrite(BATTERY_SWITCH, HIGH);
        digitalWrite(STATUS_LED, HIGH);
        batteryConnected = true;
        Serial.println("🌞 HELLIGKEIT -> Batterie verbunden");
    }
    
    delay(1000);  // 1 Sekunde warten
}
Antworten