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
Und das Block-Diagramm
CH32Vxx - Boards
Interface für Münzautomaten
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.
Programmiert habe ich das MAI-Interface (MünzAutomatenInterface) mit Arduino 1.8.19
Zum Testen habe ich extra einen Testgenerator aufgebaut, welcher auch Pulse ausgibt welche nur 10ms breit sind.
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.
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
Testaufbau
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.
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).
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).
Münz Automaten Interface Testgerät
Habe noch ein Testgerät gebaut
CH32V003 mit Arduino programmieren
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);
}
Anpassungen
sudo geany ~/.arduino15/packages/WCH/hardware/ch32v/1.0.4/variants/CH32V00x/CH32V003F4/variant_CH32V003F4.h
und
sudo geany ~/.arduino15/packages/WCH/hardware/ch32v/1.0.4/system/CH32V00x/USER/system_ch32v00x.c
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
Programmierbeispiel Lichtsensor
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
}