Desarrollo de una placa de desarrollo para K1986BE1QI (aviación)

Desarrollo de una placa de desarrollo para K1986BE1QI (aviación)

Hace varios años conocí los microcontroladores rusos de Milander. Corría el año 2013, cuando los ingenieros discutían intensamente los primeros resultados del Programa Federal Target “Desarrollo de componentes electrónicos básicos y radioelectrónica” para el período 2008-2015. En ese momento, el controlador K1986BE9x (núcleo Cortex-M3) ya se había lanzado y acababa de aparecer el controlador 1986BE1T (núcleo Cortex-M1). En la caja de plástico, LQFP-144, tenía la designación K1986BE1QI (aviación) en la documentación, y en el propio chip la designación MDR32F1QI. En la web del fabricante lleva el sufijo “avia”, ya que tiene interfaces específicas para la industria aeronáutica (ARINC 429, MIL_STD_1553).

Sorprendentemente, en el momento de la distribución de estos controladores, la empresa Milander preparó kits de depuración y una biblioteca de subrutinas para trabajar con periféricos, "pero sin garantías ni obligaciones adicionales en cuanto a la corrección de la biblioteca". La biblioteca es similar a la biblioteca de periféricos estándar de STMicroelectronics. En general, todos los controladores ARM integrados en el núcleo Cortex-M tienen mucho en común. Por este motivo, la familiarización con los nuevos controladores rusos avanzó rápidamente. Y aquellos que compraron kits de depuración de marca, recibieron soporte técnico durante su uso.

Desarrollo de una placa de desarrollo para K1986BE1QI (aviación)
Kit de depuración para microcontrolador 1986BE1T, © Milander

Sin embargo, con el tiempo comenzaron a aparecer "enfermedades infantiles" de nuevos microcircuitos y bibliotecas. Los ejemplos de prueba del firmware funcionaron sin problemas visibles, pero con modificaciones importantes, se produjeron fallas y errores. El primer "trago" en mi práctica fueron fallas inexplicables en el funcionamiento del controlador CAN. Un año después, se descubrió un problema con el módulo en el controlador 1986BE1T (aviación) de una revisión anterior. MKIO (canal de intercambio de información multiplex). En general, todas las revisiones de estos microcontroladores hasta 2016 fueron de uso limitado. Se invirtió mucho tiempo y nervios en identificar estos problemas, cuya confirmación ahora se puede encontrar en listas de errores (erratas).

Una característica desagradable fue que era necesario trabajar y solucionar errores no en placas de depuración, sino en placas prototipo de dispositivos que estaban planificados para la producción en serie en fábrica. Normalmente no había nada allí excepto el conector JTAG. La conexión con un analizador lógico era difícil e inconveniente y, por lo general, no había LED ni pantallas. Por esta razón apareció en mi cabeza la idea de crear mi propia placa de depuración.

Por un lado, en el mercado había kits de depuración de marca, así como excelentes placas base de la empresa LDM-Systems de Zelenograd. Por otro lado, los precios de estos productos son asombrosos y la funcionalidad básica sin tarjetas de expansión no cumple con las expectativas. Una placa con un controlador soldado y un conector pin no me interesa. Y los tableros más interesantes son caros.

Desarrollo de una placa de desarrollo para K1986BE1QI (aviación)
Placa de desarrollo MILANDR LDM-HELPER-K1986BE1QI-FULL, © LDM Systems

La empresa Milander tiene una política de precios y marketing única. Por lo tanto, es posible obtener muestras gratuitas de algunos microcircuitos, pero esto solo está disponible para personas jurídicas y está asociado con una búsqueda burocrática. En general, los microcircuitos en una carcasa de metal y cerámica son dorados en sentido literal y figurado. Por ejemplo, un controlador 1986BE1T cuesta entre 14 y 24 mil rublos en Moscú. El chip de memoria estática 1645RU6U cuesta desde 15000 rublos. Y este es el orden de precios de todos los productos. Como resultado, incluso los institutos de investigación especializados con encargos gubernamentales ahorran dinero y evitan esos precios. Los microcircuitos en una caja de plástico para uso civil son mucho más baratos, pero no están disponibles en proveedores populares. Además, me parece que la calidad de los microcircuitos en una caja de plástico es peor que la de los "dorados". Por ejemplo, no pude ejecutar el controlador K1986BE1QI a 128 MHz sin aumentar el parámetro de latencia del flash. Al mismo tiempo, la temperatura de este controlador subió a 40-50C. Pero el controlador 1986BE1T (“dorado”) comenzó a 128 MHz sin configuraciones adicionales y permaneció frío. Él es realmente bueno.

Desarrollo de una placa de desarrollo para K1986BE1QI (aviación)
Microcontrolador “dorado” 1986BE1T, (c) Milander

Tuve suerte de que todavía se puede comprar un microcontrolador en una caja de plástico al por menor en LDM Systems, y todos los diagramas de la placa están disponibles gratuitamente. Lo malo es que en el sitio web en la foto del controlador se puede ver una marca que dice que esta es la cuarta revisión de 4, es decir. con defectos. Pensé durante mucho tiempo si comprar o no comprar. Pasaron varios años así...

La idea de crear un tablero de depuración no ha desaparecido por ningún lado. Poco a poco, fui formando todos los requisitos y pensé en cómo colocarlo todo en una sola placa para que fuera compacto y económico. Al mismo tiempo, pedí los componentes que faltaban a los chinos. No tenía prisa, lo hice todo por mí mismo. Los proveedores chinos son notoriamente descuidados: tuve que pedir lo mismo en diferentes lugares para conseguir todo lo que necesitaba. Además, algunos de los chips de memoria resultaron ser usados, aparentemente soldados de dispositivos rotos. Esto volvió a atormentarme más tarde.

Comprar un microcontrolador Milander K1986BE1QI (aire) no es tarea fácil. En la misma tienda Chip and Dip, en la sección "Artículos para pedir", encontré solo K1986BE92QI por 740 rublos, pero no me convenía. La única opción es comprar una revisión no nueva de LDM-Systems por 2000 rublos. Como no encontré repuesto en ningún otro lugar, decidí comprar el que tenía. Para mi grata sorpresa, me vendieron un controlador nuevo fabricado en diciembre de 2018, revisión 6+ (1820). Pero el sitio todavía tiene una foto antigua, y en el momento de escribir este artículo el controlador no está disponible...

Desarrollo de una placa de desarrollo para K1986BE1QI (aviación)
Microcontrolador K1986BE1QI (aviación) en embalaje tecnológico, (c) Foto del autor

Principales características técnicas de mi placa de depuración. MDB1986 siguiente

  • programador-depurador incorporado, compatible con J-Link y CMSIS-DAP;
  • memoria estática de 4 Mbit (256 k x 16, 10 ns);
  • chip de memoria flash de 64 Mbit, Winbond 25Q64FVSIG;
  • Transceptor de interfaz RS-232 con líneas RTS y CTS;
  • interfaces y conectores para Ethernet, USB, CAN;
  • Controlador de pantalla de 7 segmentos MAX7221;
  • conector de clavija para trabajar con MKIO (MIL_STD_1553) y ARINC429;
  • fototransistor Everlight PT17-21C;
  • cinco LED de colores, un botón de reinicio y dos botones de usuario;
  • la fuente de alimentación al puerto USB es de 5 voltios;
  • dimensiones de la placa de circuito impreso 100 x 80, mm

Me gustaron las placas de la serie STM-Discovery porque tienen un programador-depurador incorporado: ST-Link. La marca ST-Link solo funciona con controladores de STMicroelectronics, pero hace un par de años fue posible actualizar el firmware en ST-Link y obtener el depurador OB (integrado) SEGGER J-Link. Legalmente, existe una restricción sobre el uso de dicho depurador solo con placas STMicroelectronics, pero en realidad el potencial no está limitado. Por lo tanto, al tener un OB J-Link, puede tener un programador-depurador incorporado en la placa de depuración. Observo que los productos LDM-Systems utilizan el convertidor CP2102 (Usb2Uart), que solo puede flashear.

Desarrollo de una placa de desarrollo para K1986BE1QI (aviación)
Microcontroladores STM32F103C8T6, reales y no tan reales, (c) Foto del autor

Entonces, fue necesario comprar el STM32F103C8T6 original, ya que el firmware propietario no funcionará correctamente con el clon. Dudé de esta tesis y decidí probar el controlador CS32F103C8T6 de la empresa china CKS. No tengo quejas sobre el controlador en sí, pero el firmware propietario ST-Link no funcionó en él. J-Link funcionó parcialmente: se detectó el dispositivo USB, pero el programador no realizó sus funciones y recordó constantemente que estaba "defectuoso".

Desarrollo de una placa de desarrollo para K1986BE1QI (aviación)
Error al ejecutar el depurador en un controlador no original

No estaba satisfecho con esto y primero escribí el firmware para hacer parpadear el LED y luego implementé la solicitud IDCODE usando el protocolo JTAG. El programador ST-Link que tenía en la placa Discovery y el programa ST-Link Utility flashearon CS32F103C8T6 sin problemas, al final me convencí de que mi placa estaba funcionando. Para mi deleite, el controlador de destino K1986BE1QI (aviación) emitió alegremente su IDCODE a través de la línea TDO.

Desarrollo de una placa de desarrollo para K1986BE1QI (aviación)
Oscilograma de una línea de señal TDO con una respuesta IDCODE codificada, (c) Foto del autor

Desarrollo de una placa de desarrollo para K1986BE1QI (aviación)
Entonces, el puerto SWD fue útil para depurar el depurador y verificar IDCODE

Había una opción con un depurador. CMSIS-DAP (puerto de acceso de depuración). Construir un proyecto a partir de fuentes ARM no es una tarea fácil, tomé el proyecto de X893, y luego probé DAP42. Desafortunadamente, Keil uVision se quedó paralizado y no quiso trabajar con ellos. Como resultado, reemplacé el chip depurador con un STM32F103C8T6 propietario y nunca volví a este problema.

Desarrollo de una placa de desarrollo para K1986BE1QI (aviación)
Operación exitosa del depurador incorporado J-Link STLink V2

Cuando todos los componentes clave de la futura placa de desarrollo estuvieron disponibles, entré en Eagle CAD y descubrí que no estaban en la biblioteca de elementos. No había ningún lugar adonde ir; tuve que dibujarlos yo mismo. Al mismo tiempo, hice puntos de montaje para la memoria, un conector HanRun para Ethernet y agregué marcos para resistencias y condensadores. El archivo del proyecto y la biblioteca de componentes se pueden encontrar en mi GitHub.

Diagrama esquemático de la placa de desarrollo MDB1986.Desarrollo de una placa de desarrollo para K1986BE1QI (aviación)

La placa se alimenta de una fuente de CC de 5 voltios obtenida del puerto USB. Hay un total de dos puertos USB tipo B en la placa. Uno es para el programador, el segundo es para el controlador K1986BE1QI. La placa puede funcionar desde cualquiera de estas fuentes o desde ambas simultáneamente. La regulación de carga y protección de la línea eléctrica más simple se implementa utilizando diodos Schottky, en el circuito D2 y D3 (SS24). También en el diagrama se pueden ver los fusibles autorregenerables F1 y F2 a 500 mA. Las líneas de señal del puerto USB están protegidas por un conjunto de diodos USBLC6-2SC6.

El circuito programador-depurador ST-Link es conocido por muchos; se puede encontrar en la documentación de las placas STM32-Discovery y otras fuentes. Para el firmware inicial del clon ST-Link/J-Link-OB/DAP (opcional), saqué las líneas SWDIO (PA13), SWCLK (PA14), GND. Mucha gente usa UART para firmware y se ve obligada a desconectar los puentes de BOOT. Pero encuentro que SWD es más conveniente y este protocolo permite la depuración.

Casi todos los componentes de la placa funcionan con 3.3 voltios, que provienen del regulador de voltaje AMS1117-3.3. Para suprimir las interferencias electromagnéticas y las sobretensiones, se utilizan filtros LC de condensadores y bobinas de choque de la serie BLM31PG.

Por separado, vale la pena mencionar el controlador de pantalla de 7 segmentos MAX7221. Según la especificación, la alimentación recomendada es de 4 a 5.5 voltios, y el nivel de señal alto (lógico) es de al menos 3.5V (0.7 x VCC), con una alimentación de 5V. Para el controlador K1986BE1QI (aviación), la salida de una unidad lógica corresponde a un voltaje de 2.8 a 3.3 V. Obviamente existe una discrepancia entre los niveles de señal que puede interferir con el funcionamiento normal. Decidí alimentar el MAX7221 a 4V y reducir los niveles de señal a 2.8V (0.7 x 4 = 2.8). Para hacer esto, el diodo D4 (RS1A o FR103) se instala en serie en el circuito de alimentación del controlador. La caída de voltaje total es de 0.9 V (diodo Schottky de 0.3 V y diodo de 0.6 V) y todo funciona.

La mayoría de los puertos del microcontrolador K1986BE1QI (aviación) son compatibles con señales de hasta 5V. Por lo tanto, no hay ningún problema al utilizar el transceptor CAN MCP2551, que también funciona con 5V. El chip MAX232 se indica como un transceptor RS-3232 en el diagrama, pero en realidad usé SN65C3232D de Texas Instruments, porque Funciona desde 3.3 V y proporciona velocidades de hasta 1 Mbit/s.

La placa contiene 4 resonadores de cuarzo: uno para el depurador (8 MHz) y tres para el microcontrolador de destino K1986BE1QI (aviación) con clasificaciones de 32.768 kHz, 16 MHz, 25 MHz. Estos son componentes necesarios, porque Los parámetros del oscilador RC incorporado se encuentran en un amplio rango de 6 a 10 MHz. Para el funcionamiento del controlador Ethernet integrado se requiere una frecuencia de 25 MHz. Por alguna razón, en la web de Milandra (quizás por error) dice que la caja de plástico no tiene Ethernet. Pero nos basaremos en las especificaciones y los hechos.

Un incentivo importante para crear mi propia placa de desarrollo fue la oportunidad de trabajar con el bus del sistema externo EBC (controlador de bus externo), que es esencialmente un puerto paralelo. El microcontrolador K1986BE1QI (avión) le permite conectarse y trabajar con chips de memoria externos y dispositivos periféricos, por ejemplo, ADC, FPGA, etc. Las capacidades del bus del sistema externo son bastante amplias: puede trabajar con RAM estática, ROM y NAND Flash de 8, 16 y 32 bits. Para leer/escribir datos de 32 bits, el controlador puede realizar automáticamente 2 operaciones correspondientes para chips de 16 bits y 8 operaciones para chips de 4 bits. Obviamente, una operación de E/S de 32 bits se completará más rápidamente con un bus de datos de 32 bits. Las desventajas incluyen la necesidad de que el programa funcione con datos de 32 bits y la placa tendrá que colocar 32 pistas.

Desarrollo de una placa de desarrollo para K1986BE1QI (aviación)
Chips de RAM estática, usados ​​(adivina cuál está defectuoso)

Una solución equilibrada es utilizar chips de memoria de 16 bits. Resulta que tenía chips de Integrated Silicon Solutions Inc. en stock. (ISSI IS61LV25616AL, 16 x 256k, 10 ns, 3.3V). Por supuesto, la empresa Milander tiene sus propios chips de memoria estática. serie 1645RU, pero son demasiado caros y no están disponibles. Como alternativa, existe el Samsung K6R4016V1D compatible con pin. Anteriormente mencioné que los microcircuitos resultaron estar usados ​​y la copia que instalé inicialmente dio fallas y valores caóticos en la línea de datos 15. Me llevó varios días encontrar errores de hardware y mayor fue la sensación de satisfacción cuando reemplacé el chip dañado por uno que funcionaba. Sea como fuere, la velocidad de trabajo con memoria externa deja mucho que desear.

Bus externo y modo StandAloneEl microcontrolador K1986BE1QI (avión) tiene un modo StandAlone único, que está diseñado para acceso externo directo a controladores Ethernet y MKIO (MIL_STD_1553) a través de un bus externo, con el núcleo en estado de reinicio, es decir. no utilizado. Este modo es conveniente para procesadores y FPGA que no tienen Ethernet y/o MKIO.
El diagrama de conexión es el siguiente:

  • MCU del bus de datos (D0-D15) => SRAM (E/S0-I/O15),
  • bus de direcciones MCU(A1-A18) => SRAM(A0-A17),
  • controlar MCU (nWR, nRD, PortC2) => SRAM (NOSOTROS, OE, CE),
  • Las SRAM (UB, LB) se conectan o se ponen a tierra a través de una resistencia.

La línea CE está conectada a la fuente de alimentación a través de una resistencia; los pines para muestrear el byte de la MCU (BE0-BE3) no se utilizan. Debajo del spoiler, proporciono el código para inicializar los puertos y el controlador de bus externo.

Inicialización de puertos y controlador EBC (controlador de bus externo)

void SRAM_Init (void)
{
	EBC_InitTypeDef          EBC_InitStruct = { 0 };
	EBC_MemRegionInitTypeDef EBC_MemRegionInitStruct = { 0 };
	PORT_InitTypeDef         initStruct = { 0 };

	RST_CLK_PCLKcmd (RST_CLK_PCLK_EBC, ENABLE);

	PORT_StructInit (&initStruct);
	//--------------------------------------------//
	// DATA PA0..PA15 (D0..D15)                   //
	//--------------------------------------------//
	initStruct.PORT_MODE      = PORT_MODE_DIGITAL;
	initStruct.PORT_PD_SHM    = PORT_PD_SHM_ON;
	initStruct.PORT_SPEED     = PORT_SPEED_FAST;
	initStruct.PORT_FUNC      = PORT_FUNC_MAIN;
	initStruct.PORT_Pin       = PORT_Pin_All;
	PORT_Init (MDR_PORTA, &initStruct);	
	//--------------------------------------------//
	// Address PF3-PF15 (A0..A12), A0 - not used. //
	//--------------------------------------------//
	initStruct.PORT_FUNC      = PORT_FUNC_ALTER;
	initStruct.PORT_Pin       = PORT_Pin_4  | PORT_Pin_5  |
	                            PORT_Pin_6  | PORT_Pin_7  |
	                            PORT_Pin_8  | PORT_Pin_9  |
								PORT_Pin_10 | PORT_Pin_11 |
	                            PORT_Pin_12 | PORT_Pin_13 |
								PORT_Pin_14 | PORT_Pin_15;
	PORT_Init (MDR_PORTF, &initStruct);	
	//--------------------------------------------//
	// Address PD3..PD0 (A13..A16)                //
	//--------------------------------------------//
	initStruct.PORT_FUNC      = PORT_FUNC_OVERRID;
	initStruct.PORT_Pin       = PORT_Pin_0 | PORT_Pin_1 |
	                            PORT_Pin_2 | PORT_Pin_3;
	PORT_Init (MDR_PORTD, &initStruct);	
	//--------------------------------------------//
	// Address PE3, PE4 (A17, A18)                //
	//--------------------------------------------//
	initStruct.PORT_FUNC      = PORT_FUNC_ALTER;
	initStruct.PORT_Pin       = PORT_Pin_3 | PORT_Pin_4;
	PORT_Init (MDR_PORTE, &initStruct);	
	//--------------------------------------------//
	// Control PC0,PC1 (nWE,nOE)                  //
	//--------------------------------------------//
	initStruct.PORT_FUNC      = PORT_FUNC_MAIN;
	initStruct.PORT_Pin       = PORT_Pin_0 | PORT_Pin_1;
	PORT_Init (MDR_PORTC, &initStruct);	
	//--------------------------------------------//
	// Control PC2 (nCE)                          //
	//--------------------------------------------//
	initStruct.PORT_PD        = PORT_PD_DRIVER;
	initStruct.PORT_OE        = PORT_OE_OUT;
	initStruct.PORT_FUNC      = PORT_FUNC_PORT;
	initStruct.PORT_Pin       = MDB_SRAM_CE;
	PORT_Init (MDR_PORTC, &initStruct);	

	//--------------------------------------------//
	// Initialize EBC controler                   //
	//--------------------------------------------//
	EBC_DeInit();
	EBC_StructInit(&EBC_InitStruct);
	EBC_InitStruct.EBC_Mode             = EBC_MODE_RAM;
	EBC_InitStruct.EBC_WaitState        = EBC_WAIT_STATE_3HCLK;
	EBC_InitStruct.EBC_DataAlignment    = EBC_EBC_DATA_ALIGNMENT_16;
	EBC_Init(&EBC_InitStruct);
	
	EBC_MemRegionStructInit(&EBC_MemRegionInitStruct);
	EBC_MemRegionInitStruct.WS_Active   = 2;
	EBC_MemRegionInitStruct.WS_Setup    = EBC_WS_SETUP_CYCLE_1HCLK;
	EBC_MemRegionInitStruct.WS_Hold     = EBC_WS_HOLD_CYCLE_1HCLK;
	EBC_MemRegionInitStruct.Enable_Tune = ENABLE;
	EBC_MemRegionInit (&EBC_MemRegionInitStruct, EBC_MEM_REGION_60000000);
	EBC_MemRegionCMD(EBC_MEM_REGION_60000000, ENABLE);

	// Turn ON RAM (nCE)
	PORT_ResetBits (MDR_PORTC, MDB_SRAM_CE);
}

El microcontrolador del paquete LQFP-144 y la memoria del paquete TSOP-44 tienen muchos pines asociados y ocupan mucho espacio en la placa de circuito impreso. Al tener experiencia en la resolución de problemas de optimización en el campo de la economía, me resultó obvio que primero era necesario colocar estos microcircuitos en la placa. En varias fuentes me he encontrado con críticas elogiosas sobre CAD TopoR (enrutador topológico). Descargué la versión de prueba y pude exportar mi proyecto desde Eagle CAD allí solo después de eliminar casi todos los componentes. Desafortunadamente, el programa TopoR no me ayudó a colocar ni siquiera 10 elementos en el tablero. Primero, todos los componentes se colocaron en una esquina y luego se dispusieron a lo largo del borde. No estaba satisfecho con esta opción y durante mucho tiempo tracé el tablero manualmente en el entorno familiar Eagle CAD.

Un elemento importante de una placa de circuito impreso es la serigrafía. La placa de desarrollo no sólo debe tener etiquetas para los componentes electrónicos, sino que también deben estar etiquetados todos los conectores. En la parte posterior del tablero coloqué tablas con las funciones de los puertos del controlador (principal, alternativo, anulado, real). Encargué la producción de placas de circuito impreso en China a la conocida oficina PCBWay. No lo elogiaré porque la calidad es buena. Pueden hacerlo mejor, con tolerancias más estrictas, pero por una cuota.

Desarrollo de una placa de desarrollo para K1986BE1QI (aviación)
Placas de circuito impreso MDB1986 fabricadas, (c) Foto del autor

Tuve que soldar los componentes "de rodillas" con un soldador de 40 vatios y soldadura POS-61, porque rara vez sueldo, 1 o 2 veces al año, y la pasta de soldar se había secado. También tuve que cambiar el controlador chino CS32F103 por el STM32F103 original y luego reemplazar también la memoria. En general, ahora estoy completamente satisfecho con el resultado, aunque aún no he comprobado el funcionamiento de RS-232 y CAN.

Desarrollo de una placa de desarrollo para K1986BE1QI (aviación)
Placa de depuración MDB1986 en funcionamiento: brilla y calienta, (c) Foto del autor

En la web de Milandra puedes encontrar suficientes Materiales educativos para controladores de aprendizaje. serie 1986BE9 (núcleo Cortex-M3), pero para el microcontrolador K1986BE1QI (aviación) no veo nada allí. Habiendo examinado los materiales, manuales y trabajos de laboratorio para las universidades publicados allí, me alegro de que en todo el país se esté capacitando al personal para trabajar con los controladores rusos. La mayoría de los materiales de capacitación preparan para trabajar con puertos de E/S, temporizadores, ADC, DAC, SPI, UART. Se utilizan diferentes entornos de desarrollo IDE (Keil, IAR, CodeMaster). En algún lugar programan usando registros CMSIS y en algún lugar usan la biblioteca MDR. Se debe mencionar el recurso. Inicio Milandr, que contiene muchos artículos de programadores en ejercicio. Y, por supuesto, no debemos olvidarnos de Foro de Milandra.

Pensado en MilandraEn Rusia se está desarrollando la microelectrónica y en este proceso la empresa Milander desempeña un papel destacado. Están apareciendo nuevos microcontroladores interesantes, por ejemplo, 1986BE81T y Elektrosila con interfaces SpaceWire y MKIO (los mismos que en 1986BE1 y, posiblemente, con los mismos problemas), etc. Pero los estudiantes, profesores e ingenieros civiles corrientes no pueden comprar estos microcircuitos. Esto significa que la comunidad de ingenieros no podrá identificar rápidamente errores y problemas con este chip. Me parece que primero es necesario producir microcircuitos en una caja de plástico, distribuirlos a todas las partes interesadas y, después de la aprobación (latín approbatio - aprobación, reconocimiento) por parte de los especialistas, pueden preparar una revisión en una caja de metal-cerámica con protección contra todos los factores terribles. Espero que en un futuro próximo TODOS estemos satisfechos con los nuevos proyectos anunciados en las exposiciones.
El tablero de depuración que desarrollé puede ser repetido, modificado y utilizado por cualquier persona en el proceso educativo. Primero que nada, hice el tablero yo mismo, pero quedó tan bien que Decidí compartir con todos..

K1986BE1QI (air) es un controlador muy interesante con interfaces únicas que se puede utilizar en universidades para enseñar a los estudiantes. Creo que después de corregir los errores identificados en el controlador y pasar las pruebas de certificación, ¡el controlador volará en el verdadero sentido de la palabra!

Fuente: habr.com

Añadir un comentario