adc | ||
ch32v003 | ||
common | ||
doc | ||
hdo | ||
hello | ||
pwm | ||
serial | ||
stm32f051 | ||
.gitignore | ||
header.patch | ||
LICENSE | ||
README.md |
RISC-V
Po 32-bit jednočipech založených na jádru Cortex-Mx nastal čas vyzkoušet něco nového. CH32V003 od čínské firmy WCH se zdá být dobrá volba. Je to levné, malé, má to podporu open source a snese to 5V napájení.
Základem je projekt https://github.com/cnlohr/ch32v003fun. Pokusil jsem se z toho vybrat jen to, co je nezbytně nutné a přepsat to do C++. Je potřeba prográmek minichlink, který umí flashnout firmware a GDB server.
hello
Základní program, používá GPIO a SysTick v režimu přerušení pro blikání LEDkou.
pwm, adc, serial
DEMO pro základní seznámení s periferiemi.
hdo
Tohle je trochu komplexnější příklad.
Na vstup PC4 přivádíme ze síťového transformátoru napětí cca 0.7-1 V efektivního napětí. Vstup musí být tedy připojen na odporový dělič 1:1, zapojený mezi VCC a GND a trafo k tomuto bodu připojíme přes vhodný kondenzátor, tak, aby střídavé napětí nebylo limitováno.
Firmware z toho Goertzelovým algoritmem vytáhne signál HDO (zde 216.6 Hz) a vyhodnotí jednotlivé pulsy. Velikost pulsu je vypisována na sériový port (115200 Bd) a pokud překročí hodnotu trigger, rozsvítí LED na PD2 (aktivní v L). Dále je pak z pulsů sestaven telegram, opět vypsán sériový port, a pokud se shoduje s povelem uvedeným v konstruktoru Hdo, sepne / rozepne relé na portu PD4 (aktivní v H) podle vysílaného signálu. Celé se to vejde do 3.5 KiB flash a 1 KiB RAM, i v takto malém procesoru tedy zbývá poměrně dost místa na jiné kraviny.
Tvar výpisů je tento:
A1---B---4---- DP: VVZZ ZZZV ZZZZ VVZV
A--3-B--34---- DP: --VV Z-V- -V-V ----
A1---B-------8 DP: VVVZ VZVV ZZZV -VZV
A1---B---45678 DP: ---Z -Z-V Z-Z- -VZV