Communities

Writing
Writing
Codidact Meta
Codidact Meta
The Great Outdoors
The Great Outdoors
Photography & Video
Photography & Video
Scientific Speculation
Scientific Speculation
Cooking
Cooking
Electrical Engineering
Electrical Engineering
Judaism
Judaism
Languages & Linguistics
Languages & Linguistics
Software Development
Software Development
Mathematics
Mathematics
Christianity
Christianity
Code Golf
Code Golf
Music
Music
Physics
Physics
Linux Systems
Linux Systems
Power Users
Power Users
Tabletop RPGs
Tabletop RPGs
Community Proposals
Community Proposals
tag:snake search within a tag
answers:0 unanswered questions
user:xxxx search by author id
score:0.5 posts with 0.5+ score
"snake oil" exact phrase
votes:4 posts with 4+ votes
created:<1w created < 1 week ago
post_type:xxxx type of post
Search help
Notifications
Mark all as read See all your notifications »
Q&A

Comments on I have to choose: Arduino or Raspberry pi.

Parent

I have to choose: Arduino or Raspberry pi.

+1
−1

Moderator Note

If this site were mature, this question would be closed because it solicits opinions, or is too specific about particular models. In the interest of site activity, answers are being allowed that compare and contrast microprocessors boards to microcontroller development boards in general. Specific models can be used as examples, but should not be the main point of answers.


I've finally decided to enter into the world of micro controllers/microprocessors. I think this may provide me an important tool to realize my projects. I am not an electronic engineer designing products for the market, but I need a tool that allows me to interface with the electronics, while performing complex tasks like analyzing and processing signals, making decisions etc. (nothing well defined for the moment).

After googling and reading several articles, I understood I don't really want to learn micro controllers, but how to use micro controllers boards (or microprocessor boards). In fact, it appears my time and energy are so reduced that I have to make a choice, but a good choice, inside this jungle.

Further readings convinced me that the best options for me are either "Arduino", or "Raspberry pi". I'm aware that Arduino is a micro controller while Raspberry pi is a microprocessor, but I have read that Raspberry pi can perform any micro controller task, and much more. So, my first reaction was: Why Arduino if, for nearly the same price, you can have a full microprocessor.

I need help to choose, because it is unclear for me what is the advantage of using Arduino vs Raspberry pi (well, there should be one considering the number of adepts of Arduino). They says that Arduino is a very stable environment, but I don't understand in what sense it is more stable than Raspberry pi.

Other details that can help:

  • It is somewhat improbable that I will ever need something performing at very high speed

  • I can program in C or C++, but I really prefer programming in Python

  • I'm basically a mathematician, algorithmic engineer and programmer, so, I don't want to choose something too childish for me, designed for educational purpose only. If I spend time to learn, I just want this be worth the time and energy.

History
Why does this post require moderator attention?
You might want to add some details to your flag.
Why should this post be closed?

1 comment thread

General comments (3 comments)
Post
+2
−0
  • Rasp PI is a PC in disguise - it is a single-board computer. As such it runs Linux and like any Linux PC, it doesn't allow real-time execution, direct access to physical addresses, deterministic single-process execution etc etc.

    Writing drivers yourself is a complex process where you must follow the kernel's preferred way of doing so, so that your drivers co-exists with a whole lot of things that you may or may not have any use for. Overall, it comes with a whole lot of bloat and complexity.

    So it's a pretty useless tool for leaning embedded systems programming in general and microcontroller programming in particular.

  • Arduino is a hobbyist microcontroller board suitable for those who want to learn how to use specific drivers and libraries written by others, instead of learning how to make those themselves. It's suitable for quick & dirty low quality applications when you want to get something cheap and questionable up and running quick, without caring about how you got there. It's not suitable for the purpose of learning microcontroller programming.

    Arduino is using an outdated 8-bit architecture called AVR, developed some decades ago. Like any 8-bitter, it is very slow and inefficient, poor code efficiency, can't handle 32 bit integers well, not to mention floating point.

    As such, 8-bittes comes with high average current consumption per line of C code, since they must chew through hundreds of instructions where a modern CPU would handle the same code in a single instruction.

    Writing C code for 8-bit microcontrollers is actually quite intrictate, because of all subtle crap that goes on between the lines in the C language: integer promotion, implicit signedness changes, numerous cases of poorly-defined behavior when doing various arithmetic etc etc. 32-bitters are far more C friendly because then you can use 32 bit types consistently without having to worry so much about all the above mentioned issues.

    Arduino is per default using C++. Writing C++ for 8-bit microcontrollers is pure madness. The language isn't suitable for such low end systems. Things like vtables, RTTI, exceptions, implicit heap allocation, C++11 auto keyword, static storage object constructors etc etc will create complete havoc. It is arguable if C++ is at all suitable for any embedded system, but that's another story...


So my advise is to not pick either of these hyped, dangerous and harmful hobbyist platforms. Instead, get an evaluation board for a "bare metal" microcontroller of whatever flavour you prefer, then learn how to actually write microcontroller programs from scratch.

Generally, older 8 or 16 bitters are more simplistic in themselves, easy to learn assembler on, but harder to code C for. Learning the basics of assembler is great for understanding how computers actually work, and how C code gets translated to machine code. So while nobody writes whole programs in assembler any longer, it is still useful to learn.

Modern 32 bit ARM Cortex M is what most professionals use nowadays, but those parts tend to be more complex overall. Still I usually recommend these over obsolete low-end ones, because you'll learn to use something that is actually modern and useful. I wouldn't recommend any particular ARM flavour over another, they all have their own quirks and strengths. It might be worth checking out the tool chain first of all, find one you like and take it from there.

History
Why does this post require moderator attention?
You might want to add some details to your flag.

1 comment thread

General comments (5 comments)
General comments
coquelicot‭ wrote over 3 years ago

Wow, now the situation is even more complicated for me; you killed my hopes (a chance that I was not depressive today, otherwise you would have killed me too :-) ). +1 and thanks for this really good and elaborated answer.

Kranulis‭ wrote over 3 years ago

What would you suggest as a step up from ATMega328p? I have seen STM32 being in the spotlight, but it seems like a huge jump.

Lundin‭ wrote over 3 years ago

@Kranulis‭ Depends what you mean with "step up", as in learning process? If so, then AVR is about as complex as the average 8 or 16 bitter out there. Programming some other more code efficient 16 bitter isn't that much different at all. The problem with 32 bitters isn't the core itself, but that they tend to have more complex peripherals. It's usually a bit of a pain to set up clocks/PLL and GPIO routing etc on upper end MCUs. But other than more complex hardware peripherals, not that different.

Lundin‭ wrote over 3 years ago

You'll have to learn about wait states, DMA etc but those are things one need to know when doing modern MCU programming. It's all MCU specific though. Again, I wouldn't recommend any particular flavour of ARM. I've worked with ST, NXP/Freescale, Microchip and Silabs ones. What you should be wary of is rather the various horrible Eclipse tool chains and bloat "HAL" libraries provided by these manufacturers. If you can afford it, look into commercial cross-platform ARM tool chains instead.

dustytrash‭ wrote over 3 years ago

+1 As a professional programmer and Arduino hobbyist this is the most helpful thing I've read on the internet in a long while.