.
Moderátori: psichac, Moderátori
-
Dumitru
- 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
Ahojte keď si kúpim od WCH ch32x035 + programátor + MounRiver Studio(MRS) bude mi fungovať aj debug ? neprekvapí ma nič ? 
0
-
Dumitru
- 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
Aha super ďakujem som nevedel že je ich viac typov
dám si nato pozor 
Geniálne
Keď to chceš na pokusy s USB-C PD, odporúčam tento modul:
https://vi.aliexpress.com/item/10050069 ... pt=glo2vnm
Geniálne
0
-
Dumitru
- 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
Ahojte nerobili ste na 0x35 z touchkey ?
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 
0
-
Dumitru
- 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
Ak to pomože 
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.
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);
}
}
- Prílohy
-
- touch_button.pdf
- (128.75 KiB) 99 stiahnutí
0
-
Dumitru
- 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
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.
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.
0
-
Dumitru
- 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
ď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
Písal som dnes aj na technickú podporu WCH ale predpokladám že sa mi neozvú
teraz môžem 100ks pcb hodiť do koša 
Tie parametre by som ani nepovedal že nejako specificky sa nastavuju v podstate
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
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 ...
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.
Písal som dnes aj na technickú podporu WCH ale predpokladám že sa mi neozvú
Asi ja mam len takú karmu
Tie parametre by som ani nepovedal že nejako specificky sa nastavuju v podstate
Kód: Vybrať všetko
TKey1->RDATAR = 0x12; //Discharging Time
Kód: Vybrať všetko
TKey1->IDATAR1 = 0x31; //Charging Time
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
-
Dumitru
- 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
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é ...
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
Musím vymyslieť niečo iné ...
0
Re: WCH32v003 RISC-V MCU
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

- 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
Coplanarna zem môže ale nemusí sa použiť dokonca znižuje citlivosť ale zvyšuje imúnnosť voči rušeniu
Rozliata zem v niektorej vrstve tiež zníži citlivosť preto sa používa ako kompromis hatched 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
Rozliata zem v niektorej vrstve tiež zníži citlivosť preto sa používa ako kompromis hatched 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
Re: WCH32v003 RISC-V MCU
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....
Predpokladam ze skonci na tp223 a ktomu uP....
0
-
Dumitru
- 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
Ja zase pre x035 musím prácne zisťovať z ich knižníc ako vlastne nastaviť registre
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
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á
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.
Z Datasheetu pre x035 zase nie každý port dôkaze chodiť do 50Mhz
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
ale v knižnice sa to nastavuje len cez registre BSHR BCR
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
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
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 isto pre MODE -> Output mode, staví sú 01 10 11 ale čo to znamená
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;
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
ale v knižnice sa to nastavuje len cez registre BSHR BCR
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);
}
}
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;
Ale aspoň že to nakoniec nejako funguje keď sa človek tým prehryzie
0

2


