ABOUT COMPANY

Our company, CBN Agro Tech, has taken on a mission to help farmers protect their stored grains against spoilage by providing them with the latest technology and IoT equipment to remotely monitor their grain storage facilities in real-time, track inventory levels, and receive alerts if any issues are detected.

We develop custom electronics for sensing and automation, plus a cloud-based application enabling our customers to access their data from anywhere using their computer or mobile device.

Junior Embedded Firmware Developer (for microcontrollers)
Paid internship at CBN Agro Tech (1000) · Starts after academic term
Categories:
  • – Embedded & Internet of Things
City:
  • room București

We wish to put a junior on the path to becoming a good system-level software engineer, to be able to develop reliable firmware for any microcontroller architectures (we use AVR and multiple different ARM Cortex-M chips) and interface with a plethora of electronic components / equipment (e.g., temperature sensors, motors, industrial protocols, serial / wireless communication modules etc.).

You will be under the mentorship of a skilled embedded senior with over 7 years of experience of programming MCUs, while also having a Teaching Assistant position at U.P.B. (Automatică și Calculatoare).

You will:

  • Develop firmware for various (mostly, custom-made) microcontroller-based boards;
  • Read technical datasheets for various components and write peripheral device drivers (e.g., chip-to-chip communication, flash memory, multiplexers, sensors etc.);
  • Learn many electronics interfacing protocols (UART, I2C, SPI, OneWire, RS485 etc.);
  • Develop custom MCU bootloaders that safely do remote equipment upgrades;
  • Learn to do speed / space optimizations, as expected in an embedded software setting;
  • Maintain multiple board revisions and make customizations in a modular (organized) fashion;
  • Debug low-level hardware problems using JTAG / multimeters / oscilloscopes / logic analyzers;
  • Test and test again before going into production ;)
  • Understand how most electronic systems work!

Requirements:

  • Finished or currently enrolled in a relevant degree program in computer science or a related field;
  • Moderate C programming skills (at least: have a good understanding of types, pointers, structs, bitwise operators, libc functions + some basic C preprocessor knowledge);
  • Command line experience with compilers & build tools (i.e., IDE agnostic); GCC, compilation flags, linker, makefiles / cmake;
  • Be knowledgeable of computer architecture concepts such as registers, instructions, memory organization etc.;
  • Basic programming experience with some MCU platform (Arduino / AVR or any ARM Cortex-M based architecture will do);
  • Basic gdb debugging experience;
  • Medium Python language skills;
  • Basic Linux skills;
  • Basic electronics knowledge (e.g., but not limited to: Kirchhoff's laws, understand what a resistor / capacitor / transistor does, what is a logic level etc.);
  • Organizational skills (e.g., writing documentation & unit tests);
  • Experience with VCSes (git / mercurial / svn);
  • Optional: experience with embedded communication protocols (SPI, I2C, UART, RS485) is a plus!
  • Optional: experience with reading technical datasheets!
  • Any RTOS experience is a plus!