Skills

Skills

Electronics

Overview

  • Embedded programming C, ASM, Machine codes, EEPROM
  • PCB design: Altium, EasyEDA,Seeed Studio
  • Microelectronics (130nm and below): Mentor Graphics, Cadence, Synopsys
  • Circuit protection and power electronics:Charge pumps, Power control
  • Communications: I2C, SPI, RS232, TTL/CMOS, Bluetooth, WiFi
  • Microcontrollers: ATmega, ATXmega, ARM, PIC
  • Discrete IC: Logic gates, Multiplexers, Flip-Flops, etc.
  • Analog/Digital interfacing: ADC, DAC, DAQ, Data Visualization
  • Audio signal processing: OpAmps, Filters, Tone generation
  • Soldering: DIP, SOIC, TQFP, TSSOP

Embedded programming, Communications and Microcontrollers

I consider myself very proficient with embedded C and binary data manipulation. I strive for fast, low footprint yet easy to understand coding practices. Whenever possible I try not to use external libraries since very often there is an overhead that comes with the library code. For example, the major reason I had to abandon Arduino platform was the code inefficiency, especially with Software serial implementation. Thus I had to learn ATXmega to use it's 5 RS232 ports without any library support. As a result I have very low latency communication between master and slave units in my Touchscreen control project. Where the first prototype board with Arduino Fio would take up to 1 second to propagate serial signal directly to the peripheral, the new device can do it under 10ms even after passing two stages of the signal processing (first time on master unit and second time - on slave unit).

Audio signal processing, Communications,PCB design

Unable to find a RS232 enabled volume control I had to make my own. For that I used a simple OpAmp circuit with very low gain (1.5dB) and a digital potentiometer. The main control would send a serial CMOS signal to the Volume control via MAX232 chip. The chip converted the signal to 5V TTL. The microcontroller (ATmega8 for prototyping) would then receive the data and send the appropriate value on SPI bus to the potentiometer. This way the incoming audio signal became attenuated and then slightly amplified during buffering process. The PCB was designed in such way that it was possible to completely bypass the attenuation phase in case of power loss, meaning the audio would come out unmodified for further processing stages.

Top

Programming

  • Scripting: Bash, Python, PowerShell, csh, ksh, zsh
  • High level languages: .NET(C#), QT(C++)
  • Low level languages: C/C++, Pascal, ASM
  • Web programming: PHP, ASP.NET, HTML, JavaScript, CSS
  • Database: MySQL, MSSQL, PostreSQL

Programming

Having tried a dozen or two of programming languages I prefer to stick to the good old C. Despite all the hype the C# and Python get, C is going to stay for a long time. It is very powerful, concise and unforgiving. I constantly use it for speed and binary operations.

I programmed with C (and C++) many useful applications: memory allocation program beating Microsoft's malloc by 50% in speed; QT interface for an accounting package; serial protocol for communication between my own devices, compact and fast. I love the challenge of restricted space and CPU clock, that's where my C skills come to real test.

Scripting

I use bash extensively. Therefore this is my preferred scripting tool. When I was designing the user interface for the Touchscreen control, the bash shell was chosen as a backend for cgi-bin. Since the system was not meant to be connected to the outside world this choice did not pose a security risk. Along with the general availability bash shell offered a lot of useful system tools I could use in the cgi-bin environment. For example a simple bash script easily splits a very long command into manageable chunks to send over serial line. It is also very easy to control GPIO of Raspberry Pi, in particular to produce a sound when a button is clicked on UI side (with the help of a custom built buzzer circuit).

Web programming, Database

I designed several websites for Nutrition department to conduct various types of surveys. Using my knowledge of web technologies (PHP, MySQl, Javascript), I created a powerful survey engine that could capture user data as they type, being very robust and responsive. Dynamic content allowed survey participants to show/hide/update relevant information, custom built scripting language provided configuration functionality for transferring plain text questionnaires into intuitive and clean web page. At the end of the survey process a number of reporting options offered to save survey data: from plain csv to nicely formatted pdf. Cognitive tests employed various timing functions and graphics tools to present the participants with the easy to use and understand web interface.

Even after many years since the project has been discontinued I still receive notions of interest.

Top

Operating systems and services

  • Operating systems: Linux, MacOSX, Windows, OpenBSD
  • Bash tools: vim, grep, strings, dd, printf, etc.
  • Administration: MySQL, Apache, PhpMyAdmin, CPanel, IIS, Cgi-bin
  • Connectivity: HTTP, FTP, SSH, rsync, VNC, RDP, SMB
  • Multimedia: Blender, Gimp, Premiere, LaTeX
  • Version control and issue tracking: SVN, Git, Spiceworks

Top

Comments

Popular posts from this blog

Touchscreen Control

Dmitri Roukin portfolio 2017 (Electronics)