RISC-V/README.md
2024-03-05 14:52:55 +01:00

1.7 KiB

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