.

Všetko čo sa týka mikropočítačov + Sekcia Arduino

Moderátori: psichac, Moderátori

Dumitru
Stály člen
Stály člen
Príspevky: 493
Dátum registrácie: 06 Nov 2011, 22:19
Bydlisko: Dunajská Lužná
Vek: 33
Kontaktovať používateľa:

Re: WCH32v003 RISC-V MCU

Príspevok od používateľa Dumitru » 06 Dec 2024, 13:14

Ahojte keď si kúpim od WCH ch32x035 + programátor + MounRiver Studio(MRS) bude mi fungovať aj debug ? neprekvapí ma nič ? :D
0

Lennox
Stály člen
Stály člen
Príspevky: 452
Dátum registrácie: 12 Sep 2019, 22:51

Re: WCH32v003 RISC-V MCU

Príspevok od používateľa Lennox » 06 Dec 2024, 13:49

.
2
Obrázok 2
Naposledy upravil/-a Lennox v 22 Jan 2026, 09:14, upravené celkom 1 krát.

Dumitru
Stály člen
Stály člen
Príspevky: 493
Dátum registrácie: 06 Nov 2011, 22:19
Bydlisko: Dunajská Lužná
Vek: 33
Kontaktovať používateľa:

Re: WCH32v003 RISC-V MCU

Príspevok od používateľa Dumitru » 06 Dec 2024, 13:53

Aha super ďakujem som nevedel že je ich viac typov :D dám si nato pozor :)

Keď to chceš na pokusy s USB-C PD, odporúčam tento modul:
https://vi.aliexpress.com/item/10050069 ... pt=glo2vnm

Geniálne :applause:
0

backo
Nový člen
Nový člen
Príspevky: 64
Dátum registrácie: 01 Jún 2014, 17:22

Re: WCH32v003 RISC-V MCU

Príspevok od používateľa backo » 06 Dec 2024, 18:12

Dumitru napísal:
06 Dec 2024, 13:14
Ahojte keď si kúpim od WCH ch32x035 + programátor + MounRiver Studio(MRS) bude mi fungovať aj debug ? neprekvapí ma nič ? :D
Mne funguje k spokojnosti Visual Studio Code + platformio + WCHLink-E.
1
Obrázok 1

Lennox
Stály člen
Stály člen
Príspevky: 452
Dátum registrácie: 12 Sep 2019, 22:51

Re: WCH32v003 RISC-V MCU

Príspevok od používateľa Lennox » 29 Dec 2024, 17:00

.
2
Obrázok 2
Naposledy upravil/-a Lennox v 22 Jan 2026, 09:14, upravené celkom 1 krát.

Dumitru
Stály člen
Stály člen
Príspevky: 493
Dátum registrácie: 06 Nov 2011, 22:19
Bydlisko: Dunajská Lužná
Vek: 33
Kontaktovať používateľa:

Re: WCH32v003 RISC-V MCU

Príspevok od používateľa Dumitru » 09 Jan 2025, 09:59

Ahojte nerobili ste na 0x35 z touchkey ? :yawinkle: našiel u nich nejaký príklad ale mne zatial nefunguje podľa očakávania teda vôbec nefunguje ( tým nemyslím že to neviem napáliť do mcu :) ), bližšie som ešte neskúmal. Len akby niekto už s tým mál niektoré skúsenosti :agree:
0

Atlan
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1441
Dátum registrácie: 01 Feb 2008, 00:00
Bydlisko: Kosice okolie

Re: WCH32v003 RISC-V MCU

Príspevok od používateľa Atlan » 09 Jan 2025, 12:41

Fotka plosaku
0

Dumitru
Stály člen
Stály člen
Príspevky: 493
Dátum registrácie: 06 Nov 2011, 22:19
Bydlisko: Dunajská Lužná
Vek: 33
Kontaktovať používateľa:

Re: WCH32v003 RISC-V MCU

Príspevok od používateľa Dumitru » 09 Jan 2025, 16:44

Ak to pomože :)

Kód: Vybrať všetko

/********************************** (C) COPYRIGHT *******************************
 * File Name          : main.c
 * Author             : WCH
 * Version            : V1.0.0
 * Date               : 2023/04/06
 * Description        : Main program body.
 *********************************************************************************
 * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd.
 * Attention: This software (modified or not) and binary are used for
 * microcontroller manufactured by Nanjing Qinheng Microelectronics.
 *******************************************************************************/

/*
 *@Note
 *Touchkey detection routine:
 *This example demonstrates channel 2 (PA2), which is a Touchkey application.
 *
 */

#include "debug.h"
#include <stdio.h>

/* Global define */

/*********************************************************************
 * @fn      Touch_Key_Init
 *
 * @brief   Initializes Touch Key collection.
 *
 * @return  none
 */
void Touch_Key_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure={0};
    ADC_InitTypeDef ADC_InitStructure={0};

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE );

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    ADC_CLKConfig(ADC1, ADC_CLK_Div6);

    ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
    ADC_InitStructure.ADC_ScanConvMode = DISABLE;
    ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
    ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
    ADC_InitStructure.ADC_NbrOfChannel = 1;
    ADC_Init(ADC1, &ADC_InitStructure);

    ADC_Cmd(ADC1, ENABLE);
    TKey1->CTLR1 |= (1<<24);     // Enable TouchKey
}

/*********************************************************************
 * @fn      Touch_Key_Adc
 *
 * @brief   Returns ADCx conversion result data.
 *
 * @param   ch - ADC channel.
 *            ADC_Channel_0 - ADC Channel0 selected.
 *            ADC_Channel_1 - ADC Channel1 selected.
 *            ADC_Channel_2 - ADC Channel2 selected.
 *            ADC_Channel_3 - ADC Channel3 selected.
 *            ADC_Channel_4 - ADC Channel4 selected.
 *            ADC_Channel_5 - ADC Channel5 selected.
 *            ADC_Channel_6 - ADC Channel6 selected.
 *            ADC_Channel_7 - ADC Channel7 selected.
 *            ADC_Channel_8 - ADC Channel8 selected.
 *            ADC_Channel_9 - ADC Channel9 selected.
 *            ADC_Channel_10 - ADC Channel10 selected.
 *            ADC_Channel_11 - ADC Channel11 selected.
 *            ADC_Channel_12 - ADC Channel12 selected.
 *            ADC_Channel_13 - ADC Channel13 selected.
 *            ADC_Channel_14 - ADC Channel14 selected.
 *            ADC_Channel_15 - ADC Channel15 selected.
 *
 * @return  val - The Data conversion value.
 */
u16 Touch_Key_Adc(u8 ch)
{
  ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_11Cycles );
  TKey1->IDATAR1 = 0x80;//Charging Time
  TKey1->RDATAR = 0x08;//Discharging Time
  while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));
  return (uint16_t) TKey1->RDATAR;

}

/*********************************************************************
 * @fn      main
 *
 * @brief   Main program.
 *
 * @return  none
 */
uint16_t ADC_val;
int main(void)
{


    SystemCoreClockUpdate();
    Delay_Init();
   // USART_Printf_Init(115200);

   // printf("SystemClk:%d\r\n",SystemCoreClock);
   // printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() );

    Touch_Key_Init();
    while(1)
    {

        ADC_val = Touch_Key_Adc(ADC_Channel_6);
     //  printf("TouckKey Value:%d\r\n",ADC_val);
        Delay_Ms(500);
    }
}
kód mam priamo od wch chcel som len otestovať funkčnosť , tak som len zmenil kanál ADC inak som nič neupravoval. Ale adc hodnota sa mení len pri fyzickom kontakte s pružinku ak použijem izolant trebárs aj papier hodnota adc ostáva konštantná ... pôjdem pozrieť Reference Manual.
Prílohy
1.jpg
2.jpg
touch_button.pdf
(128.75 KiB) 99 stiahnutí
0

Dumitru
Stály člen
Stály člen
Príspevky: 493
Dátum registrácie: 06 Nov 2011, 22:19
Bydlisko: Dunajská Lužná
Vek: 33
Kontaktovať používateľa:

Re: WCH32v003 RISC-V MCU

Príspevok od používateľa Dumitru » 10 Jan 2025, 13:58

Po prečítaní RM som nastavil tie časove konštanty pre vybitie a nabitie kapacity tlačidla.

A dosiahol som tieto výsledky
sem napíšem len rozdiel medzi zatlačením a nezatlačením tlačidlom vo voltoch

priamy dotyk 1.5V
cez A4 - 200mV
cez 8mm sklo 50mV

Vôbec to neviem s ničím porovnať a ani neviem aké výsledky by som mal očakávať ale osobne nie som s výsledkom zatiaľ spokojný , najme tých 50mV cez sklo

na samotnej pcb mi nepríde že by som mohol niečo radikálne vylepšiť pripadne žeby som niečo pri návrhu úplne domrvil.
image.png
0

Lennox
Stály člen
Stály člen
Príspevky: 452
Dátum registrácie: 12 Sep 2019, 22:51

Re: WCH32v003 RISC-V MCU

Príspevok od používateľa Lennox » 11 Jan 2025, 14:48

.
1
Obrázok 1
Naposledy upravil/-a Lennox v 22 Jan 2026, 09:14, upravené celkom 1 krát.

Dumitru
Stály člen
Stály člen
Príspevky: 493
Dátum registrácie: 06 Nov 2011, 22:19
Bydlisko: Dunajská Lužná
Vek: 33
Kontaktovať používateľa:

Re: WCH32v003 RISC-V MCU

Príspevok od používateľa Dumitru » 11 Jan 2025, 16:14

ďakujem že si to odskúšal a potvrdil výsledky , ja som na overenie čí chyba nie je niekde v pružinke pripadne v návrhu tej dotykovej plôšky nadrotoval som tam TTP233-HA6 a tam to fungovalo cez 8mm sklo bez žiadnych problém dokonca som musel mu pomocou kondenzátora na 18p znížiť citlivosť , vo vzduchu samotný prst detekovalo pri najvyššej citlivosti tak 1cm od pružinky ..... škoda že nevidím hodnoty ktoré to TTP meria
20250111_123730 (1).jpg
Písal som dnes aj na technickú podporu WCH ale predpokladám že sa mi neozvú
Lennox napísal:
06 Dec 2024, 13:49
Naopak, prekvapí Ťa bezproblémová funkčnosť.
Asi ja mam len takú karmu :D teraz môžem 100ks pcb hodiť do koša :D


Tie parametre by som ani nepovedal že nejako specificky sa nastavuju v podstate

Kód: Vybrať všetko

TKey1->RDATAR =  0x12;   //Discharging Time
je potrebná taká hodnota aby sa kapacita spoľahlivo vybila na nulu predpokladám že čím dlhšie tým lepšie akurát bude snímanie pomalšie. Nikde nie je napísané ako to vybíja čí to len uzemni ten pin alebo cez nejaký prúdový zdroj

Kód: Vybrať všetko

TKey1->IDATAR1 = 0x31;  //Charging Time
je potrebná taká hodnota aby sa to nabilo ja som to nabil vždy na 3,5V platí to iste vôbec netuším ako to nabíja akým prúdom ...

Kód: Vybrať všetko

u16 Touch_Cal_Adc(const uint8_t ch, uint8_t charge_time )
{
  ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_11Cycles );
  TKey1->IDATAR1 = charge_time;//Charging Time
  TKey1->RDATAR = 127;//Discharging Time
  while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));
  return (uint16_t) TKey1->RDATAR;

}

    // calibration increment charge time
    for (uint8_t i = 0; i < 255; i++)
    {
        ADC_cal_value = Touch_Cal_Adc(ADC_Channel_6, i);

        if (ADC_cal_value >= 3000)
        {
            charge_time = i;
            break;
        }

    }

Potom pri dotyku sa kapacita zväčší a teda by sa malo nabiť na menej ako 3.5V a nameraný rozdiel 50mV mi príde naozaj veľmi malý na spoľahlivú detekciu.
0

Lennox
Stály člen
Stály člen
Príspevky: 452
Dátum registrácie: 12 Sep 2019, 22:51

Re: WCH32v003 RISC-V MCU

Príspevok od používateľa Lennox » 11 Jan 2025, 17:43

.
0
Naposledy upravil/-a Lennox v 22 Jan 2026, 09:14, upravené celkom 1 krát.

Dumitru
Stály člen
Stály člen
Príspevky: 493
Dátum registrácie: 06 Nov 2011, 22:19
Bydlisko: Dunajská Lužná
Vek: 33
Kontaktovať používateľa:

Re: WCH32v003 RISC-V MCU

Príspevok od používateľa Dumitru » 11 Jan 2025, 18:20

To nevadí že by to bolo citlivé by sa multiplexovali a pri meraní by všetky kanály okrem meraného prepli na logickú jednotku :) bližšie info tu strana 20 :)

Je to pre kamaráta projekt nebudem zverejňovať , jedna sa len o to že potrebuje ich zapojiť viac ks na jednu zbernicu a nech to reaguje za sklom, a dohodil som tam aj podsvietenie :) ktoré by sa malo nastavovať cez I2C ako aj citlivosť ...

Musím vymyslieť niečo iné ... :)
0

Atlan
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1441
Dátum registrácie: 01 Feb 2008, 00:00
Bydlisko: Kosice okolie

Re: WCH32v003 RISC-V MCU

Príspevok od používateľa Atlan » 11 Jan 2025, 18:29

Ten plosak je zly. Dotykova plocha by mala mat ohranicenie s gnd s spravnou medzerou. Pod dotykovou plochou nesmu ist cesty, teoreticky by mohli ked tam vlozis 3 vrstvu gnd. Tahat popod to i2c alebo inu zbernicu zabudni. Aspon taka je skusenost s niecim takym ako TP223 res viac kanalove integrace tohto typu.
0

Dumitru
Stály člen
Stály člen
Príspevky: 493
Dátum registrácie: 06 Nov 2011, 22:19
Bydlisko: Dunajská Lužná
Vek: 33
Kontaktovať používateľa:

Re: WCH32v003 RISC-V MCU

Príspevok od používateľa Dumitru » 11 Jan 2025, 19:00

Coplanarna zem môže ale nemusí sa použiť dokonca znižuje citlivosť ale zvyšuje imúnnosť voči rušeniu
image.png
Rozliata zem v niektorej vrstve tiež zníži citlivosť preto sa používa ako kompromis hatched
image.png
I2C som ešte nepoužil preto to nato nemá vplyv, a myslím si ze 0,2mm cestička dĺžky par mm pod 1.6mm FR4 nebude to mať vplyv ... ak by sa to aj prejavilo rozliať tam v ďalšej verzie zem nebude problem


Riešime tu hlavne nedostatok citlivosti vaše poznámky su na mieste ale slúžia len na ochranu voči rušeniu ale k zvýšeniu citlivosti neprispevaju
0

Atlan
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1441
Dátum registrácie: 01 Feb 2008, 00:00
Bydlisko: Kosice okolie

Re: WCH32v003 RISC-V MCU

Príspevok od používateľa Atlan » 11 Jan 2025, 20:49

Urobit plosak potiahnut cesticku mimo integrac a moze skusat. Ked tam bude mat rusenie, to tiez znizuje citlivost. Navyse blízkost i2c kludne by mohol mat falosne dotyky.

Predpokladam ze skonci na tp223 a ktomu uP....
0

Lennox
Stály člen
Stály člen
Príspevky: 452
Dátum registrácie: 12 Sep 2019, 22:51

Re: WCH32v003 RISC-V MCU

Príspevok od používateľa Lennox » 22 Jan 2025, 22:28

.
1
Obrázok 1
Naposledy upravil/-a Lennox v 22 Jan 2026, 09:15, upravené celkom 2 krát.

Lennox
Stály člen
Stály člen
Príspevky: 452
Dátum registrácie: 12 Sep 2019, 22:51

Re: WCH32v003 RISC-V MCU

Príspevok od používateľa Lennox » 31 Jan 2025, 16:07

.
1
Obrázok 1
Naposledy upravil/-a Lennox v 22 Jan 2026, 09:15, upravené celkom 1 krát.

Dumitru
Stály člen
Stály člen
Príspevky: 493
Dátum registrácie: 06 Nov 2011, 22:19
Bydlisko: Dunajská Lužná
Vek: 33
Kontaktovať používateľa:

Re: WCH32v003 RISC-V MCU

Príspevok od používateľa Dumitru » 03 Feb 2025, 09:18

Ja zase pre x035 musím prácne zisťovať z ich knižníc ako vlastne nastaviť registre :D
image.png
kým pre CNF -> Input mode si dali námahu popísať všetky staví tak pre CNF -> Output mode je len 00 a 10 ale či sú stavy 01 a 11 Reserved ... napríklad u V003 sú pekne popísane

Každopádne ani v knižnice nie sú popísane

Kód: Vybrať všetko

/* Configuration Mode enumeration */
typedef enum
{
    GPIO_Mode_AIN = 0x0,
    GPIO_Mode_IN_FLOATING = 0x04,
    GPIO_Mode_IPD = 0x28,   /* Only PA0--PA15 and PC16--PC17 support input pull-down */
    GPIO_Mode_IPU = 0x48,
    GPIO_Mode_Out_PP = 0x10,
    GPIO_Mode_AF_PP = 0x18
} GPIOMode_TypeDef;
tak predpokladám že možnosti ako Open Drain sa nepodporujú a bude treba ich simulovať ako na avr pushpull->low/input->float

tak isto pre MODE -> Output mode, staví sú 01 10 11 ale čo to znamená :D :pain: u V003 sa tím menia rýchlosti portu
z knižnice pre x035 som zistil že sa to nastavuje vždy len ako 01 -> 50Mhz.

Kód: Vybrať všetko

/* Output Maximum frequency selection */
typedef enum
{
    GPIO_Speed_50MHz = 1,
} GPIOSpeed_TypeDef;
Z Datasheetu pre x035 zase nie každý port dôkaze chodiť do 50Mhz
image.png
Ideme ďalej register OUTDR ma možnosť Read/Write z popisu by človek očakával že ak tam zapíše 1 ma pull up ak tam zapíše 0 ma pull down

image.png
ale v knižnice sa to nastavuje len cez registre BSHR BCR :D

Kód: Vybrať všetko

                if(GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPD)
                {
                    GPIOx->BCR = (((uint32_t)0x01) << pinpos);
                }
                else
                {
                    if(GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPU)
                    {
                        GPIOx->BSHR = (((uint32_t)0x01) << pinpos);
                    }
                }
image.png

Inak aj BSHR aj BCR majú rovnaký BRy - bit reset som zvedaví ci majú rovnakú funkciu len BCR vie vynulovať až do pinu 23 a BSHR len do pinu 15.

Asi len preklep ale napríklad INDR je v Reference Manualy zadefinovaný ako Read Only v knižnice zase je Read/Write

Kód: Vybrať všetko

/* IO definitions */
#ifdef __cplusplus
  #define     __I     volatile                /* defines 'read only' permissions */
#else
  #define     __I     volatile const          /* defines 'read only' permissions */
#endif
#define       __O     volatile                /* defines 'write only' permissions */
#define       __IO    volatile                /* defines 'read / write' permissions */

/* General Purpose I/O */
typedef struct
{
    __IO uint32_t CFGLR;
    __IO uint32_t CFGHR;
    __IO uint32_t INDR;
    __IO uint32_t OUTDR;
    __IO uint32_t BSHR;
    __IO uint32_t BCR;
    __IO uint32_t LCKR;
    __IO uint32_t CFGXR;
    __IO uint32_t BSXR;
} GPIO_TypeDef;

Možno aj OUTDR je Read Only a preklep je v reference manualy treba skúsiť.


Ale aspoň že to nakoniec nejako funguje keď sa človek tým prehryzie
0

Lennox
Stály člen
Stály člen
Príspevky: 452
Dátum registrácie: 12 Sep 2019, 22:51

Re: WCH32v003 RISC-V MCU

Príspevok od používateľa Lennox » 03 Feb 2025, 10:10

.
0
Naposledy upravil/-a Lennox v 22 Jan 2026, 09:15, upravené celkom 2 krát.

Napísať odpoveď