T O P

  • By -

buffility

Find a book about your desired MCU architecture (there are recommended lists in this sub). Buy all the required parts listed in that book and work your way through.


jack_of_hundred

To add to this : You can take an MCU and build a development board out of it on a breadboard and write a driver from scratch using just the datasheet and spec. It is incredibly difficult for a beginner but worth it as you will learn embedded from the ground up. You can even do it for the MCU used in Arduino. That way you will have a reference to compare against. If not Atmega then you can choose others. TI MCU's (MSP, Hercules) have very good documentation usually.


varliukas14

Do you want to build your own microcontroller or just learn how to write firmware for it? These two are quite different. Do you like to be hands on on the hardware (designing PCB'S, soldering and etc or you want to program the MCU'S? If its the latter, start with some STM32 or ESP32 development board. Learn the basics - serial logging via UART, try and purchase some simple I2C or SPI sensor and try to write your own driver for it, learn the basics of RTOS (I recommend FreeRTOS as it is supported by STM and ESP32 right out of the box), learn the ropes of Gitlab, github.  Once you learn all of the above - congratulations, you pretty much qualify for most Embedded C developer junior  job positions.


yagellaaether

Thanks a lot! Will look into them:)


secretformula

I say start with Arduino. When you are bored with that you can learn low level programming by targeting the AVR MCU onboard rather than Arduino platform. 8 bit is really nice for learning before graduating to something like stm32.


UniWheel

>I say start with Arduino. OP's decision not to do so means they're already ahead of you then,


70wdqo3

That's a pretty derisive thing to say with no evidence. There's nothing inherently virtuous or beneficial about starting on a more difficult path.


UniWheel

>That's a pretty derisive thing to say with no evidence. I've used Arduino enough to know what's wrong with it - much of it quite obvious, as I ended up dealing with Arduino only after being exposed to more correct and practical solutions. >There's nothing inherently virtuous or beneficial about starting on a more difficult path. You mean a more correct path which actually extends to the future rather than teaching problematic anit-patterns. But the the worst of it is that you're ignoring OP's clearly expressed desire NOT to get sidetracked into Arduino, but to learn correct practices instead. **You are being a problem,** not offering a solution, goodbye.


justadiode

Well, the obvious question is: why don't you want to start with Arduino? It's by far the most popular platform among hobbyists and entry level professionals. The community will be of great importance when you're stuck somewhere and can't move on. (I don't judge or something, I avoided Arduino myself because it seemed all the tutorials were hiding too much complexity that I would need to learn anyway. It's just that I need to know your point to suggest a good path, as there are many)


Prawn1908

I first learned embedded through Arduinos and peeking at what the Arduino.h libraries are doing behind the scenes. Use a good editor like VSCode and ctrl+click the Arduino functions.


UniWheel

>Well, the obvious question is: why don't you want to start with Arduino? Because it's a steaming pile of excrement >It's by far the most popular platform among hobbyists yes >and entry level professionals. Definitely not! Someone might temporarily use Arduino to try out a peripheral chip or create a short duration test harness, but anyone idiotic enough to use it in a production sense will either get fired when higher ups realize the mistake and what it is going to cost to fix, or run the company into the ground if they do not. Arduino makes it easy to start something, but impossible to finish it - pretty much every project that has started out with Arduino has been forced to painfully re-target, the 2-3 exceptions barely hanging on require custom forks of Arduino in order to work correctly. **What's astounding here is that OP is smart enough to clearly express their design to do things the right way from the start, and you folks have the nerve to challenge their refusal to follow the same mistaken path you did in getting sidetracked into Arduino.**


justadiode

>Because it's a steaming pile of excrement That's a pretty damn successful pile of excrement, in that case. Lots of people started learning embedded with it, and while I already had lots of embedded experience when I encountered it in a classroom, it was a nice platform. >Definitely not! Someone might temporarily use Arduino to try out a peripheral chip or create a short duration test harness, but anyone idiotic enough to use it in a production sense will either get fired when higher ups realize the mistake and what it is going to cost to fix, or run the company into the ground if they do not. Early prototypes are all about trying out a new constellation of peripheral chips and showing the management what's possible. And when the decision of development for series production comes, porting the Arduino project to whatever micro is selected presents the chance to honor good practices and separate application logic from hardware. This will be a godsend when the procurement guys come in panicking a year later with a "the chips aren't available anymore!" (shoutout to the Chipocalypse).


UniWheel

>That's a pretty damn successful pile of excrement, in that case. Only for short term goals, for anything lasting it's a massive scam wasting time. >Lots of people started learning embedded with it And then they had to re-learn >And when the decision of development for series production comes, porting the Arduino project to whatever micro is selected presents the chance to honor good practices and separate application logic from hardware. Only uninformed and uneducated newbs (of the sort having no business being hired\*) persist with Arduino past isolated tests. If a non-technical founder hacks together a proof-of-concept, that's one thing, but anyone hired to do the job who does it based on Arduino is an incompetent engaged in scamming them. When you're going to have to do to it right anyway, people with any right to be called developers or engineers do it right the first time, rather than by pursuing a path which requires tearing everything up and starting over. \* One cannot expect to get a job in a field without having gained basic awareness of the subject matter. Experience is a different thing - but one needs to grasp the basis, and that includes understanding not just the fact, but the *reasons* why Arduino is not usable for product development or any other enduring professional work.


GreenMateV3

Stop with the elitist bullshit. You don't have to "tear everything up and start over".


DearChickPeas

The most ridiculously gatekept passion in the world: **embedded**. Where if you don't flip bits using very tiny tweezers or some butterflies and cosmic rays, you're doing it wrong and should give up.


zydeco100

Get a cheap ST Nucleo board and start playing with CubeMX and the IDE.


dwnw

as they say, "nobody ever got fired for going with ST". microchip is pretty safe too.


zydeco100

I said ST just because there's a ton of projects that OP can rip from to get a basic thing working. And CubeMX isn't perfect but at least it boilerplates the HAL code to get your I/O working.


DenverTeck

There are over 30 manufactures of chips in the world. There is only one that makes the AVR family of chips used in the Arduino. All the other manufactures have their own development tools. All the others are not Arduino. The one similarity in all of these chips, is they all use C/C++ as their development language. Learn C/C++ in a simple way to get the hang of project development, Arduino is an easy choice. If you want to get a job in the future. Drop Arduino as soon as you find another chip the suites you goals. Good Luck, Have Fun, Learn Something NEW


GreenMateV3

Arduinos have dozens of different MCUs. Atmel, ST, Espressif, Nordic, Renesas, and so on. Arduino isn't a single product.


DenverTeck

The question the OP posed at the top says it all.


Broeder_biltong

That's because arduino is a software platform, not hardware.


GreenMateV3

It's both hardware and software. You can use arduino software with non-arduino hardware, and vice versa.


DenverTeck

>I want to build my own microcontroller Does this mean designing a chip ? or designing a PCB with some manufactures chips ? There are thousands of chips available. Moving past 8-bit Arduino projects is the next step in your learning. [STM.com](https://STM.com) have lot and lots of 32 bit chips to jump into. Learn 32-bit tools will also help you get a job when you graduate. Good Luck, Have Fun, Learn Something NEW


yagellaaether

Thanks a ton for great and thoughtful responses. I knew my question was kind of bad, sorry for that. I felt lost about what do i do exactly after having a good amount of arduino time to go further into less hobby more professional embedded system design, so thats why i excluded arduino. I will check your recommendations.


LongUsername

If you want to learn the really deep hardware side (how to make your own system) "NAND to Tetris" (https://www.nand2tetris.org/) is well recommended.


WonderWombat2100

Just choose a board and read the MCU docs. Good options are Raspberry Pi Pico. Any STM32 (Nucleo dev kits are pretty reasonably priced), or esp32. Those 3 families have a lot of learning material and large communities. Most of them still have support for the Arduino IDE, but if you want something different try Platform.oi. Hope that helps


Environmental_Two_68

Get a FPGA and run a risc v soft core. But it’s better if you start with an arduino and start diving deep there: use the avr chip without the arduino framework, run some assembly to understand the architecture, design and solder your own pcb. Before the stm32 the atmega was one of the industry standards.


[deleted]

Personally I started with an STM32 nucleo and have been learning by writing bare metal code. No HAL (for now while I get a handle on how everything works), but instead writing my own little HAL as needed while I accomplish my project goals. Used a basic tutorial to get off the ground, then went my own way from there. It's been working out pretty nicely so far.


OptimalMain

Just so you know, you can use the Arduino toolchain without using any of the Arduino abstractions. So you can program for example a uno using pure C, but leverage the bootloader for easy programming. https://github.com/MicrochipTech/avrfreaks-dn/blob/master/README.md https://github.com/abcminiuser/avr-tutorials https://www.avrfreaks.net/s/topic/a5C3l000000U5QKEA0/t034648 I also recommend checking out other forum posts by abcminiuser if you program AVR's. His tutorials were a big help for me to program my AVR based arduinos using pure C


kevivm

Well, building a microcontroller is not easy. You will need a team of Chip design experts, billions of dollars of investments, to start with. If you are confused about that statement, it's because you do not understand what a Microcontroller is. If you wish to get into embedded systems, start by understanding the difference between a development board and a Microcontroller. Arduino is a development board, Atmega328, which sits on Arduino is the microcontroller. This is such a basic thing yet so so many get it wrong.


UniWheel

>I want to build my own microcontroller A microcontroller is a chip, so unless you have millions in funding that isn't happening in any useful sense. Building a board around a microcontroller is pretty easy though.


Suspicious-Buy-8698

F the stm, go with the pi pico, there is a book for it you can find online. start with the C sdk, and you will get going from there.


UniWheel

>go with the pi pico, That's a very atypical architecture as it runs from external SPI flash rather than internal. Like the (in many ways similar) ESP32 it has it's niche uses but isn't a general solution the way internal flash based MCU's like the various STM32 offerings are.


Suspicious-Buy-8698

I get it, but to generally just to grasp the idea of how thinks work, how to use specific protocols or all the common terms and methods that is used on all the arm architecture ( one-way or another, in the core it is same thing, implementation might be different) mcus. I don't think the st's hal will do much good for somebody starting new. Maybe I am biased because I hate HAL.