Jump to content
Sign in to follow this  
tw1911

CubeHAL SPI и LIS3DH

Recommended Posts

Добрые день! Простите если вопрос нубский.

Пытаюсь подружиться с CubeMX и акселерометром.

В общем начну с простого, по обычному SPI, без DMA и прерываний пытаюсь получить байт идентификатора по адресу 0x0F, он по идее должен быть 3F, но почему то код возвращает FF, хотя, если тот же кусок кода написать второй раз следом, получается нормально. Смотрю результат через отладчик. Что то я видимо не понимаю...

#include "main.h"
#include "stm32f4xx_hal.h"

/* USER CODE BEGIN Includes */

/* USER CODE END Includes */

/* Private variables ---------------------------------------------------------*/
SPI_HandleTypeDef hspi1;

/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
void Error_Handler(void);
static void MX_GPIO_Init(void);
static void MX_SPI1_Init(void);

/* USER CODE BEGIN PFP */
/* Private function prototypes -----------------------------------------------*/

/* USER CODE END PFP */

/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

int main(void)
{

  /* USER CODE BEGIN 1 */
	uint8_t SPI_Out[2] = {0x8F,0x00};
	uint8_t SPI_In[8];
  /* USER CODE END 1 */

  /* MCU Configuration----------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_SPI1_Init();

  /* USER CODE BEGIN 2 */
	HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET);
	HAL_SPI_TransmitReceive(&hspi1, SPI_Out, SPI_In, sizeof(SPI_In), 100);
	HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */

  }
  /* USER CODE END 3 */

}

/** System Clock Configuration
*/
void SystemClock_Config(void)
{

  RCC_OscInitTypeDef RCC_OscInitStruct;
  RCC_ClkInitTypeDef RCC_ClkInitStruct;

    /**Configure the main internal regulator output voltage 
    */
  __HAL_RCC_PWR_CLK_ENABLE();

  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

    /**Initializes the CPU, AHB and APB busses clocks 
    */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLM = 8;
  RCC_OscInitStruct.PLL.PLLN = 336;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  RCC_OscInitStruct.PLL.PLLQ = 4;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }

    /**Initializes the CPU, AHB and APB busses clocks 
    */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV4;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
  {
    Error_Handler();
  }

    /**Configure the Systick interrupt time 
    */
  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

    /**Configure the Systick 
    */
  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

  /* SysTick_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}

/* SPI1 init function */
static void MX_SPI1_Init(void)
{

  hspi1.Instance = SPI1;
  hspi1.Init.Mode = SPI_MODE_MASTER;
  hspi1.Init.Direction = SPI_DIRECTION_2LINES;
  hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
  hspi1.Init.CLKPolarity = SPI_POLARITY_HIGH;
  hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;
  hspi1.Init.NSS = SPI_NSS_SOFT;
  hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;
  hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
  hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  hspi1.Init.CRCPolynomial = 10;
  if (HAL_SPI_Init(&hspi1) != HAL_OK)
  {
    Error_Handler();
  }

}

/** Configure pins as 
        * Analog 
        * Input 
        * Output
        * EVENT_OUT
        * EXTI
*/
static void MX_GPIO_Init(void)
{

  GPIO_InitTypeDef GPIO_InitStruct;

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOE_CLK_ENABLE();
  __HAL_RCC_GPIOH_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET);

  /*Configure GPIO pin : PE3 */
  GPIO_InitStruct.Pin = GPIO_PIN_3;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

}

/* USER CODE BEGIN 4 */

/* USER CODE END 4 */

/**
  * @brief  This function is executed in case of error occurrence.
  * @param  None
  * @retval None
  */
void Error_Handler(void)
{
  /* USER CODE BEGIN Error_Handler */
  /* User can add his own implementation to report the HAL error return state */
  while(1) 
  {
  }
  /* USER CODE END Error_Handler */ 
}

#ifdef USE_FULL_ASSERT

/**
   * @brief Reports the name of the source file and the source line number
   * where the assert_param error has occurred.
   * @param file: pointer to the source file name
   * @param line: assert_param error line source number
   * @retval None
   */
void assert_failed(uint8_t* file, uint32_t line)
{
  /* USER CODE BEGIN 6 */
  /* User can add his own implementation to report the file name and line number,
    ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  /* USER CODE END 6 */

}

#endif

/**
  * @}
  */ 

/**
  * @}
*/ 

И еще, я не особо уверен в смысле аргумента timout. Я так понимаю, это время которое он ждет в случае занятости интерфейса?

Share this post


Link to post
Share on other sites
1 час назад, dm37 сказал:

посмотрите, здесь как раз рассматривается работа с акселерометром, правда на SPL (урок 28, а также предыдущие)

https://www.youtube.com/watch?v=hfAdH1Q_zzU&index=28&list=PL8OgDYWys_b6XtOjCejd37aVv0ic24jqV

Да так то он работает. и делал я так же. Просто хочу перевести это все на HAL, а тут грабли. Самое забавное, что с DMA оно вроде бы работает. Но как то странно, почему то CS наоборот работает. Короче надо сначала с базовым SPI разобраться.

Может кто то подскажет какие особенности работы или скинет рабочий пример?

Share this post


Link to post
Share on other sites

Литиевые ХИТы Fanso: устойчивость к высоким температурам

Литиевые ХИТы для широкого круга применений, в том числе в промышленности, соответствуют требованиям современного рынка и способны работать в самых жестких условиях. Основные требования – это длительность хранения и работы, высокая удельная емкость, а также защита от воздействия таких внешних факторов, как температура и влажность. ЛХИТ превосходят по плотности энергии и нормальному напряжению другие элементы автономного питания: 2,9…3,6 В против 1,2…1,5 В

Читать статью...

в строке

HAL_SPI_TransmitReceive(&hspi1, SPI_Out, SPI_In, sizeof(SPI_In), 100);

вы создаёте массив SPI_Out[2] на два байта, а отправляете 8 байт (размерность массива SPI_In[8]). Т.е. отправляете 0x8F, 0x00 и что-то ещё (6 байт мусора)

попробуйте так

HAL_SPI_TransmitReceive(&hspi1, SPI_Out, SPI_In, 2, 100);

 

Share this post


Link to post
Share on other sites

Да так то же не работает. На самом деле, если написать

	HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET);
	HAL_SPI_TransmitReceive(&hspi1, SPI_Out, SPI_In, sizeof(SPI_In), 100);
	HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET);
	HAL_SPI_TransmitReceive(&hspi1, SPI_Out, SPI_In, sizeof(SPI_In), 100);
	HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET);

И поставить бряк в 3 и 6 строки, то в первом бряке будет значение FF,FF, а во втором FF,3F, то есть по идее то что надо. Но какого оно так работает вообще не понятно.

UPDATE

В общем опытным путем установил, что оно работает, если в отдельном CS ON-OFF просто передать на чип хоть что нибудь.

Но все равно, может кто нибудь объяснить что это ???

Edited by tw1911

Share this post


Link to post
Share on other sites

ESP32-DevKitC-VB позволит быстро запустить ваше первое WiFi-приложение

Отладочная плата на основе одного из самых популярных WiFi-модулей Espressif ESP32-WROVER-B позволяет в самые короткие сроки запустить приложение с поддержкой беспроводных стандартов WiFi 802.11b/g/n и Bluetooth Classic/BLE. Ресурсов встроенного в модуль чипа ESP32-D0WD хватит для решения даже очень сложных задач.

Подробнее...

Все правильно. Почитайте внимательно описание акселерометра. Правильный ответ он отсылает после того, как
 примет команду. Во время отправки команды мастер получает то, что было в сдвиговом регистре акселерометра.
 Это обычно FF. Если этот байт не считать, будет ошибка Буфер полный.
 В некоторых описаниях это называется Dummy read.
 Происходит это потому что в SPI сдвиговые регистры мастера и слейва соединяются в кольцо, и передача и прием

и передача идут одновременно.

Share this post


Link to post
Share on other sites

Для того чтобы не получать ерунду по SPI надо почитать мануал и выяснить, что ответ поступает после команды, а не во время. Накой ляд вы тогда используете одновременную передачу с приемом?

Достаточно написать друг за другом два простых оператора HAL_SPI_Transmitt и HAL_SPI_Recieve и все нормально заработает.

HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET);
HAL_SPI_Transmit((&hspi1, SPI_Out, 2, 100);
HAL_SPI_Receive(&hspi1, SPI_In, 8, 100);
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET);

И нафига перед каждой посылкой вычислять размер массивов, если их размер и так известен и не изменяется? (на работу не влияет)

Share this post


Link to post
Share on other sites

Ну это, я передаю сначала адрес, там 8F(0F|1000000) соответственно в ответе будет FF, а когда я толкаю второй байт(00), в ответе должна быть по идее содержимое регистра. Разве не так? Вроде бы рисунок 7 на странице 23 к мануалу акселерометра.

12 часа назад, mail_robot сказал:

И нафига перед каждой посылкой вычислять размер массивов, если их размер и так известен и не изменяется? (на работу не влияет)

Это для того, что бы не менять размер все время и не ошибаться все время.

Share this post


Link to post
Share on other sites

а если предположить что между командой и ответом должна быть пауза? Тогда ваши умозаключения как минимум не верны. Толкать второй байт для приема не обязательно. SPI может прекрасно тактироваться и на приеме мастером.

По поводу размера. Гораздо экономичнее с точки зрения ресурсов было бы обозначить размер массива константой и использовать именно ее и для определения массива и для определения его размера в байтах. Таким образом все ошибки свелись бы к нулю, а все вычисления взял бы на себя только компилятор. Просто совет на будущее

Share this post


Link to post
Share on other sites
55 минут назад, mail_robot сказал:

а если предположить что между командой и ответом должна быть пауза? Тогда ваши умозаключения как минимум не верны. Толкать второй байт для приема не обязательно. SPI может прекрасно тактироваться и на приеме мастером.

В даташите нет ничего про паузу. Рисунок же есть. К том же через SPL все и без паузы работает.

Share this post


Link to post
Share on other sites

Не надо никакой паузы. Надо отослать всего 2 байта: первый байт команда 0x8F, второй - абы какой, без разницы. При передаче первого байта выход LIS3DH в третьем состоянии, при передаче второго байта - датчик выталкивает в процессор нужный байт 0х33.

Вот если сделать так, что будет в приёмном буфере?

HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET);
HAL_SPI_TransmitReceive(&hspi1, SPI_Out, SPI_In, 2, 100);
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET);

 

Share this post


Link to post
Share on other sites

пара нолей. Передастся команда, но одновременно будут приняты 2 пустых байта синхронно с передачей. Эта функция передает и принимает одновременно по одним и тем же тактам. Используется крайне редко

Share this post


Link to post
Share on other sites

Как происходит обмен байтами с датчиком по SPI я уже написал в своём посте.

55 минут назад, mail_robot сказал:

будут приняты 2 пустых байта

Мэйл-робот, Вы, видимо, не в теме, но, извините, у меня совершенно нет времени что-либо объяснять Вам.

Share this post


Link to post
Share on other sites
3 часа назад, mail_robot сказал:

пара нолей. Передастся команда, но одновременно будут приняты 2 пустых байта синхронно с передачей. Эта функция передает и принимает одновременно по одним и тем же тактам. Используется крайне редко

Так то оно так, но в данном конкретном случае как раз первый байт содержит команду, и мне абсолютно без разницы что там содержится в ответе, а вот второй передают что угодно, но принимать в это время должен данные из регистра WHO_AM_I. Но почему то оно не работает так первый раз. А второй раз работает. Причем паузу в разных местах я пробовал вставлять вплоть до секунды, и это не дает никакого результата.

Edited by tw1911

Share this post


Link to post
Share on other sites
5 часов назад, Yurkin2015 сказал:

Не надо никакой паузы. Надо отослать всего 2 байта: первый байт команда 0x8F, второй - абы какой, без разницы. При передаче первого байта выход LIS3DH в третьем состоянии, при передаче второго байта - датчик выталкивает в процессор нужный байт 0х33.

Вот если сделать так, что будет в приёмном буфере?


HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET);
HAL_SPI_TransmitReceive(&hspi1, SPI_Out, SPI_In, 2, 100);
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET);

 

Вот так в приемном буфере будет FF,FF. А вот если написать

HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET);
HAL_SPI_TransmitReceive(&hspi1, SPI_Out, SPI_In, 2, 100);
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET); //в этом местее FF,FF
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET);
HAL_SPI_TransmitReceive(&hspi1, SPI_Out, SPI_In, 2, 100);
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET);//а вот тут FF,3F

Что то совсем непонятное(

Share this post


Link to post
Share on other sites

нашёл подобный вопрос, посмотрите, автор вроде разобрался

http://forum.cxem.net/index.php?/topic/153734-работа-с-hal_spi/

погуглил немного, ваша проблема достаточно распространённая

Edited by dm37

Share this post


Link to post
Share on other sites
15 минут назад, dm37 сказал:

нашёл подобный вопрос, посмотрите, автор вроде разобрался

http://forum.cxem.net/index.php?/topic/153734-работа-с-hal_spi/

погуглил немного, ваша проблема достаточно распространённая

Я не совсем понимаю о какой предделителе идет речь в ссылке. Если об BaudRatePrescaler, то нет, это не мой случай.

В общем пока получается так.

Первый раз отправляем хоть что то. Потом отправляем нормальный адрес и считываем.

Share this post


Link to post
Share on other sites
14 часа назад, Yurkin2015 сказал:

Мэйл-робот, Вы, видимо, не в теме

дорогой мой, человек который в теме. Со стороны мастера передача абы какого байта и прием ничем не отличаются. Но можете тупить свою тупилку дальше

Share this post


Link to post
Share on other sites
8 часов назад, mail_robot сказал:

дорогой мой, человек который в теме. Со стороны мастера передача абы какого байта и прием ничем не отличаются. Но можете тупить свою тупилку дальше

Слушайте, как Вы написали один хрен не работает.

Share this post


Link to post
Share on other sites

добрался до отладочной платы stm32f429i-disco (правда на ней установлен L3GD20)
всё работает.

Сначала проверил при тактировании от встроенного генератора (установки HAL по умолчанию 16 МГц) - работает.
Потом от внешнего кварца 8МГц (разогнал до 180 Мгц) - работает.

проблемы начинаются при неправильном тактировании SPI (hspi1.Init.BaudRatePrescaler)

to tw1911
а какая у вас отладочная плата или какой контроллер?

попробуйте HAL с тактированием по умолчанию (внутренний генератор)

p.s.
у меня cube обновлён до последней версии.
библиотеки для STM32F4 обновлены до версии 1.13.1

Edited by dm37

Share this post


Link to post
Share on other sites

У меня stm32f407i-disco. Могу файлик куба выложить. Но тактирование у меня от внешнего 8Мгц кварца.

Мне правда кажется, что вы не совсем понимаете мою проблему. У меня как бы не совсем передача не работает. У меня она работает просто только после того, как я хоть что нибудь передам на аксель и дерну CS.

	uint8_t SPI_Out[2] = {0x8F,0x00};
	uint8_t SPI_In[2];
	uint8_t dummyAdr = 0xFF;
	HAL_Delay(400);
	
	if(HAL_SPI_GetState(&hspi1)==HAL_SPI_STATE_READY){
		HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET);
		HAL_SPI_Transmit(&hspi1, &dummyAdr, 2, 100);
		HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET);
		HAL_SPI_TransmitReceive(&hspi1, SPI_Out, SPI_In, 2, 100);
		HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET);
	}

К примеру вот такой код отлично работает при любых настройках. Но мне нужна правда. Или место в доках, где написано что оно должно работать именно так, ну что то такое, что объясняет происходящее. А то мне как то боязно двигаться дальше без четкого понимания происходящего.

SPI_HAL.ioc

UPD Проверил и с дефолтной настройой тактирования от встроенного RC - та же песня.

UPD2 Проверил то же самое с DMA. Все так же.

Edited by tw1911

Share this post


Link to post
Share on other sites

Если говорите, что с использованием SPL всё работает, остаётся осциллографом посмотреть, что происходит на выводах при использовании SPL и HAL. Попытаться локализовать проблему. Может компилятор выделывается, может акселерометр капризный (нужна задержка после подачи питания, задержка между CS и SPC, ...)

Немного не понятно как будет реально работать подряд идущие команды

HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET);

после

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;

а будет ли вообще меняться CS? И как этот сигнал воспримет акселерометр.
 

p.s.

в datasheet на LIS3DH (стр.11) указано, что Ton (Turn-on time) = 1 ms. Может он включиться не успевает?

Edited by dm37

Share this post


Link to post
Share on other sites
3 часа назад, dm37 сказал:

в datasheet на LIS3DH (стр.11) указано, что Ton (Turn-on time) = 1 ms. Может он включиться не успевает?

А задержки в 400мс ему типа не хватает?

Share this post


Link to post
Share on other sites

Вот из проекта на HAL, который работает

Функции разнесены по файлам, но можете их и в main.c все поставить

1)

void setReg(uint8_t address, uint8_t value) 
		{
 			CS_RESET;
 			HAL_SPI_Transmit(&hspi1,&address ,1,5);
 			HAL_SPI_Transmit(&hspi1,&value ,1,5); 			
			CS_SET;
 		}
		
		uint8_t getReg(uint8_t address)
		{
 			uint8_t data1=0;
 			address|=(1<<7);
 			CS_RESET;
 			HAL_SPI_Transmit(&hspi1,&address ,1,5);
 			HAL_SPI_Receive(&hspi1,&data1 ,1,5);
 		  CS_SET;
 			return data1;
 		}

2)Функции для выдёргивания значений

    //функция включения акселерометра
    void enable_302dlh(void)
 	{
 		setReg(LIS302DL_CTRL_REG1,LIS302DL_Normal_mode50Hz_xyz);  // LIS302DL_Lowpower_mode10hz_xyz
 	}

	//функция получения данных для оси X	
	signed int x_axis_out (void)
 	   {
 	   for(char i=0;i<100;i++)
 	      {
 	       x_h=getReg(0x29);
 	       x_l=getReg(0x28);
 	       x=(x_h*256)+x_l;
 	   	   x_summ=x_summ+x;
 		  }
         	x_filtered=(1-K)*x_filtered + K*(x_summ/100);
 	       	x_summ=0;
        	return x_filtered;
 	   }

Ну и собственно главная функция которой пользуемся

x_filtered=x_axis_out();

 

То есть вызываем функцию - -> x_filtered=x_axis_out();  и получаем в переменную готовые данные.

Edited by ukr823f

Share this post


Link to post
Share on other sites
9 часов назад, ukr823f сказал:

HAL_SPI_Transmit(&hspi1,&address ,1,5);

HAL_SPI_Receive(&hspi1,&data1 ,1,5);

собсна я им так и предлагал сделать с самого начала, но чет аплодисментов не поступило. Наверное ребята знают более мощные рецепты

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

  • Сообщения

    • Французское кино построено на амплуа их актёров. Стоит посмотреть кто в главной и про фильм всё понятно. Луи де Фюнес вечно играет каких то черезчур эмоциональных нервотиков типа комиссара Жюва. Корчит рожи при разговоре, издавая крякающие звуки. Как сказал бы один наш великий мэтр театра- "Переигрываете лицом, голубчик". За роль браконьера Блеро ему дали кликуху "Дональд Дак". Эти манеры пришли из немого кино, где жестикуляцией требовалось передать эмоции.  Пьер Ришар играет придурковатых идиотов как в фильме Ля каваль де фу. В прокате "Психи на воле" но точное значение - Психушка на прогулке. В Игрушке его "серьёзный" герой ради рабочего места перевоплощается в пубертатного идиота. Хоть и комедия, фильм о смысле капиталистического бытия средне статистического европейца. Сильная актёрская работа Ришара. А вот реально серьёзных ролей, типа Гамлет, в его исполнении я не знаю.  Депардьё, который Жерар а не Гийцом, играет чуваков посерьёзнее, типа "новый русский 90-х". С таким фейсом простачков не бывает. Либо откинувшийся бычара либо беглый из психушки. Ему бы Шрека сыграть... Жан Маре- фантомас форэва. Играет немногословных, серьёзных и конкретных чуваков. У него физия конкретная. Прям французский дон Карлеоне. Ален Делон, Жан Рено и Жан-Поль Бельмондо- французские Рэмбо,  играют таких же серьёзных, конкретных и в основном боевых чуваков. Придурки не их стайл.  А, ещё инфантильно- приглупетых простачков играет этот... как его... с ушами типа "чебурашка"... Вспомнил! Дани Бун. Это ваще не резкий как де Фюнес или Ришар. Двигается словно под курсом психолептиков. Даже была одна роль, где его герой сидел на седативных препаратах (психолептики)... Тёток разбирать не буду. Ну их... амплуа француженок одно на всех.
    • Вот такой вопросик Высота или ширина (не знаю как правильно называть)  ,например 15мм первичка и 20мм вторичка получится сильно это сказывается на инд рассеивания? Нужно стараться подгадывать число витков и даметр провода чтоб высота намоток была одинаковой?
    • здравствуйте. помогите пожалуйста опознать китайские ИС в ЧПУ - расположены между ЭВМ и усилителями шаговых моторов" Спасибо.  
    • Отсутствие роста экономики в его 3 и 4 срок, и не определённость с 5 сроком. Все цели которые стояли на это десятилетия провалены, даже импортозамещение и то по сути сворачивают. https://www.gazeta.ru/business/2019/07/19/12508183.shtml https://www.vedomosti.ru/economics/news/2019/07/19/806875-izmenit-sistemu-importozamescheniya Не понятная система управления на местах, это про не давний цирк в Тулуне специально для президента, это про потёмкинские деревни 21 века и т.д..        https://juve99.livejournal.com/4047729.html
    • x7r  до напряжения 0.5 от номинала терпимо. причем чем больше корпус тем лучше.
    • А вы попробуйте посмотреть то же самое на выключенном БП. Короткий радиоимпульс амплитудой всего пару милливольт (заполнение 20 МГц - это звон на частоте среза усилителя осциллографа или щупа) - это скорее всего наводка. Например, от ближайшего Wi-Fi роутера. Заодно посмотрите, какой период у этого сигнала.
    • Василичь! Ты никогда не устанешь дурачком прикидываться. Я тебя просил ГОСТ, где ясным по белому написано - мощность меряем при 10% КНИ. Ты мне, в ответ,, приводишь ГОСТ, описывающий методику измерения. В нём нет ни одной цифры не при искажения, ни про мощность. Я тебя спросил - сколько Вольт, по стандарту, должно быть в розетке? А ты мне - напряжение измеряется вольтметром.  Не надо считать всех вокруг идиотами. Ни одного ГОСТа, где есть указание мерять при 10% искажений ты не привёл. Ни тогда, не сейчас. Так что, повторю - хватит разводить срач по новой. Тебе не нужны стандарты? Вот и не пользуйся ими. Меряй, что хочешь, чем хочешь, как хочешь. Только пургу свою втюхиваай твоим знакомым аудиодебилам. Незачем выносить её на технический форум. Не тупи, Василичь! Ну, хоть раз в жизни! Я уже приводил страницу из ГОСТ 24388-88 - Усилители сигналов звуковой частоты бытовые. Общие технические условия. Там ясным по белому написано - В скобках приведены значения для усилителей на электровакуумных приборах. Специально для василичей, поясню - электровакуумные приборы - это радиолампы. Так что, ГОСТ охватывает обе категории усилителей. Для высшей группы сложности написано  - по ТУ. Но , Василичь - по ТУ не означает 100500% Если ты приглядишься, то в транзисторных усилителях требования по КНИ ужесточаются в 10 раз, при переходе в более высокий класс. Для ламп, увы, подобное невозможно. Поэтому, переход от 2-й группы сложности к 1-й, для ламповых усилителей требует снижения КНИ всего в 2 раза. Ты пишешь Да, написано. А теперь, хоть на секунду, попробуй выключить дурачка и подумай. Принесли с завода усилитель на аттестацию. Хотят,  по высшей группе сложности. Померяли, а там твои любимые 10% КНИ. И что, его аттестуют? А, фиг вам! По параметрам ГОСТа, такой усилитель не катит даже на вторую группу. А ГОСТ государственный, Василичь, имеет главенство над ТУ заводским. Не может завод, в ТУ, написать что попало. И, если они хотят аттестовать усилитель по  высшей группе сложности, т и искажения у него должны быть меньше, чем у 1-й. Смотрим ГОСТ - меньше 0,5%. А, уж, будет в ТУ 0,3%, 0,1%, или 0,05% - это, действительно, дело завода. Но 2, 5 или 10% там быть никак не может! Завод имеет право, в ТУ, указывать любые цифры, но они не могут быть хуже, чем требует ГОСТ. Иначе, официально, никто не даст никакой группы сложности. А выпускать продукцию, не соответствующую ГОСТу, в нормальном государстве, никто не позволит. Или же, выпускайте по заводскому ТУ. Тогда не заикайтесь про группу сложности. Просто пишите - усилитель "Василёк". А от этого Василичь, и цена идёт. Так что, выгодно заводу группу иметь. Что б было 001 в названии. Но, опять же, топором такой усилитель не сделаешь. Тут культура производства нужна. И, разработчики нормальные. И, технологи. И, рабочие. И, понятно, материалы. Возьми, к примеру,  усилитель "Электрон-20". В паспорте мощность 20 Ватт указана при КНИ 2% Это не ГОСТовская величина. Поэтому, скромно написано Вот так вот. Нет ГОСТа, нет группы сложности в названии. Это то, что по заводским ТУ. Для тех, кто не способен сделать нормально. Соответствовать ГОСТу. А кушать хочет. Я выкладывал скрины измерений сигнала реального усилителя при 1-м и 10% КНИ   Я думаю, люди сами смогут разобраться, какой из уровней искажений больше соответствует понятию качество. Как думаешь, Василичь, мы делаем усилители для качественного звука, или для греть утюги? Потому что, твой усилитель с 10% THD,  ни на что другое не годится. Ты же сам писал Скажи, на милость, Василичь - зачем мне мерять мощность, при которой невозможно слушать ламповый усилитель? О чём она мне скажет? Только о мощности утюга, который такой усилитель сможет нагреть. Так я, Василичь, в отличие от тебя, строю усилители не для утюгов, а для качественного звука. В своём усилителе я указал мощность, даже не при 1-м,  при 0,3% КНИ. По собственному ТУ, если угодно. Что не противоречит цифре ГОСТа, применительно к усилителям первой группы сложности. А, поскольку моё ТУ превышает требования ГОСТа для первой группы, я, вполне обоснованно, могу сказать, что мой усилитель соответствует требованиям ГОСТ 24388-88 для высшей группы сложности. По ТУ.
×
×
  • Create New...